Files
wolfssl/doc/dox_comments/header_files/sha512.h
David Garske 77d9410aa0 Add missing API documentation for Doxygen:
This PR adds Doxygen documentation for native wolfSSL API functions that were previously undocumented. It includes documentation notes for APIs gated on specific preprocessor macros:

- WOLF_PRIVATE_KEY_ID: _Id and _Label init helpers (wc_AesInit_Id, wc_AesInit_Label, wc_ecc_init_id, wc_ecc_init_label, wc_InitRsaKey_Id, wc_InitRsaKey_Label) require this for PKCS11 support

- WC_NO_CONSTRUCTORS: New/Delete constructor functions (wc_AesNew/Delete, wc_curve25519_new/delete, wc_ed25519_new/delete, wc_NewRsaKey/DeleteRsaKey) are only available when this is not defined. WC_NO_CONSTRUCTORS is automatically defined when WOLFSSL_NO_MALLOC is defined.

- WOLFSSL_PUBLIC_ASN: ASN functions marked with WOLFSSL_ASN_API include  notes indicating they are not public by default

- WOLFSSL_DUAL_ALG_CERTS: wc_GeneratePreTBS and wc_MakeSigWithBitStr for Post-Quantum dual algorithm certificate signing

The New/Delete functions are documented as being exposed to support allocation of structures using dynamic memory to provide better ABI compatibility.
2025-12-26 08:41:56 -08:00

1008 lines
20 KiB
C

/*!
\ingroup SHA
\brief This function initializes SHA512. This is automatically called
by wc_Sha512Hash.
\return 0 Returned upon successfully initializing
\param sha512 pointer to the sha512 structure to use for encryption
_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
\sa wc_Sha512Hash
\sa wc_Sha512Update
\sa wc_Sha512Final
*/
int wc_InitSha512(wc_Sha512* sha);
/*!
\ingroup SHA
\brief Can be called to continually hash the provided byte array
of length len.
\return 0 Returned upon successfully adding the data to the digest.
\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
_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
\sa wc_Sha512Hash
\sa wc_Sha512Final
\sa wc_InitSha512
*/
int wc_Sha512Update(wc_Sha512* sha, const byte* data, word32 len);
/*!
\ingroup SHA
\brief Finalizes hashing of data. Result is placed into hash.
\return 0 Returned upon successfully finalizing the hash.
\param sha512 pointer to the sha512 structure to use for encryption
\param hash Byte array to hold hash value.
_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
\sa wc_Sha512Hash
\sa wc_Sha512Final
\sa wc_InitSha512
*/
int wc_Sha512Final(wc_Sha512* sha512, byte* hash);
/*!
\ingroup SHA
\brief This function initializes SHA384. This is automatically called
by wc_Sha384Hash.
\return 0 Returned upon successfully initializing
\param sha384 pointer to the sha384 structure to use for encryption
_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
\sa wc_Sha384Hash
\sa wc_Sha384Update
\sa wc_Sha384Final
*/
int wc_InitSha384(wc_Sha384* sha);
/*!
\ingroup SHA
\brief Can be called to continually hash the provided byte array
of length len.
\return 0 Returned upon successfully adding the data to the digest.
\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
\sa wc_Sha384Hash
\sa wc_Sha384Final
\sa wc_InitSha384
*/
int wc_Sha384Update(wc_Sha384* sha, const byte* data, word32 len);
/*!
\ingroup SHA
\brief Finalizes hashing of data. Result is placed into hash.
\return 0 Returned upon successfully finalizing.
\param sha384 pointer to the sha384 structure to use for encryption
\param hash Byte array to hold hash value.
_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
\sa wc_Sha384Hash
\sa wc_Sha384Final
\sa wc_InitSha384
*/
int wc_Sha384Final(wc_Sha384* sha384, byte* hash);
/*!
\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);