summaryrefslogtreecommitdiff
path: root/kexkemc.c
diff options
context:
space:
mode:
Diffstat (limited to 'kexkemc.c')
-rw-r--r--kexkemc.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/kexkemc.c b/kexkemc.c
index 55055de27..942be5746 100644
--- a/kexkemc.c
+++ b/kexkemc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexkemc.c,v 1.4 2019/01/21 10:29:56 djm Exp $ */ 1/* $OpenBSD: kexkemc.c,v 1.5 2019/01/21 10:35:09 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2019 Markus Friedl. All rights reserved. 3 * Copyright (c) 2019 Markus Friedl. All rights reserved.
4 * 4 *
@@ -85,10 +85,10 @@ input_kex_kem_reply(int type, u_int32_t seq, struct ssh *ssh)
85 struct kex *kex = ssh->kex; 85 struct kex *kex = ssh->kex;
86 struct sshkey *server_host_key = NULL; 86 struct sshkey *server_host_key = NULL;
87 struct sshbuf *shared_secret = NULL; 87 struct sshbuf *shared_secret = NULL;
88 u_char *server_pubkey = NULL; 88 struct sshbuf *server_blob = NULL;
89 u_char *server_host_key_blob = NULL, *signature = NULL; 89 u_char *server_host_key_blob = NULL, *signature = NULL;
90 u_char hash[SSH_DIGEST_MAX_LENGTH]; 90 u_char hash[SSH_DIGEST_MAX_LENGTH];
91 size_t slen, pklen, sbloblen, hashlen; 91 size_t slen, sbloblen, hashlen;
92 int r; 92 int r;
93 93
94 /* hostkey */ 94 /* hostkey */
@@ -102,7 +102,7 @@ input_kex_kem_reply(int type, u_int32_t seq, struct ssh *ssh)
102 102
103 /* Q_S, server public key */ 103 /* Q_S, server public key */
104 /* signed H */ 104 /* signed H */
105 if ((r = sshpkt_get_string(ssh, &server_pubkey, &pklen)) != 0 || 105 if ((r = sshpkt_getb_froms(ssh, &server_blob)) != 0 ||
106 (r = sshpkt_get_string(ssh, &signature, &slen)) != 0 || 106 (r = sshpkt_get_string(ssh, &signature, &slen)) != 0 ||
107 (r = sshpkt_get_end(ssh)) != 0) 107 (r = sshpkt_get_end(ssh)) != 0)
108 goto out; 108 goto out;
@@ -114,16 +114,16 @@ input_kex_kem_reply(int type, u_int32_t seq, struct ssh *ssh)
114 case KEX_DH_GRP14_SHA256: 114 case KEX_DH_GRP14_SHA256:
115 case KEX_DH_GRP16_SHA512: 115 case KEX_DH_GRP16_SHA512:
116 case KEX_DH_GRP18_SHA512: 116 case KEX_DH_GRP18_SHA512:
117 r = kex_dh_dec(kex, server_pubkey, pklen, &shared_secret); 117 r = kex_dh_dec(kex, server_blob, &shared_secret);
118 break; 118 break;
119 case KEX_ECDH_SHA2: 119 case KEX_ECDH_SHA2:
120 r = kex_ecdh_dec(kex, server_pubkey, pklen, &shared_secret); 120 r = kex_ecdh_dec(kex, server_blob, &shared_secret);
121 break; 121 break;
122 case KEX_C25519_SHA256: 122 case KEX_C25519_SHA256:
123 r = kex_c25519_dec(kex, server_pubkey, pklen, &shared_secret); 123 r = kex_c25519_dec(kex, server_blob, &shared_secret);
124 break; 124 break;
125 case KEX_KEM_SNTRUP4591761X25519_SHA512: 125 case KEX_KEM_SNTRUP4591761X25519_SHA512:
126 r = kex_kem_sntrup4591761x25519_dec(kex, server_pubkey, pklen, 126 r = kex_kem_sntrup4591761x25519_dec(kex, server_blob,
127 &shared_secret); 127 &shared_secret);
128 break; 128 break;
129 default: 129 default:
@@ -142,9 +142,9 @@ input_kex_kem_reply(int type, u_int32_t seq, struct ssh *ssh)
142 sshbuf_ptr(kex->my), sshbuf_len(kex->my), 142 sshbuf_ptr(kex->my), sshbuf_len(kex->my),
143 sshbuf_ptr(kex->peer), sshbuf_len(kex->peer), 143 sshbuf_ptr(kex->peer), sshbuf_len(kex->peer),
144 server_host_key_blob, sbloblen, 144 server_host_key_blob, sbloblen,
145 sshbuf_ptr(kex->kem_client_pub), sshbuf_len(kex->kem_client_pub), 145 kex->kem_client_pub,
146 server_pubkey, pklen, 146 server_blob,
147 sshbuf_ptr(shared_secret), sshbuf_len(shared_secret), 147 shared_secret,
148 hash, &hashlen)) != 0) 148 hash, &hashlen)) != 0)
149 goto out; 149 goto out;
150 150
@@ -160,9 +160,9 @@ out:
160 explicit_bzero(kex->sntrup4591761_client_key, 160 explicit_bzero(kex->sntrup4591761_client_key,
161 sizeof(kex->sntrup4591761_client_key)); 161 sizeof(kex->sntrup4591761_client_key));
162 free(server_host_key_blob); 162 free(server_host_key_blob);
163 free(server_pubkey);
164 free(signature); 163 free(signature);
165 sshkey_free(server_host_key); 164 sshkey_free(server_host_key);
165 sshbuf_free(server_blob);
166 sshbuf_free(shared_secret); 166 sshbuf_free(shared_secret);
167 sshbuf_free(kex->kem_client_pub); 167 sshbuf_free(kex->kem_client_pub);
168 kex->kem_client_pub = NULL; 168 kex->kem_client_pub = NULL;