From 9c0e10b80eb5dba39bd3383e0af502e265536f9c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Niels=20M=C3=B6ller?= Date: Tue, 11 Mar 2014 17:08:18 +0100 Subject: [PATCH] Convert dsa_keypair_to_sexp and dsa_openssl_private_key_from_der to new DSA interface. --- ChangeLog | 14 ++++++++++++++ der2dsa.c | 29 ++++++++++++++++++----------- dsa.h | 16 +++++++++------- dsa2sexp.c | 26 ++++++++++++++++---------- tools/pkcs1-conv.c | 22 ++++++++++++---------- 5 files changed, 69 insertions(+), 38 deletions(-) diff --git a/ChangeLog b/ChangeLog index ad5817aa..6287a7c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2014-03-11 Niels Möller + + * tools/pkcs1-conv.c (convert_dsa_private_key): Use new DSA + interface. + + * dsa.h (dsa_openssl_private_key_from_der_iterator) + (dsa_openssl_private_key_from_der, dsa_keypair_to_sexp): Updated + prototypes. + + * der2dsa.c (dsa_openssl_private_key_from_der_iterator): Converted + to new DSA interface. This is an API change. + (dsa_openssl_private_key_from_der): Likewise. + * dsa2sexp.c (dsa_keypair_to_sexp): Likewise. + 2014-03-09 Niels Möller * Makefile.in (hogweed_SOURCES): Added dsa-gen-params.c and diff --git a/der2dsa.c b/der2dsa.c index 9d439c3e..da63a756 100644 --- a/der2dsa.c +++ b/der2dsa.c @@ -5,7 +5,7 @@ /* nettle, low-level cryptographics library * - * Copyright (C) 2005, 2009 Niels Möller, Magnus Holmgren + * Copyright (C) 2005, 2009, 2014 Niels Möller, Magnus Holmgren * * The nettle library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -27,6 +27,8 @@ # include "config.h" #endif +#include + #include "dsa.h" #include "bignum.h" @@ -71,8 +73,9 @@ dsa_public_key_from_der_iterator(struct dsa_public_key *pub, } int -dsa_openssl_private_key_from_der_iterator(struct dsa_public_key *pub, - struct dsa_private_key *priv, +dsa_openssl_private_key_from_der_iterator(struct dsa_params *params, + struct dsa_value *pub, + struct dsa_value *priv, unsigned p_max_bits, struct asn1_der_iterator *i) { @@ -87,23 +90,26 @@ dsa_openssl_private_key_from_der_iterator(struct dsa_public_key *pub, */ uint32_t version; - + + assert (pub->params == params); + assert (priv->params == params); return (i->type == ASN1_SEQUENCE && asn1_der_decode_constructed_last(i) == ASN1_ITERATOR_PRIMITIVE && i->type == ASN1_INTEGER && asn1_der_get_uint32(i, &version) && version == 0 - && GET(i, pub->p, p_max_bits) - && GET(i, pub->q, DSA_SHA1_Q_BITS) - && GET(i, pub->g, p_max_bits) - && GET(i, pub->y, p_max_bits) + && GET(i, params->p, p_max_bits) + && GET(i, params->q, DSA_SHA1_Q_BITS) + && GET(i, params->g, p_max_bits) + && GET(i, pub->x, p_max_bits) && GET(i, priv->x, DSA_SHA1_Q_BITS) && asn1_der_iterator_next(i) == ASN1_ITERATOR_END); } int -dsa_openssl_private_key_from_der(struct dsa_public_key *pub, - struct dsa_private_key *priv, +dsa_openssl_private_key_from_der(struct dsa_params *params, + struct dsa_value *pub, + struct dsa_value *priv, unsigned p_max_bits, size_t length, const uint8_t *data) { @@ -113,5 +119,6 @@ dsa_openssl_private_key_from_der(struct dsa_public_key *pub, res = asn1_der_iterator_first(&i, length, data); return (res == ASN1_ITERATOR_CONSTRUCTED - && dsa_openssl_private_key_from_der_iterator(pub, priv, p_max_bits, &i)); + && dsa_openssl_private_key_from_der_iterator(params, pub, priv, + p_max_bits, &i)); } diff --git a/dsa.h b/dsa.h index e2e6a04f..72a9277b 100644 --- a/dsa.h +++ b/dsa.h @@ -280,8 +280,8 @@ struct nettle_buffer; int dsa_keypair_to_sexp(struct nettle_buffer *buffer, const char *algorithm_name, /* NULL means "dsa" */ - const struct dsa_public_key *pub, - const struct dsa_private_key *priv); + const struct dsa_value *pub, + const struct dsa_value *priv); struct sexp_iterator; @@ -326,15 +326,17 @@ dsa_public_key_from_der_iterator(struct dsa_public_key *pub, struct asn1_der_iterator *i); int -dsa_openssl_private_key_from_der_iterator(struct dsa_public_key *pub, - struct dsa_private_key *priv, +dsa_openssl_private_key_from_der_iterator(struct dsa_params *params, + struct dsa_value *pub, + struct dsa_value *priv, unsigned p_max_bits, struct asn1_der_iterator *i); int -dsa_openssl_private_key_from_der(struct dsa_public_key *pub, - struct dsa_private_key *priv, - unsigned p_max_bits, +dsa_openssl_private_key_from_der(struct dsa_params *params, + struct dsa_value *pub, + struct dsa_value *priv, + unsigned p_max_bits, size_t length, const uint8_t *data); diff --git a/dsa2sexp.c b/dsa2sexp.c index 2fc6d29f..45cbb2e2 100644 --- a/dsa2sexp.c +++ b/dsa2sexp.c @@ -4,7 +4,7 @@ /* nettle, low-level cryptographics library * - * Copyright (C) 2002, 2009 Niels Möller, Magnus Holmgren + * Copyright (C) 2002, 2009, 2014 Niels Möller, Magnus Holmgren * * The nettle library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -26,6 +26,8 @@ # include "config.h" #endif +#include + #include "dsa.h" #include "sexp.h" @@ -33,22 +35,26 @@ int dsa_keypair_to_sexp(struct nettle_buffer *buffer, const char *algorithm_name, - const struct dsa_public_key *pub, - const struct dsa_private_key *priv) + const struct dsa_value *pub, + const struct dsa_value *priv) { + const struct dsa_params *params = pub->params; if (!algorithm_name) algorithm_name = "dsa"; - + if (priv) - return sexp_format(buffer, - "(private-key(%0s(p%b)(q%b)" + { + assert (priv->params == params); + return sexp_format(buffer, + "(private-key(%0s(p%b)(q%b)" "(g%b)(y%b)(x%b)))", - algorithm_name, pub->p, pub->q, - pub->g, pub->y, priv->x); + algorithm_name, params->p, params->q, + params->g, pub->x, priv->x); + } else return sexp_format(buffer, "(public-key(%0s(p%b)(q%b)" "(g%b)(y%b)))", - algorithm_name, pub->p, pub->q, - pub->g, pub->y); + algorithm_name, params->p, params->q, + params->g, pub->x); } diff --git a/tools/pkcs1-conv.c b/tools/pkcs1-conv.c index 13b9ba05..e55f7738 100644 --- a/tools/pkcs1-conv.c +++ b/tools/pkcs1-conv.c @@ -4,7 +4,7 @@ /* nettle, low-level cryptographics library * - * Copyright (C) 2005, 2009 Niels Möller, Magnus Holmgren + * Copyright (C) 2005, 2009, 2014 Niels Möller, Magnus Holmgren * * The nettle library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -311,14 +311,16 @@ convert_rsa_private_key(struct nettle_buffer *buffer, size_t length, const uint8 static int convert_dsa_private_key(struct nettle_buffer *buffer, size_t length, const uint8_t *data) { - struct dsa_public_key pub; - struct dsa_private_key priv; + struct dsa_params params; + struct dsa_value pub; + struct dsa_value priv; int res; - - dsa_public_key_init(&pub); - dsa_private_key_init(&priv); - if (dsa_openssl_private_key_from_der(&pub, &priv, 0, + dsa_params_init (¶ms); + dsa_value_init (&pub, ¶ms); + dsa_value_init (&priv, ¶ms); + + if (dsa_openssl_private_key_from_der(¶ms, &pub, &priv, 0, length, data)) { /* Reuses the buffer */ @@ -330,9 +332,9 @@ convert_dsa_private_key(struct nettle_buffer *buffer, size_t length, const uint8 werror("Invalid OpenSSL private key.\n"); res = 0; } - dsa_public_key_clear(&pub); - dsa_private_key_clear(&priv); - + dsa_value_clear (&pub); + dsa_value_clear (&priv); + dsa_params_clear (¶ms); return res; } -- 2.47.2