summaryrefslogtreecommitdiff
path: root/kexc25519s.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2014-01-12 19:21:22 +1100
committerDamien Miller <djm@mindrot.org>2014-01-12 19:21:22 +1100
commit91b580e4bec55118bf96ab3cdbe5a50839e75d0a (patch)
tree32e4083c5a8cd285e1b0b13f9b77992db535cba4 /kexc25519s.c
parentaf5d4481f4c7c8c3c746e68b961bb85ef907800e (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.c15
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 @@
42void 42void
43kexc25519_server(Kex *kex) 43kexc25519_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}