crypto/hmac: Allow to build hmac over multiple qcrypto_gnutls_hmac_bytes[v] calls
If the buffers that should be considered for building the hmac are not available at the same time, the current API is unsuitable. Extend it so that passing a NULL pointer as result_len is used as indicator that further buffers will be passed in succeeding calls to qcrypto_gnutls_hmac_bytes[v]. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <2d3539c247a6c323491a3821f0e5b6fc382a4686.1756706188.git.jan.kiszka@siemens.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
e2d7c1a3cd
commit
22ece1a6eb
5 changed files with 24 additions and 4 deletions
|
|
@ -121,7 +121,9 @@ qcrypto_gcrypt_hmac_bytesv(QCryptoHmac *hmac,
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (*resultlen == 0) {
|
||||
if (resultlen == NULL) {
|
||||
return 0;
|
||||
} else if (*resultlen == 0) {
|
||||
*resultlen = ret;
|
||||
*result = g_new0(uint8_t, *resultlen);
|
||||
} else if (*resultlen != ret) {
|
||||
|
|
|
|||
|
|
@ -104,7 +104,9 @@ qcrypto_glib_hmac_bytesv(QCryptoHmac *hmac,
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (*resultlen == 0) {
|
||||
if (resultlen == NULL) {
|
||||
return 0;
|
||||
} else if (*resultlen == 0) {
|
||||
*resultlen = ret;
|
||||
*result = g_new0(uint8_t, *resultlen);
|
||||
} else if (*resultlen != ret) {
|
||||
|
|
|
|||
|
|
@ -119,7 +119,9 @@ qcrypto_gnutls_hmac_bytesv(QCryptoHmac *hmac,
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (*resultlen == 0) {
|
||||
if (resultlen == NULL) {
|
||||
return 0;
|
||||
} else if (*resultlen == 0) {
|
||||
*resultlen = ret;
|
||||
*result = g_new0(uint8_t, *resultlen);
|
||||
} else if (*resultlen != ret) {
|
||||
|
|
|
|||
|
|
@ -164,7 +164,9 @@ qcrypto_nettle_hmac_bytesv(QCryptoHmac *hmac,
|
|||
}
|
||||
}
|
||||
|
||||
if (*resultlen == 0) {
|
||||
if (resultlen == NULL) {
|
||||
return 0;
|
||||
} else if (*resultlen == 0) {
|
||||
*resultlen = qcrypto_hmac_alg_map[hmac->alg].len;
|
||||
*result = g_new0(uint8_t, *resultlen);
|
||||
} else if (*resultlen != qcrypto_hmac_alg_map[hmac->alg].len) {
|
||||
|
|
|
|||
|
|
@ -90,6 +90,12 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(QCryptoHmac, qcrypto_hmac_free)
|
|||
* The memory referenced in @result must be released with a call
|
||||
* to g_free() when no longer required by the caller.
|
||||
*
|
||||
* If @result_len is set to a NULL pointer, no result will be returned, and
|
||||
* the hmac object can be used for further invocations of qcrypto_hmac_bytes()
|
||||
* or qcrypto_hmac_bytesv() until a non-NULL pointer is provided. This allows
|
||||
* to build the hmac across memory regions that are not available at the same
|
||||
* time.
|
||||
*
|
||||
* Returns:
|
||||
* 0 on success, -1 on error
|
||||
*/
|
||||
|
|
@ -123,6 +129,12 @@ int qcrypto_hmac_bytesv(QCryptoHmac *hmac,
|
|||
* The memory referenced in @result must be released with a call
|
||||
* to g_free() when no longer required by the caller.
|
||||
*
|
||||
* If @result_len is set to a NULL pointer, no result will be returned, and
|
||||
* the hmac object can be used for further invocations of qcrypto_hmac_bytes()
|
||||
* or qcrypto_hmac_bytesv() until a non-NULL pointer is provided. This allows
|
||||
* to build the hmac across memory regions that are not available at the same
|
||||
* time.
|
||||
*
|
||||
* Returns:
|
||||
* 0 on success, -1 on error
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue