1
0

curve25519.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. /*!
  2. \ingroup Curve25519
  3. \brief この関数は、与えられたサイズ(Keysize)の指定された乱数発生器RNGを使用してCurve25519キーを生成し、それを指定されたCurve25519_Key構造体に格納します。キー構造がWC_CURVE25519_INIT()を介して初期化された後に呼び出されるべきです。
  4. \return 0 キーの生成に成功し、それを指定されたCurve25519_Key構造体に格納します。
  5. \return ECC_BAD_ARG_E 入力キーサイズがCurve25519キー(32バイト)のキーシェイズに対応していない場合は返されます。
  6. \return RNG_FAILURE_E RNGの内部ステータスがDRBG_OKでない場合、またはRNGを使用して次のランダムブロックを生成する場合に返されます。
  7. \return BAD_FUNC_ARG 渡された入力パラメータのいずれかがNULLの場合に返されます。
  8. \param [in] RNG ECCキーの生成に使用されるRNGオブジェクトへのポインタ。
  9. \param [in] キーサイズ生成キーのサイズ。Curve25519の32バイトでなければなりません。
  10. _Example_
  11. \code
  12. int ret;
  13. curve25519_key key;
  14. wc_curve25519_init(&key); // initialize key
  15. WC_RNG rng;
  16. wc_InitRng(&rng); // initialize random number generator
  17. ret = wc_curve25519_make_key(&rng, 32, &key);
  18. if (ret != 0) {
  19. // error making Curve25519 key
  20. }
  21. \endcode
  22. \sa wc_curve25519_init
  23. */
  24. int wc_curve25519_make_key(WC_RNG* rng, int keysize, curve25519_key* key);
  25. /*!
  26. \ingroup Curve25519
  27. \brief この関数は、秘密の秘密鍵と受信した公開鍵を考えると、共有秘密鍵を計算します。生成された秘密鍵をバッファアウトに保存し、ounlentの秘密鍵の変数を割り当てます。ビッグエンディアンのみをサポートします。
  28. \return 0 共有秘密鍵を正常に計算したときに返されました。
  29. \return BAD_FUNC_ARG 渡された入力パラメータのいずれかがNULLの場合に返されます。
  30. \return ECC_BAD_ARG_E 公開鍵の最初のビットが設定されている場合は、実装の指紋を避けるために返されます。
  31. \param [in] Private_Key Curve25519_Key構造体の秘密鍵で初期化されました。
  32. \param [in] public_key受信した公開鍵を含むCurve25519_Key構造体へのポインタ。
  33. \param [out] 32バイト計算された秘密鍵を格納するバッファへのポインタ。
  34. _Example_
  35. \code
  36. int ret;
  37. byte sharedKey[32];
  38. word32 keySz;
  39. curve25519_key privKey, pubKey;
  40. // initialize both keys
  41. ret = wc_curve25519_shared_secret(&privKey, &pubKey, sharedKey, &keySz);
  42. if (ret != 0) {
  43. // error generating shared key
  44. }
  45. \endcode
  46. \sa wc_curve25519_init
  47. \sa wc_curve25519_make_key
  48. \sa wc_curve25519_shared_secret_ex
  49. */
  50. int wc_curve25519_shared_secret(curve25519_key* private_key,
  51. curve25519_key* public_key,
  52. byte* out, word32* outlen);
  53. /*!
  54. \ingroup Curve25519
  55. \brief この関数は、秘密の秘密鍵と受信した公開鍵を考えると、共有秘密鍵を計算します。生成された秘密鍵をバッファアウトに保存し、ounlentの秘密鍵の変数を割り当てます。ビッグ・リトルエンディアンの両方をサポートします。
  56. \return 0 共有秘密鍵を正常に計算したときに返されました。
  57. \return BAD_FUNC_ARG 渡された入力パラメータのいずれかがNULLの場合に返されます。
  58. \return ECC_BAD_ARG_E 公開鍵の最初のビットが設定されている場合は、実装の指紋を避けるために返されます。
  59. \param [in] Private_Key Curve25519_Key構造体の秘密鍵で初期化されました。
  60. \param [in] public_key受信した公開鍵を含むCurve25519_Key構造体へのポインタ。
  61. \param [out] 32バイト計算された秘密鍵を格納するバッファへのポインタ。
  62. \param pin,out] 出力バッファに書き込まれた長さを記憶するポインタの概要。
  63. _Example_
  64. \code
  65. int ret;
  66. byte sharedKey[32];
  67. word32 keySz;
  68. curve25519_key privKey, pubKey;
  69. // initialize both keys
  70. ret = wc_curve25519_shared_secret_ex(&privKey, &pubKey, sharedKey, &keySz,
  71. EC25519_BIG_ENDIAN);
  72. if (ret != 0) {
  73. // error generating shared key
  74. }
  75. \endcode
  76. \sa wc_curve25519_init
  77. \sa wc_curve25519_make_key
  78. \sa wc_curve25519_shared_secret
  79. */
  80. int wc_curve25519_shared_secret_ex(curve25519_key* private_key,
  81. curve25519_key* public_key,
  82. byte* out, word32* outlen, int endian);
  83. /*!
  84. \ingroup Curve25519
  85. \brief この関数はCurve25519キーを初期化します。構造のキーを生成する前に呼び出されるべきです。
  86. \return 0 Curve25519_Key構造体の初期化に成功しました。
  87. \return BAD_FUNC_ARG キーがNULLのときに返されます。
  88. _Example_
  89. \code
  90. curve25519_key key;
  91. wc_curve25519_init(&key); // initialize key
  92. // make key and proceed to encryption
  93. \endcode
  94. \sa wc_curve25519_make_key
  95. */
  96. int wc_curve25519_init(curve25519_key* key);
  97. /*!
  98. \ingroup Curve25519
  99. \brief この関数はCurve25519オブジェクトを解放します。
  100. _Example_
  101. \code
  102. curve25519_key privKey;
  103. // initialize key, use it to generate shared secret key
  104. wc_curve25519_free(&privKey);
  105. \endcode
  106. \sa wc_curve25519_init
  107. \sa wc_curve25519_make_key
  108. */
  109. void wc_curve25519_free(curve25519_key* key);
  110. /*!
  111. \ingroup Curve25519
  112. \brief この関数はCurve25519秘密鍵のみをインポートします。(ビッグエンディアン)。
  113. \return 0 秘密鍵のインポートに成功しました。
  114. \return BAD_FUNC_ARG キーまたはPRIVがNULLの場合は返します。
  115. \return ECC_BAD_ARG_E PRIVSZがcurve25519_KEY_SIZEと等しくない場合は返します。
  116. \param [in] インポートする秘密鍵を含むバッファへのポイント。
  117. \param [in] インポートする秘密鍵のPrivsz長。
  118. _Example_
  119. \code
  120. int ret;
  121. byte priv[] = { Contents of private key };
  122. curve25519_key key;
  123. wc_curve25519_init(&key);
  124. ret = wc_curve25519_import_private(priv, sizeof(priv), &key);
  125. if (ret != 0) {
  126. // error importing keys
  127. }
  128. \endcode
  129. \sa wc_curve25519_import_private_ex
  130. \sa wc_curve25519_size
  131. */
  132. int wc_curve25519_import_private(const byte* priv, word32 privSz,
  133. curve25519_key* key);
  134. /*!
  135. \ingroup Curve25519
  136. \brief CURVE25519秘密鍵のインポートのみ。(大きなエンディアン)。
  137. \return 0 秘密鍵のインポートに成功しました。
  138. \return BAD_FUNC_ARG キーまたはPRIVがNULLの場合は返します。
  139. \return ECC_BAD_ARG_E PRIVSZがcurve25519_KEY_SIZEと等しくない場合は返します。
  140. \param [in] インポートする秘密鍵を含むバッファへのポイント。
  141. \param [in] インポートする秘密鍵のPrivsz長。
  142. \param [in,out] インポートされたキーを保存する構造へのキーポインタ。
  143. _Example_
  144. \code
  145. int ret;
  146. byte priv[] = { // Contents of private key };
  147. curve25519_key key;
  148. wc_curve25519_init(&key);
  149. ret = wc_curve25519_import_private_ex(priv, sizeof(priv), &key,
  150. EC25519_BIG_ENDIAN);
  151. if (ret != 0) {
  152. // error importing keys
  153. }
  154. \endcode
  155. \sa wc_curve25519_import_private
  156. \sa wc_curve25519_size
  157. */
  158. int wc_curve25519_import_private_ex(const byte* priv, word32 privSz,
  159. curve25519_key* key, int endian);
  160. /*!
  161. \ingroup Curve25519
  162. \brief この関数は、パブリック秘密鍵ペアをCurve25519_Key構造体にインポートします。ビッグエンディアンのみ。
  163. \return 0 Curve25519_Key構造体へのインポートに返されます
  164. \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返します。
  165. \return ECC_BAD_ARG_E 入力キーのキーサイズがPublicキーサイズまたは秘密鍵サイズと一致しない場合に返されます。
  166. \param [in] インポートする秘密鍵を含むバッファへのポイント。
  167. \param [in] インポートする秘密鍵のPrivsz長。
  168. \param [in] パブリックキーをインポートするバッファへのPub。
  169. \param [in] インポートする公開鍵のPubsz長さ。
  170. _Example_
  171. \code
  172. int ret;
  173. byte priv[32];
  174. byte pub[32];
  175. // initialize with public and private keys
  176. curve25519_key key;
  177. wc_curve25519_init(&key);
  178. // initialize key
  179. ret = wc_curve25519_import_private_raw(&priv, sizeof(priv), pub,
  180. sizeof(pub), &key);
  181. if (ret != 0) {
  182. // error importing keys
  183. }
  184. \endcode
  185. \sa wc_curve25519_init
  186. \sa wc_curve25519_make_key
  187. \sa wc_curve25519_import_public
  188. \sa wc_curve25519_export_private_raw
  189. */
  190. int wc_curve25519_import_private_raw(const byte* priv, word32 privSz,
  191. const byte* pub, word32 pubSz, curve25519_key* key);
  192. /*!
  193. \ingroup Curve25519
  194. \brief この関数は、パブリック秘密鍵ペアをCurve25519_Key構造体にインポートします。ビッグ・リトルエンディアンの両方をサポートします。
  195. \return 0 Curve25519_Key構造体へのインポートに返されます
  196. \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返します。
  197. \return ECC_BAD_ARG_E 戻されたIFまたは入力キーのキーサイズがパブリックキーサイズまたは秘密鍵サイズと一致しない場合
  198. \param [in] インポートする秘密鍵を含むバッファへのポイント。
  199. \param [in] インポートする秘密鍵のPrivsz長。
  200. \param [in] パブリックキーをインポートするバッファへのPub。
  201. \param [in] インポートする公開鍵のPubsz長さ。
  202. \param [in,out] インポートされたキーを保存する構造へのキーポインタ。
  203. _Example_
  204. \code
  205. int ret;
  206. byte priv[32];
  207. byte pub[32];
  208. // initialize with public and private keys
  209. curve25519_key key;
  210. wc_curve25519_init(&key);
  211. // initialize key
  212. ret = wc_curve25519_import_private_raw_ex(&priv, sizeof(priv), pub,
  213. sizeof(pub), &key, EC25519_BIG_ENDIAN);
  214. if (ret != 0) {
  215. // error importing keys
  216. }
  217. \endcode
  218. \sa wc_curve25519_init
  219. \sa wc_curve25519_make_key
  220. \sa wc_curve25519_import_public
  221. \sa wc_curve25519_export_private_raw
  222. \sa wc_curve25519_import_private_raw
  223. */
  224. int wc_curve25519_import_private_raw_ex(const byte* priv, word32 privSz,
  225. const byte* pub, word32 pubSz,
  226. curve25519_key* key, int endian);
  227. /*!
  228. \ingroup Curve25519
  229. \brief この関数はCurve25519_Key構造体から秘密鍵をエクスポートし、それを指定されたアウトバッファに格納します。また、エクスポートされたキーのサイズになるように概要を設定します。ビッグエンディアンのみ。
  230. \return 0 Curve25519_Key構造体から秘密鍵を正常にエクスポートしました。
  231. \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。
  232. \return ECC_BAD_ARG_E WC_CURVE25519_SIZE()がキーと等しくない場合に返されます。
  233. \param [in] キーをエクスポートする構造へのキーポインタ。
  234. \param [out] エクスポートされたキーを保存するバッファへのポインタ。
  235. _Example_
  236. \code
  237. int ret;
  238. byte priv[32];
  239. int privSz;
  240. curve25519_key key;
  241. // initialize and make key
  242. ret = wc_curve25519_export_private_raw(&key, priv, &privSz);
  243. if (ret != 0) {
  244. // error exporting key
  245. }
  246. \endcode
  247. \sa wc_curve25519_init
  248. \sa wc_curve25519_make_key
  249. \sa wc_curve25519_import_private_raw
  250. \sa wc_curve25519_export_private_raw_ex
  251. */
  252. int wc_curve25519_export_private_raw(curve25519_key* key, byte* out,
  253. word32* outLen);
  254. /*!
  255. \ingroup Curve25519
  256. \brief この関数はCurve25519_Key構造体から秘密鍵をエクスポートし、それを指定されたアウトバッファに格納します。また、エクスポートされたキーのサイズになるように概要を設定します。それがビッグ・リトルエンディアンかを指定できます。
  257. \return 0 Curve25519_Key構造体から秘密鍵を正常にエクスポートしました。
  258. \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。
  259. \return ECC_BAD_ARG_E WC_CURVE25519_SIZE()がキーと等しくない場合に返されます。
  260. \param [in] キーをエクスポートする構造へのキーポインタ。
  261. \param [out] エクスポートされたキーを保存するバッファへのポインタ。
  262. \param [in,out] INに照会は、バイト数のサイズです。ON OUTでは、出力バッファに書き込まれたバイトを保存します。
  263. _Example_
  264. \code
  265. int ret;
  266. byte priv[32];
  267. int privSz;
  268. curve25519_key key;
  269. // initialize and make key
  270. ret = wc_curve25519_export_private_raw_ex(&key, priv, &privSz,
  271. EC25519_BIG_ENDIAN);
  272. if (ret != 0) {
  273. // error exporting key
  274. }
  275. \endcode
  276. \sa wc_curve25519_init
  277. \sa wc_curve25519_make_key
  278. \sa wc_curve25519_import_private_raw
  279. \sa wc_curve25519_export_private_raw
  280. \sa wc_curve25519_size
  281. */
  282. int wc_curve25519_export_private_raw_ex(curve25519_key* key, byte* out,
  283. word32* outLen, int endian);
  284. /*!
  285. \ingroup Curve25519
  286. \brief この関数は、指定されたバッファから公開鍵をインポートし、それをCurve25519_Key構造体に格納します。
  287. \return 0 公開鍵をCurve25519_Key構造体に正常にインポートしました。
  288. \return ECC_BAD_ARG_E InLenパラメータがキー構造のキーサイズと一致しない場合に返されます。
  289. \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返されます。
  290. \param [in] インポートする公開鍵を含むバッファへのポインタ。
  291. \param [in] インポートする公開鍵のインレル長。
  292. _Example_
  293. \code
  294. int ret;
  295. byte pub[32];
  296. // initialize pub with public key
  297. curve25519_key key;
  298. // initialize key
  299. ret = wc_curve25519_import_public(pub,sizeof(pub), &key);
  300. if (ret != 0) {
  301. // error importing key
  302. }
  303. \endcode
  304. \sa wc_curve25519_init
  305. \sa wc_curve25519_export_public
  306. \sa wc_curve25519_import_private_raw
  307. \sa wc_curve25519_import_public_ex
  308. \sa wc_curve25519_check_public
  309. \sa wc_curve25519_size
  310. */
  311. int wc_curve25519_import_public(const byte* in, word32 inLen,
  312. curve25519_key* key);
  313. /*!
  314. \ingroup Curve25519
  315. \brief この関数は、指定されたバッファから公開鍵をインポートし、それをCurve25519_Key構造体に格納します。
  316. \return 0 公開鍵をCurve25519_Key構造体に正常にインポートしました。
  317. \return ECC_BAD_ARG_E InLenパラメータがキー構造のキーサイズと一致しない場合に返されます。
  318. \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返されます。
  319. \param [in] インポートする公開鍵を含むバッファへのポインタ。
  320. \param [in] インポートする公開鍵のインレル長。
  321. \param [in,out] キーを保存するカーブ25519キー構造へのキーポインタ。
  322. _Example_
  323. \code
  324. int ret;
  325. byte pub[32];
  326. // initialize pub with public key
  327. curve25519_key key;
  328. // initialize key
  329. ret = wc_curve25519_import_public_ex(pub, sizeof(pub), &key,
  330. EC25519_BIG_ENDIAN);
  331. if (ret != 0) {
  332. // error importing key
  333. }
  334. \endcode
  335. \sa wc_curve25519_init
  336. \sa wc_curve25519_export_public
  337. \sa wc_curve25519_import_private_raw
  338. \sa wc_curve25519_import_public
  339. \sa wc_curve25519_check_public
  340. \sa wc_curve25519_size
  341. */
  342. int wc_curve25519_import_public_ex(const byte* in, word32 inLen,
  343. curve25519_key* key, int endian);
  344. /*!
  345. \ingroup Curve25519
  346. \brief この関数は、公開鍵バッファが指定されたエンディアンに対して有効なCurve2519キー値を保持していることを確認します。
  347. \return 0 公開鍵の値が有効なときに返されます。
  348. \return ECC_BAD_ARG_E 公開鍵の値が無効な場合は返されます。
  349. \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返されます。
  350. \param [in] チェックするための公開鍵を含むバッファへのPubポインタ。
  351. \param [in] チェックするための公開鍵の長さを掲載します。
  352. _Example_
  353. \code
  354. int ret;
  355. byte pub[] = { Contents of public key };
  356. ret = wc_curve25519_check_public_ex(pub, sizeof(pub), EC25519_BIG_ENDIAN);
  357. if (ret != 0) {
  358. // error importing key
  359. }
  360. \endcode
  361. \sa wc_curve25519_init
  362. \sa wc_curve25519_import_public
  363. \sa wc_curve25519_import_public_ex
  364. \sa wc_curve25519_size
  365. */
  366. int wc_curve25519_check_public(const byte* pub, word32 pubSz, int endian);
  367. /*!
  368. \ingroup Curve25519
  369. \brief この関数は指定されたキー構造から公開鍵をエクスポートし、結果をアウトバッファに格納します。ビッグエンディアンのみ。
  370. \return 0 Curve25519_Key構造体から公開鍵を正常にエクスポートする上で返されます。
  371. \return ECC_BAD_ARG_E outlenがcurve25519_pub_key_sizeより小さい場合に返されます。
  372. \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返されます。
  373. \param [in] キーをエクスポートするCurve25519_Key構造体へのキーポインタ。
  374. \param [out] 公開鍵を保存するバッファへのポインタ。
  375. _Example_
  376. \code
  377. int ret;
  378. byte pub[32];
  379. int pubSz;
  380. curve25519_key key;
  381. // initialize and make key
  382. ret = wc_curve25519_export_public(&key, pub, &pubSz);
  383. if (ret != 0) {
  384. // error exporting key
  385. }
  386. \endcode
  387. \sa wc_curve25519_init
  388. \sa wc_curve25519_export_private_raw
  389. \sa wc_curve25519_import_public
  390. */
  391. int wc_curve25519_export_public(curve25519_key* key, byte* out, word32* outLen);
  392. /*!
  393. \ingroup Curve25519
  394. \brief この関数は指定されたキー構造から公開鍵をエクスポートし、結果をアウトバッファに格納します。ビッグ・リトルエンディアンの両方をサポートします。
  395. \return 0 Curve25519_Key構造体から公開鍵を正常にエクスポートする上で返されます。
  396. \return ECC_BAD_ARG_E outlenがcurve25519_pub_key_sizeより小さい場合に返されます。
  397. \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返されます。
  398. \param [in] キーをエクスポートするCurve25519_Key構造体へのキーポインタ。
  399. \param [out] 公開鍵を保存するバッファへのポインタ。
  400. \param [in,out] INに照会は、バイト数のサイズです。ON OUTでは、出力バッファに書き込まれたバイトを保存します。
  401. _Example_
  402. \code
  403. int ret;
  404. byte pub[32];
  405. int pubSz;
  406. curve25519_key key;
  407. // initialize and make key
  408. ret = wc_curve25519_export_public_ex(&key, pub, &pubSz, EC25519_BIG_ENDIAN);
  409. if (ret != 0) {
  410. // error exporting key
  411. }
  412. \endcode
  413. \sa wc_curve25519_init
  414. \sa wc_curve25519_export_private_raw
  415. \sa wc_curve25519_import_public
  416. */
  417. int wc_curve25519_export_public_ex(curve25519_key* key, byte* out,
  418. word32* outLen, int endian);
  419. /*!
  420. \ingroup Curve25519
  421. \brief Export Curve25519キーペア。ビッグエンディアンのみ。
  422. \return 0 Curve25519_Key構造体からキーペアのエクスポートに成功しました。
  423. \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。
  424. \return ECC_BAD_ARG_E PRIVSZがCURUV25519_SEY_SIZEまたはPUBSZよりも小さい場合は、PUBSZがCURUG25519_PUB_KEY_SIZEよりも小さい場合に返されます。
  425. \param [in] キーペアをエクスポートするCURUN448_KEY構造体へのキーポインタ。
  426. \param [out] 秘密鍵を保存するバッファへのPRIVポインタ。
  427. \param [in,out] PRIVSZ ON INは、PRIVバッファのサイズをバイト単位で)です。ON OUTは、PRIVバッファに書き込まれたバイトを保存します。
  428. \param [out] パブリックキーを保存するバッファへのPub。
  429. _Example_
  430. \code
  431. int ret;
  432. byte pub[32];
  433. byte priv[32];
  434. int pubSz;
  435. int privSz;
  436. curve25519_key key;
  437. // initialize and make key
  438. ret = wc_curve25519_export_key_raw(&key, priv, &privSz, pub, &pubSz);
  439. if (ret != 0) {
  440. // error exporting key
  441. }
  442. \endcode
  443. \sa wc_curve25519_export_key_raw_ex
  444. \sa wc_curve25519_export_private_raw
  445. */
  446. int wc_curve25519_export_key_raw(curve25519_key* key,
  447. byte* priv, word32 *privSz,
  448. byte* pub, word32 *pubSz);
  449. /*!
  450. \ingroup Curve25519
  451. \brief Export Curve25519キーペア。ビッグ・リトルエンディアン。
  452. \return 0 Curve25519_Key構造体からキーペアのエクスポートに成功しました。
  453. \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。
  454. \return ECC_BAD_ARG_E PRIVSZがCURUV25519_SEY_SIZEまたはPUBSZよりも小さい場合は、PUBSZがCURUG25519_PUB_KEY_SIZEよりも小さい場合に返されます。
  455. \param [in] キーペアをエクスポートするCURUN448_KEY構造体へのキーポインタ。
  456. \param [out] 秘密鍵を保存するバッファへのPRIVポインタ。
  457. \param [in,out] PRIVSZ ON INは、PRIVバッファのサイズをバイト単位で)です。ON OUTは、PRIVバッファに書き込まれたバイトを保存します。
  458. \param [out] パブリックキーを保存するバッファへのPub。
  459. \param [in,out] PUBSZ ON INは、パブバッファのサイズをバイト単位で)です。ON OUTでは、PUBバッファに書き込まれたバイトを保存します。
  460. _Example_
  461. \code
  462. int ret;
  463. byte pub[32];
  464. byte priv[32];
  465. int pubSz;
  466. int privSz;
  467. curve25519_key key;
  468. // initialize and make key
  469. ret = wc_curve25519_export_key_raw_ex(&key,priv, &privSz, pub, &pubSz,
  470. EC25519_BIG_ENDIAN);
  471. if (ret != 0) {
  472. // error exporting key
  473. }
  474. \endcode
  475. \sa wc_curve25519_export_key_raw
  476. \sa wc_curve25519_export_private_raw_ex
  477. \sa wc_curve25519_export_public_ex
  478. */
  479. int wc_curve25519_export_key_raw_ex(curve25519_key* key,
  480. byte* priv, word32 *privSz,
  481. byte* pub, word32 *pubSz,
  482. int endian);
  483. /*!
  484. \ingroup Curve25519
  485. \brief この関数は与えられたキー構造のキーサイズを返します。
  486. \return Success 有効な初期化されたCurve25519_Key構造体を考慮すると、キーのサイズを返します。
  487. \return 0 キーがNULLの場合は返されます
  488. _Example_
  489. \code
  490. int keySz;
  491. curve25519_key key;
  492. // initialize and make key
  493. keySz = wc_curve25519_size(&key);
  494. \endcode
  495. \sa wc_curve25519_init
  496. \sa wc_curve25519_make_key
  497. */
  498. int wc_curve25519_size(curve25519_key* key);