chiark
/
gitweb
/
~mdw
/
tripe
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
server/keymgmt.c: Detect if a private keys records a wrong public key.
[tripe]
/
server
/
keymgmt.c
diff --git
a/server/keymgmt.c
b/server/keymgmt.c
index 9e4bc5b4f02c1da8e125f87607ea029b07879525..3a20be0ffb1a7d9663eeb893750a142a00c7276e 100644
(file)
--- a/
server/keymgmt.c
+++ b/
server/keymgmt.c
@@
-203,6
+203,8
@@
static int kh_loadpriv(key_file *kf, key *k, key_data *d,
{
int rc;
const char *err;
{
int rc;
const char *err;
+ dhge *K;
+ int ok;
if ((rc = dh->ldpriv(kf, k, d, kd, t, e)) != 0)
goto fail_0;
if ((rc = dh->ldpriv(kf, k, d, kd, t, e)) != 0)
goto fail_0;
@@
-211,6
+213,13
@@
static int kh_loadpriv(key_file *kf, key *k, key_data *d,
a_format(e, "bad-group", "%s", err, A_END);
goto fail_1;
}
a_format(e, "bad-group", "%s", err, A_END);
goto fail_1;
}
+ K = kd->grp->ops->mul(kd->grp, kd->k, 0);
+ ok = kd->grp->ops->eq(kd->grp, kd->K, K);
+ kd->grp->ops->freege(kd->grp, K);
+ if (!ok) {
+ a_format(e, "incorrect-public-key", A_END);
+ goto fail_1;
+ }
return (0);
fail_1:
return (0);
fail_1: