diff options
Diffstat (limited to 'lib/pk.c')
-rw-r--r-- | lib/pk.c | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -195,6 +195,50 @@ _gnutls_decode_ber_rs(const gnutls_datum_t * sig_value, bigint_t * r, return 0; } +int +_gnutls_decode_ber_rs_raw(const gnutls_datum_t * sig_value, gnutls_datum_t *r, + gnutls_datum_t *s) +{ + ASN1_TYPE sig; + int result; + + if ((result = + asn1_create_element(_gnutls_get_gnutls_asn(), + "GNUTLS.DSASignatureValue", + &sig)) != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + result = + asn1_der_decoding(&sig, sig_value->data, sig_value->size, + NULL); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + asn1_delete_structure(&sig); + return _gnutls_asn2err(result); + } + + result = _gnutls_x509_read_value(sig, "r", r); + if (result < 0) { + gnutls_assert(); + asn1_delete_structure(&sig); + return result; + } + + result = _gnutls_x509_read_value(sig, "s", s); + if (result < 0) { + gnutls_assert(); + gnutls_free(r->data); + asn1_delete_structure(&sig); + return result; + } + + asn1_delete_structure(&sig); + + return 0; +} + /* some generic pk functions */ int _gnutls_pk_params_copy(gnutls_pk_params_st * dst, |