dsa.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. /*!
  2. \ingroup DSA
  3. \brief この関数は、デジタル署名アルゴリズム(DSA)を介した認証に使用するためにDSAKEYオブジェクトを初期化します。
  4. \return 0 成功に戻りました。
  5. \return BAD_FUNC_ARG NULLキーが渡された場合に返されます。
  6. _Example_
  7. \code
  8. DsaKey key;
  9. int ret;
  10. ret = wc_InitDsaKey(&key); // initialize DSA key
  11. \endcode
  12. \sa wc_FreeDsaKey
  13. */
  14. int wc_InitDsaKey(DsaKey* key);
  15. /*!
  16. \ingroup DSA
  17. \brief この関数は、使用された後にdsakeyオブジェクトを解放します。
  18. \return none いいえ返します。
  19. _Example_
  20. \code
  21. DsaKey key;
  22. // initialize key, use for authentication
  23. ...
  24. wc_FreeDsaKey(&key); // free DSA key
  25. \endcode
  26. \sa wc_FreeDsaKey
  27. */
  28. void wc_FreeDsaKey(DsaKey* key);
  29. /*!
  30. \ingroup DSA
  31. \brief この機能は入力ダイジェストに署名し、結果を出力バッファーに格納します。
  32. \return 0 入力ダイジェストに正常に署名したときに返されました
  33. \return MP_INIT_E DSA署名の処理にエラーがある場合は返される可能性があります。
  34. \return MP_READ_E DSA署名の処理にエラーがある場合は返される可能性があります。
  35. \return MP_CMP_E DSA署名の処理にエラーがある場合は返される可能性があります。
  36. \return MP_INVMOD_E DSA署名の処理にエラーがある場合は返される可能性があります。
  37. \return MP_EXPTMOD_E DSA署名の処理にエラーがある場合は返される可能性があります。
  38. \return MP_MOD_E DSA署名の処理にエラーがある場合は返される可能性があります。
  39. \return MP_MUL_E DSA署名の処理にエラーがある場合は返される可能性があります。
  40. \return MP_ADD_E DSA署名の処理にエラーがある場合は返される可能性があります。
  41. \return MP_MULMOD_E DSA署名の処理にエラーがある場合は返される可能性があります。
  42. \return MP_TO_E DSA署名の処理にエラーがある場合は返される可能性があります。
  43. \return MP_MEM DSA署名の処理にエラーがある場合は返される可能性があります。
  44. \param digest 署名するハッシュへのポインタ
  45. \param out 署名を保存するバッファへのポインタ
  46. \param key 署名を生成するための初期化されたDsakey構造へのポインタ
  47. _Example_
  48. \code
  49. DsaKey key;
  50. // initialize DSA key, load private Key
  51. int ret;
  52. WC_RNG rng;
  53. wc_InitRng(&rng);
  54. byte hash[] = { // initialize with hash digest };
  55. byte signature[40]; // signature will be 40 bytes (320 bits)
  56. ret = wc_DsaSign(hash, signature, &key, &rng);
  57. if (ret != 0) {
  58. // error generating DSA signature
  59. }
  60. \endcode
  61. \sa wc_DsaVerify
  62. */
  63. int wc_DsaSign(const byte* digest, byte* out,
  64. DsaKey* key, WC_RNG* rng);
  65. /*!
  66. \ingroup DSA
  67. \brief この関数は、秘密鍵を考えると、ダイジェストの署名を検証します。回答パラメータでキーが正しく検証されているかどうか、正常な検証に対応する1、および失敗した検証に対応する0が格納されます。
  68. \return 0 検証要求の処理に成功したときに返されます。注:これは、署名が検証されていることを意味するわけではなく、関数が成功したというだけです。
  69. \return MP_INIT_E DSA署名の処理にエラーがある場合は返される可能性があります。
  70. \return MP_READ_E DSA署名の処理にエラーがある場合は返される可能性があります。
  71. \return MP_CMP_E DSA署名の処理にエラーがある場合は返される可能性があります。
  72. \return MP_INVMOD_E DSA署名の処理にエラーがある場合は返される可能性があります。
  73. \return MP_EXPTMOD_E DSA署名の処理にエラーがある場合は返される可能性があります。
  74. \return MP_MOD_E DSA署名の処理にエラーがある場合は返される可能性があります。
  75. \return MP_MUL_E DSA署名の処理にエラーがある場合は返される可能性があります。
  76. \return MP_ADD_E DSA署名の処理にエラーがある場合は返される可能性があります。
  77. \return MP_MULMOD_E DSA署名の処理にエラーがある場合は返される可能性があります。
  78. \return MP_TO_E DSA署名の処理にエラーがある場合は返される可能性があります。
  79. \return MP_MEM DSA署名の処理にエラーがある場合は返される可能性があります。
  80. \param digest 署名の主題を含むダイジェストへのポインタ
  81. \param sig 確認する署名を含むバッファへのポインタ
  82. \param key 署名を検証するための初期化されたDsakey構造へのポインタ
  83. _Example_
  84. \code
  85. DsaKey key;
  86. // initialize DSA key, load public Key
  87. int ret;
  88. int verified;
  89. byte hash[] = { // initialize with hash digest };
  90. byte signature[] = { // initialize with signature to verify };
  91. ret = wc_DsaVerify(hash, signature, &key, &verified);
  92. if (ret != 0) {
  93. // error processing verify request
  94. } else if (answer == 0) {
  95. // invalid signature
  96. }
  97. \endcode
  98. \sa wc_DsaSign
  99. */
  100. int wc_DsaVerify(const byte* digest, const byte* sig,
  101. DsaKey* key, int* answer);
  102. /*!
  103. \ingroup DSA
  104. \brief この機能は、DSA公開鍵を含むDERフォーマットの証明書バッファを復号し、与えられたDSakey構造体にキーを格納します。また、入力読み取りの長さに応じてINOUTIDXパラメータを設定します。
  105. \return 0 dsakeyオブジェクトの公開鍵を正常に設定する
  106. \return ASN_PARSE_E 証明書バッファを読みながらエンコーディングにエラーがある場合
  107. \return ASN_DH_KEY_E DSAパラメータの1つが誤ってフォーマットされている場合に返されます
  108. \param input DERフォーマットDSA公開鍵を含むバッファへのポインタ
  109. \param inOutIdx 証明書の最後のインデックスを保存する整数へのポインタ
  110. \param key 公開鍵を保存するDsakey構造へのポインタ
  111. _Example_
  112. \code
  113. int ret, idx=0;
  114. DsaKey key;
  115. wc_InitDsaKey(&key);
  116. byte derBuff[] = { // DSA public key};
  117. ret = wc_DsaPublicKeyDecode(derBuff, &idx, &key, inSz);
  118. if (ret != 0) {
  119. // error reading public key
  120. }
  121. \endcode
  122. \sa wc_InitDsaKey
  123. \sa wc_DsaPrivateKeyDecode
  124. */
  125. int wc_DsaPublicKeyDecode(const byte* input, word32* inOutIdx,
  126. DsaKey* key, word32 inSz);
  127. /*!
  128. \ingroup DSA
  129. \brief この機能は、DSA秘密鍵を含むDERフォーマットの証明書バッファをデコードし、指定されたDSakey構造体にキーを格納します。また、入力読み取りの長さに応じてINOUTIDXパラメータを設定します。
  130. \return 0 dsakeyオブジェクトの秘密鍵を正常に設定するに返されました
  131. \return ASN_PARSE_E 証明書バッファを読みながらエンコーディングにエラーがある場合
  132. \return ASN_DH_KEY_E DSAパラメータの1つが誤ってフォーマットされている場合に返されます
  133. \param input DERフォーマットDSA秘密鍵を含むバッファへのポインタ
  134. \param inOutIdx 証明書の最後のインデックスを保存する整数へのポインタ
  135. \param key 秘密鍵を保存するDSakey構造へのポインタ
  136. _Example_
  137. \code
  138. int ret, idx=0;
  139. DsaKey key;
  140. wc_InitDsaKey(&key);
  141. byte derBuff[] = { // DSA private key };
  142. ret = wc_DsaPrivateKeyDecode(derBuff, &idx, &key, inSz);
  143. if (ret != 0) {
  144. // error reading private key
  145. }
  146. \endcode
  147. \sa wc_InitDsaKey
  148. \sa wc_DsaPublicKeyDecode
  149. */
  150. int wc_DsaPrivateKeyDecode(const byte* input, word32* inOutIdx,
  151. DsaKey* key, word32 inSz);
  152. /*!
  153. \ingroup DSA
  154. \brief DSAKEYキーをDERフォーマット、出力への書き込み(Inlen)、書き込まれたバイトを返します。
  155. \return outLen 成功、書かれたバイト数
  156. \return BAD_FUNC_ARG キーまたは出力はNULLまたはキー - >タイプがDSA_PRIVATEではありません。
  157. \return MEMORY_E メモリの割り当て中にエラーが発生しました。
  158. \param key 変換するdsakey構造へのポインタ。
  159. \param output 変換キーの出力バッファへのポインタ。
  160. _Example_
  161. \code
  162. DsaKey key;
  163. WC_WC_RNG rng;
  164. int derSz;
  165. int bufferSize = // Sufficient buffer size;
  166. byte der[bufferSize];
  167. wc_InitDsaKey(&key);
  168. wc_InitRng(&rng);
  169. wc_MakeDsaKey(&rng, &key);
  170. derSz = wc_DsaKeyToDer(&key, der, bufferSize);
  171. \endcode
  172. \sa wc_InitDsaKey
  173. \sa wc_FreeDsaKey
  174. \sa wc_MakeDsaKey
  175. */
  176. int wc_DsaKeyToDer(DsaKey* key, byte* output, word32 inLen);
  177. /*!
  178. \ingroup DSA
  179. \brief DSAキーを作成します。
  180. \return MP_OKAY 成功
  181. \return BAD_FUNC_ARG RNGまたはDSAのどちらかがnullです。
  182. \return MEMORY_E バッファにメモリを割り当てることができませんでした。
  183. \return MP_INIT_E MP_INTの初期化エラー
  184. \param rng WC_RNG構造体へのポインタ。
  185. _Example_
  186. \code
  187. WC_WC_RNG rng;
  188. DsaKey dsa;
  189. wc_InitRng(&rng);
  190. wc_InitDsa(&dsa);
  191. if(wc_MakeDsaKey(&rng, &dsa) != 0)
  192. {
  193. // Error creating key
  194. }
  195. \endcode
  196. \sa wc_InitDsaKey
  197. \sa wc_FreeDsaKey
  198. \sa wc_DsaSign
  199. */
  200. int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa);
  201. /*!
  202. \ingroup DSA
  203. \brief FIPS 186-4は、modulus_size値の有効な値を定義します(1024,160)(2048,256)(3072,256)
  204. \return 0 成功
  205. \return BAD_FUNC_ARG RNGまたはDSAはNULLまたはMODULUS_SIZEが無効です。
  206. \return MEMORY_E メモリを割り当てようとするエラーが発生しました。
  207. \param rng WolfCrypt RNGへのポインタ。
  208. \param modulus_size 1024,2048、または3072は有効な値です。
  209. _Example_
  210. \code
  211. DsaKey key;
  212. WC_WC_RNG rng;
  213. wc_InitDsaKey(&key);
  214. wc_InitRng(&rng);
  215. if(wc_MakeDsaParameters(&rng, 1024, &genKey) != 0)
  216. {
  217. // Handle error
  218. }
  219. \endcode
  220. \sa wc_MakeDsaKey
  221. \sa wc_DsaKeyToDer
  222. \sa wc_InitDsaKey
  223. */
  224. int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa);