]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Introduced helper function _gnutls_decode_ber_rs_raw()
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Mon, 5 Sep 2016 07:29:24 +0000 (09:29 +0200)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Mon, 5 Sep 2016 07:46:06 +0000 (09:46 +0200)
lib/libgnutls.map
lib/pk.c
lib/pk.h

index ef802043c6a1d0952ac8cec3b12e00eccf701a27..b15da7f74fa270a2895a4b7487b1a0184892be3e 100644 (file)
@@ -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;
index d724d65a9ab3048f4a9ab5830d09d8bf89114ac2..efdb9fe17ac86c2dff534a2e51c910bcacfd47b4 100644 (file)
--- a/lib/pk.c
+++ b/lib/pk.c
@@ -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,
index 6892119c1d8cad9efdfcc51bf0b146c30693156f..9c075e40543d5c328988716cabef24398561a460 100644 (file)
--- a/lib/pk.h
+++ b/lib/pk.h
@@ -64,6 +64,10 @@ int
 _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,