diff options
author | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2016-09-05 09:29:24 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2016-09-05 09:46:06 +0200 |
commit | 2409d03e10a0588361db3cc2ee8d0fab94c7fc33 (patch) | |
tree | a438a26fc0bdb9bc6e87f3ea597aa13487d51d02 | |
parent | a852b4b2e1342f043cdd2d2db9f4522984b739a1 (diff) | |
download | gnutls-2409d03e10a0588361db3cc2ee8d0fab94c7fc33.tar.gz |
Introduced helper function _gnutls_decode_ber_rs_raw()
-rw-r--r-- | lib/libgnutls.map | 1 | ||||
-rw-r--r-- | lib/pk.c | 44 | ||||
-rw-r--r-- | lib/pk.h | 4 |
3 files changed, 49 insertions, 0 deletions
diff --git a/lib/libgnutls.map b/lib/libgnutls.map index ef802043c6..b15da7f74f 100644 --- a/lib/libgnutls.map +++ b/lib/libgnutls.map @@ -1124,6 +1124,7 @@ GNUTLS_FIPS140_3_4 { dsa_generate_dss_keypair; _gnutls_prf_raw; _gnutls_encode_ber_rs_raw; + _gnutls_decode_ber_rs_raw; _rsa_generate_fips186_4_keypair; _gnutls_dh_compute_key; _gnutls_dh_generate_key; @@ -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, @@ -65,6 +65,10 @@ _gnutls_decode_ber_rs(const gnutls_datum_t * sig_value, bigint_t * r, bigint_t * s); int +_gnutls_decode_ber_rs_raw(const gnutls_datum_t * sig_value, gnutls_datum_t *r, + gnutls_datum_t *s); + +int encode_ber_digest_info(const mac_entry_st * e, const gnutls_datum_t * digest, gnutls_datum_t * output); |