コンテンツにスキップ

rsa.h

Functions

Name
int wc_InitRsaKey(RsaKey * key, void * heap)
この関数は、提供されたRsaKey構造体を初期化します。また、ユーザー定義のメモリオーバーライド(XMALLOC、XFREE、XREALLOCを参照)で使用するために、ヒープ識別子も受け取ります。
int wc_InitRsaKey_Id(RsaKey * key, unsigned char * id, int len, void * heap, int devId)
この関数は、提供されたRsaKey構造体を初期化します。idとlenは、デバイス上のキーを識別するために使用され、devIdはデバイスを識別します。また、ユーザー定義のメモリオーバーライド(XMALLOC、XFREE、XREALLOCを参照)で使用するために、ヒープ識別子も受け取ります。
int wc_RsaSetRNG(RsaKey * key, WC_RNG * rng)
この関数は、RNGをキーに関連付けます。WC_RSA_BLINDINGが有効になっている場合に必要です。
int wc_FreeRsaKey(RsaKey * key)
この関数は、mp_clearを使用して提供されたRsaKey構造体を解放します。
int wc_RsaDirect(const byte * in, word32 inLen, byte * out, word32 * outSz, RsaKey * key, int type, WC_RNG * rng)
パディングなしでRSA操作を直接実行する関数。入力サイズはキーサイズと一致する必要があります。通常、これはRSA入力に既にパディングが行われている場合に使用されます。
int wc_RsaPublicEncrypt(const byte * in, word32 inLen, byte * out, word32 outLen, RsaKey * key, WC_RNG * rng)
この関数は、inからメッセージを暗号化し、結果をoutに格納します。初期化された公開鍵と乱数ジェネレータが必要です。副作用として、この関数はoutに書き込まれたバイト数をoutLenで返します。
int wc_RsaPrivateDecryptInline(byte * in, word32 inLen, byte ** out, RsaKey * key)
この関数は、復号のためにwc_RsaPrivateDecrypt関数によって使用されます。
int wc_RsaPrivateDecrypt(const byte * in, word32 inLen, byte * out, word32 outLen, RsaKey * key)
この関数は、プライベートRSA復号を提供します。
int wc_RsaSSL_Sign(const byte * in, word32 inLen, byte * out, word32 outLen, RsaKey * key, WC_RNG * rng)
秘密鍵で提供された配列に署名します。
int wc_RsaSSL_VerifyInline(byte * in, word32 inLen, byte ** out, RsaKey * key)
メッセージがRSAキーによって署名されたことを検証するために使用されます。出力は入力と同じバイト配列を使用します。
int wc_RsaSSL_Verify(const byte * in, word32 inLen, byte * out, word32 outLen, RsaKey * key)
メッセージがキーによって署名されたことを検証するために使用されます。
int wc_RsaPSS_Sign(const byte * in, word32 inLen, byte * out, word32 outLen, enum wc_HashType hash, int mgf, RsaKey * key, WC_RNG * rng)
秘密鍵で提供された配列に署名します。
int wc_RsaPSS_Verify(byte * in, word32 inLen, byte * out, word32 outLen, enum wc_HashType hash, int mgf, RsaKey * key)
メッセージがキーによって署名されたことを検証するために入力署名を復号します。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。
int wc_RsaPSS_VerifyInline(byte * in, word32 inLen, byte ** out, enum wc_HashType hash, int mgf, RsaKey * key)
メッセージがRSAキーによって署名されたことを検証するために入力署名を復号します。出力は入力と同じバイト配列を使用します。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。
int wc_RsaPSS_VerifyCheck(byte * in, word32 inLen, byte * out, word32 outLen, const byte * digest, word32 digestLen, enum wc_HashType hash, int mgf, RsaKey * key)
RSA-PSSで署名されたメッセージを検証します。ソルトの長さはハッシュの長さと等しくなります。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。
int wc_RsaPSS_VerifyCheck_ex(byte * in, word32 inLen, byte * out, word32 outLen, const byte * digest, word32 digestLen, enum wc_HashType hash, int mgf, int saltLen, RsaKey * key)
RSA-PSSで署名されたメッセージを検証します。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。
int wc_RsaPSS_VerifyCheckInline(byte * in, word32 inLen, byte ** out, const byte * digest, word32 digentLen, enum wc_HashType hash, int mgf, RsaKey * key)
RSA-PSSで署名されたメッセージを検証します。入力バッファは出力バッファとして再利用されます。ソルトの長さはハッシュの長さと等しくなります。
int wc_RsaPSS_VerifyCheckInline_ex(byte * in, word32 inLen, byte ** out, const byte * digest, word32 digentLen, enum wc_HashType hash, int mgf, int saltLen, RsaKey * key)
RSA-PSSで署名されたメッセージを検証します。入力バッファは出力バッファとして再利用されます。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。
int wc_RsaPSS_CheckPadding(const byte * in, word32 inLen, byte * sig, word32 sigSz, enum wc_HashType hashType)
署名が一致することを確認するためにPSSデータをチェックします。ソルトの長さはハッシュの長さと等しくなります。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。
int wc_RsaPSS_CheckPadding_ex(const byte * in, word32 inLen, byte * sig, word32 sigSz, enum wc_HashType hashType, int saltLen, int bits)
署名が一致することを確認するためにPSSデータをチェックします。ソルトの長さはハッシュの長さと等しくなります。
int wc_RsaEncryptSize(RsaKey * key)
提供されたキー構造体の暗号化サイズを返します。
int wc_RsaPrivateKeyDecode(const byte * input, word32 * inOutIdx, RsaKey * key, word32 inSz)
この関数は、DER形式のRSA秘密鍵を解析し、秘密鍵を抽出して、指定されたRsaKey構造体に格納します。また、idxに解析された距離を設定します。
int wc_RsaPublicKeyDecode(const byte * input, word32 * inOutIdx, RsaKey * key, word32 inSz)
この関数は、DER形式のRSA公開鍵を解析し、公開鍵を抽出して、指定されたRsaKey構造体に格納します。また、idxに解析された距離を設定します。
int wc_RsaPublicKeyDecodeRaw(const byte * n, word32 nSz, const byte * e, word32 eSz, RsaKey * key)
この関数は、RSA公開鍵の生の要素をデコードし、公開モジュラス(n)と指数(e)を受け取ります。これらの生の要素を提供されたRsaKey構造体に格納し、暗号化/復号プロセスでそれらを使用できるようにします。
int wc_RsaKeyToDer(RsaKey * key, byte * output, word32 inLen)
この関数は、RsaKeyキーをDER形式に変換します。結果はoutputに書き込まれ、書き込まれたバイト数を返します。
int wc_RsaPublicEncrypt_ex(const byte * in, word32 inLen, byte * out, word32 outLen, RsaKey * key, WC_RNG * rng, int type, enum wc_HashType hash, int mgf, byte * label, word32 labelSz)
この関数は、使用するパディングを選択できるようにしながら、RSA暗号化を実行します。
int wc_RsaPrivateDecrypt_ex(const byte * in, word32 inLen, byte * out, word32 outLen, RsaKey * key, int type, enum wc_HashType hash, int mgf, byte * label, word32 labelSz)
この関数は、RSAを使用してメッセージを復号し、どのパディングタイプを使用するかのオプションを提供します。
int wc_RsaPrivateDecryptInline_ex(byte * in, word32 inLen, byte ** out, RsaKey * key, int type, enum wc_HashType hash, int mgf, byte * label, word32 labelSz)
この関数は、RSAを使用してメッセージをインラインで復号し、どのパディングタイプを使用するかのオプションを提供します。inバッファは呼び出し後に復号されたメッセージを含み、outバイトポインタは平文がある「in」バッファ内の場所を指します。
int wc_RsaFlattenPublicKey(RsaKey * key, byte * e, word32 * eSz, byte * n, word32 * nSz)
RsaKey構造体をRSAアルゴリズムに使用される個々の要素(e、n)に展開します。
int wc_RsaKeyToPublicDer(RsaKey * key, byte * output, word32 inLen)
RSA公開鍵をDER形式に変換します。outputに書き込み、書き込まれたバイト数を返します。
int wc_RsaKeyToPublicDer_ex(RsaKey * key, byte * output, word32 inLen, int with_header)
RSA公開鍵をDER形式に変換します。outputに書き込み、書き込まれたバイト数を返します。with_headerが0の場合、(seq + n + e)のみがASN.1 DER形式で返され、ヘッダーは除外されます。
int wc_MakeRsaKey(RsaKey * key, int size, long e, WC_RNG * rng)
この関数は、長さsize(ビット単位)と指定された指数(e)のRSA秘密鍵を生成します。その後、このキーを提供されたRsaKey構造体に格納し、暗号化/復号に使用できるようにします。eに使用する安全な数値は65537です。sizeはRSA_MIN_SIZE以上かつRSA_MAX_SIZE以下である必要があります。この関数を使用するには、コンパイル時にオプションWOLFSSL_KEY_GENを有効にする必要があります。./configureを使用する場合は、–enable-keygenで実現できます。
int wc_RsaSetNonBlock(RsaKey * key, RsaNb * nb)
この関数は、ノンブロッキングRSAコンテキストを設定します。RsaNbコンテキストが設定されると、RSA関数を多くの小さな操作に分割する、高速数学ベースのノンブロッキングexptmodが有効になります。WC_RSA_NONBLOCKが定義されている場合に有効になります。
int wc_RsaSetNonBlockTime(RsaKey * key, word32 maxBlockUs, word32 cpuMHz)
この関数は、最大ブロッキング時間をマイクロ秒単位で設定します。CPU速度(メガヘルツ単位)とともに事前計算されたテーブル(tfm.c exptModNbInstを参照)を使用して、次の操作が提供された最大ブロッキング時間内に完了できるかどうかを判断します。WC_RSA_NONBLOCK_TIMEが定義されている場合に有効になります。

