summaryrefslogtreecommitdiff
path: root/ssh-dss.c
diff options
context:
space:
mode:
authordjm@openbsd.org <djm@openbsd.org>2022-10-28 00:36:31 +0000
committerDamien Miller <djm@mindrot.org>2022-10-28 12:46:56 +1100
commit1e78844ae2b2dc01ba735d5ae740904c57e13685 (patch)
tree9aaea84e13b641b1cc04dd9446d4af46c0a0919b /ssh-dss.c
parent25de1c01a8b9a2c8ab9b1da22444a03e89c982de (diff)
downloadopenssh-git-1e78844ae2b2dc01ba735d5ae740904c57e13685.tar.gz
upstream: factor out sshkey_equal_public()
feedback/ok markus@ OpenBSD-Commit-ID: 1368ba114cb37732fe6ec3d89c7e6d27ea6fdc94
Diffstat (limited to 'ssh-dss.c')
-rw-r--r--ssh-dss.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/ssh-dss.c b/ssh-dss.c
index 2206bbe6..15d6cea3 100644
--- a/ssh-dss.c
+++ b/ssh-dss.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-dss.c,v 1.40 2022/10/28 00:35:40 djm Exp $ */
+/* $OpenBSD: ssh-dss.c,v 1.41 2022/10/28 00:36:31 djm Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
*
@@ -74,6 +74,34 @@ ssh_dss_cleanup(struct sshkey *k)
k->dsa = NULL;
}
+static int
+ssh_dss_equal(const struct sshkey *a, const struct sshkey *b)
+{
+ const BIGNUM *dsa_p_a, *dsa_q_a, *dsa_g_a, *dsa_pub_key_a;
+ const BIGNUM *dsa_p_b, *dsa_q_b, *dsa_g_b, *dsa_pub_key_b;
+
+ if (a->dsa == NULL || b->dsa == NULL)
+ return 0;
+ DSA_get0_pqg(a->dsa, &dsa_p_a, &dsa_q_a, &dsa_g_a);
+ DSA_get0_pqg(b->dsa, &dsa_p_b, &dsa_q_b, &dsa_g_b);
+ DSA_get0_key(a->dsa, &dsa_pub_key_a, NULL);
+ DSA_get0_key(b->dsa, &dsa_pub_key_b, NULL);
+ if (dsa_p_a == NULL || dsa_p_b == NULL ||
+ dsa_q_a == NULL || dsa_q_b == NULL ||
+ dsa_g_a == NULL || dsa_g_b == NULL ||
+ dsa_pub_key_a == NULL || dsa_pub_key_b == NULL)
+ return 0;
+ if (BN_cmp(dsa_p_a, dsa_p_b) != 0)
+ return 0;
+ if (BN_cmp(dsa_q_a, dsa_q_b) != 0)
+ return 0;
+ if (BN_cmp(dsa_g_a, dsa_g_b) != 0)
+ return 0;
+ if (BN_cmp(dsa_pub_key_a, dsa_pub_key_b) != 0)
+ return 0;
+ return 1;
+}
+
int
ssh_dss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
const u_char *data, size_t datalen, u_int compat)
@@ -235,6 +263,7 @@ static const struct sshkey_impl_funcs sshkey_dss_funcs = {
/* .size = */ ssh_dss_size,
/* .alloc = */ ssh_dss_alloc,
/* .cleanup = */ ssh_dss_cleanup,
+ /* .equal = */ ssh_dss_equal,
};
const struct sshkey_impl sshkey_dss_impl = {