Files
wolfssl/doc/dox_comments/header_files-ja/ed25519.h

720 lines
33 KiB
C
Raw Normal View History

/*!
\ingroup ED25519
\brief ED25519公開鍵を生成しますPubkeyに格納しPubkeyszでこのバッファに書き込まれたバイトを設定します
\return 0
\return BAD_FUNC_ARG IFIキーまたはPubKeyがNULLに評価された場合32ED25519に32バイトのキーがあります
\return MEMORY_E
\param [in] ED25519_Keyへのキーポインタ
\param [out]
_Example_
\code
int ret;
ed25519_key key;
byte priv[] = { initialize with 32 byte private key };
byte pub[32];
word32 pubSz = sizeof(pub);
wc_ed25519_init(&key);
wc_ed25519_import_private_only(priv, sizeof(priv), &key);
ret = wc_ed25519_make_public(&key, pub, &pubSz);
if (ret != 0) {
// error making public key
}
\endcode
\sa wc_ed25519_init
\sa wc_ed25519_import_private_only
\sa wc_ed25519_make_key
*/
int wc_ed25519_make_public(ed25519_key* key, unsigned char* pubKey,
word32 pubKeySz);
/*!
\ingroup ED25519
\brief ED25519キーを生成し
\return 0 ED25519_KEYを正常に行うと返されます
\return BAD_FUNC_ARG RNGまたはKEYがNULLに評価された場合32ED25519に32バイトのキーがあります
\return MEMORY_E
\param [in] RNGキーを生成する初期化されたRNGオブジェクトへのポインタ
\param [in] keysize keyの長さを生成しますED25519の場合は常に32になります
_Example_
\code
int ret;
WC_RNG rng;
ed25519_key key;
wc_InitRng(&rng);
wc_ed25519_init(&key);
wc_ed25519_make_key(&rng, 32, &key);
if (ret != 0) {
// error making key
}
\endcode
\sa wc_ed25519_init
*/
int wc_ed25519_make_key(WC_RNG* rng, int keysize, ed25519_key* key);
/*!
\ingroup ED25519
\brief ED25519_Keyオブジェクトを使用して認証を保証するメッセージに署名します
\return 0
\return BAD_FUNC_ARG NULLに評価された場合
\return MEMORY_E
\param [in]
\param [in]
\param [out]
\param [in,out]
_Example_
\code
ed25519_key key;
WC_RNG rng;
int ret, sigSz;
byte sig[64]; // will hold generated signature
sigSz = sizeof(sig);
byte message[] = { initialize with message };
wc_InitRng(&rng); // initialize rng
wc_ed25519_init(&key); // initialize key
wc_ed25519_make_key(&rng, 32, &key); // make public/private key pair
ret = wc_ed25519_sign_msg(message, sizeof(message), sig, &sigSz, &key);
if (ret != 0) {
// error generating message signature
}
\endcode
\sa wc_ed25519ctx_sign_msg
\sa wc_ed25519ph_sign_hash
\sa wc_ed25519ph_sign_msg
\sa wc_ed25519_verify_msg
*/
int wc_ed25519_sign_msg(const byte* in, word32 inlen, byte* out,
word32 *outlen, ed25519_key* key);
/*!
\ingroup ED25519
\brief ED25519_Keyオブジェクトを使用して認証を保証するメッセージに署名します
\return 0
\return BAD_FUNC_ARG NULLに評価されます
\return MEMORY_E
\param [in]
\param [in]
\param [out]
\param [in,out]
\param [in] ED25519_KEYへのキーポインタ
\param [in]
_Example_
\code
ed25519_key key;
WC_RNG rng;
int ret, sigSz;
byte sig[64]; // will hold generated signature
sigSz = sizeof(sig);
byte message[] = { initialize with message };
byte context[] = { initialize with context of signing };
wc_InitRng(&rng); // initialize rng
wc_ed25519_init(&key); // initialize key
wc_ed25519_make_key(&rng, 32, &key); // make public/private key pair
ret = wc_ed25519ctx_sign_msg(message, sizeof(message), sig, &sigSz, &key,
context, sizeof(context));
if (ret != 0) {
// error generating message signature
}
\endcode
\sa wc_ed25519_sign_msg
\sa wc_ed25519ph_sign_hash
\sa wc_ed25519ph_sign_msg
\sa wc_ed25519_verify_msg
*/
int wc_ed25519ctx_sign_msg(const byte* in, word32 inlen, byte* out,
word32 *outlen, ed25519_key* key,
const byte* context, byte contextLen);
/*!
\ingroup ED25519
\brief ED25519_Keyオブジェクトを使用してメッセージダイジェストに署名して信頼性を保証します使Shake-256
\return 0
\return BAD_FUNC_ARG NULLに評価されます
\return MEMORY_E
\param [in]
\param [in]
\param [out]
\param [in,out]
\param [in] ED25519_KEYへのキーポインタ
\param [in]
_Example_
\code
ed25519_key key;
WC_RNG rng;
int ret, sigSz;
byte sig[64]; // will hold generated signature
sigSz = sizeof(sig);
byte hash[] = { initialize with SHA-512 hash of message };
byte context[] = { initialize with context of signing };
wc_InitRng(&rng); // initialize rng
wc_ed25519_init(&key); // initialize key
wc_ed25519_make_key(&rng, 32, &key); // make public/private key pair
ret = wc_ed25519ph_sign_hash(hash, sizeof(hash), sig, &sigSz, &key,
context, sizeof(context));
if (ret != 0) {
// error generating message signature
}
\endcode
\sa wc_ed25519_sign_msg
\sa wc_ed25519ctx_sign_msg
\sa wc_ed25519ph_sign_msg
\sa wc_ed25519_verify_msg
*/
int wc_ed25519ph_sign_hash(const byte* hash, word32 hashLen, byte* out,
word32 *outLen, ed25519_key* key,
const byte* context, byte contextLen);
/*!
\ingroup ED25519
\brief ED25519_Keyオブジェクトを使用して認証を保証するメッセージに署名します
\return 0
\return BAD_FUNC_ARG NULLに評価されます
\return MEMORY_E
\param [in]
\param [in]
\param [out]
\param [in,out]
\param [in] ED25519_KEYへのキーポインタ
\param [in]
_Example_
\code
ed25519_key key;
WC_RNG rng;
int ret, sigSz;
byte sig[64]; // will hold generated signature
sigSz = sizeof(sig);
byte message[] = { initialize with message };
byte context[] = { initialize with context of signing };
wc_InitRng(&rng); // initialize rng
wc_ed25519_init(&key); // initialize key
wc_ed25519_make_key(&rng, 32, &key); // make public/private key pair
ret = wc_ed25519ph_sign_msg(message, sizeof(message), sig, &sigSz, &key,
context, sizeof(context));
if (ret != 0) {
// error generating message signature
}
\endcode
\sa wc_ed25519_sign_msg
\sa wc_ed25519ctx_sign_msg
\sa wc_ed25519ph_sign_hash
\sa wc_ed25519_verify_msg
*/
int wc_ed25519ph_sign_msg(const byte* in, word32 inlen, byte* out,
word32 *outlen, ed25519_key* key,
const byte* context, byte contextLen);
/*!
\ingroup ED25519
\brief ED25519署名を確認して信頼性を確保しますRESを介して答えを返し10
\return 0
\return BAD_FUNC_ARG NULLに評価された場合SIGLENが署名の実際の長さと一致しない場合に返されます
\return SIG_VERIFY_E
\param [in] SIGポインタ
\param [in]
\param [in] MSGポインタを確認する
\param [in] MSGlen長
\param [out] RESポインタ1
_Example_
\code
ed25519_key key;
int ret, verified = 0;
byte sig[] { initialize with received signature };
byte msg[] = { initialize with message };
// initialize key with received public key
ret = wc_ed25519_verify_msg(sig, sizeof(sig), msg, sizeof(msg), &verified,
&key);
if (ret < 0) {
// error performing verification
} else if (verified == 0)
// the signature is invalid
}
\endcode
\sa wc_ed25519ctx_verify_msg
\sa wc_ed25519ph_verify_hash
\sa wc_ed25519ph_verify_msg
\sa wc_ed25519_sign_msg
*/
int wc_ed25519_verify_msg(const byte* sig, word32 siglen, const byte* msg,
word32 msgLen, int* ret, ed25519_key* key);
/*!
\ingroup ED25519
\brief ED25519署名を確認して信頼性を確保しますRESを介して答えを返し10
\return 0
\return BAD_FUNC_ARG NULLに評価された場合SIGLENが署名の実際の長さと一致しない場合に返されます
\return SIG_VERIFY_E
\param [in] SIGポインタ
\param [in]
\param [in] MSGポインタを確認する
\param [in] MSGlen長
\param [out] RESポインタ1
\param [in] Public ED25519キーへのキーポインタ
\param [in]
_Example_
\code
ed25519_key key;
int ret, verified = 0;
byte sig[] { initialize with received signature };
byte msg[] = { initialize with message };
byte context[] = { initialize with context of signature };
// initialize key with received public key
ret = wc_ed25519ctx_verify_msg(sig, sizeof(sig), msg, sizeof(msg),
&verified, &key, );
if (ret < 0) {
// error performing verification
} else if (verified == 0)
// the signature is invalid
}
\endcode
\sa wc_ed25519_verify_msg
\sa wc_ed25519ph_verify_hash
\sa wc_ed25519ph_verify_msg
\sa wc_ed25519_sign_msg
*/
int wc_ed25519ctx_verify_msg(const byte* sig, word32 siglen, const byte* msg,
word32 msgLen, int* ret, ed25519_key* key,
const byte* context, byte contextLen);
/*!
\ingroup ED25519
\brief ED25519シグネチャを確認して使SHA-512RESを介して返され10
\return 0
\return BAD_FUNC_ARG NULLに評価された場合SIGLENが署名の実際の長さと一致しない場合に返されます
\return SIG_VERIFY_E
\param [in] SIGポインタ
\param [in]
\param [in]
\param [in]
\param [out] RESポインタ1
\param [in] Public ED25519キーへのキーポインタ
\param [in]
_Example_
\code
ed25519_key key;
int ret, verified = 0;
byte sig[] { initialize with received signature };
byte hash[] = { initialize with SHA-512 hash of message };
byte context[] = { initialize with context of signature };
// initialize key with received public key
ret = wc_ed25519ph_verify_hash(sig, sizeof(sig), msg, sizeof(msg),
&verified, &key, );
if (ret < 0) {
// error performing verification
} else if (verified == 0)
// the signature is invalid
}
\endcode
\sa wc_ed25519_verify_msg
\sa wc_ed25519ctx_verify_msg
\sa wc_ed25519ph_verify_msg
\sa wc_ed25519_sign_msg
*/
int wc_ed25519ph_verify_hash(const byte* sig, word32 siglen, const byte* hash,
word32 hashLen, int* ret, ed25519_key* key,
const byte* context, byte contextLen);
/*!
\ingroup ED25519
\brief ED25519署名を確認して信頼性を確保しますRESを介して答えを返し10
\return 0
\return BAD_FUNC_ARG NULLに評価された場合SIGLENが署名の実際の長さと一致しない場合に返されます
\return SIG_VERIFY_E
\param [in] SIGポインタ
\param [in]
\param [in] MSGポインタを確認する
\param [in] MSGlen長
\param [out] RESポインタ1
\param [in] Public ED25519キーへのキーポインタ
\param [in]
_Example_
\code
ed25519_key key;
int ret, verified = 0;
byte sig[] { initialize with received signature };
byte msg[] = { initialize with message };
byte context[] = { initialize with context of signature };
// initialize key with received public key
ret = wc_ed25519ctx_verify_msg(sig, sizeof(sig), msg, sizeof(msg),
&verified, &key, );
if (ret < 0) {
// error performing verification
} else if (verified == 0)
// the signature is invalid
}
\endcode
\sa wc_ed25519_verify_msg
\sa wc_ed25519ph_verify_hash
\sa wc_ed25519ph_verify_msg
\sa wc_ed25519_sign_msg
*/
int wc_ed25519ph_verify_msg(const byte* sig, word32 siglen, const byte* msg,
word32 msgLen, int* ret, ed25519_key* key,
const byte* context, byte contextLen);
/*!
\ingroup ED25519
\brief 使ED25519_Keyオブジェクトを初期化します
\return 0 ED25519_Keyオブジェクトの初期化に成功したときに返されます
\return BAD_FUNC_ARG NULLの場合は返されます
_Example_
\code
ed25519_key key;
wc_ed25519_init(&key);
\endcode
\sa wc_ed25519_make_key
\sa wc_ed25519_free
*/
int wc_ed25519_init(ed25519_key* key);
/*!
\ingroup ED25519
\brief 使ED25519オブジェクトを解放します
_Example_
\code
ed25519_key key;
// initialize key and perform secure exchanges
...
wc_ed25519_free(&key);
\endcode
\sa wc_ed25519_init
*/
void wc_ed25519_free(ed25519_key* key);
/*!
\ingroup ED25519
\brief Public ED25519_Keyペアをインポートします
\return 0 ED25519_KEYのインポートに成功しました
\return BAD_FUNC_ARG inまたはkeyがnullに評価された場合InlenがED25519キーのサイズよりも小さい場合に返されます
\param [in]
\param [in]
_Example_
\code
int ret;
byte pub[] = { initialize Ed25519 public key };
ed_25519 key;
wc_ed25519_init_key(&key);
ret = wc_ed25519_import_public(pub, sizeof(pub), &key);
if (ret != 0) {
// error importing key
}
\endcode
\sa wc_ed25519_import_private_key
\sa wc_ed25519_export_public
*/
int wc_ed25519_import_public(const byte* in, word32 inLen, ed25519_key* key);
/*!
\ingroup ED25519
\brief ed25519秘密鍵をバッファからのみインポートします
\return 0 ED25519キーのインポートに成功しました
\return BAD_FUNC_ARG INまたはKEYがNULLに評価された場合PRIVSZがED25519_KEY_SIZEよりも小さい場合に返されます
\param [in] PRIVポインタ
\param [in] Privsz長さ
\param [in] Pubポインタ
\param [in] Pubszの長さ
_Example_
\code
int ret;
byte priv[] = { initialize with 32 byte private key };
ed25519_key key;
wc_ed25519_init_key(&key);
ret = wc_ed25519_import_private_key(priv, sizeof(priv), &key);
if (ret != 0) {
// error importing private key
}
\endcode
\sa wc_ed25519_import_public
\sa wc_ed25519_import_private_key
\sa wc_ed25519_export_private_only
*/
int wc_ed25519_import_private_only(const byte* priv, word32 privSz,
ed25519_key* key);
/*!
\ingroup ED25519
\brief /ED25519キーペアをインポートします
\return 0 ED25519_KEYのインポートに成功しました
\return BAD_FUNC_ARG INまたはKEYがNULLに評価された場合PROVSZがED25519_SEY_SIZEまたはPUBSZよりも小さい場合はED25519_PUB_KEY_SIZEよりも小さい場合に返されます
\param [in] PRIVポインタ
\param [in] Privsz長さ
\param [in] Pubポインタ
\param [in] Pubszの長さ
_Example_
\code
int ret;
byte priv[] = { initialize with 32 byte private key };
byte pub[] = { initialize with the corresponding public key };
ed25519_key key;
wc_ed25519_init_key(&key);
ret = wc_ed25519_import_private_key(priv, sizeof(priv), pub, sizeof(pub),
&key);
if (ret != 0) {
// error importing key
}
\endcode
\sa wc_ed25519_import_public
\sa wc_ed25519_import_private_only
\sa wc_ed25519_export_private
*/
int wc_ed25519_import_private_key(const byte* priv, word32 privSz,
const byte* pub, word32 pubSz, ed25519_key* key);
/*!
\ingroup ED25519
\brief ED25519_Key構造体からエクスポートしますounterenでこのバッファに書き込まれたバイトを設定します
\return 0
\return BAD_FUNC_ARG NULLに評価された場合に返されます
\return BUFFER_E outlenに必要なサイズを設定します
\param [in] ED25519_Key構造体へのキーポインタ
\param [out]
_Example_
\code
int ret;
ed25519_key key;
// initialize key, make key
char pub[32];
word32 pubSz = sizeof(pub);
ret = wc_ed25519_export_public(&key, pub, &pubSz);
if (ret != 0) {
// error exporting public key
}
\endcode
\sa wc_ed25519_import_public
\sa wc_ed25519_export_private_only
*/
int wc_ed25519_export_public(ed25519_key* key, byte* out, word32* outLen);
/*!
\ingroup ED25519
\brief ED25519_Key構造体からの秘密鍵のみをエクスポートしますoutlenにこのバッファに書き込まれたバイトを設定します
\return 0
\return ECC_BAD_ARG_E NULLに評価された場合に返されます
\return BUFFER_E
\param [in] ED25519_Key構造体へのキーポインタ
\param [out]
_Example_
\code
int ret;
ed25519_key key;
// initialize key, make key
char priv[32]; // 32 bytes because only private key
word32 privSz = sizeof(priv);
ret = wc_ed25519_export_private_only(&key, priv, &privSz);
if (ret != 0) {
// error exporting private key
}
\endcode
\sa wc_ed25519_export_public
\sa wc_ed25519_import_private_key
*/
int wc_ed25519_export_private_only(ed25519_key* key, byte* out, word32* outLen);
/*!
\ingroup ED25519
\brief ED25519_Key構造体からキーペアをエクスポートしますOUTに格納しounterenでこのバッファに書き込まれたバイトを設定します
\return 0
\return ECC_BAD_ARG_E NULLに評価された場合に返されます
\return BUFFER_E
\param [in] ED25519_Key構造体へのキーポインタ
\param [out]
_Example_
\code
ed25519_key key;
wc_ed25519_init(&key);
WC_RNG rng;
wc_InitRng(&rng);
wc_ed25519_make_key(&rng, 32, &key); // initialize 32 byte Ed25519 key
byte out[64]; // out needs to be a sufficient buffer size
word32 outLen = sizeof(out);
int key_size = wc_ed25519_export_private(&key, out, &outLen);
if (key_size == BUFFER_E) {
// Check size of out compared to outLen to see if function reset outLen
}
\endcode
\sa wc_ed25519_import_private_key
\sa wc_ed25519_export_private_only
*/
int wc_ed25519_export_private(ed25519_key* key, byte* out, word32* outLen);
/*!
\ingroup ED25519
\brief ED25519_KEY構造体とは別にプライベートキーと公開鍵をエクスポートしますPrivに格納しPRIVSZでこのバッファに書き込まれたバイトを設定しますPUBに格納しPubszでこのバッファに書き込まれたバイトを設定します
\return 0
\return ECC_BAD_ARG_E NULLに評価された場合に返されます
\return BUFFER_E
\param [in] ED25519_Key構造体へのキーポインタ
\param [out] PRIVポインタ
\param [in,out] PRIVSZ PIVINSZポインタサイズが表示されているサイズを持つWord32オブジェクトへのポインタ
\param [out] Pub
_Example_
\code
int ret;
ed25519_key key;
// initialize key, make key
char pub[32];
word32 pubSz = sizeof(pub);
char priv[32];
word32 privSz = sizeof(priv);
ret = wc_ed25519_export_key(&key, priv, &pubSz, pub, &pubSz);
if (ret != 0) {
// error exporting public key
}
\endcode
\sa wc_ed25519_export_private
\sa wc_ed25519_export_public
*/
int wc_ed25519_export_key(ed25519_key* key,
byte* priv, word32 *privSz,
byte* pub, word32 *pubSz);
/*!
\ingroup ED25519
\brief ED25519_KEY構造体の公開鍵をチェックします
\return 0
\return BAD_FUNC_ARGS NULLの場合に返されます
_Example_
\code
int ret;
byte priv[] = { initialize with 57 byte private key };
byte pub[] = { initialize with the corresponding public key };
ed25519_key key;
wc_ed25519_init_key(&key);
wc_ed25519_import_private_key(priv, sizeof(priv), pub, sizeof(pub), &key);
ret = wc_ed25519_check_key(&key);
if (ret != 0) {
// error checking key
}
\endcode
\sa wc_ed25519_import_private_key
*/
int wc_ed25519_check_key(ed25519_key* key);
/*!
\ingroup ED25519
\brief ED25519 - 32
\return ED25519_KEY_SIZE 32
\return BAD_FUNC_ARGS NULLの場合に返されます
_Example_
\code
int keySz;
ed25519_key key;
// initialize key, make key
keySz = wc_ed25519_size(&key);
if (keySz == 0) {
// error determining key size
}
\endcode
\sa wc_ed25519_make_key
*/
int wc_ed25519_size(ed25519_key* key);
/*!
\ingroup ED25519
\brief secret + public
\return ED25519_PRV_KEY_SIZE 64
\return BAD_FUNC_ARG key引数がnullの場合に返されます
_Example_
\code
ed25519_key key;
wc_ed25519_init(&key);
WC_RNG rng;
wc_InitRng(&rng);
wc_ed25519_make_key(&rng, 32, &key); // initialize 32 byte Ed25519 key
int key_size = wc_ed25519_priv_size(&key);
\endcode
\sa wc_ed25519_pub_size
*/
int wc_ed25519_priv_size(ed25519_key* key);
/*!
\ingroup ED25519
\brief
\return ED25519_PUB_KEY_SIZE 32
\return BAD_FUNC_ARG key引数がnullの場合は返します
_Example_
\code
ed25519_key key;
wc_ed25519_init(&key);
WC_RNG rng;
wc_InitRng(&rng);
wc_ed25519_make_key(&rng, 32, &key); // initialize 32 byte Ed25519 key
int key_size = wc_ed25519_pub_size(&key);
\endcode
\sa wc_ed25519_priv_size
*/
int wc_ed25519_pub_size(ed25519_key* key);
/*!
\ingroup ED25519
\brief ED25519シグネチャのサイズ64
\return ED25519_SIG_SIZE ED25519シグネチャ64
\return BAD_FUNC_ARG key引数がnullの場合は返します
_Example_
\code
int sigSz;
ed25519_key key;
// initialize key, make key
sigSz = wc_ed25519_sig_size(&key);
if (sigSz == 0) {
// error determining sig size
}
\endcode
\sa wc_ed25519_sign_msg
*/
int wc_ed25519_sig_size(ed25519_key* key);