Functions Documentation

function wc_InitRsaKey

int wc_InitRsaKey(
    RsaKey * key,
    void * heap
)

この関数は、提供されたRsaKey構造体を初期化します。また、ユーザー定義のメモリオーバーライド(XMALLOC、XFREE、XREALLOCを参照)で使用するために、ヒープ識別子も受け取ります。

Parameters:

  • key 初期化するRsaKey構造体へのポインタ
  • heap メモリオーバーライドで使用するヒープ識別子へのポインタ。メモリ割り当てのカスタム処理を可能にします。このヒープは、このRSAオブジェクトで使用するメモリを割り当てる際にデフォルトで使用されます

See:

Return:

  • 0 暗号化と復号に使用するRSA構造体の初期化に成功した場合に返されます
  • BAD_FUNC_ARGS RSAキーポインタがNULLと評価された場合に返されます

WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。

Example

RsaKey enc;
int ret;
ret = wc_InitRsaKey(&enc, NULL); // ヒープヒントを使用しない。カスタムメモリなし
if ( ret != 0 ) {
    // RSAキーの初期化エラー
}

function wc_InitRsaKey_Id

int wc_InitRsaKey_Id(
    RsaKey * key,
    unsigned char * id,
    int len,
    void * heap,
    int devId
)

この関数は、提供されたRsaKey構造体を初期化します。idとlenは、デバイス上のキーを識別するために使用され、devIdはデバイスを識別します。また、ユーザー定義のメモリオーバーライド(XMALLOC、XFREE、XREALLOCを参照)で使用するために、ヒープ識別子も受け取ります。

Parameters:

  • key 初期化するRsaKey構造体へのポインタ
  • id デバイス上のキーの識別子
  • len 識別子の長さ(バイト単位)
  • heap メモリオーバーライドで使用するヒープ識別子へのポインタ。メモリ割り当てのカスタム処理を可能にします。このヒープは、このRSAオブジェクトで使用するメモリを割り当てる際にデフォルトで使用されます
  • devId 暗号コールバックまたは非同期ハードウェアで使用するID。使用しない場合はINVALID_DEVID(-2)に設定

See:

Return:

  • 0 暗号化と復号に使用するRSA構造体の初期化に成功した場合に返されます
  • BAD_FUNC_ARGS RSAキーポインタがNULLと評価された場合に返されます
  • BUFFER_E lenが0未満またはRSA_MAX_ID_LENより大きい場合に返されます。

WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。

Example

RsaKey enc;
unsigned char* id = (unsigned char*)"RSA2048";
int len = 7;
int devId = 1;
int ret;
ret = wc_CryptoDev_RegisterDevice(devId, wc_Pkcs11_CryptoDevCb,
                                  &token);
if ( ret != 0) {
    // コールバックとトークンをデバイスIDに関連付けるエラー
}
ret = wc_InitRsaKey_Id(&enc, id, len, NULL, devId); // ヒープヒントを使用しない
if ( ret != 0 ) {
    // RSAキーの初期化エラー
}

function wc_RsaSetRNG

int wc_RsaSetRNG(
    RsaKey * key,
    WC_RNG * rng
)

この関数は、RNGをキーに関連付けます。WC_RSA_BLINDINGが有効になっている場合に必要です。

Parameters:

  • key 関連付けるRsaKey構造体へのポインタ
  • rng 関連付けるWC_RNG構造体へのポインタ

See:

Return:

  • 0 成功時に返されます
  • BAD_FUNC_ARGS RSAキー、rngポインタがNULLと評価された場合に返されます

Example

