diff --git a/dsa.h b/dsa.h index beb15ddab25e90a29d42200aa86ee926c4926755..5214c36a67e44b1ed61be55debaee2fee3a9ee6e 100644 --- a/dsa.h +++ b/dsa.h @@ -153,6 +153,10 @@ dsa_generate_keypair(struct dsa_public_key *pub, struct sexp_iterator; +int +dsa_signature_from_sexp(struct dsa_signature *rs, + struct sexp_iterator *i); + int dsa_keypair_from_sexp_alist(struct dsa_public_key *pub, struct dsa_private_key *priv, diff --git a/sexp2dsa.c b/sexp2dsa.c index 357b3cf85401d05560c7ba0dceb1c3013f559df6..4d99cf4a7d0cf9cbef434399ab293732570ab4ea 100644 --- a/sexp2dsa.c +++ b/sexp2dsa.c @@ -87,4 +87,20 @@ dsa_keypair_from_sexp(struct dsa_public_key *pub, && dsa_keypair_from_sexp_alist(pub, priv, limit, &i); } +int +dsa_signature_from_sexp(struct dsa_signature *rs, + struct sexp_iterator *i) +{ + static const uint8_t *names[2] = { "r", "s" }; + struct sexp_iterator values[2]; + + if (!sexp_iterator_assoc(i, 2, names, values)) + return 0; + + GET(rs->r, 160, &values[0]); + GET(rs->s, 160, &values[1]); + + return 1; +} + #endif /* WITH_PUBLIC_KEY */