123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /*!
- \ingroup Signature
-
- \brief This function returns the maximum size of the resulting signature.
-
- \return Returns SIG_TYPE_E if sig_type is not supported. Returns
- BAD_FUNC_ARG if sig_type was invalid. A positive return value indicates
- the maximum size of a signature.
-
- \param sig_type A signature type enum value such as
- WC_SIGNATURE_TYPE_ECC or WC_SIGNATURE_TYPE_RSA.
- \param key Pointer to a key structure such as ecc_key or RsaKey.
- \param key_len Size of the key structure.
-
- _Example_
- \code
- // Get signature length
- enum wc_SignatureType sig_type = WC_SIGNATURE_TYPE_ECC;
- ecc_key eccKey;
- word32 sigLen;
- wc_ecc_init(&eccKey);
- sigLen = wc_SignatureGetSize(sig_type, &eccKey, sizeof(eccKey));
- if (sigLen > 0) {
- // Success
- }
- \endcode
-
- \sa wc_HashGetDigestSize
- \sa wc_SignatureGenerate
- \sa wc_SignatureVerify
- */
- WOLFSSL_API int wc_SignatureGetSize(enum wc_SignatureType sig_type,
- const void* key, word32 key_len);
- /*!
- \ingroup Signature
-
- \brief This function validates a signature by hashing the data and
- using the resulting hash and key to verify the signature.
-
- \return 0 Success
- \return SIG_TYPE_E -231, signature type not enabled/ available
- \return BAD_FUNC_ARG -173, bad function argument provided
- \return BUFFER_E -132, output buffer too small or input too large.
-
- \param hash_type A hash type from the “enum wc_HashType” such as
- “WC_HASH_TYPE_SHA256”.
- \param sig_type A signature type enum value such as
- WC_SIGNATURE_TYPE_ECC or WC_SIGNATURE_TYPE_RSA.
- \param data Pointer to buffer containing the data to hash.
- \param data_len Length of the data buffer.
- \param sig Pointer to buffer to output signature.
- \param sig_len Length of the signature output buffer.
- \param key Pointer to a key structure such as ecc_key or RsaKey.
- \param key_len Size of the key structure.
-
- _Example_
- \code
- int ret;
- ecc_key eccKey;
- // Import the public key
- wc_ecc_init(&eccKey);
- ret = wc_ecc_import_x963(eccPubKeyBuf, eccPubKeyLen, &eccKey);
- // Perform signature verification using public key
- ret = wc_SignatureVerify(
- WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_ECC,
- fileBuf, fileLen,
- sigBuf, sigLen,
- &eccKey, sizeof(eccKey));
- printf("Signature Verification: %s
- (%d)\n", (ret == 0) ? "Pass" : "Fail", ret);
- wc_ecc_free(&eccKey);
- \endcode
-
- \sa wc_SignatureGetSize
- \sa wc_SignatureGenerate
- */
- WOLFSSL_API int wc_SignatureVerify(
- enum wc_HashType hash_type, enum wc_SignatureType sig_type,
- const byte* data, word32 data_len,
- const byte* sig, word32 sig_len,
- const void* key, word32 key_len);
- /*!
- \ingroup Signature
-
- \brief This function generates a signature from the data using a
- key. It first creates a hash of the data then signs the hash using the key.
- \return 0 Success
- \return SIG_TYPE_E -231, signature type not enabled/ available
- \return BAD_FUNC_ARG -173, bad function argument provided
- \return BUFFER_E -132, output buffer too small or input too large.
-
- \param hash_type A hash type from the “enum wc_HashType”
- such as “WC_HASH_TYPE_SHA256”.
- \param sig_type A signature type enum value such as
- WC_SIGNATURE_TYPE_ECC or WC_SIGNATURE_TYPE_RSA.
- \param data Pointer to buffer containing the data to hash.
- \param data_len Length of the data buffer.
- \param sig Pointer to buffer to output signature.
- \param sig_len Length of the signature output buffer.
- \param key Pointer to a key structure such as ecc_key or RsaKey.
- \param key_len Size of the key structure.
- \param rng Pointer to an initialized RNG structure.
-
- _Example_
- \code
- int ret;
- WC_RNG rng;
- ecc_key eccKey;
-
- wc_InitRng(&rng);
- wc_ecc_init(&eccKey);
- // Generate key
- ret = wc_ecc_make_key(&rng, 32, &eccKey);
- // Get signature length and allocate buffer
- sigLen = wc_SignatureGetSize(sig_type, &eccKey, sizeof(eccKey));
- sigBuf = malloc(sigLen);
- // Perform signature verification using public key
- ret = wc_SignatureGenerate(
- WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_ECC,
- fileBuf, fileLen,
- sigBuf, &sigLen,
- &eccKey, sizeof(eccKey),
- &rng);
- printf("Signature Generation: %s
- (%d)\n", (ret == 0) ? "Pass" : "Fail", ret);
- free(sigBuf);
- wc_ecc_free(&eccKey);
- wc_FreeRng(&rng);
- \endcode
-
- \sa wc_SignatureGetSize
- \sa wc_SignatureVerify
- */
- WOLFSSL_API int wc_SignatureGenerate(
- enum wc_HashType hash_type, enum wc_SignatureType sig_type,
- const byte* data, word32 data_len,
- byte* sig, word32 *sig_len,
- const void* key, word32 key_len,
- WC_RNG* rng);
|