summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dsa.h4
-rw-r--r--sexp2dsa.c16
2 files changed, 20 insertions, 0 deletions
diff --git a/dsa.h b/dsa.h
index beb15dda..5214c36a 100644
--- a/dsa.h
+++ b/dsa.h
@@ -154,6 +154,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,
unsigned limit,
diff --git a/sexp2dsa.c b/sexp2dsa.c
index 357b3cf8..4d99cf4a 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 */