ed448.h 28 KB

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