crypto: fix function signatures for nettle 2.7 vs 3

Nettle version 2.7.x used 'unsigned int' instead of 'size_t' for length
parameters in functions. Use a local typedef so that we can build with
the correct signature depending on nettle version, as we already do in
the cipher code.

Reported-by: Amol Surati <suratiamol@gmail.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2019-07-12 11:14:19 +01:00
parent e8e67ca4c1
commit f887849007
2 changed files with 22 additions and 7 deletions

View File

@ -26,12 +26,18 @@
#include <nettle/sha.h> #include <nettle/sha.h>
#include <nettle/ripemd160.h> #include <nettle/ripemd160.h>
#if CONFIG_NETTLE_VERSION_MAJOR < 3
typedef unsigned int hash_length_t;
#else
typedef size_t hash_length_t;
#endif
typedef void (*qcrypto_nettle_init)(void *ctx); typedef void (*qcrypto_nettle_init)(void *ctx);
typedef void (*qcrypto_nettle_write)(void *ctx, typedef void (*qcrypto_nettle_write)(void *ctx,
unsigned int len, hash_length_t len,
const uint8_t *buf); const uint8_t *buf);
typedef void (*qcrypto_nettle_result)(void *ctx, typedef void (*qcrypto_nettle_result)(void *ctx,
unsigned int len, hash_length_t len,
uint8_t *buf); uint8_t *buf);
union qcrypto_hash_ctx { union qcrypto_hash_ctx {
@ -112,7 +118,7 @@ qcrypto_nettle_hash_bytesv(QCryptoHashAlgorithm alg,
size_t *resultlen, size_t *resultlen,
Error **errp) Error **errp)
{ {
int i; size_t i;
union qcrypto_hash_ctx ctx; union qcrypto_hash_ctx ctx;
if (!qcrypto_hash_supports(alg)) { if (!qcrypto_hash_supports(alg)) {

View File

@ -18,14 +18,23 @@
#include "hmacpriv.h" #include "hmacpriv.h"
#include <nettle/hmac.h> #include <nettle/hmac.h>
#if CONFIG_NETTLE_VERSION_MAJOR < 3
typedef unsigned int hmac_length_t;
#else
typedef size_t hmac_length_t;
#endif
typedef void (*qcrypto_nettle_hmac_setkey)(void *ctx, typedef void (*qcrypto_nettle_hmac_setkey)(void *ctx,
size_t key_length, const uint8_t *key); hmac_length_t key_length,
const uint8_t *key);
typedef void (*qcrypto_nettle_hmac_update)(void *ctx, typedef void (*qcrypto_nettle_hmac_update)(void *ctx,
size_t length, const uint8_t *data); hmac_length_t length,
const uint8_t *data);
typedef void (*qcrypto_nettle_hmac_digest)(void *ctx, typedef void (*qcrypto_nettle_hmac_digest)(void *ctx,
size_t length, uint8_t *digest); hmac_length_t length,
uint8_t *digest);
typedef struct QCryptoHmacNettle QCryptoHmacNettle; typedef struct QCryptoHmacNettle QCryptoHmacNettle;
struct QCryptoHmacNettle { struct QCryptoHmacNettle {
@ -135,7 +144,7 @@ qcrypto_nettle_hmac_bytesv(QCryptoHmac *hmac,
Error **errp) Error **errp)
{ {
QCryptoHmacNettle *ctx; QCryptoHmacNettle *ctx;
int i; size_t i;
ctx = (QCryptoHmacNettle *)hmac->opaque; ctx = (QCryptoHmacNettle *)hmac->opaque;