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 /kexc25519s.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 'kexc25519s.c')
-rw-r--r-- | kexc25519s.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/kexc25519s.c b/kexc25519s.c index dc4f56c80..2b8e8efa1 100644 --- a/kexc25519s.c +++ b/kexc25519s.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: kexc25519s.c,v 1.3 2014/01/09 23:20:00 djm Exp $ */ | 1 | /* $OpenBSD: kexc25519s.c,v 1.4 2014/01/12 08:13:13 djm Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2001 Markus Friedl. All rights reserved. | 3 | * Copyright (c) 2001 Markus Friedl. All rights reserved. |
4 | * Copyright (c) 2010 Damien Miller. All rights reserved. | 4 | * Copyright (c) 2010 Damien Miller. All rights reserved. |
@@ -42,7 +42,6 @@ | |||
42 | void | 42 | void |
43 | kexc25519_server(Kex *kex) | 43 | kexc25519_server(Kex *kex) |
44 | { | 44 | { |
45 | BIGNUM *shared_secret; | ||
46 | Key *server_host_private, *server_host_public; | 45 | Key *server_host_private, *server_host_public; |
47 | u_char *server_host_key_blob = NULL, *signature = NULL; | 46 | u_char *server_host_key_blob = NULL, *signature = NULL; |
48 | u_char server_key[CURVE25519_SIZE]; | 47 | u_char server_key[CURVE25519_SIZE]; |
@@ -50,6 +49,7 @@ kexc25519_server(Kex *kex) | |||
50 | u_char server_pubkey[CURVE25519_SIZE]; | 49 | u_char server_pubkey[CURVE25519_SIZE]; |
51 | u_char *hash; | 50 | u_char *hash; |
52 | u_int slen, sbloblen, hashlen; | 51 | u_int slen, sbloblen, hashlen; |
52 | Buffer shared_secret; | ||
53 | 53 | ||
54 | /* generate private key */ | 54 | /* generate private key */ |
55 | kexc25519_keygen(server_key, server_pubkey); | 55 | kexc25519_keygen(server_key, server_pubkey); |
@@ -76,7 +76,8 @@ kexc25519_server(Kex *kex) | |||
76 | dump_digest("client public key:", client_pubkey, CURVE25519_SIZE); | 76 | dump_digest("client public key:", client_pubkey, CURVE25519_SIZE); |
77 | #endif | 77 | #endif |
78 | 78 | ||
79 | shared_secret = kexc25519_shared_key(server_key, client_pubkey); | 79 | buffer_init(&shared_secret); |
80 | kexc25519_shared_key(server_key, client_pubkey, &shared_secret); | ||
80 | 81 | ||
81 | /* calc H */ | 82 | /* calc H */ |
82 | key_to_blob(server_host_public, &server_host_key_blob, &sbloblen); | 83 | key_to_blob(server_host_public, &server_host_key_blob, &sbloblen); |
@@ -89,7 +90,7 @@ kexc25519_server(Kex *kex) | |||
89 | server_host_key_blob, sbloblen, | 90 | server_host_key_blob, sbloblen, |
90 | client_pubkey, | 91 | client_pubkey, |
91 | server_pubkey, | 92 | server_pubkey, |
92 | shared_secret, | 93 | buffer_ptr(&shared_secret), buffer_len(&shared_secret), |
93 | &hash, &hashlen | 94 | &hash, &hashlen |
94 | ); | 95 | ); |
95 | 96 | ||
@@ -117,7 +118,9 @@ kexc25519_server(Kex *kex) | |||
117 | free(server_host_key_blob); | 118 | free(server_host_key_blob); |
118 | /* have keys, free server key */ | 119 | /* have keys, free server key */ |
119 | free(client_pubkey); | 120 | free(client_pubkey); |
120 | kex_derive_keys(kex, hash, hashlen, shared_secret); | 121 | |
121 | BN_clear_free(shared_secret); | 122 | kex_derive_keys(kex, hash, hashlen, |
123 | buffer_ptr(&shared_secret), buffer_len(&shared_secret)); | ||
124 | buffer_free(&shared_secret); | ||
122 | kex_finish(kex); | 125 | kex_finish(kex); |
123 | } | 126 | } |