ret = wc_InitRsaKey(&key, NULL);
if (ret == 0) {
    ret = wc_InitRng(&rng);
} else return -1;
if (ret == 0) {
    ret = wc_RsaSetRNG(&key, &rng);

function wc_FreeRsaKey

int wc_FreeRsaKey(
    RsaKey * key
)

この関数は、mp_clearを使用して提供されたRsaKey構造体を解放します。

Parameters:

  • key 解放するRsaKey構造体へのポインタ

See: wc_InitRsaKey

Return: 0 キーの解放に成功した場合に返されます

Example

RsaKey enc;
wc_InitRsaKey(&enc, NULL); // ヒープヒントを使用しない。カスタムメモリなし
... キーを設定し、暗号化を実行

wc_FreeRsaKey(&enc);

function wc_RsaDirect

int wc_RsaDirect(
    const byte * in,
    word32 inLen,
    byte * out,
    word32 * outSz,
    RsaKey * key,
    int type,
    WC_RNG * rng
)

パディングなしでRSA操作を直接実行する関数。入力サイズはキーサイズと一致する必要があります。通常、これはRSA入力に既にパディングが行われている場合に使用されます。

Parameters:

  • in 操作を行うバッファ
  • inLen 入力バッファの長さ
  • out 結果を保持するバッファ
  • outSz 結果バッファのサイズに設定されます。出力バッファの長さとして渡す必要があります。ポインタ「out」がnullの場合、outSzは必要な予想バッファサイズに設定され、LENGTH_ONLY_Eが返されます。
  • key 暗号化/復号に使用する初期化されたRSAキー
  • type 秘密鍵または公開鍵を使用する場合(RSA_PUBLIC_ENCRYPT、RSA_PUBLIC_DECRYPT、RSA_PRIVATE_ENCRYPT、RSA_PRIVATE_DECRYPT)
  • rng 初期化されたWC_RNG構造体

See:

Return:

  • size 暗号化に成功した場合、暗号化されたバッファのサイズが返されます
  • RSA_BUFFER_E RSAバッファエラー、出力が小さすぎるか入力が大きすぎます

Example

int ret;
WC_RNG rng;
RsaKey key;
byte  in[256];
byte out[256];
word32 outSz = (word32)sizeof(out);
…

ret = wc_RsaDirect(in, (word32)sizeof(in), out, &outSz, &key,
    RSA_PRIVATE_ENCRYPT, &rng);
if (ret < 0) {
    // エラーを処理
}

function wc_RsaPublicEncrypt

int wc_RsaPublicEncrypt(
    const byte * in,
    word32 inLen,
    byte * out,
    word32 outLen,
    RsaKey * key,
    WC_RNG * rng
)

この関数は、inからメッセージを暗号化し、結果をoutに格納します。初期化された公開鍵と乱数ジェネレータが必要です。副作用として、この関数はoutに書き込まれたバイト数をoutLenで返します。

Parameters:

  • in 暗号化する入力メッセージを含むバッファへのポインタ
  • inLen 暗号化するメッセージの長さ
  • out 出力暗号文を格納するバッファへのポインタ
  • outLen 出力バッファの長さ
  • key 暗号化に使用する公開鍵を含むRsaKey構造体へのポインタ
  • rng ランダムブロックパディングを生成するRNG構造体

See: wc_RsaPrivateDecrypt

Return:

  • Success 入力メッセージの暗号化に成功した場合、成功時に書き込まれたバイト数を返し、失敗の場合はゼロ未満を返します。
  • BAD_FUNC_ARG いずれかの入力パラメータが無効な場合に返されます
  • RSA_BUFFER_E 出力バッファが暗号文を格納するには小さすぎる場合に返されます
  • RNG_FAILURE_E 提供されたRNG構造体を使用してランダムブロックを生成する際にエラーがある場合に返されます
  • MP_INIT_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_READ_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_CMP_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_INVMOD_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_EXPTMOD_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_MOD_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_MUL_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_ADD_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_MULMOD_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_TO_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_MEM メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_ZERO_E メッセージの暗号化中に使用される数学ライブラリにエラーがある場合に返される可能性があります

Example

RsaKey pub;
int ret = 0;
byte n[] = { // 受信した公開鍵のn成分で初期化 };
byte e[] = { // 受信した公開鍵のe成分で初期化 };
byte msg[] = { // 暗号化するメッセージの平文で初期化 };
byte cipher[256]; // 256バイトは2048ビットRSA暗号文を格納するのに十分な大きさ

wc_InitRsaKey(&pub, NULL); // ヒープヒントを使用しない。カスタムメモリなし
wc_RsaPublicKeyDecodeRaw(n, sizeof(n), e, sizeof(e), &pub);
// 受信した公開鍵パラメータで初期化
ret = wc_RsaPublicEncrypt(msg, sizeof(msg), out, sizeof(out), &pub, &rng);
if ( ret != 0 ) {
    // メッセージの暗号化エラー
}

function wc_RsaPrivateDecryptInline

int wc_RsaPrivateDecryptInline(
    byte * in,
    word32 inLen,
    byte ** out,
    RsaKey * key
)

この関数は、復号のためにwc_RsaPrivateDecrypt関数によって使用されます。

Parameters:

  • in 復号されるバイト配列。
  • inLen inの長さ。
  • out 復号されたデータを格納するバイト配列。
  • key 復号に使用するキー。

See: wc_RsaPrivateDecrypt

Return:

  • Success 復号されたデータの長さ。
  • RSA_PAD_E RsaUnPadエラー、フォーマットが不正

Example

なし

function wc_RsaPrivateDecrypt

int wc_RsaPrivateDecrypt(
    const byte * in,
    word32 inLen,
    byte * out,
    word32 outLen,
    RsaKey * key
)

この関数は、プライベートRSA復号を提供します。

Parameters:

  • in 復号されるバイト配列。
  • inLen inの長さ。
  • out 復号されたデータを格納するバイト配列。
  • outLen outの長さ。
  • key 復号に使用するキー。

See:

Return:

  • Success 復号されたデータの長さ。
  • MEMORY_E -125、メモリ不足エラー
  • BAD_FUNC_ARG -173、不正な関数引数が提供されました

Example

ret = wc_RsaPublicEncrypt(in, inLen, out, sizeof(out), &key, &rng);
if (ret < 0) {
    return -1;
}
ret = wc_RsaPrivateDecrypt(out, ret, plain, sizeof(plain), &key);
if (ret < 0) {
    return -1;
}

function wc_RsaSSL_Sign

int wc_RsaSSL_Sign(
    const byte * in,
    word32 inLen,
    byte * out,
    word32 outLen,
    RsaKey * key,
    WC_RNG * rng
)

秘密鍵で提供された配列に署名します。

Parameters:

  • in 暗号化されるバイト配列。
  • inLen inの長さ。
  • out 暗号化されたデータを格納するバイト配列。
  • outLen outの長さ。
  • key 暗号化に使用するキー。
  • RNG 乱数の目的で使用するRNG構造体。

See: wc_RsaPad

Return: RSA_BUFFER_E: -131、RSAバッファエラー、出力が小さすぎるか入力が大きすぎます

Example

ret = wc_RsaSSL_Sign(in, inLen, out, sizeof(out), &key, &rng);
if (ret < 0) {
    return -1;
}
memset(plain, 0, sizeof(plain));
ret = wc_RsaSSL_Verify(out, ret, plain, sizeof(plain), &key);
if (ret < 0) {
    return -1;
}
if (ret != inLen) {
    return -1;
}
if (XMEMCMP(in, plain, ret) != 0) {
    return -1;
}

function wc_RsaSSL_VerifyInline

int wc_RsaSSL_VerifyInline(
    byte * in,
    word32 inLen,
    byte ** out,
    RsaKey * key
)

メッセージがRSAキーによって署名されたことを検証するために使用されます。出力は入力と同じバイト配列を使用します。

Parameters:

  • in 復号されるバイト配列。
  • inLen 入力バッファの長さ。
  • out 復号された情報へのポインタへのポインタ。
  • key 使用するRsaKey。

See:

Return:

  • 0 テキストの長さ。

  • <0 エラーが発生しました。

Example

RsaKey key;
WC_RNG rng;
int ret = 0;
long e = 65537; // 指数に使用する標準値
wc_InitRsaKey(&key, NULL); // ヒープヒントを使用しない。カスタムメモリなし
wc_InitRng(&rng);
wc_MakeRsaKey(&key, 2048, e, &rng);

byte in[] = { // RSA暗号化情報で初期化 }
byte* out;
if(wc_RsaSSL_VerifyInline(in, sizeof(in), &out, &key) < 0)
{
    // エラーを処理
}

function wc_RsaSSL_Verify

int wc_RsaSSL_Verify(
    const byte * in,
    word32 inLen,
    byte * out,
    word32 outLen,
    RsaKey * key
)

メッセージがキーによって署名されたことを検証するために使用されます。

Parameters:

  • in 復号されるバイト配列。
  • inLen inの長さ。
  • out 復号されたデータを格納するバイト配列。
  • outLen outの長さ。
  • key 検証に使用するキー。

See: wc_RsaSSL_Sign

Return:

  • Success エラーがない場合のテキストの長さ。
  • MEMORY_E メモリ例外。

Example

ret = wc_RsaSSL_Sign(in, inLen, out, sizeof(out), &key, &rng);
if (ret < 0) {
    return -1;
}
memset(plain, 0, sizeof(plain));
ret = wc_RsaSSL_Verify(out, ret, plain, sizeof(plain), &key);
if (ret < 0) {
    return -1;
}
if (ret != inLen) {
    return -1;
}
if (XMEMCMP(in, plain, ret) != 0) {
    return -1;
}

function wc_RsaPSS_Sign

int wc_RsaPSS_Sign(
    const byte * in,
    word32 inLen,
    byte * out,
    word32 outLen,
    enum wc_HashType hash,
    int mgf,
    RsaKey * key,
    WC_RNG * rng
)

秘密鍵で提供された配列に署名します。

Parameters:

  • in 暗号化されるバイト配列。
  • inLen inの長さ。
  • out 暗号化されたデータを格納するバイト配列。
  • outLen outの長さ。
  • hash メッセージに含まれるハッシュタイプ
  • mgf マスク生成関数識別子
  • key 検証に使用するキー。

See:

Return: RSA_BUFFER_E: -131、RSAバッファエラー、出力が小さすぎるか入力が大きすぎます

Example

ret = wc_InitRsaKey(&key, NULL);
if (ret == 0) {
    ret = wc_InitRng(&rng);
} else return -1;
if (ret == 0) {
    ret = wc_RsaSetRNG(&key, &rng);
} else return -1;
if (ret == 0) {
        ret = wc_MakeRsaKey(&key, 2048, WC_RSA_EXPONENT, &rng);
} else return -1;

ret = wc_RsaPSS_Sign((byte*)szMessage, (word32)XSTRLEN(szMessage)+1,
        pSignature, sizeof(pSignature),
        WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key, &rng);
if (ret > 0 ){
    sz = ret;
} else return -1;

ret = wc_RsaPSS_Verify(pSignature, sz, pt, outLen,
        WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key);
if (ret <= 0)return -1;

wc_FreeRsaKey(&key);
wc_FreeRng(&rng);

function wc_RsaPSS_Verify

int wc_RsaPSS_Verify(
    byte * in,
    word32 inLen,
    byte * out,
    word32 outLen,
    enum wc_HashType hash,
    int mgf,
    RsaKey * key
)

メッセージがキーによって署名されたことを検証するために入力署名を復号します。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。

Parameters:

  • in 復号されるバイト配列。
  • inLen inの長さ。
  • out 復号されたデータを格納するバイト配列。
  • outLen outの長さ。
  • hash メッセージに含まれるハッシュタイプ
  • mgf マスク生成関数識別子
  • key 検証に使用するキー。

See:

Return:

  • Success エラーがない場合のテキストの長さ。
  • MEMORY_E メモリ例外。
  • MP_EXPTMOD_E - fastmathを使用していて、FP_MAX_BITSがキーサイズの少なくとも2倍に設定されていない場合(例:4096ビットキーを使用する場合、FP_MAX_BITSを8192以上の値に設定)

Example

ret = wc_InitRsaKey(&key, NULL);
if (ret == 0) {
    ret = wc_InitRng(&rng);
} else return -1;
if (ret == 0) {
    ret = wc_RsaSetRNG(&key, &rng);
} else return -1;
if (ret == 0) {
        ret = wc_MakeRsaKey(&key, 2048, WC_RSA_EXPONENT, &rng);
} else return -1;
ret = wc_RsaPSS_Sign((byte*)szMessage, (word32)XSTRLEN(szMessage)+1,
        pSignature, sizeof(pSignature),
        WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key, &rng);
if (ret > 0 ){
    sz = ret;
} else return -1;

ret = wc_RsaPSS_Verify(pSignature, sz, pt, outLen,
        WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key);
if (ret <= 0)return -1;

wc_FreeRsaKey(&key);
wc_FreeRng(&rng);

function wc_RsaPSS_VerifyInline

int wc_RsaPSS_VerifyInline(
    byte * in,
    word32 inLen,
    byte ** out,
    enum wc_HashType hash,
    int mgf,
    RsaKey * key
)

メッセージがRSAキーによって署名されたことを検証するために入力署名を復号します。出力は入力と同じバイト配列を使用します。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。

Parameters:

  • in 復号されるバイト配列。
  • inLen 入力バッファの長さ。
  • out PSSデータを含むアドレスへのポインタ。
  • hash メッセージに含まれるハッシュタイプ
  • mgf マスク生成関数識別子
  • key 使用するRsaKey。

See:

Return:

  • 0 テキストの長さ。

  • <0 エラーが発生しました。

Example

ret = wc_InitRsaKey(&key, NULL);
if (ret == 0) {
    ret = wc_InitRng(&rng);
} else return -1;
if (ret == 0) {
    ret = wc_RsaSetRNG(&key, &rng);
} else return -1;
if (ret == 0) {
        ret = wc_MakeRsaKey(&key, 2048, WC_RSA_EXPONENT, &rng);
} else return -1;
ret = wc_RsaPSS_Sign(digest, digestSz, pSignature, pSignatureSz,
        WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key, &rng);
if (ret > 0 ){
    sz = ret;
} else return -1;

ret = wc_RsaPSS_VerifyInline(pSignature, sz, pt,
        WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key);
if (ret <= 0)return -1;

wc_FreeRsaKey(&key);
wc_FreeRng(&rng);

function wc_RsaPSS_VerifyCheck

int wc_RsaPSS_VerifyCheck(
    byte * in,
    word32 inLen,
    byte * out,
    word32 outLen,
    const byte * digest,
    word32 digestLen,
    enum wc_HashType hash,
    int mgf,
    RsaKey * key
)

RSA-PSSで署名されたメッセージを検証します。ソルトの長さはハッシュの長さと等しくなります。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。

Parameters:

  • in 復号されるバイト配列。
  • inLen inの長さ。
  • out PSSデータを含むアドレスへのポインタ。
  • outLen outの長さ。
  • digest 検証されるデータのハッシュ。
  • digestLen ハッシュの長さ。
  • hash ハッシュアルゴリズム。
  • mgf マスク生成関数。
  • key 公開RSAキー。

See:

Return:

  • the length of the PSS data 成功時はPSSデータの長さ、失敗を示す負の値。
  • MEMORY_E メモリ例外。

Example

ret = wc_InitRsaKey(&key, NULL);
if (ret == 0) {
    ret = wc_InitRng(&rng);
} else return -1;
if (ret == 0) {
    ret = wc_RsaSetRNG(&key, &rng);
} else return -1;
if (ret == 0) {
        ret = wc_MakeRsaKey(&key, 2048, WC_RSA_EXPONENT, &rng);
} else return -1;

if (ret == 0) {
    digestSz = wc_HashGetDigestSize(WC_HASH_TYPE_SHA256);
    ret = wc_Hash(WC_HASH_TYPE_SHA256, message, sz, digest, digestSz);
} else return -1;

if (ret == 0) {
    ret = wc_RsaPSS_Sign(digest, digestSz, pSignature, pSignatureSz,
            WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key, &rng);
    if (ret > 0 ){
        sz = ret;
    } else return -1;
} else return -1;
if (ret == 0) {
    ret = wc_RsaPSS_VerifyCheck(pSignature, sz, pt, outLen,
            digest, digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key);
        if (ret <= 0) return -1;
} else return -1;

wc_FreeRsaKey(&key);
wc_FreeRng(&rng);

function wc_RsaPSS_VerifyCheck_ex

int wc_RsaPSS_VerifyCheck_ex(
    byte * in,
    word32 inLen,
    byte * out,
    word32 outLen,
    const byte * digest,
    word32 digestLen,
    enum wc_HashType hash,
    int mgf,
    int saltLen,
    RsaKey * key
)

RSA-PSSで署名されたメッセージを検証します。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。

Parameters:

  • in 復号されるバイト配列。
  • inLen inの長さ。
  • out PSSデータを含むアドレスへのポインタ。
  • outLen outの長さ。
  • digest 検証されるデータのハッシュ。
  • digestLen ハッシュの長さ。
  • hash ハッシュアルゴリズム。
  • mgf マスク生成関数。
  • saltLen 使用されるソルトの長さ。RSA_PSS_SALT_LEN_DEFAULT(-1)は、ソルトの長さがハッシュの長さと同じであることを示します。RSA_PSS_SALT_LEN_DISCOVERは、ソルトの長さがデータから決定されることを示します。
  • key 公開RSAキー。

See:

Return:

  • the length of the PSS data 成功時はPSSデータの長さ、失敗を示す負の値。
  • MEMORY_E メモリ例外。

Example

ret = wc_InitRsaKey(&key, NULL);
if (ret == 0) {
    ret = wc_InitRng(&rng);
} else return -1;
if (ret == 0) {
    ret = wc_RsaSetRNG(&key, &rng);
} else return -1;
if (ret == 0) {
        ret = wc_MakeRsaKey(&key, 2048, WC_RSA_EXPONENT, &rng);
} else return -1;

if (ret == 0) {
    digestSz = wc_HashGetDigestSize(WC_HASH_TYPE_SHA256);
    ret = wc_Hash(WC_HASH_TYPE_SHA256, message, sz, digest, digestSz);
} else return -1;

if (ret == 0) {
    ret = wc_RsaPSS_Sign(digest, digestSz, pSignature, pSignatureSz,
            WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key, &rng);
    if (ret > 0 ){
        sz = ret;
    } else return -1;
} else return -1;
if (ret == 0) {
    ret = wc_RsaPSS_VerifyCheck_ex(pSignature, sz, pt, outLen,
            digest, digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, saltLen, &key);
        if (ret <= 0) return -1;
} else return -1;

wc_FreeRsaKey(&key);
wc_FreeRng(&rng);

function wc_RsaPSS_VerifyCheckInline

int wc_RsaPSS_VerifyCheckInline(
    byte * in,
    word32 inLen,
    byte ** out,
    const byte * digest,
    word32 digentLen,
    enum wc_HashType hash,
    int mgf,
    RsaKey * key
)

RSA-PSSで署名されたメッセージを検証します。入力バッファは出力バッファとして再利用されます。ソルトの長さはハッシュの長さと等しくなります。

Parameters:

  • in 復号されるバイト配列。
  • inLen inの長さ。
  • out 復号されたデータを格納するバイト配列。
  • digest 検証されるデータのハッシュ。
  • digestLen ハッシュの長さ。
  • hash メッセージに含まれるハッシュタイプ
  • mgf マスク生成関数識別子
  • key 検証に使用するキー。

See:

Return: the length of the PSS data 成功時はPSSデータの長さ、失敗を示す負の値。

WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。

Example

ret = wc_InitRsaKey(&key, NULL);
if (ret == 0) {
    ret = wc_InitRng(&rng);
} else return -1;
if (ret == 0) {
    ret = wc_RsaSetRNG(&key, &rng);
} else return -1;
if (ret == 0) {
        ret = wc_MakeRsaKey(&key, 2048, WC_RSA_EXPONENT, &rng);
} else return -1;

if (ret == 0) {
    digestSz = wc_HashGetDigestSize(WC_HASH_TYPE_SHA256);
    ret = wc_Hash(WC_HASH_TYPE_SHA256, message, sz, digest, digestSz);
} else return -1;

if (ret == 0) {
    ret = wc_RsaPSS_Sign(digest, digestSz, pSignature, pSignatureSz,
            WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key, &rng);
    if (ret > 0 ){
        sz = ret;
    } else return -1;
} else return -1;
if (ret == 0) {
    ret = wc_RsaPSS_VerifyCheckInline(pSignature, sz, pt,
            digest, digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key);
        if (ret <= 0) return -1;
} else return -1;

wc_FreeRsaKey(&key);
wc_FreeRng(&rng);

function wc_RsaPSS_VerifyCheckInline_ex

int wc_RsaPSS_VerifyCheckInline_ex(
    byte * in,
    word32 inLen,
    byte ** out,
    const byte * digest,
    word32 digentLen,
    enum wc_HashType hash,
    int mgf,
    int saltLen,
    RsaKey * key
)

RSA-PSSで署名されたメッセージを検証します。入力バッファは出力バッファとして再利用されます。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。

Parameters:

  • in 復号されるバイト配列。
  • inLen inの長さ。
  • out 復号されたデータを格納するバイト配列。
  • digest 検証されるデータのハッシュ。
  • digestLen ハッシュの長さ。
  • hash メッセージに含まれるハッシュタイプ
  • mgf マスク生成関数識別子
  • saltLen 使用されるソルトの長さ。RSA_PSS_SALT_LEN_DEFAULT(-1)は、ソルトの長さがハッシュの長さと同じであることを示します。RSA_PSS_SALT_LEN_DISCOVERは、ソルトの長さがデータから決定されることを示します。
  • key 検証に使用するキー。

See:

Return: the length of the PSS data 成功時はPSSデータの長さ、失敗を示す負の値。

Example

ret = wc_InitRsaKey(&key, NULL);
if (ret == 0) {
    ret = wc_InitRng(&rng);
} else return -1;
if (ret == 0) {
    ret = wc_RsaSetRNG(&key, &rng);
} else return -1;
if (ret == 0) {
        ret = wc_MakeRsaKey(&key, 2048, WC_RSA_EXPONENT, &rng);
} else return -1;

if (ret == 0) {
    digestSz = wc_HashGetDigestSize(WC_HASH_TYPE_SHA256);
    ret = wc_Hash(WC_HASH_TYPE_SHA256, message, sz, digest, digestSz);
} else return -1;

if (ret == 0) {
    ret = wc_RsaPSS_Sign(digest, digestSz, pSignature, pSignatureSz,
            WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key, &rng);
    if (ret > 0 ){
        sz = ret;
    } else return -1;
} else return -1;
if (ret == 0) {
    ret = wc_RsaPSS_VerifyCheckInline_ex(pSignature, sz, pt,
            digest, digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, saltLen, &key);
        if (ret <= 0) return -1;
} else return -1;

wc_FreeRsaKey(&key);
wc_FreeRng(&rng);

function wc_RsaPSS_CheckPadding

int wc_RsaPSS_CheckPadding(
    const byte * in,
    word32 inLen,
    byte * sig,
    word32 sigSz,
    enum wc_HashType hashType
)

署名が一致することを確認するためにPSSデータをチェックします。ソルトの長さはハッシュの長さと等しくなります。WC_RSA_BLINDINGが有効になっている場合、キーはwc_RsaSetRNGによってRNGと関連付ける必要があります。

Parameters:

  • in 検証されるデータのハッシュ。
  • inSz ハッシュの長さ。
  • sig PSSデータを保持するバッファ。
  • sigSz PSSデータのサイズ。
  • hashType ハッシュアルゴリズム。

See:

Return:

  • BAD_PADDING_E PSSデータが無効な場合、BAD_FUNC_ARG inまたはsigにNULLが渡された場合、またはinSzがハッシュアルゴリズムの長さと同じでない場合、成功時は0。
  • MEMORY_E メモリ例外。

Example

ret = wc_InitRsaKey(&key, NULL);
if (ret == 0) {
    ret = wc_InitRng(&rng);
} else return -1;
if (ret == 0) {
    ret = wc_RsaSetRNG(&key, &rng);
} else return -1;
if (ret == 0) {
        ret = wc_MakeRsaKey(&key, 2048, WC_RSA_EXPONENT, &rng);
} else return -1;
if (ret == 0) {
    digestSz = wc_HashGetDigestSize(WC_HASH_TYPE_SHA256);
    ret = wc_Hash(WC_HASH_TYPE_SHA256, message, sz, digest, digestSz);
} else return -1;
ret = wc_RsaPSS_Sign(digest, digestSz, pSignature, sizeof(pSignature),
        WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key, &rng);
if (ret > 0 ){
    sz = ret;
} else return -1;

verify = wc_RsaPSS_Verify(pSignature, sz, out, outLen,
        WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key);
if (verify <= 0)return -1;

ret = wc_RsaPSS_CheckPadding(digest, digestSz, out, verify, hash);

wc_FreeRsaKey(&key);
wc_FreeRng(&rng);

function wc_RsaPSS_CheckPadding_ex

int wc_RsaPSS_CheckPadding_ex(
    const byte * in,
    word32 inLen,
    byte * sig,
    word32 sigSz,
    enum wc_HashType hashType,
    int saltLen,
    int bits
)

署名が一致することを確認するためにPSSデータをチェックします。ソルトの長さはハッシュの長さと等しくなります。

Parameters:

  • in 検証されるデータのハッシュ。
  • inSz ハッシュの長さ。
  • sig PSSデータを保持するバッファ。
  • sigSz PSSデータのサイズ。
  • hashType ハッシュアルゴリズム。
  • saltLen 使用されるソルトの長さ。RSA_PSS_SALT_LEN_DEFAULT(-1)は、ソルトの長さがハッシュの長さと同じであることを示します。RSA_PSS_SALT_LEN_DISCOVERは、ソルトの長さがデータから決定されることを示します。
  • bits FIPSの場合、ソルトサイズの計算に使用できます

See:

Return:

  • BAD_PADDING_E PSSデータが無効な場合、BAD_FUNC_ARG inまたはsigにNULLが渡された場合、またはinSzがハッシュアルゴリズムの長さと同じでない場合、成功時は0。
  • MEMORY_E メモリ例外。

Example

ret = wc_InitRsaKey(&key, NULL);
if (ret == 0) {
    ret = wc_InitRng(&rng);
} else return -1;
if (ret == 0) {
    ret = wc_RsaSetRNG(&key, &rng);
} else return -1;
if (ret == 0) {
        ret = wc_MakeRsaKey(&key, 2048, WC_RSA_EXPONENT, &rng);
} else return -1;
if (ret == 0) {
    digestSz = wc_HashGetDigestSize(WC_HASH_TYPE_SHA256);
    ret = wc_Hash(WC_HASH_TYPE_SHA256, message, sz, digest, digestSz);
} else return -1;
ret = wc_RsaPSS_Sign(digest, digestSz, pSignature, sizeof(pSignature),
        WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key, &rng);
if (ret > 0 ){
    sz = ret;
} else return -1;

verify = wc_RsaPSS_Verify(pSignature, sz, out, outLen,
        WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key);
if (verify <= 0)return -1;

ret = wc_RsaPSS_CheckPadding_ex(digest, digestSz, out, verify, hash, saltLen, 0);

wc_FreeRsaKey(&key);
wc_FreeRng(&rng);

function wc_RsaEncryptSize

int wc_RsaEncryptSize(
    RsaKey * key
)

提供されたキー構造体の暗号化サイズを返します。

Parameters:

  • key 検証に使用するキー。

See:

Return: Success 提供されたキー構造体の暗号化サイズ。

Example

int sz = wc_RsaEncryptSize(&key);

function wc_RsaPrivateKeyDecode

int wc_RsaPrivateKeyDecode(
    const byte * input,
    word32 * inOutIdx,
    RsaKey * key,
    word32 inSz
)

この関数は、DER形式のRSA秘密鍵を解析し、秘密鍵を抽出して、指定されたRsaKey構造体に格納します。また、idxに解析された距離を設定します。

Parameters:

  • input デコードするDER形式の秘密鍵を含むバッファへのポインタ
  • inOutIdx キーが始まるバッファ内のインデックスへのポインタ(通常は0)。この関数の副作用として、inOutIdxは入力バッファを通じて解析された距離を格納します
  • key デコードされた秘密鍵を格納するRsaKey構造体へのポインタ
  • inSz 入力バッファのサイズ

See:

Return:

  • 0 DERエンコードされた入力から秘密鍵を正常に解析した場合に返されます
  • ASN_PARSE_E 入力バッファから秘密鍵を解析する際にエラーがある場合に返されます。これは、入力秘密鍵がASN.1標準に従って適切にフォーマットされていない場合に発生する可能性があります
  • ASN_RSA_KEY_E RSAキー入力の秘密鍵要素を読み取る際にエラーがある場合に返されます

Example

RsaKey enc;
word32 idx = 0;
int ret = 0;
byte der[] = { // DERエンコードされたRSA秘密鍵で初期化 };

wc_InitRsaKey(&enc, NULL); // ヒープヒントを使用しない。カスタムメモリなし
ret = wc_RsaPrivateKeyDecode(der, &idx, &enc, sizeof(der));
if( ret != 0 ) {
    // 秘密鍵の解析エラー
}

function wc_RsaPublicKeyDecode

int wc_RsaPublicKeyDecode(
    const byte * input,
    word32 * inOutIdx,
    RsaKey * key,
    word32 inSz
)

この関数は、DER形式のRSA公開鍵を解析し、公開鍵を抽出して、指定されたRsaKey構造体に格納します。また、idxに解析された距離を設定します。

Parameters:

  • input デコードする入力DERエンコードされたRSA公開鍵を含むバッファへのポインタ
  • inOutIdx キーが始まるバッファ内のインデックスへのポインタ(通常は0)。この関数の副作用として、inOutIdxは入力バッファを通じて解析された距離を格納します
  • key デコードされた公開鍵を格納するRsaKey構造体へのポインタ
  • inSz 入力バッファのサイズ

See: wc_RsaPublicKeyDecodeRaw

Return:

  • 0 DERエンコードされた入力から公開鍵を正常に解析した場合に返されます
  • ASN_PARSE_E 入力バッファから公開鍵を解析する際にエラーがある場合に返されます。これは、入力公開鍵がASN.1標準に従って適切にフォーマットされていない場合に発生する可能性があります
  • ASN_OBJECT_ID_E ASN.1オブジェクトIDがRSA公開鍵のものと一致しない場合に返されます
  • ASN_EXPECT_0_E 入力キーがASN.1標準に従って正しくフォーマットされていない場合に返されます
  • ASN_BITSTR_E 入力キーがASN.1標準に従って正しくフォーマットされていない場合に返されます
  • ASN_RSA_KEY_E RSAキー入力の公開鍵要素を読み取る際にエラーがある場合に返されます

Example

RsaKey pub;
word32 idx = 0;
int ret = 0;
byte der[] = { // DERエンコードされたRSA公開鍵で初期化 };

wc_InitRsaKey(&pub, NULL); // ヒープヒントを使用しない。カスタムメモリなし
ret = wc_RsaPublicKeyDecode(der, &idx, &pub, sizeof(der));
if( ret != 0 ) {
    // 公開鍵の解析エラー
}

function wc_RsaPublicKeyDecodeRaw

int wc_RsaPublicKeyDecodeRaw(
    const byte * n,
    word32 nSz,
    const byte * e,
    word32 eSz,
    RsaKey * key
)

この関数は、RSA公開鍵の生の要素をデコードし、公開モジュラス(n)と指数(e)を受け取ります。これらの生の要素を提供されたRsaKey構造体に格納し、暗号化/復号プロセスでそれらを使用できるようにします。

Parameters:

  • n 公開RSAキーの生のモジュラスパラメータを含むバッファへのポインタ
  • nSz nを含むバッファのサイズ
  • e 公開RSAキーの生の指数パラメータを含むバッファへのポインタ
  • eSz eを含むバッファのサイズ
  • key 提供された公開鍵要素で初期化するRsaKey構造体へのポインタ

See: wc_RsaPublicKeyDecode

Return:

  • 0 公開鍵の生の要素をRsaKey構造体に正常にデコードした場合に返されます
  • BAD_FUNC_ARG いずれかの入力引数がNULLと評価された場合に返されます
  • MP_INIT_E 多精度整数(mp_int)ライブラリで使用するために整数を初期化する際にエラーがある場合に返されます
  • ASN_GETINT_E 提供されたRSAキー要素(nまたはe)のいずれかを読み取る際にエラーがある場合に返されます

Example

RsaKey pub;
int ret = 0;
byte n[] = { // 受信した公開鍵のn成分で初期化 };
byte e[] = { // 受信した公開鍵のe成分で初期化 };

wc_InitRsaKey(&pub, NULL); // ヒープヒントを使用しない。カスタムメモリなし
ret = wc_RsaPublicKeyDecodeRaw(n, sizeof(n), e, sizeof(e), &pub);
if( ret != 0 ) {
    // 公開鍵要素の解析エラー
}

function wc_RsaKeyToDer

int wc_RsaKeyToDer(
    RsaKey * key,
    byte * output,
    word32 inLen
)

この関数は、RsaKeyキーをDER形式に変換します。結果はoutputに書き込まれ、書き込まれたバイト数を返します。

Parameters:

  • key 初期化されたRsaKey構造体。
  • output 出力バッファへのポインタ。
  • inLen 出力バッファのサイズ。

See:

Return:

  • 0 成功、書き込まれたバイト数。

  • BAD_FUNC_ARG keyまたはoutputがnullの場合、またはkey->typeがRSA_PRIVATEでない場合、またはinLenが出力バッファに対して十分な大きさでない場合に返されます。
  • MEMORY_E メモリの割り当て中にエラーがある場合に返されます。

Example

byte* der;
// derにメモリを割り当て
int derSz = // derに割り当てられたメモリの量;
RsaKey key;
WC_RNG rng;
long e = 65537; // 指数に使用する標準値
ret = wc_MakeRsaKey(&key, 2048, e, &rng); // 2048ビット長の秘密鍵を生成
wc_InitRsaKey(&key, NULL);
wc_InitRng(&rng);
if(wc_RsaKeyToDer(&key, der, derSz) != 0)
{
    // スローされたエラーを処理
}

function wc_RsaPublicEncrypt_ex

int wc_RsaPublicEncrypt_ex(
    const byte * in,
    word32 inLen,
    byte * out,
    word32 outLen,
    RsaKey * key,
    WC_RNG * rng,
    int type,
    enum wc_HashType hash,
    int mgf,
    byte * label,
    word32 labelSz
)

この関数は、使用するパディングを選択できるようにしながら、RSA暗号化を実行します。

Parameters:

  • in 暗号化するバッファへのポインタ
  • inLen 暗号化するバッファの長さ
  • out 作成された暗号化されたメッセージ
  • outLen 暗号化されたメッセージを保持するために利用可能なバッファの長さ
  • key 初期化されたRSAキー構造体
  • rng 初期化されたWC_RNG構造体
  • type 使用するパディングのタイプ(WC_RSA_OAEP_PADまたはWC_RSA_PKCSV15_PAD)
  • hash 使用するハッシュのタイプ(選択肢はhash.hにあります)
  • mgf 使用するマスク生成関数のタイプ
  • label 暗号化されたメッセージに関連付けるオプションのラベル
  • labelSz 使用されるオプションのラベルのサイズ

See:

Return:

  • size 暗号化に成功した場合、暗号化されたバッファのサイズが返されます
  • RSA_BUFFER_E RSAバッファエラー、出力が小さすぎるか入力が大きすぎます

Example

WC_RNG rng;
RsaKey key;
byte in[] = "I use Turing Machines to ask questions"
byte out[256];
int ret;
…

ret = wc_RsaPublicEncrypt_ex(in, sizeof(in), out, sizeof(out), &key, &rng,
WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA, WC_MGF1SHA1, NULL, 0);
if (ret < 0) {
    // エラーを処理
}

function wc_RsaPrivateDecrypt_ex

int wc_RsaPrivateDecrypt_ex(
    const byte * in,
    word32 inLen,
    byte * out,
    word32 outLen,
    RsaKey * key,
    int type,
    enum wc_HashType hash,
    int mgf,
    byte * label,
    word32 labelSz
)

この関数は、RSAを使用してメッセージを復号し、どのパディングタイプを使用するかのオプションを提供します。

Parameters:

  • in 復号するバッファへのポインタ
  • inLen 復号するバッファの長さ
  • out 作成された復号されたメッセージ
  • outLen 復号されたメッセージを保持するために利用可能なバッファの長さ
  • key 初期化されたRSAキー構造体
  • type 使用するパディングのタイプ(WC_RSA_OAEP_PADまたはWC_RSA_PKCSV15_PAD)
  • hash 使用するハッシュのタイプ(選択肢はhash.hにあります)
  • mgf 使用するマスク生成関数のタイプ
  • label 暗号化されたメッセージに関連付けるオプションのラベル
  • labelSz 使用されるオプションのラベルのサイズ

See: なし

Return:

  • size 復号に成功した場合、復号されたメッセージのサイズが返されます。
  • MEMORY_E 必要な配列をmallocするのに十分なメモリがシステムにない場合に返されます。
  • BAD_FUNC_ARG 関数に不正な引数が渡された場合に返されます。

Example

WC_RNG rng;
RsaKey key;
byte in[] = "I use Turing Machines to ask questions"
byte out[256];
byte plain[256];
int ret;
…
ret = wc_RsaPublicEncrypt_ex(in, sizeof(in), out, sizeof(out), &key,
&rng, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA, WC_MGF1SHA1, NULL, 0);
if (ret < 0) {
    // エラーを処理
}
…
ret = wc_RsaPrivateDecrypt_ex(out, ret, plain, sizeof(plain), &key,
WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA, WC_MGF1SHA1, NULL, 0);

if (ret < 0) {
    // エラーを処理
}

function wc_RsaPrivateDecryptInline_ex

int wc_RsaPrivateDecryptInline_ex(
    byte * in,
    word32 inLen,
    byte ** out,
    RsaKey * key,
    int type,
    enum wc_HashType hash,
    int mgf,
    byte * label,
    word32 labelSz
)

この関数は、RSAを使用してメッセージをインラインで復号し、どのパディングタイプを使用するかのオプションを提供します。inバッファは呼び出し後に復号されたメッセージを含み、outバイトポインタは平文がある「in」バッファ内の場所を指します。

Parameters:

  • in 復号するバッファへのポインタ
  • inLen 復号するバッファの長さ
  • out 「in」バッファ内の復号されたメッセージの場所へのポインタ
  • key 初期化されたRSAキー構造体
  • type 使用するパディングのタイプ(WC_RSA_OAEP_PADまたはWC_RSA_PKCSV15_PAD)
  • hash 使用するハッシュのタイプ(選択肢はhash.hにあります)
  • mgf 使用するマスク生成関数のタイプ
  • label 暗号化されたメッセージに関連付けるオプションのラベル
  • labelSz 使用されるオプションのラベルのサイズ

See: なし

Return:

  • size 復号に成功した場合、復号されたメッセージのサイズが返されます。
  • MEMORY_E: 必要な配列をmallocするのに十分なメモリがシステムにない場合に返されます。
  • RSA_PAD_E: パディングにエラーがあった場合に返されます。
  • BAD_PADDING_E: パディングを解析中にエラーが発生した場合に返されます。
  • BAD_FUNC_ARG: 関数に不正な引数が渡された場合に返されます。

Example

WC_RNG rng;
RsaKey key;
byte in[] = "I use Turing Machines to ask questions"
byte out[256];
byte* plain;
int ret;
…
ret = wc_RsaPublicEncrypt_ex(in, sizeof(in), out, sizeof(out), &key,
&rng, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA, WC_MGF1SHA1, NULL, 0);

if (ret < 0) {
    // エラーを処理
}
…
ret = wc_RsaPrivateDecryptInline_ex(out, ret, &plain, &key,
WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA, WC_MGF1SHA1, NULL, 0);

if (ret < 0) {
    // エラーを処理
}

function wc_RsaFlattenPublicKey

int wc_RsaFlattenPublicKey(
    RsaKey * key,
    byte * e,
    word32 * eSz,
    byte * n,
    word32 * nSz
)

RsaKey構造体をRSAアルゴリズムに使用される個々の要素(e、n)に展開します。

Parameters:

  • key 検証に使用するキー。
  • e eの値のバッファ。eはRSAモジュラー演算における大きな正の整数です。
  • eSz eバッファのサイズ。
  • n nの値のバッファ。nはRSAモジュラー演算における大きな正の整数です。
  • nSz nバッファのサイズ。

See:

Return:

  • 0 関数がエラーなく正常に実行された場合に返されます。
  • BAD_FUNC_ARG: いずれかのパラメータがnull値で渡された場合に返されます。
  • RSA_BUFFER_E: 渡されたeまたはnバッファが正しいサイズでない場合に返されます。
  • MP_MEM: 内部関数にメモリエラーがある場合に返されます。
  • MP_VAL: 内部関数の引数が無効な場合に返されます。

Example

Rsa key; // 有効なRSAキー。
byte e[ バッファサイズ 例:256 ];
byte n[256];
int ret;
word32 eSz = sizeof(e);
word32 nSz = sizeof(n);
...
ret = wc_RsaFlattenPublicKey(&key, e, &eSz, n, &nSz);
if (ret != 0) {
    // 失敗ケース。
}

function wc_RsaKeyToPublicDer

int wc_RsaKeyToPublicDer(
    RsaKey * key,
    byte * output,
    word32 inLen
)

RSA公開鍵をDER形式に変換します。outputに書き込み、書き込まれたバイト数を返します。

Parameters:

  • key 変換するRSAキー構造体。
  • output DERを保持する出力バッファ。(NULLの場合は長さのみを返します)
  • inLen バッファの長さ。

See:

Return:

  • 0 成功、書き込まれたバイト数。

  • BAD_FUNC_ARG keyまたはoutputがnullの場合に返されます。
  • MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます。
  • <0 エラー

Example

RsaKey key;

wc_InitRsaKey(&key, NULL);
// キーを使用

const int BUFFER_SIZE = 1024; // バッファに適切なサイズ
byte output[BUFFER_SIZE];
if (wc_RsaKeyToPublicDer(&key, output, sizeof(output)) != 0) {
    // エラーを処理
}

function wc_RsaKeyToPublicDer_ex

int wc_RsaKeyToPublicDer_ex(
    RsaKey * key,
    byte * output,
    word32 inLen,
    int with_header
)

RSA公開鍵をDER形式に変換します。outputに書き込み、書き込まれたバイト数を返します。with_headerが0の場合、(seq + n + e)のみがASN.1 DER形式で返され、ヘッダーは除外されます。

Parameters:

  • key 変換するRSAキー構造体。
  • output DERを保持する出力バッファ。(NULLの場合は長さのみを返します)
  • inLen バッファの長さ。

See:

Return:

  • 0 成功、書き込まれたバイト数。

  • BAD_FUNC_ARG keyまたはoutputがnullの場合に返されます。
  • MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます。
  • <0 エラー

Example

RsaKey key;

wc_InitRsaKey(&key, NULL);
// キーを使用

const int BUFFER_SIZE = 1024; // バッファに適切なサイズ
byte output[BUFFER_SIZE];
if (wc_RsaKeyToPublicDer_ex(&key, output, sizeof(output), 0) != 0) {
    // エラーを処理
}

function wc_MakeRsaKey

int wc_MakeRsaKey(
    RsaKey * key,
    int size,
    long e,
    WC_RNG * rng
)

この関数は、長さsize(ビット単位)と指定された指数(e)のRSA秘密鍵を生成します。その後、このキーを提供されたRsaKey構造体に格納し、暗号化/復号に使用できるようにします。eに使用する安全な数値は65537です。sizeはRSA_MIN_SIZE以上かつRSA_MAX_SIZE以下である必要があります。この関数を使用するには、コンパイル時にオプションWOLFSSL_KEY_GENを有効にする必要があります。./configureを使用する場合は、–enable-keygenで実現できます。

Parameters:

  • key 生成された秘密鍵を格納するRsaKey構造体へのポインタ
  • size 希望するキーの長さ(ビット単位)。RSA_MIN_SIZEより大きくRSA_MAX_SIZEより小さい必要があります
  • e キーを生成するために使用する指数パラメータ。安全な選択肢は65537です
  • rng キーを作成する際の乱数生成に使用するRNG構造体へのポインタ

See: なし

Return:

  • 0 RSA秘密鍵の生成に成功した場合に返されます
  • BAD_FUNC_ARG いずれかの入力引数がNULLの場合、sizeパラメータが必要な境界外にある場合、またはeが誤って選択された場合に返されます
  • RNG_FAILURE_E 提供されたRNG構造体を使用してランダムブロックを生成する際にエラーがある場合に返されます
  • MP_INIT_E
  • MP_READ_E RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_CMP_E RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_INVMOD_E RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_EXPTMOD_E RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_MOD_E RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_MUL_E RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_ADD_E RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_MULMOD_E RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_TO_E RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_MEM RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります
  • MP_ZERO_E RSAキーの生成中に使用される数学ライブラリにエラーがある場合に返される可能性があります

Example

RsaKey priv;
WC_RNG rng;
int ret = 0;
long e = 65537; // 指数に使用する標準値

wc_InitRsaKey(&priv, NULL); // ヒープヒントを使用しない。カスタムメモリなし
wc_InitRng(&rng);
// 2048ビット長の秘密鍵を生成
ret = wc_MakeRsaKey(&priv, 2048, e, &rng);
if( ret != 0 ) {
    // 秘密鍵の生成エラー
}

function wc_RsaSetNonBlock

int wc_RsaSetNonBlock(
    RsaKey * key,
    RsaNb * nb
)

この関数は、ノンブロッキングRSAコンテキストを設定します。RsaNbコンテキストが設定されると、RSA関数を多くの小さな操作に分割する、高速数学ベースのノンブロッキングexptmodが有効になります。WC_RSA_NONBLOCKが定義されている場合に有効になります。

Parameters:

  • key RSAキー構造体
  • nb このRSAキーが使用するRSAノンブロッキング構造体。

See: wc_RsaSetNonBlockTime

Return:

  • 0 成功
  • BAD_FUNC_ARG keyまたはnbがnullの場合に返されます。

Example

int ret, count = 0;
RsaKey key;
RsaNb  nb;

wc_InitRsaKey(&key, NULL);

// ノンブロッキングRSAモードを有効化 - コンテキストを提供
ret = wc_RsaSetNonBlock(key, &nb);
if (ret != 0)
    return ret;

do {
    ret = wc_RsaSSL_Sign(in, inLen, out, outSz, key, rng);
    count++; // ブロック回数を追跡
    if (ret == FP_WOULDBLOCK) {
        // ここで「その他の」作業を実行
    }
} while (ret == FP_WOULDBLOCK);
if (ret < 0) {
    return ret;
}

printf("RSAノンブロック署名: サイズ %d、%d回\n", ret, count);

function wc_RsaSetNonBlockTime

int wc_RsaSetNonBlockTime(
    RsaKey * key,
    word32 maxBlockUs,
    word32 cpuMHz
)

この関数は、最大ブロッキング時間をマイクロ秒単位で設定します。CPU速度(メガヘルツ単位)とともに事前計算されたテーブル(tfm.c exptModNbInstを参照)を使用して、次の操作が提供された最大ブロッキング時間内に完了できるかどうかを判断します。WC_RSA_NONBLOCK_TIMEが定義されている場合に有効になります。

Parameters:

  • key RSAキー構造体。
  • maxBlockUs 最大ブロック時間(マイクロ秒)。
  • cpuMHz CPU速度(メガヘルツ単位)。

See: wc_RsaSetNonBlock

Return:

  • 0 成功
  • BAD_FUNC_ARG keyがnullの場合、またはwc_RsaSetNonBlockが事前に呼び出されておらずkey->nbがnullの場合に返されます。

Example

RsaKey key;
RsaNb  nb;

wc_InitRsaKey(&key, NULL);
wc_RsaSetNonBlock(key, &nb);
wc_RsaSetNonBlockTime(&key, 4000, 160); // Block Max = 4 ms、CPU = 160MHz

Source code


int  wc_InitRsaKey(RsaKey* key, void* heap);

int  wc_InitRsaKey_Id(RsaKey* key, unsigned char* id, int len,
        void* heap, int devId);

int wc_RsaSetRNG(RsaKey* key, WC_RNG* rng);

int  wc_FreeRsaKey(RsaKey* key);

int wc_RsaDirect(const byte* in, word32 inLen, byte* out, word32* outSz,
        RsaKey* key, int type, WC_RNG* rng);

int  wc_RsaPublicEncrypt(const byte* in, word32 inLen, byte* out,
                                 word32 outLen, RsaKey* key, WC_RNG* rng);

int  wc_RsaPrivateDecryptInline(byte* in, word32 inLen, byte** out,
                                        RsaKey* key);

int  wc_RsaPrivateDecrypt(const byte* in, word32 inLen, byte* out,
                                  word32 outLen, RsaKey* key);

int  wc_RsaSSL_Sign(const byte* in, word32 inLen, byte* out,
                            word32 outLen, RsaKey* key, WC_RNG* rng);

int  wc_RsaSSL_VerifyInline(byte* in, word32 inLen, byte** out,
                                    RsaKey* key);

int  wc_RsaSSL_Verify(const byte* in, word32 inLen, byte* out,
                              word32 outLen, RsaKey* key);

int  wc_RsaPSS_Sign(const byte* in, word32 inLen, byte* out,
                                word32 outLen, enum wc_HashType hash, int mgf,
                                RsaKey* key, WC_RNG* rng);

int  wc_RsaPSS_Verify(byte* in, word32 inLen, byte* out,
                                  word32 outLen, enum wc_HashType hash, int mgf,
                                  RsaKey* key);

int  wc_RsaPSS_VerifyInline(byte* in, word32 inLen, byte** out,
                                        enum wc_HashType hash, int mgf,
                                        RsaKey* key);
int  wc_RsaPSS_VerifyCheck(byte* in, word32 inLen,
                               byte* out, word32 outLen,
                               const byte* digest, word32 digestLen,
                               enum wc_HashType hash, int mgf,
                               RsaKey* key);
int  wc_RsaPSS_VerifyCheck_ex(byte* in, word32 inLen,
                               byte* out, word32 outLen,
                               const byte* digest, word32 digestLen,
                               enum wc_HashType hash, int mgf, int saltLen,
                               RsaKey* key);

int  wc_RsaPSS_VerifyCheckInline(byte* in, word32 inLen, byte** out,
                               const byte* digest, word32 digentLen,
                               enum wc_HashType hash, int mgf,
                               RsaKey* key);
int  wc_RsaPSS_VerifyCheckInline_ex(byte* in, word32 inLen, byte** out,
                               const byte* digest, word32 digentLen,
                               enum wc_HashType hash, int mgf, int saltLen,
                               RsaKey* key);

int  wc_RsaPSS_CheckPadding(const byte* in, word32 inLen, byte* sig,
                                        word32 sigSz,
                                        enum wc_HashType hashType);
int  wc_RsaPSS_CheckPadding_ex(const byte* in, word32 inLen, byte* sig,
                word32 sigSz, enum wc_HashType hashType, int saltLen, int bits);
int  wc_RsaEncryptSize(RsaKey* key);

int  wc_RsaPrivateKeyDecode(const byte* input, word32* inOutIdx,
                            RsaKey* key, word32 inSz);

int  wc_RsaPublicKeyDecode(const byte* input, word32* inOutIdx,
                           RsaKey* key, word32 inSz);

int  wc_RsaPublicKeyDecodeRaw(const byte* n, word32 nSz,
                                        const byte* e, word32 eSz, RsaKey* key);

int wc_RsaKeyToDer(RsaKey* key, byte* output, word32 inLen);

int  wc_RsaPublicEncrypt_ex(const byte* in, word32 inLen, byte* out,
                   word32 outLen, RsaKey* key, WC_RNG* rng, int type,
                   enum wc_HashType hash, int mgf, byte* label, word32 labelSz);

int  wc_RsaPrivateDecrypt_ex(const byte* in, word32 inLen,
                   byte* out, word32 outLen, RsaKey* key, int type,
                   enum wc_HashType hash, int mgf, byte* label, word32 labelSz);

int  wc_RsaPrivateDecryptInline_ex(byte* in, word32 inLen,
                      byte** out, RsaKey* key, int type, enum wc_HashType hash,
                      int mgf, byte* label, word32 labelSz);

int  wc_RsaFlattenPublicKey(RsaKey* key, byte* e, word32* eSz, byte* n,
                            word32* nSz);

int wc_RsaKeyToPublicDer(RsaKey* key, byte* output, word32 inLen);

int wc_RsaKeyToPublicDer_ex(RsaKey* key, byte* output, word32 inLen,
    int with_header);

int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng);

int wc_RsaSetNonBlock(RsaKey* key, RsaNb* nb);

int wc_RsaSetNonBlockTime(RsaKey* key, word32 maxBlockUs,
    word32 cpuMHz);

Updated on 2025-12-12 at 03:08:17 +0000