2017-12-29 10:45:37 -07:00
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
2018-06-27 16:22:12 -06:00
|
|
|
|
|
|
|
|
\brief This function initializes SHA512. This is automatically called
|
2017-12-29 10:45:37 -07:00
|
|
|
by wc_Sha512Hash.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\return 0 Returned upon successfully initializing
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\param sha512 pointer to the sha512 structure to use for encryption
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
Sha512 sha512[1];
|
|
|
|
|
if ((ret = wc_InitSha512(sha512)) != 0) {
|
|
|
|
|
WOLFSSL_MSG("wc_InitSha512 failed");
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
wc_Sha512Update(sha512, data, len);
|
|
|
|
|
wc_Sha512Final(sha512, hash);
|
|
|
|
|
}
|
|
|
|
|
\endcode
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\sa wc_Sha512Hash
|
|
|
|
|
\sa wc_Sha512Update
|
|
|
|
|
\sa wc_Sha512Final
|
|
|
|
|
*/
|
2025-11-21 17:43:55 +00:00
|
|
|
int wc_InitSha512(wc_Sha512* sha);
|
2018-05-02 13:28:17 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
2018-06-27 16:22:12 -06:00
|
|
|
|
|
|
|
|
\brief Can be called to continually hash the provided byte array
|
2017-12-29 10:45:37 -07:00
|
|
|
of length len.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\return 0 Returned upon successfully adding the data to the digest.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\param sha512 pointer to the sha512 structure to use for encryption
|
|
|
|
|
\param data the data to be hashed
|
|
|
|
|
\param len length of data to be hashed
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
Sha512 sha512[1];
|
|
|
|
|
byte data[] = { Data to be hashed };
|
|
|
|
|
word32 len = sizeof(data);
|
|
|
|
|
|
|
|
|
|
if ((ret = wc_InitSha512(sha512)) != 0) {
|
|
|
|
|
WOLFSSL_MSG("wc_InitSha512 failed");
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
wc_Sha512Update(sha512, data, len);
|
|
|
|
|
wc_Sha512Final(sha512, hash);
|
|
|
|
|
}
|
2018-06-27 16:22:12 -06:00
|
|
|
\endcode
|
|
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\sa wc_Sha512Hash
|
|
|
|
|
\sa wc_Sha512Final
|
|
|
|
|
\sa wc_InitSha512
|
|
|
|
|
*/
|
2022-04-06 16:17:36 +01:00
|
|
|
int wc_Sha512Update(wc_Sha512* sha, const byte* data, word32 len);
|
2018-05-02 13:28:17 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\brief Finalizes hashing of data. Result is placed into hash.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\return 0 Returned upon successfully finalizing the hash.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\param sha512 pointer to the sha512 structure to use for encryption
|
|
|
|
|
\param hash Byte array to hold hash value.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
Sha512 sha512[1];
|
|
|
|
|
byte data[] = { Data to be hashed };
|
|
|
|
|
word32 len = sizeof(data);
|
|
|
|
|
|
|
|
|
|
if ((ret = wc_InitSha512(sha512)) != 0) {
|
|
|
|
|
WOLFSSL_MSG("wc_InitSha512 failed");
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
wc_Sha512Update(sha512, data, len);
|
|
|
|
|
wc_Sha512Final(sha512, hash);
|
|
|
|
|
}
|
|
|
|
|
\endcode
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\sa wc_Sha512Hash
|
|
|
|
|
\sa wc_Sha512Final
|
|
|
|
|
\sa wc_InitSha512
|
|
|
|
|
*/
|
2022-04-06 16:17:36 +01:00
|
|
|
int wc_Sha512Final(wc_Sha512* sha512, byte* hash);
|
2018-05-02 13:28:17 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
2018-06-27 16:22:12 -06:00
|
|
|
|
|
|
|
|
\brief This function initializes SHA384. This is automatically called
|
2017-12-29 10:45:37 -07:00
|
|
|
by wc_Sha384Hash.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\return 0 Returned upon successfully initializing
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\param sha384 pointer to the sha384 structure to use for encryption
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
Sha384 sha384[1];
|
|
|
|
|
if ((ret = wc_InitSha384(sha384)) != 0) {
|
|
|
|
|
WOLFSSL_MSG("wc_InitSha384 failed");
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
wc_Sha384Update(sha384, data, len);
|
|
|
|
|
wc_Sha384Final(sha384, hash);
|
|
|
|
|
}
|
|
|
|
|
\endcode
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\sa wc_Sha384Hash
|
|
|
|
|
\sa wc_Sha384Update
|
|
|
|
|
\sa wc_Sha384Final
|
|
|
|
|
*/
|
2025-11-21 17:43:55 +00:00
|
|
|
int wc_InitSha384(wc_Sha384* sha);
|
2018-05-02 13:28:17 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
2018-06-27 16:22:12 -06:00
|
|
|
|
|
|
|
|
\brief Can be called to continually hash the provided byte array
|
2017-12-29 10:45:37 -07:00
|
|
|
of length len.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\return 0 Returned upon successfully adding the data to the digest.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\param sha384 pointer to the sha384 structure to use for encryption
|
|
|
|
|
\param data the data to be hashed
|
|
|
|
|
\param len length of data to be hashed
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
Sha384 sha384[1];
|
|
|
|
|
byte data[] = { Data to be hashed };
|
|
|
|
|
word32 len = sizeof(data);
|
|
|
|
|
|
|
|
|
|
if ((ret = wc_InitSha384(sha384)) != 0) {
|
|
|
|
|
WOLFSSL_MSG("wc_InitSha384 failed");
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
wc_Sha384Update(sha384, data, len);
|
|
|
|
|
wc_Sha384Final(sha384, hash);
|
|
|
|
|
}
|
|
|
|
|
\endcode
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\sa wc_Sha384Hash
|
|
|
|
|
\sa wc_Sha384Final
|
|
|
|
|
\sa wc_InitSha384
|
|
|
|
|
*/
|
2022-04-06 16:17:36 +01:00
|
|
|
int wc_Sha384Update(wc_Sha384* sha, const byte* data, word32 len);
|
2018-05-02 13:28:17 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\brief Finalizes hashing of data. Result is placed into hash.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\return 0 Returned upon successfully finalizing.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\param sha384 pointer to the sha384 structure to use for encryption
|
|
|
|
|
\param hash Byte array to hold hash value.
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
Sha384 sha384[1];
|
|
|
|
|
byte data[] = { Data to be hashed };
|
|
|
|
|
word32 len = sizeof(data);
|
|
|
|
|
|
|
|
|
|
if ((ret = wc_InitSha384(sha384)) != 0) {
|
|
|
|
|
WOLFSSL_MSG("wc_InitSha384 failed");
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
wc_Sha384Update(sha384, data, len);
|
|
|
|
|
wc_Sha384Final(sha384, hash);
|
|
|
|
|
}
|
|
|
|
|
\endcode
|
2018-06-27 16:22:12 -06:00
|
|
|
|
2017-12-29 10:45:37 -07:00
|
|
|
\sa wc_Sha384Hash
|
|
|
|
|
\sa wc_Sha384Final
|
|
|
|
|
\sa wc_InitSha384
|
|
|
|
|
*/
|
2022-04-06 16:17:36 +01:00
|
|
|
int wc_Sha384Final(wc_Sha384* sha384, byte* hash);
|
2025-12-26 08:00:20 -08:00
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Initializes SHA512 with heap and device ID.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
\param heap Heap hint
|
|
|
|
|
\param devId Device ID
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
int ret = wc_InitSha512_ex(&sha, NULL, INVALID_DEVID);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512
|
|
|
|
|
*/
|
|
|
|
|
int wc_InitSha512_ex(wc_Sha512* sha, void* heap, int devId);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets raw hash without finalizing.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param hash Output hash buffer
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte hash[WC_SHA512_DIGEST_SIZE];
|
|
|
|
|
int ret = wc_Sha512FinalRaw(&sha, hash);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512Final
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512FinalRaw(wc_Sha512* sha512, byte* hash);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Frees SHA512 resources.
|
|
|
|
|
|
|
|
|
|
\return none No returns
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
wc_InitSha512(&sha);
|
|
|
|
|
wc_Sha512Free(&sha);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512
|
|
|
|
|
*/
|
|
|
|
|
void wc_Sha512Free(wc_Sha512* sha);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets SHA512 hash without finalizing.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param hash Output hash buffer
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte hash[WC_SHA512_DIGEST_SIZE];
|
|
|
|
|
int ret = wc_Sha512GetHash(&sha, hash);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512Final
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512GetHash(wc_Sha512* sha512, byte* hash);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Copies SHA512 context.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param src Source SHA512 structure
|
|
|
|
|
\param dst Destination SHA512 structure
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 src, dst;
|
|
|
|
|
int ret = wc_Sha512Copy(&src, &dst);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512Copy(wc_Sha512* src, wc_Sha512* dst);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Grows SHA512 buffer with input data.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param in Input data
|
|
|
|
|
\param inSz Input size
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte data[100];
|
|
|
|
|
int ret = wc_Sha512_Grow(&sha, data, sizeof(data));
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512Update
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_Grow(wc_Sha512* sha512, const byte* in, int inSz);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Sets SHA512 flags.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param flags Flags to set
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
int ret = wc_Sha512SetFlags(&sha, WC_HASH_FLAG_WILLCOPY);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512SetFlags(wc_Sha512* sha512, word32 flags);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets SHA512 flags.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param flags Pointer to store flags
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
word32 flags;
|
|
|
|
|
int ret = wc_Sha512GetFlags(&sha, &flags);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512SetFlags
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512GetFlags(wc_Sha512* sha512, word32* flags);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Transforms SHA512 block.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
\param data Block data
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
unsigned char block[WC_SHA512_BLOCK_SIZE];
|
|
|
|
|
int ret = wc_Sha512Transform(&sha, block);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512Update
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512Transform(wc_Sha512* sha, const unsigned char* data);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Initializes SHA512/224.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
int ret = wc_InitSha512_224(&sha);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_224Update
|
|
|
|
|
*/
|
|
|
|
|
int wc_InitSha512_224(wc_Sha512* sha);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Initializes SHA512/224 with heap and device ID.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
\param heap Heap hint
|
|
|
|
|
\param devId Device ID
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
int ret = wc_InitSha512_224_ex(&sha, NULL, INVALID_DEVID);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512_224
|
|
|
|
|
*/
|
|
|
|
|
int wc_InitSha512_224_ex(wc_Sha512* sha, void* heap, int devId);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Updates SHA512/224 hash with data.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
\param data Input data
|
|
|
|
|
\param len Input size
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte data[100];
|
|
|
|
|
int ret = wc_Sha512_224Update(&sha, data, sizeof(data));
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512_224
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_224Update(wc_Sha512* sha, const byte* data, word32 len);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets raw SHA512/224 hash without finalizing.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param hash Output hash buffer
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte hash[WC_SHA512_224_DIGEST_SIZE];
|
|
|
|
|
int ret = wc_Sha512_224FinalRaw(&sha, hash);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_224Final
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_224FinalRaw(wc_Sha512* sha512, byte* hash);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Finalizes SHA512/224 hash.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param hash Output hash buffer
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte hash[WC_SHA512_224_DIGEST_SIZE];
|
|
|
|
|
int ret = wc_Sha512_224Final(&sha, hash);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_224Update
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_224Final(wc_Sha512* sha512, byte* hash);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Frees SHA512/224 resources.
|
|
|
|
|
|
|
|
|
|
\return none No returns
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
wc_InitSha512_224(&sha);
|
|
|
|
|
wc_Sha512_224Free(&sha);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512_224
|
|
|
|
|
*/
|
|
|
|
|
void wc_Sha512_224Free(wc_Sha512* sha);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets SHA512/224 hash without finalizing.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param hash Output hash buffer
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte hash[WC_SHA512_224_DIGEST_SIZE];
|
|
|
|
|
int ret = wc_Sha512_224GetHash(&sha, hash);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_224Final
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_224GetHash(wc_Sha512* sha512, byte* hash);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Copies SHA512/224 context.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param src Source SHA512 structure
|
|
|
|
|
\param dst Destination SHA512 structure
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 src, dst;
|
|
|
|
|
int ret = wc_Sha512_224Copy(&src, &dst);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512_224
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_224Copy(wc_Sha512* src, wc_Sha512* dst);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Sets SHA512/224 flags.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param flags Flags to set
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
int ret = wc_Sha512_224SetFlags(&sha, WC_HASH_FLAG_WILLCOPY);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512_224
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_224SetFlags(wc_Sha512* sha512, word32 flags);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets SHA512/224 flags.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param flags Pointer to store flags
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
word32 flags;
|
|
|
|
|
int ret = wc_Sha512_224GetFlags(&sha, &flags);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_224SetFlags
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_224GetFlags(wc_Sha512* sha512, word32* flags);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Transforms SHA512/224 block.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
\param data Block data
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
unsigned char block[WC_SHA512_BLOCK_SIZE];
|
|
|
|
|
int ret = wc_Sha512_224Transform(&sha, block);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_224Update
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_224Transform(wc_Sha512* sha, const unsigned char* data);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Initializes SHA512/256.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
int ret = wc_InitSha512_256(&sha);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_256Update
|
|
|
|
|
*/
|
|
|
|
|
int wc_InitSha512_256(wc_Sha512* sha);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Initializes SHA512/256 with heap and device ID.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
\param heap Heap hint
|
|
|
|
|
\param devId Device ID
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
int ret = wc_InitSha512_256_ex(&sha, NULL, INVALID_DEVID);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512_256
|
|
|
|
|
*/
|
|
|
|
|
int wc_InitSha512_256_ex(wc_Sha512* sha, void* heap, int devId);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Updates SHA512/256 hash with data.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
\param data Input data
|
|
|
|
|
\param len Input size
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte data[100];
|
|
|
|
|
int ret = wc_Sha512_256Update(&sha, data, sizeof(data));
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512_256
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_256Update(wc_Sha512* sha, const byte* data, word32 len);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets raw SHA512/256 hash without finalizing.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param hash Output hash buffer
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte hash[WC_SHA512_256_DIGEST_SIZE];
|
|
|
|
|
int ret = wc_Sha512_256FinalRaw(&sha, hash);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_256Final
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_256FinalRaw(wc_Sha512* sha512, byte* hash);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Finalizes SHA512/256 hash.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param hash Output hash buffer
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte hash[WC_SHA512_256_DIGEST_SIZE];
|
|
|
|
|
int ret = wc_Sha512_256Final(&sha, hash);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_256Update
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_256Final(wc_Sha512* sha512, byte* hash);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Frees SHA512/256 resources.
|
|
|
|
|
|
|
|
|
|
\return none No returns
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
wc_InitSha512_256(&sha);
|
|
|
|
|
wc_Sha512_256Free(&sha);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512_256
|
|
|
|
|
*/
|
|
|
|
|
void wc_Sha512_256Free(wc_Sha512* sha);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets SHA512/256 hash without finalizing.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param hash Output hash buffer
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
byte hash[WC_SHA512_256_DIGEST_SIZE];
|
|
|
|
|
int ret = wc_Sha512_256GetHash(&sha, hash);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_256Final
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_256GetHash(wc_Sha512* sha512, byte* hash);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Copies SHA512/256 context.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param src Source SHA512 structure
|
|
|
|
|
\param dst Destination SHA512 structure
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 src, dst;
|
|
|
|
|
int ret = wc_Sha512_256Copy(&src, &dst);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512_256
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_256Copy(wc_Sha512* src, wc_Sha512* dst);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Sets SHA512/256 flags.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param flags Flags to set
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
int ret = wc_Sha512_256SetFlags(&sha, WC_HASH_FLAG_WILLCOPY);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha512_256
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_256SetFlags(wc_Sha512* sha512, word32 flags);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets SHA512/256 flags.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha512 SHA512 structure
|
|
|
|
|
\param flags Pointer to store flags
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
word32 flags;
|
|
|
|
|
int ret = wc_Sha512_256GetFlags(&sha, &flags);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_256SetFlags
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_256GetFlags(wc_Sha512* sha512, word32* flags);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Transforms SHA512/256 block.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA512 structure
|
|
|
|
|
\param data Block data
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha512 sha;
|
|
|
|
|
unsigned char block[WC_SHA512_BLOCK_SIZE];
|
|
|
|
|
int ret = wc_Sha512_256Transform(&sha, block);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha512_256Update
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha512_256Transform(wc_Sha512* sha, const unsigned char* data);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Initializes SHA384 with heap and device ID.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA384 structure
|
|
|
|
|
\param heap Heap hint
|
|
|
|
|
\param devId Device ID
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha384 sha;
|
|
|
|
|
int ret = wc_InitSha384_ex(&sha, NULL, INVALID_DEVID);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha384
|
|
|
|
|
*/
|
|
|
|
|
int wc_InitSha384_ex(wc_Sha384* sha, void* heap, int devId);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets raw SHA384 hash without finalizing.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha384 SHA384 structure
|
|
|
|
|
\param hash Output hash buffer
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha384 sha;
|
|
|
|
|
byte hash[WC_SHA384_DIGEST_SIZE];
|
|
|
|
|
int ret = wc_Sha384FinalRaw(&sha, hash);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha384Final
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha384FinalRaw(wc_Sha384* sha384, byte* hash);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Frees SHA384 resources.
|
|
|
|
|
|
|
|
|
|
\return none No returns
|
|
|
|
|
|
|
|
|
|
\param sha SHA384 structure
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha384 sha;
|
|
|
|
|
wc_InitSha384(&sha);
|
|
|
|
|
wc_Sha384Free(&sha);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha384
|
|
|
|
|
*/
|
|
|
|
|
void wc_Sha384Free(wc_Sha384* sha);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets SHA384 hash without finalizing.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha384 SHA384 structure
|
|
|
|
|
\param hash Output hash buffer
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha384 sha;
|
|
|
|
|
byte hash[WC_SHA384_DIGEST_SIZE];
|
|
|
|
|
int ret = wc_Sha384GetHash(&sha, hash);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha384Final
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha384GetHash(wc_Sha384* sha384, byte* hash);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Copies SHA384 context.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param src Source SHA384 structure
|
|
|
|
|
\param dst Destination SHA384 structure
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha384 src, dst;
|
|
|
|
|
int ret = wc_Sha384Copy(&src, &dst);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha384
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha384Copy(wc_Sha384* src, wc_Sha384* dst);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Grows SHA384 buffer with input data.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha384 SHA384 structure
|
|
|
|
|
\param in Input data
|
|
|
|
|
\param inSz Input size
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha384 sha;
|
|
|
|
|
byte data[100];
|
|
|
|
|
int ret = wc_Sha384_Grow(&sha, data, sizeof(data));
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha384Update
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha384_Grow(wc_Sha384* sha384, const byte* in, int inSz);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Sets SHA384 flags.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha384 SHA384 structure
|
|
|
|
|
\param flags Flags to set
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha384 sha;
|
|
|
|
|
int ret = wc_Sha384SetFlags(&sha, WC_HASH_FLAG_WILLCOPY);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_InitSha384
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha384SetFlags(wc_Sha384* sha384, word32 flags);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Gets SHA384 flags.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha384 SHA384 structure
|
|
|
|
|
\param flags Pointer to store flags
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha384 sha;
|
|
|
|
|
word32 flags;
|
|
|
|
|
int ret = wc_Sha384GetFlags(&sha, &flags);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha384SetFlags
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha384GetFlags(wc_Sha384* sha384, word32* flags);
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\ingroup SHA
|
|
|
|
|
\brief Transforms SHA384 block.
|
|
|
|
|
|
|
|
|
|
\return 0 on success
|
|
|
|
|
\return negative on error
|
|
|
|
|
|
|
|
|
|
\param sha SHA384 structure
|
|
|
|
|
\param data Block data
|
|
|
|
|
|
|
|
|
|
_Example_
|
|
|
|
|
\code
|
|
|
|
|
wc_Sha384 sha;
|
|
|
|
|
unsigned char block[WC_SHA384_BLOCK_SIZE];
|
|
|
|
|
int ret = wc_Sha384Transform(&sha, block);
|
|
|
|
|
\endcode
|
|
|
|
|
|
|
|
|
|
\sa wc_Sha384Update
|
|
|
|
|
*/
|
|
|
|
|
int wc_Sha384Transform(wc_Sha384* sha, const unsigned char* data);
|