diff options
Diffstat (limited to 'kexkemc.c')
-rw-r--r-- | kexkemc.c | 24 |
1 files changed, 12 insertions, 12 deletions
@@ -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; |