diff options
author | Damien Miller <djm@mindrot.org> | 2014-01-12 19:21:22 +1100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2014-01-12 19:21:22 +1100 |
commit | 91b580e4bec55118bf96ab3cdbe5a50839e75d0a (patch) | |
tree | 32e4083c5a8cd285e1b0b13f9b77992db535cba4 /kexc25519.c | |
parent | af5d4481f4c7c8c3c746e68b961bb85ef907800e (diff) |
- djm@cvs.openbsd.org 2014/01/12 08:13:13
[bufaux.c buffer.h kex.c kex.h kexc25519.c kexc25519c.c kexc25519s.c]
[kexdhc.c kexdhs.c kexecdhc.c kexecdhs.c kexgexc.c kexgexs.c]
avoid use of OpenSSL BIGNUM type and functions for KEX with
Curve25519 by adding a buffer_put_bignum2_from_string() that stores
a string using the bignum encoding rules. Will make it easier to
build a reduced-feature OpenSSH without OpenSSL in the future;
ok markus@
Diffstat (limited to 'kexc25519.c')
-rw-r--r-- | kexc25519.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/kexc25519.c b/kexc25519.c index 8dd363991..48ca4aaa2 100644 --- a/kexc25519.c +++ b/kexc25519.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: kexc25519.c,v 1.3 2014/01/09 23:20:00 djm Exp $ */ | 1 | /* $OpenBSD: kexc25519.c,v 1.4 2014/01/12 08:13:13 djm Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2001, 2013 Markus Friedl. All rights reserved. | 3 | * Copyright (c) 2001, 2013 Markus Friedl. All rights reserved. |
4 | * Copyright (c) 2010 Damien Miller. All rights reserved. | 4 | * Copyright (c) 2010 Damien Miller. All rights reserved. |
@@ -58,23 +58,19 @@ kexc25519_keygen(u_char key[CURVE25519_SIZE], u_char pub[CURVE25519_SIZE]) | |||
58 | crypto_scalarmult_curve25519(pub, key, basepoint); | 58 | crypto_scalarmult_curve25519(pub, key, basepoint); |
59 | } | 59 | } |
60 | 60 | ||
61 | BIGNUM * | 61 | void |
62 | kexc25519_shared_key(const u_char key[CURVE25519_SIZE], | 62 | kexc25519_shared_key(const u_char key[CURVE25519_SIZE], |
63 | const u_char pub[CURVE25519_SIZE]) | 63 | const u_char pub[CURVE25519_SIZE], Buffer *out) |
64 | { | 64 | { |
65 | u_char shared_key[CURVE25519_SIZE]; | 65 | u_char shared_key[CURVE25519_SIZE]; |
66 | BIGNUM *shared_secret; | ||
67 | 66 | ||
68 | crypto_scalarmult_curve25519(shared_key, key, pub); | 67 | crypto_scalarmult_curve25519(shared_key, key, pub); |
69 | #ifdef DEBUG_KEXECDH | 68 | #ifdef DEBUG_KEXECDH |
70 | dump_digest("shared secret", shared_key, CURVE25519_SIZE); | 69 | dump_digest("shared secret", shared_key, CURVE25519_SIZE); |
71 | #endif | 70 | #endif |
72 | if ((shared_secret = BN_new()) == NULL) | 71 | buffer_clear(out); |
73 | fatal("%s: BN_new failed", __func__); | 72 | buffer_put_bignum2_from_string(out, shared_key, CURVE25519_SIZE); |
74 | if (BN_bin2bn(shared_key, sizeof(shared_key), shared_secret) == NULL) | ||
75 | fatal("%s: BN_bin2bn failed", __func__); | ||
76 | memset(shared_key, 0, CURVE25519_SIZE); /* XXX explicit_bzero() */ | 73 | memset(shared_key, 0, CURVE25519_SIZE); /* XXX explicit_bzero() */ |
77 | return (shared_secret); | ||
78 | } | 74 | } |
79 | 75 | ||
80 | void | 76 | void |
@@ -87,7 +83,7 @@ kex_c25519_hash( | |||
87 | u_char *serverhostkeyblob, int sbloblen, | 83 | u_char *serverhostkeyblob, int sbloblen, |
88 | const u_char client_dh_pub[CURVE25519_SIZE], | 84 | const u_char client_dh_pub[CURVE25519_SIZE], |
89 | const u_char server_dh_pub[CURVE25519_SIZE], | 85 | const u_char server_dh_pub[CURVE25519_SIZE], |
90 | const BIGNUM *shared_secret, | 86 | const u_char *shared_secret, u_int secretlen, |
91 | u_char **hash, u_int *hashlen) | 87 | u_char **hash, u_int *hashlen) |
92 | { | 88 | { |
93 | Buffer b; | 89 | Buffer b; |
@@ -108,7 +104,7 @@ kex_c25519_hash( | |||
108 | buffer_put_string(&b, serverhostkeyblob, sbloblen); | 104 | buffer_put_string(&b, serverhostkeyblob, sbloblen); |
109 | buffer_put_string(&b, client_dh_pub, CURVE25519_SIZE); | 105 | buffer_put_string(&b, client_dh_pub, CURVE25519_SIZE); |
110 | buffer_put_string(&b, server_dh_pub, CURVE25519_SIZE); | 106 | buffer_put_string(&b, server_dh_pub, CURVE25519_SIZE); |
111 | buffer_put_bignum2(&b, shared_secret); | 107 | buffer_append(&b, shared_secret, secretlen); |
112 | 108 | ||
113 | #ifdef DEBUG_KEX | 109 | #ifdef DEBUG_KEX |
114 | buffer_dump(&b); | 110 | buffer_dump(&b); |