mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-09 04:00:53 +02:00
139 lines
5.0 KiB
C
139 lines
5.0 KiB
C
/*!
|
|
\ingroup Signature
|
|
|
|
\brief この関数は、結果の署名の最大サイズを返します。
|
|
|
|
\return sig_typeがサポートされていない場合、SIG_TYPE_Eを返します。sig_typeが無効な場合、BAD_FUNC_ARGを返します。正の戻り値は、署名の最大サイズを示します。
|
|
|
|
\param sig_type WC_SIGNATURE_TYPE_ECCやWC_SIGNATURE_TYPE_RSAなどの署名タイプの列挙値。
|
|
\param key ecc_keyやRsaKeyなどのキー構造体へのポインタ。
|
|
\param key_len キー構造体のサイズ。
|
|
|
|
_Example_
|
|
\code
|
|
// 署名の長さを取得
|
|
enum wc_SignatureType sig_type = WC_SIGNATURE_TYPE_ECC;
|
|
ecc_key eccKey;
|
|
word32 sigLen;
|
|
wc_ecc_init(&eccKey);
|
|
sigLen = wc_SignatureGetSize(sig_type, &eccKey, sizeof(eccKey));
|
|
if (sigLen > 0) {
|
|
// 成功
|
|
}
|
|
\endcode
|
|
|
|
\sa wc_HashGetDigestSize
|
|
\sa wc_SignatureGenerate
|
|
\sa wc_SignatureVerify
|
|
*/
|
|
int wc_SignatureGetSize(enum wc_SignatureType sig_type,
|
|
const void* key, word32 key_len);
|
|
|
|
/*!
|
|
\ingroup Signature
|
|
|
|
\brief この関数は、データをハッシュ化し、結果のハッシュとキーを使用して署名を検証することで、署名を検証します。
|
|
|
|
\return 0 成功
|
|
\return SIG_TYPE_E -231、署名タイプが有効化されていない/利用できない
|
|
\return BAD_FUNC_ARG -173、不正な関数引数が提供された
|
|
\return BUFFER_E -132、出力バッファが小さすぎるか、入力が大きすぎる。
|
|
|
|
\param hash_type "WC_HASH_TYPE_SHA256"などの"enum wc_HashType"からのハッシュタイプ。
|
|
\param sig_type WC_SIGNATURE_TYPE_ECCやWC_SIGNATURE_TYPE_RSAなどの署名タイプの列挙値。
|
|
\param data ハッシュ化するデータを含むバッファへのポインタ。
|
|
\param data_len データバッファの長さ。
|
|
\param sig 署名を出力するバッファへのポインタ。
|
|
\param sig_len 署名出力バッファの長さ。
|
|
\param key ecc_keyやRsaKeyなどのキー構造体へのポインタ。
|
|
\param key_len キー構造体のサイズ。
|
|
|
|
_Example_
|
|
\code
|
|
int ret;
|
|
ecc_key eccKey;
|
|
|
|
// 公開鍵をインポート
|
|
wc_ecc_init(&eccKey);
|
|
ret = wc_ecc_import_x963(eccPubKeyBuf, eccPubKeyLen, &eccKey);
|
|
// 公開鍵を使用して署名検証を実行
|
|
ret = wc_SignatureVerify(
|
|
WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_ECC,
|
|
fileBuf, fileLen,
|
|
sigBuf, sigLen,
|
|
&eccKey, sizeof(eccKey));
|
|
printf("署名検証: %s
|
|
(%d)\n", (ret == 0) ? "合格" : "不合格", ret);
|
|
wc_ecc_free(&eccKey);
|
|
\endcode
|
|
|
|
\sa wc_SignatureGetSize
|
|
\sa wc_SignatureGenerate
|
|
*/
|
|
int wc_SignatureVerify(
|
|
enum wc_HashType hash_type, enum wc_SignatureType sig_type,
|
|
const byte* data, word32 data_len,
|
|
const byte* sig, word32 sig_len,
|
|
const void* key, word32 key_len);
|
|
|
|
/*!
|
|
\ingroup Signature
|
|
|
|
\brief この関数は、キーを使用してデータから署名を生成します。最初にデータのハッシュを作成し、次にキーを使用してハッシュに署名します。
|
|
|
|
\return 0 成功
|
|
\return SIG_TYPE_E -231、署名タイプが有効化されていない/利用できない
|
|
\return BAD_FUNC_ARG -173、不正な関数引数が提供された
|
|
\return BUFFER_E -132、出力バッファが小さすぎるか、入力が大きすぎる。
|
|
|
|
\param hash_type "WC_HASH_TYPE_SHA256"などの"enum wc_HashType"からのハッシュタイプ。
|
|
\param sig_type WC_SIGNATURE_TYPE_ECCやWC_SIGNATURE_TYPE_RSAなどの署名タイプの列挙値。
|
|
\param data ハッシュ化するデータを含むバッファへのポインタ。
|
|
\param data_len データバッファの長さ。
|
|
\param sig 署名を出力するバッファへのポインタ。
|
|
\param sig_len 署名出力バッファの長さ。
|
|
\param key ecc_keyやRsaKeyなどのキー構造体へのポインタ。
|
|
\param key_len キー構造体のサイズ。
|
|
\param rng 初期化されたRNG構造体へのポインタ。
|
|
|
|
_Example_
|
|
\code
|
|
int ret;
|
|
WC_RNG rng;
|
|
ecc_key eccKey;
|
|
|
|
wc_InitRng(&rng);
|
|
wc_ecc_init(&eccKey);
|
|
|
|
// キーを生成
|
|
ret = wc_ecc_make_key(&rng, 32, &eccKey);
|
|
|
|
// 署名の長さを取得してバッファを割り当て
|
|
sigLen = wc_SignatureGetSize(sig_type, &eccKey, sizeof(eccKey));
|
|
sigBuf = malloc(sigLen);
|
|
|
|
// 公開鍵を使用して署名検証を実行
|
|
ret = wc_SignatureGenerate(
|
|
WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_ECC,
|
|
fileBuf, fileLen,
|
|
sigBuf, &sigLen,
|
|
&eccKey, sizeof(eccKey),
|
|
&rng);
|
|
printf("署名生成: %s
|
|
(%d)\n", (ret == 0) ? "合格" : "不合格", ret);
|
|
|
|
free(sigBuf);
|
|
wc_ecc_free(&eccKey);
|
|
wc_FreeRng(&rng);
|
|
\endcode
|
|
|
|
\sa wc_SignatureGetSize
|
|
\sa wc_SignatureVerify
|
|
*/
|
|
int wc_SignatureGenerate(
|
|
enum wc_HashType hash_type, enum wc_SignatureType sig_type,
|
|
const byte* data, word32 data_len,
|
|
byte* sig, word32 *sig_len,
|
|
const void* key, word32 key_len,
|
|
WC_RNG* rng);
|