--- libhsm/src/libhsm.c 2011-03-19 03:56:02.000000000 +1300 +++ /home/sebastian/src/opendnssec-1.2.1/libhsm/src/libhsm.c 2011-12-16 13:54:12.000000000 +1300 @@ -1261,6 +1261,18 @@ return NULL; } +static void +__remove_leading_zeroes(CK_BYTE_PTR data, CK_ULONG *len) +{ + CK_BYTE_PTR p = data; + CK_ULONG l = *len; + + while( 0 == (unsigned short int)(* p)) ++p, --l; + + memmove(data, p, l); + *len = l; +} + static ldns_rdf * hsm_get_key_rdata(hsm_ctx_t *ctx, hsm_session_t *session, const hsm_key_t *key) @@ -1327,6 +1339,9 @@ return NULL; } + // Remove leading zeroes for the public exponent + __remove_leading_zeroes(public_exponent, &public_exponent_len); + data_size = public_exponent_len + modulus_len + 1; if (public_exponent_len <= 256) { data = malloc(data_size);