ed25519.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  1. /*!
  2. \ingroup ED25519
  3. \brief この関数は秘密鍵からED25519公開鍵を生成します。公開鍵をバッファPubkeyに格納し、Pubkeyszでこのバッファに書き込まれたバイトを設定します。
  4. \return 0 公開鍵の作成に成功したときに返されます。
  5. \return BAD_FUNC_ARG IFIキーまたはPubKeyがNULLに評価された場合、または指定されたキーサイズが32バイトではない場合(ED25519に32バイトのキーがあります)。
  6. \return MEMORY_E 関数の実行中にメモリを割り当てるエラーがある場合に返されます。
  7. \param [in] キーを生成するED25519_Keyへのキーポインタ。
  8. \param [out] 公開鍵を保存するバッファへのポインタ。
  9. _Example_
  10. \code
  11. int ret;
  12. ed25519_key key;
  13. byte priv[] = { initialize with 32 byte private key };
  14. byte pub[32];
  15. word32 pubSz = sizeof(pub);
  16. wc_ed25519_init(&key);
  17. wc_ed25519_import_private_only(priv, sizeof(priv), &key);
  18. ret = wc_ed25519_make_public(&key, pub, &pubSz);
  19. if (ret != 0) {
  20. // error making public key
  21. }
  22. \endcode
  23. \sa wc_ed25519_init
  24. \sa wc_ed25519_import_private_only
  25. \sa wc_ed25519_make_key
  26. */
  27. int wc_ed25519_make_public(ed25519_key* key, unsigned char* pubKey,
  28. word32 pubKeySz);
  29. /*!
  30. \ingroup ED25519
  31. \brief この関数は新しいED25519キーを生成し、それをキーに格納します。
  32. \return 0 ED25519_KEYを正常に行うと返されます。
  33. \return BAD_FUNC_ARG RNGまたはKEYがNULLに評価された場合、または指定されたキーサイズが32バイトではない場合(ED25519に32バイトのキーがあります)。
  34. \return MEMORY_E 関数の実行中にメモリを割り当てるエラーがある場合に返されます。
  35. \param [in] RNGキーを生成する初期化されたRNGオブジェクトへのポインタ。
  36. \param [in] keysize keyの長さを生成します。ED25519の場合は常に32になります。
  37. _Example_
  38. \code
  39. int ret;
  40. WC_RNG rng;
  41. ed25519_key key;
  42. wc_InitRng(&rng);
  43. wc_ed25519_init(&key);
  44. wc_ed25519_make_key(&rng, 32, &key);
  45. if (ret != 0) {
  46. // error making key
  47. }
  48. \endcode
  49. \sa wc_ed25519_init
  50. */
  51. int wc_ed25519_make_key(WC_RNG* rng, int keysize, ed25519_key* key);
  52. /*!
  53. \ingroup ED25519
  54. \brief この関数は、ED25519_Keyオブジェクトを使用して認証を保証するメッセージに署名します。
  55. \return 0 メッセージの署名を正常に生成すると返されます。
  56. \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLに評価された場合、または出力バッファが小さすぎて生成された署名を保存する場合は返されます。
  57. \return MEMORY_E 関数の実行中にメモリを割り当てるエラーがある場合に返されます。
  58. \param [in] 署名するメッセージを含むバッファへのポインタ。
  59. \param [in] 署名するメッセージのインレル長。
  60. \param [out] 生成された署名を格納するためのバッファー。
  61. \param [in,out] 出力バッファの最大長の範囲内。メッセージ署名の生成に成功したときに、書き込まれたバイトを保存します。
  62. _Example_
  63. \code
  64. ed25519_key key;
  65. WC_RNG rng;
  66. int ret, sigSz;
  67. byte sig[64]; // will hold generated signature
  68. sigSz = sizeof(sig);
  69. byte message[] = { initialize with message };
  70. wc_InitRng(&rng); // initialize rng
  71. wc_ed25519_init(&key); // initialize key
  72. wc_ed25519_make_key(&rng, 32, &key); // make public/private key pair
  73. ret = wc_ed25519_sign_msg(message, sizeof(message), sig, &sigSz, &key);
  74. if (ret != 0) {
  75. // error generating message signature
  76. }
  77. \endcode
  78. \sa wc_ed25519ctx_sign_msg
  79. \sa wc_ed25519ph_sign_hash
  80. \sa wc_ed25519ph_sign_msg
  81. \sa wc_ed25519_verify_msg
  82. */
  83. int wc_ed25519_sign_msg(const byte* in, word32 inlen, byte* out,
  84. word32 *outlen, ed25519_key* key);
  85. /*!
  86. \ingroup ED25519
  87. \brief この関数は、ED25519_Keyオブジェクトを使用して認証を保証するメッセージに署名します。コンテキストは署名されたデータの一部です。
  88. \return 0 メッセージの署名を正常に生成すると返されます。
  89. \return BAD_FUNC_ARG 返された入力パラメータはNULLに評価されます。出力バッファが小さすぎて生成された署名を保存するには小さすぎます。
  90. \return MEMORY_E 関数の実行中にメモリを割り当てるエラーがある場合に返されます。
  91. \param [in] 署名するメッセージを含むバッファへのポインタ。
  92. \param [in] 署名するメッセージのインレル長。
  93. \param [out] 生成された署名を格納するためのバッファー。
  94. \param [in,out] 出力バッファの最大長の範囲内。メッセージ署名の生成に成功したときに、書き込まれたバイトを保存します。
  95. \param [in] 署名を生成するプライベートED25519_KEYへのキーポインタ。
  96. \param [in] メッセージが署名されているコンテキストを含むバッファへのコンテキストポインタ。
  97. _Example_
  98. \code
  99. ed25519_key key;
  100. WC_RNG rng;
  101. int ret, sigSz;
  102. byte sig[64]; // will hold generated signature
  103. sigSz = sizeof(sig);
  104. byte message[] = { initialize with message };
  105. byte context[] = { initialize with context of signing };
  106. wc_InitRng(&rng); // initialize rng
  107. wc_ed25519_init(&key); // initialize key
  108. wc_ed25519_make_key(&rng, 32, &key); // make public/private key pair
  109. ret = wc_ed25519ctx_sign_msg(message, sizeof(message), sig, &sigSz, &key,
  110. context, sizeof(context));
  111. if (ret != 0) {
  112. // error generating message signature
  113. }
  114. \endcode
  115. \sa wc_ed25519_sign_msg
  116. \sa wc_ed25519ph_sign_hash
  117. \sa wc_ed25519ph_sign_msg
  118. \sa wc_ed25519_verify_msg
  119. */
  120. int wc_ed25519ctx_sign_msg(const byte* in, word32 inlen, byte* out,
  121. word32 *outlen, ed25519_key* key,
  122. const byte* context, byte contextLen);
  123. /*!
  124. \ingroup ED25519
  125. \brief この関数は、ED25519_Keyオブジェクトを使用してメッセージダイジェストに署名して信頼性を保証します。コンテキストは署名されたデータの一部として含まれています。署名計算の前にメッセージは事前にハッシュされています。メッセージダイジェストを作成するために使用されるハッシュアルゴリズムはShake-256でなければなりません。
  126. \return 0 メッセージダイジェストの署名を正常に生成すると返されます。
  127. \return BAD_FUNC_ARG 返された入力パラメータはNULLに評価されます。出力バッファが小さすぎて生成された署名を保存するには小さすぎます。
  128. \return MEMORY_E 関数の実行中にメモリを割り当てるエラーがある場合に返されます。
  129. \param [in] サインへのメッセージのハッシュを含むバッファへのハッシュポインタ。
  130. \param [in] サインへのメッセージのハッシュのハッシュの長さ。
  131. \param [out] 生成された署名を格納するためのバッファー。
  132. \param [in,out] 出力バッファの最大長の範囲内。メッセージ署名の生成に成功したときに、書き込まれたバイトを保存します。
  133. \param [in] 署名を生成するプライベートED25519_KEYへのキーポインタ。
  134. \param [in] メッセージが署名されているコンテキストを含むバッファへのコンテキストポインタ。
  135. _Example_
  136. \code
  137. ed25519_key key;
  138. WC_RNG rng;
  139. int ret, sigSz;
  140. byte sig[64]; // will hold generated signature
  141. sigSz = sizeof(sig);
  142. byte hash[] = { initialize with SHA-512 hash of message };
  143. byte context[] = { initialize with context of signing };
  144. wc_InitRng(&rng); // initialize rng
  145. wc_ed25519_init(&key); // initialize key
  146. wc_ed25519_make_key(&rng, 32, &key); // make public/private key pair
  147. ret = wc_ed25519ph_sign_hash(hash, sizeof(hash), sig, &sigSz, &key,
  148. context, sizeof(context));
  149. if (ret != 0) {
  150. // error generating message signature
  151. }
  152. \endcode
  153. \sa wc_ed25519_sign_msg
  154. \sa wc_ed25519ctx_sign_msg
  155. \sa wc_ed25519ph_sign_msg
  156. \sa wc_ed25519_verify_msg
  157. */
  158. int wc_ed25519ph_sign_hash(const byte* hash, word32 hashLen, byte* out,
  159. word32 *outLen, ed25519_key* key,
  160. const byte* context, byte contextLen);
  161. /*!
  162. \ingroup ED25519
  163. \brief この関数は、ED25519_Keyオブジェクトを使用して認証を保証するメッセージに署名します。コンテキストは署名されたデータの一部として含まれています。署名計算の前にメッセージは事前にハッシュされています。
  164. \return 0 メッセージの署名を正常に生成すると返されます。
  165. \return BAD_FUNC_ARG 返された入力パラメータはNULLに評価されます。出力バッファが小さすぎて生成された署名を保存するには小さすぎます。
  166. \return MEMORY_E 関数の実行中にメモリを割り当てるエラーがある場合に返されます。
  167. \param [in] 署名するメッセージを含むバッファへのポインタ。
  168. \param [in] 署名するメッセージのインレル長。
  169. \param [out] 生成された署名を格納するためのバッファー。
  170. \param [in,out] 出力バッファの最大長の範囲内。メッセージ署名の生成に成功したときに、書き込まれたバイトを保存します。
  171. \param [in] 署名を生成するプライベートED25519_KEYへのキーポインタ。
  172. \param [in] メッセージが署名されているコンテキストを含むバッファへのコンテキストポインタ。
  173. _Example_
  174. \code
  175. ed25519_key key;
  176. WC_RNG rng;
  177. int ret, sigSz;
  178. byte sig[64]; // will hold generated signature
  179. sigSz = sizeof(sig);
  180. byte message[] = { initialize with message };
  181. byte context[] = { initialize with context of signing };
  182. wc_InitRng(&rng); // initialize rng
  183. wc_ed25519_init(&key); // initialize key
  184. wc_ed25519_make_key(&rng, 32, &key); // make public/private key pair
  185. ret = wc_ed25519ph_sign_msg(message, sizeof(message), sig, &sigSz, &key,
  186. context, sizeof(context));
  187. if (ret != 0) {
  188. // error generating message signature
  189. }
  190. \endcode
  191. \sa wc_ed25519_sign_msg
  192. \sa wc_ed25519ctx_sign_msg
  193. \sa wc_ed25519ph_sign_hash
  194. \sa wc_ed25519_verify_msg
  195. */
  196. int wc_ed25519ph_sign_msg(const byte* in, word32 inlen, byte* out,
  197. word32 *outlen, ed25519_key* key,
  198. const byte* context, byte contextLen);
  199. /*!
  200. \ingroup ED25519
  201. \brief この関数はメッセージのED25519署名を確認して信頼性を確保します。RESを介して答えを返し、有効な署名に対応する1、無効な署名に対応する0を返します。
  202. \return 0 署名検証と認証を正常に実行したときに返されます。
  203. \return BAD_FUNC_ARG いずれかの入力パラメータがNULLに評価された場合、またはSIGLENが署名の実際の長さと一致しない場合に返されます。
  204. \return SIG_VERIFY_E 検証が完了した場合は返されますが、生成された署名は提供された署名と一致しません。
  205. \param [in] 検証するシグネチャを含むバッファへのSIGポインタ。
  206. \param [in] 検証するシグネチャのシグレンの長さ。
  207. \param [in] メッセージを含むバッファへのMSGポインタを確認する。
  208. \param [in] 検証するメッセージのMSGlen長。
  209. \param [out] 検証の結果へのRESポインタ。1メッセージが正常に検証されたことを示します。
  210. _Example_
  211. \code
  212. ed25519_key key;
  213. int ret, verified = 0;
  214. byte sig[] { initialize with received signature };
  215. byte msg[] = { initialize with message };
  216. // initialize key with received public key
  217. ret = wc_ed25519_verify_msg(sig, sizeof(sig), msg, sizeof(msg), &verified,
  218. &key);
  219. if (ret < 0) {
  220. // error performing verification
  221. } else if (verified == 0)
  222. // the signature is invalid
  223. }
  224. \endcode
  225. \sa wc_ed25519ctx_verify_msg
  226. \sa wc_ed25519ph_verify_hash
  227. \sa wc_ed25519ph_verify_msg
  228. \sa wc_ed25519_sign_msg
  229. */
  230. int wc_ed25519_verify_msg(const byte* sig, word32 siglen, const byte* msg,
  231. word32 msgLen, int* ret, ed25519_key* key);
  232. /*!
  233. \ingroup ED25519
  234. \brief この関数はメッセージのED25519署名を確認して信頼性を確保します。文脈はデータ検証済みの一部として含まれています。RESを介して答えを返し、有効な署名に対応する1、無効な署名に対応する0を返します。
  235. \return 0 署名検証と認証を正常に実行したときに返されます。
  236. \return BAD_FUNC_ARG いずれかの入力パラメータがNULLに評価された場合、またはSIGLENが署名の実際の長さと一致しない場合に返されます。
  237. \return SIG_VERIFY_E 検証が完了した場合は返されますが、生成された署名は提供された署名と一致しません。
  238. \param [in] 検証するシグネチャを含むバッファへのSIGポインタ。
  239. \param [in] 検証するシグネチャのシグレンの長さ。
  240. \param [in] メッセージを含むバッファへのMSGポインタを確認する。
  241. \param [in] 検証するメッセージのMSGlen長。
  242. \param [out] 検証の結果へのRESポインタ。1メッセージが正常に検証されたことを示します。
  243. \param [in] 署名を検証するためのPublic ED25519キーへのキーポインタ。
  244. \param [in] メッセージが署名されたコンテキストを含むバッファへのコンテキストポインタ。
  245. _Example_
  246. \code
  247. ed25519_key key;
  248. int ret, verified = 0;
  249. byte sig[] { initialize with received signature };
  250. byte msg[] = { initialize with message };
  251. byte context[] = { initialize with context of signature };
  252. // initialize key with received public key
  253. ret = wc_ed25519ctx_verify_msg(sig, sizeof(sig), msg, sizeof(msg),
  254. &verified, &key, );
  255. if (ret < 0) {
  256. // error performing verification
  257. } else if (verified == 0)
  258. // the signature is invalid
  259. }
  260. \endcode
  261. \sa wc_ed25519_verify_msg
  262. \sa wc_ed25519ph_verify_hash
  263. \sa wc_ed25519ph_verify_msg
  264. \sa wc_ed25519_sign_msg
  265. */
  266. int wc_ed25519ctx_verify_msg(const byte* sig, word32 siglen, const byte* msg,
  267. word32 msgLen, int* ret, ed25519_key* key,
  268. const byte* context, byte contextLen);
  269. /*!
  270. \ingroup ED25519
  271. \brief この関数は、メッセージのダイジェストのED25519シグネチャを確認して、信頼性を確保します。文脈はデータ検証済みの一部として含まれています。ハッシュは、署名計算前のプリハッシュメッセージです。メッセージダイジェストを作成するために使用されるハッシュアルゴリズムはSHA-512でなければなりません。答えはRESを介して返され、有効な署名に対応する1、無効な署名に対応する0を返します。
  272. \return 0 署名検証と認証を正常に実行したときに返されます。
  273. \return BAD_FUNC_ARG いずれかの入力パラメータがNULLに評価された場合、またはSIGLENが署名の実際の長さと一致しない場合に返されます。
  274. \return SIG_VERIFY_E 検証が完了した場合は返されますが、生成された署名は提供された署名と一致しません。
  275. \param [in] 検証するシグネチャを含むバッファへのSIGポインタ。
  276. \param [in] 検証するシグネチャのシグレンの長さ。
  277. \param [in] 検証するメッセージのハッシュを含むバッファへのハッシュポインタ。
  278. \param [in] 検証するハッシュのハッシュレン長。
  279. \param [out] 検証の結果へのRESポインタ。1メッセージが正常に検証されたことを示します。
  280. \param [in] 署名を検証するためのPublic ED25519キーへのキーポインタ。
  281. \param [in] メッセージが署名されたコンテキストを含むバッファへのコンテキストポインタ。
  282. _Example_
  283. \code
  284. ed25519_key key;
  285. int ret, verified = 0;
  286. byte sig[] { initialize with received signature };
  287. byte hash[] = { initialize with SHA-512 hash of message };
  288. byte context[] = { initialize with context of signature };
  289. // initialize key with received public key
  290. ret = wc_ed25519ph_verify_hash(sig, sizeof(sig), msg, sizeof(msg),
  291. &verified, &key, );
  292. if (ret < 0) {
  293. // error performing verification
  294. } else if (verified == 0)
  295. // the signature is invalid
  296. }
  297. \endcode
  298. \sa wc_ed25519_verify_msg
  299. \sa wc_ed25519ctx_verify_msg
  300. \sa wc_ed25519ph_verify_msg
  301. \sa wc_ed25519_sign_msg
  302. */
  303. int wc_ed25519ph_verify_hash(const byte* sig, word32 siglen, const byte* hash,
  304. word32 hashLen, int* ret, ed25519_key* key,
  305. const byte* context, byte contextLen);
  306. /*!
  307. \ingroup ED25519
  308. \brief この関数はメッセージのED25519署名を確認して信頼性を確保します。文脈はデータ検証済みの一部として含まれています。検証前にメッセージがプリハッシュされています。RESを介して答えを返し、有効な署名に対応する1、無効な署名に対応する0を返します。
  309. \return 0 署名検証と認証を正常に実行したときに返されます。
  310. \return BAD_FUNC_ARG いずれかの入力パラメータがNULLに評価された場合、またはSIGLENが署名の実際の長さと一致しない場合に返されます。
  311. \return SIG_VERIFY_E 検証が完了した場合は返されますが、生成された署名は提供された署名と一致しません。
  312. \param [in] 検証するシグネチャを含むバッファへのSIGポインタ。
  313. \param [in] 検証するシグネチャのシグレンの長さ。
  314. \param [in] メッセージを含むバッファへのMSGポインタを確認する。
  315. \param [in] 検証するメッセージのMSGlen長。
  316. \param [out] 検証の結果へのRESポインタ。1メッセージが正常に検証されたことを示します。
  317. \param [in] 署名を検証するためのPublic ED25519キーへのキーポインタ。
  318. \param [in] メッセージが署名されたコンテキストを含むバッファへのコンテキストポインタ。
  319. _Example_
  320. \code
  321. ed25519_key key;
  322. int ret, verified = 0;
  323. byte sig[] { initialize with received signature };
  324. byte msg[] = { initialize with message };
  325. byte context[] = { initialize with context of signature };
  326. // initialize key with received public key
  327. ret = wc_ed25519ctx_verify_msg(sig, sizeof(sig), msg, sizeof(msg),
  328. &verified, &key, );
  329. if (ret < 0) {
  330. // error performing verification
  331. } else if (verified == 0)
  332. // the signature is invalid
  333. }
  334. \endcode
  335. \sa wc_ed25519_verify_msg
  336. \sa wc_ed25519ph_verify_hash
  337. \sa wc_ed25519ph_verify_msg
  338. \sa wc_ed25519_sign_msg
  339. */
  340. int wc_ed25519ph_verify_msg(const byte* sig, word32 siglen, const byte* msg,
  341. word32 msgLen, int* ret, ed25519_key* key,
  342. const byte* context, byte contextLen);
  343. /*!
  344. \ingroup ED25519
  345. \brief この関数は、メッセージ検証で将来の使用のためにED25519_Keyオブジェクトを初期化します。
  346. \return 0 ED25519_Keyオブジェクトの初期化に成功したときに返されます。
  347. \return BAD_FUNC_ARG キーがNULLの場合は返されます。
  348. _Example_
  349. \code
  350. ed25519_key key;
  351. wc_ed25519_init(&key);
  352. \endcode
  353. \sa wc_ed25519_make_key
  354. \sa wc_ed25519_free
  355. */
  356. int wc_ed25519_init(ed25519_key* key);
  357. /*!
  358. \ingroup ED25519
  359. \brief この関数は、使用された後にED25519オブジェクトを解放します。
  360. _Example_
  361. \code
  362. ed25519_key key;
  363. // initialize key and perform secure exchanges
  364. ...
  365. wc_ed25519_free(&key);
  366. \endcode
  367. \sa wc_ed25519_init
  368. */
  369. void wc_ed25519_free(ed25519_key* key);
  370. /*!
  371. \ingroup ED25519
  372. \brief この関数は、公開鍵を含むバッファからPublic ED25519_Keyペアをインポートします。この関数は圧縮キーと非圧縮キーの両方を処理します。
  373. \return 0 ED25519_KEYのインポートに成功しました。
  374. \return BAD_FUNC_ARG inまたはkeyがnullに評価された場合、またはInlenがED25519キーのサイズよりも小さい場合に返されます。
  375. \param [in] 公開鍵を含むバッファへのポインタ。
  376. \param [in] 公開鍵を含むバッファのインレル長。
  377. _Example_
  378. \code
  379. int ret;
  380. byte pub[] = { initialize Ed25519 public key };
  381. ed_25519 key;
  382. wc_ed25519_init_key(&key);
  383. ret = wc_ed25519_import_public(pub, sizeof(pub), &key);
  384. if (ret != 0) {
  385. // error importing key
  386. }
  387. \endcode
  388. \sa wc_ed25519_import_private_key
  389. \sa wc_ed25519_export_public
  390. */
  391. int wc_ed25519_import_public(const byte* in, word32 inLen, ed25519_key* key);
  392. /*!
  393. \ingroup ED25519
  394. \brief この関数は、ed25519秘密鍵をバッファからのみインポートします。
  395. \return 0 ED25519キーのインポートに成功しました。
  396. \return BAD_FUNC_ARG INまたはKEYがNULLに評価された場合、またはPRIVSZがED25519_KEY_SIZEよりも小さい場合に返されます。
  397. \param [in] 秘密鍵を含むバッファへのPRIVポインタ。
  398. \param [in] 秘密鍵のPrivsz長さ。
  399. \param [in] 公開鍵を含むバッファへのPubポインタ。
  400. \param [in] 公開鍵のPubszの長さ。
  401. _Example_
  402. \code
  403. int ret;
  404. byte priv[] = { initialize with 32 byte private key };
  405. ed25519_key key;
  406. wc_ed25519_init_key(&key);
  407. ret = wc_ed25519_import_private_key(priv, sizeof(priv), &key);
  408. if (ret != 0) {
  409. // error importing private key
  410. }
  411. \endcode
  412. \sa wc_ed25519_import_public
  413. \sa wc_ed25519_import_private_key
  414. \sa wc_ed25519_export_private_only
  415. */
  416. int wc_ed25519_import_private_only(const byte* priv, word32 privSz,
  417. ed25519_key* key);
  418. /*!
  419. \ingroup ED25519
  420. \brief この関数は、一対のバッファからパブリック/プライベートED25519キーペアをインポートします。この関数は圧縮キーと非圧縮キーの両方を処理します。
  421. \return 0 ED25519_KEYのインポートに成功しました。
  422. \return BAD_FUNC_ARG INまたはKEYがNULLに評価された場合、またはいずれかのPROVSZがED25519_SEY_SIZEまたはPUBSZよりも小さい場合は、ED25519_PUB_KEY_SIZEよりも小さい場合に返されます。
  423. \param [in] 秘密鍵を含むバッファへのPRIVポインタ。
  424. \param [in] 秘密鍵のPrivsz長さ。
  425. \param [in] 公開鍵を含むバッファへのPubポインタ。
  426. \param [in] 公開鍵のPubszの長さ。
  427. _Example_
  428. \code
  429. int ret;
  430. byte priv[] = { initialize with 32 byte private key };
  431. byte pub[] = { initialize with the corresponding public key };
  432. ed25519_key key;
  433. wc_ed25519_init_key(&key);
  434. ret = wc_ed25519_import_private_key(priv, sizeof(priv), pub, sizeof(pub),
  435. &key);
  436. if (ret != 0) {
  437. // error importing key
  438. }
  439. \endcode
  440. \sa wc_ed25519_import_public
  441. \sa wc_ed25519_import_private_only
  442. \sa wc_ed25519_export_private
  443. */
  444. int wc_ed25519_import_private_key(const byte* priv, word32 privSz,
  445. const byte* pub, word32 pubSz, ed25519_key* key);
  446. /*!
  447. \ingroup ED25519
  448. \brief この関数は、秘密鍵をED25519_Key構造体からエクスポートします。公開鍵をバッファアウトに格納し、ounterenでこのバッファに書き込まれたバイトを設定します。
  449. \return 0 公開鍵のエクスポートに成功したら返されます。
  450. \return BAD_FUNC_ARG いずれかの入力値がNULLに評価された場合に返されます。
  451. \return BUFFER_E 提供されたバッファーが秘密鍵を保存するのに十分な大きさでない場合に返されます。このエラーを返すと、outlenに必要なサイズを設定します。
  452. \param [in] 公開鍵をエクスポートするためのED25519_Key構造体へのキーポインタ。
  453. \param [out] 公開鍵を保存するバッファへのポインタ。
  454. _Example_
  455. \code
  456. int ret;
  457. ed25519_key key;
  458. // initialize key, make key
  459. char pub[32];
  460. word32 pubSz = sizeof(pub);
  461. ret = wc_ed25519_export_public(&key, pub, &pubSz);
  462. if (ret != 0) {
  463. // error exporting public key
  464. }
  465. \endcode
  466. \sa wc_ed25519_import_public
  467. \sa wc_ed25519_export_private_only
  468. */
  469. int wc_ed25519_export_public(ed25519_key* key, byte* out, word32* outLen);
  470. /*!
  471. \ingroup ED25519
  472. \brief この関数は、ED25519_Key構造体からの秘密鍵のみをエクスポートします。秘密鍵をバッファアウトに格納し、outlenにこのバッファに書き込まれたバイトを設定します。
  473. \return 0 秘密鍵のエクスポートに成功したら返されます。
  474. \return ECC_BAD_ARG_E いずれかの入力値がNULLに評価された場合に返されます。
  475. \return BUFFER_E 提供されたバッファーが秘密鍵を保存するのに十分な大きさでない場合に返されます。
  476. \param [in] 秘密鍵をエクスポートするためのED25519_Key構造体へのキーポインタ。
  477. \param [out] 秘密鍵を保存するバッファへのポインタ。
  478. _Example_
  479. \code
  480. int ret;
  481. ed25519_key key;
  482. // initialize key, make key
  483. char priv[32]; // 32 bytes because only private key
  484. word32 privSz = sizeof(priv);
  485. ret = wc_ed25519_export_private_only(&key, priv, &privSz);
  486. if (ret != 0) {
  487. // error exporting private key
  488. }
  489. \endcode
  490. \sa wc_ed25519_export_public
  491. \sa wc_ed25519_import_private_key
  492. */
  493. int wc_ed25519_export_private_only(ed25519_key* key, byte* out, word32* outLen);
  494. /*!
  495. \ingroup ED25519
  496. \brief この関数は、ED25519_Key構造体からキーペアをエクスポートします。キーペアをバッファOUTに格納し、ounterenでこのバッファに書き込まれたバイトを設定します。
  497. \return 0 キーペアのエクスポートに成功したら返されます。
  498. \return ECC_BAD_ARG_E いずれかの入力値がNULLに評価された場合に返されます。
  499. \return BUFFER_E 提供されているバッファーがキーペアを保存するのに十分な大きさでない場合に返されます。
  500. \param [in] キーペアをエクスポートするためのED25519_Key構造体へのキーポインタ。
  501. \param [out] キーペアを保存するバッファへのポインタ。
  502. _Example_
  503. \code
  504. ed25519_key key;
  505. wc_ed25519_init(&key);
  506. WC_RNG rng;
  507. wc_InitRng(&rng);
  508. wc_ed25519_make_key(&rng, 32, &key); // initialize 32 byte Ed25519 key
  509. byte out[64]; // out needs to be a sufficient buffer size
  510. word32 outLen = sizeof(out);
  511. int key_size = wc_ed25519_export_private(&key, out, &outLen);
  512. if (key_size == BUFFER_E) {
  513. // Check size of out compared to outLen to see if function reset outLen
  514. }
  515. \endcode
  516. \sa wc_ed25519_import_private_key
  517. \sa wc_ed25519_export_private_only
  518. */
  519. int wc_ed25519_export_private(ed25519_key* key, byte* out, word32* outLen);
  520. /*!
  521. \ingroup ED25519
  522. \brief この関数は、ED25519_KEY構造体とは別にプライベートキーと公開鍵をエクスポートします。秘密鍵をバッファーPrivに格納し、PRIVSZでこのバッファに書き込まれたバイトを設定します。公開鍵をバッファPUBに格納し、Pubszでこのバッファに書き込まれたバイトを設定します。
  523. \return 0 キーペアのエクスポートに成功したら返されます。
  524. \return ECC_BAD_ARG_E いずれかの入力値がNULLに評価された場合に返されます。
  525. \return BUFFER_E 提供されているバッファーがキーペアを保存するのに十分な大きさでない場合に返されます。
  526. \param [in] キーペアをエクスポートするためのED25519_Key構造体へのキーポインタ。
  527. \param [out] 秘密鍵を保存するバッファへのPRIVポインタ。
  528. \param [in,out] PRIVSZ PIVINSZポインタサイズが表示されているサイズを持つWord32オブジェクトへのポインタ。秘密鍵のエクスポート後に書き込まれたバイト数を設定します。
  529. \param [out] パブリックキーを保存するバッファへのPub。
  530. _Example_
  531. \code
  532. int ret;
  533. ed25519_key key;
  534. // initialize key, make key
  535. char pub[32];
  536. word32 pubSz = sizeof(pub);
  537. char priv[32];
  538. word32 privSz = sizeof(priv);
  539. ret = wc_ed25519_export_key(&key, priv, &pubSz, pub, &pubSz);
  540. if (ret != 0) {
  541. // error exporting public key
  542. }
  543. \endcode
  544. \sa wc_ed25519_export_private
  545. \sa wc_ed25519_export_public
  546. */
  547. int wc_ed25519_export_key(ed25519_key* key,
  548. byte* priv, word32 *privSz,
  549. byte* pub, word32 *pubSz);
  550. /*!
  551. \ingroup ED25519
  552. \brief この関数は、ED25519_KEY構造体の公開鍵をチェックします。
  553. \return 0 プライベートキーと公開鍵が一致した場合に返されます。
  554. \return BAD_FUNC_ARGS 与えられたキーがNULLの場合に返されます。
  555. _Example_
  556. \code
  557. int ret;
  558. byte priv[] = { initialize with 57 byte private key };
  559. byte pub[] = { initialize with the corresponding public key };
  560. ed25519_key key;
  561. wc_ed25519_init_key(&key);
  562. wc_ed25519_import_private_key(priv, sizeof(priv), pub, sizeof(pub), &key);
  563. ret = wc_ed25519_check_key(&key);
  564. if (ret != 0) {
  565. // error checking key
  566. }
  567. \endcode
  568. \sa wc_ed25519_import_private_key
  569. */
  570. int wc_ed25519_check_key(ed25519_key* key);
  571. /*!
  572. \ingroup ED25519
  573. \brief この関数は、ED25519 - 32バイトのサイズを返します。
  574. \return ED25519_KEY_SIZE 有効な秘密鍵のサイズ(32バイト)。
  575. \return BAD_FUNC_ARGS 与えられたキーがNULLの場合に返されます。
  576. _Example_
  577. \code
  578. int keySz;
  579. ed25519_key key;
  580. // initialize key, make key
  581. keySz = wc_ed25519_size(&key);
  582. if (keySz == 0) {
  583. // error determining key size
  584. }
  585. \endcode
  586. \sa wc_ed25519_make_key
  587. */
  588. int wc_ed25519_size(ed25519_key* key);
  589. /*!
  590. \ingroup ED25519
  591. \brief この関数は、秘密鍵サイズ(secret + public)をバイト単位で返します。
  592. \return ED25519_PRV_KEY_SIZE 秘密鍵のサイズ(64バイト)。
  593. \return BAD_FUNC_ARG key引数がnullの場合に返されます。
  594. _Example_
  595. \code
  596. ed25519_key key;
  597. wc_ed25519_init(&key);
  598. WC_RNG rng;
  599. wc_InitRng(&rng);
  600. wc_ed25519_make_key(&rng, 32, &key); // initialize 32 byte Ed25519 key
  601. int key_size = wc_ed25519_priv_size(&key);
  602. \endcode
  603. \sa wc_ed25519_pub_size
  604. */
  605. int wc_ed25519_priv_size(ed25519_key* key);
  606. /*!
  607. \ingroup ED25519
  608. \brief この関数は圧縮鍵サイズをバイト単位で返します(公開鍵)。
  609. \return ED25519_PUB_KEY_SIZE 圧縮公開鍵のサイズ(32バイト)。
  610. \return BAD_FUNC_ARG key引数がnullの場合は返します。
  611. _Example_
  612. \code
  613. ed25519_key key;
  614. wc_ed25519_init(&key);
  615. WC_RNG rng;
  616. wc_InitRng(&rng);
  617. wc_ed25519_make_key(&rng, 32, &key); // initialize 32 byte Ed25519 key
  618. int key_size = wc_ed25519_pub_size(&key);
  619. \endcode
  620. \sa wc_ed25519_priv_size
  621. */
  622. int wc_ed25519_pub_size(ed25519_key* key);
  623. /*!
  624. \ingroup ED25519
  625. \brief この関数は、ED25519シグネチャのサイズ(バイト数64)を返します。
  626. \return ED25519_SIG_SIZE ED25519シグネチャ(64バイト)のサイズ。
  627. \return BAD_FUNC_ARG key引数がnullの場合は返します。
  628. _Example_
  629. \code
  630. int sigSz;
  631. ed25519_key key;
  632. // initialize key, make key
  633. sigSz = wc_ed25519_sig_size(&key);
  634. if (sigSz == 0) {
  635. // error determining sig size
  636. }
  637. \endcode
  638. \sa wc_ed25519_sign_msg
  639. */
  640. int wc_ed25519_sig_size(ed25519_key* key);