signature.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /*!
  2. \ingroup Signature
  3. \brief この関数は、結果のシグネチャの最大サイズを返します。
  4. \return Returns sig_type_e sig_typeがサポートされていない場合sig_typeが無効な場合はbad_func_argを返します。正の戻り値は、署名の最大サイズを示します。
  5. \param sig_type wc_signature_type_eccまたはwc_signature_type_rsaなどの署名型列挙型値。
  6. \param key ECC_KEYやRSAKEYなどのキー構造へのポインタ。
  7. _Example_
  8. \code
  9. // Get signature length
  10. enum wc_SignatureType sig_type = WC_SIGNATURE_TYPE_ECC;
  11. ecc_key eccKey;
  12. word32 sigLen;
  13. wc_ecc_init(&eccKey);
  14. sigLen = wc_SignatureGetSize(sig_type, &eccKey, sizeof(eccKey));
  15. if (sigLen > 0) {
  16. // Success
  17. }
  18. \endcode
  19. \sa wc_HashGetDigestSize
  20. \sa wc_SignatureGenerate
  21. \sa wc_SignatureVerify
  22. */
  23. int wc_SignatureGetSize(enum wc_SignatureType sig_type,
  24. const void* key, word32 key_len);
  25. /*!
  26. \ingroup Signature
  27. \brief この関数は、データをハッシュし、結果のハッシュとキーを使用して署名を使用して署名を使用して署名を検証します。
  28. \return 0 成功
  29. \return SIG_TYPE_E -231、署名タイプが有効/利用可能です
  30. \return BAD_FUNC_ARG -173、関数の不良引数が提供されています
  31. \return BUFFER_E -132、出力バッファが小さすぎたり入力が大きすぎたりします。
  32. \param hash_type "wc_hash_type_sha256"などの "enum wc_hashtype"からのハッシュ型。
  33. \param sig_type wc_signature_type_eccまたはwc_signature_type_rsaなどの署名型列挙型値。
  34. \param data ハッシュへのデータを含むバッファへのポインタ。
  35. \param data_len データバッファの長さ。
  36. \param sig 署名を出力するためのバッファへのポインタ。
  37. \param sig_len シグネチャ出力バッファの長さ。
  38. \param key ECC_KEYやRSAKEYなどのキー構造へのポインタ。
  39. _Example_
  40. \code
  41. int ret;
  42. ecc_key eccKey;
  43. // Import the public key
  44. wc_ecc_init(&eccKey);
  45. ret = wc_ecc_import_x963(eccPubKeyBuf, eccPubKeyLen, &eccKey);
  46. // Perform signature verification using public key
  47. ret = wc_SignatureVerify(
  48. WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_ECC,
  49. fileBuf, fileLen,
  50. sigBuf, sigLen,
  51. &eccKey, sizeof(eccKey));
  52. printf("Signature Verification: %s
  53. (%d)\n", (ret == 0) ? "Pass" : "Fail", ret);
  54. wc_ecc_free(&eccKey);
  55. \endcode
  56. \sa wc_SignatureGetSize
  57. \sa wc_SignatureGenerate
  58. */
  59. int wc_SignatureVerify(
  60. enum wc_HashType hash_type, enum wc_SignatureType sig_type,
  61. const byte* data, word32 data_len,
  62. const byte* sig, word32 sig_len,
  63. const void* key, word32 key_len);
  64. /*!
  65. \ingroup Signature
  66. \brief この関数は、キーを使用してデータから署名を生成します。まずデータのハッシュを作成し、キーを使用してハッシュに署名します。
  67. \return 0 成功
  68. \return SIG_TYPE_E -231、署名タイプが有効/利用可能です
  69. \return BAD_FUNC_ARG -173、関数の不良引数が提供されています
  70. \return BUFFER_E -132、出力バッファが小さすぎたり入力が大きすぎたりします。
  71. \param hash_type "wc_hash_type_sha256"などの "enum wc_hashtype"からのハッシュ型。
  72. \param sig_type wc_signature_type_eccまたはwc_signature_type_rsaなどの署名型列挙型値。
  73. \param data ハッシュへのデータを含むバッファへのポインタ。
  74. \param data_len データバッファの長さ。
  75. \param sig 署名を出力するためのバッファへのポインタ。
  76. \param sig_len シグネチャ出力バッファの長さ。
  77. \param key ECC_KEYやRSAKEYなどのキー構造へのポインタ。
  78. \param key_len キー構造のサイズ
  79. _Example_
  80. \code
  81. int ret;
  82. WC_RNG rng;
  83. ecc_key eccKey;
  84. wc_InitRng(&rng);
  85. wc_ecc_init(&eccKey);
  86. // Generate key
  87. ret = wc_ecc_make_key(&rng, 32, &eccKey);
  88. // Get signature length and allocate buffer
  89. sigLen = wc_SignatureGetSize(sig_type, &eccKey, sizeof(eccKey));
  90. sigBuf = malloc(sigLen);
  91. // Perform signature verification using public key
  92. ret = wc_SignatureGenerate(
  93. WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_ECC,
  94. fileBuf, fileLen,
  95. sigBuf, &sigLen,
  96. &eccKey, sizeof(eccKey),
  97. &rng);
  98. printf("Signature Generation: %s
  99. (%d)\n", (ret == 0) ? "Pass" : "Fail", ret);
  100. free(sigBuf);
  101. wc_ecc_free(&eccKey);
  102. wc_FreeRng(&rng);
  103. \endcode
  104. \sa wc_SignatureGetSize
  105. \sa wc_SignatureVerify
  106. */
  107. int wc_SignatureGenerate(
  108. enum wc_HashType hash_type, enum wc_SignatureType sig_type,
  109. const byte* data, word32 data_len,
  110. byte* sig, word32 *sig_len,
  111. const void* key, word32 key_len,
  112. WC_RNG* rng);