static int
extract_digest_info(const struct rsa_public_key *key,
- gnutls_datum_t *di,
+ gnutls_datum_t *di, uint8_t** rdi,
const mpz_t signature)
{
unsigned i;
i++;
- di->data = em;
+ *rdi = em;
+
+ di->data = &em[i];
di->size = key->size - i;
return 1;
gnutls_digest_algorithm_t* hash_algo)
{
uint8_t digest[MAX_HASH_SIZE];
- gnutls_datum_t di = {NULL, 0};
+ uint8_t* rdi = NULL;
+ gnutls_datum_t di;
unsigned digest_size;
mpz_t s;
struct rsa_public_key pub;
nettle_mpz_set_str_256_u(s, sig->size, sig->data);
- ret = extract_digest_info( &pub, &di, s);
+ ret = extract_digest_info( &pub, &di, &rdi, s);
if (ret == 0)
{
ret = GNUTLS_E_PK_SIG_VERIFY_FAILED;
cleanup:
mpz_clear(s);
- gnutls_free(di.data);
+ gnutls_free(rdi);
return ret;
}