summaryrefslogtreecommitdiff
path: root/ssh-keygen.c
diff options
context:
space:
mode:
Diffstat (limited to 'ssh-keygen.c')
-rw-r--r--ssh-keygen.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/ssh-keygen.c b/ssh-keygen.c
index d1b2a583a..bd7eea9af 100644
--- a/ssh-keygen.c
+++ b/ssh-keygen.c
@@ -12,7 +12,7 @@
12 */ 12 */
13 13
14#include "includes.h" 14#include "includes.h"
15RCSID("$OpenBSD: ssh-keygen.c,v 1.61 2001/05/25 14:37:32 markus Exp $"); 15RCSID("$OpenBSD: ssh-keygen.c,v 1.62 2001/06/23 06:41:10 markus Exp $");
16 16
17#include <openssl/evp.h> 17#include <openssl/evp.h>
18#include <openssl/pem.h> 18#include <openssl/pem.h>
@@ -187,7 +187,8 @@ do_convert_private_ssh2_from_blob(char *blob, int blen)
187{ 187{
188 Buffer b; 188 Buffer b;
189 Key *key = NULL; 189 Key *key = NULL;
190 int ignore, magic, rlen, ktype; 190 int magic, rlen, ktype, i1, i2, i3, i4;
191 u_long e;
191 char *type, *cipher; 192 char *type, *cipher;
192 193
193 buffer_init(&b); 194 buffer_init(&b);
@@ -199,13 +200,13 @@ do_convert_private_ssh2_from_blob(char *blob, int blen)
199 buffer_free(&b); 200 buffer_free(&b);
200 return NULL; 201 return NULL;
201 } 202 }
202 ignore = buffer_get_int(&b); 203 i1 = buffer_get_int(&b);
203 type = buffer_get_string(&b, NULL); 204 type = buffer_get_string(&b, NULL);
204 cipher = buffer_get_string(&b, NULL); 205 cipher = buffer_get_string(&b, NULL);
205 ignore = buffer_get_int(&b); 206 i2 = buffer_get_int(&b);
206 ignore = buffer_get_int(&b); 207 i3 = buffer_get_int(&b);
207 ignore = buffer_get_int(&b); 208 i4 = buffer_get_int(&b);
208 209 debug("ignore (%d %d %d %d)", i1,i2,i3,i4);
209 if (strcmp(cipher, "none") != 0) { 210 if (strcmp(cipher, "none") != 0) {
210 error("unsupported cipher %s", cipher); 211 error("unsupported cipher %s", cipher);
211 xfree(cipher); 212 xfree(cipher);
@@ -235,7 +236,17 @@ do_convert_private_ssh2_from_blob(char *blob, int blen)
235 buffer_get_bignum_bits(&b, key->dsa->priv_key); 236 buffer_get_bignum_bits(&b, key->dsa->priv_key);
236 break; 237 break;
237 case KEY_RSA: 238 case KEY_RSA:
238 if (!BN_set_word(key->rsa->e, (u_long) buffer_get_char(&b))) { 239 e = buffer_get_char(&b);
240 debug("e %lx", e);
241 if (e < 30) {
242 e <<= 8;
243 e += buffer_get_char(&b);
244 debug("e %lx", e);
245 e <<= 8;
246 e += buffer_get_char(&b);
247 debug("e %lx", e);
248 }
249 if (!BN_set_word(key->rsa->e, e)) {
239 buffer_free(&b); 250 buffer_free(&b);
240 key_free(key); 251 key_free(key);
241 return NULL; 252 return NULL;
@@ -258,8 +269,8 @@ do_convert_private_ssh2_from_blob(char *blob, int blen)
258 u_int slen; 269 u_int slen;
259 u_char *sig, data[10] = "abcde12345"; 270 u_char *sig, data[10] = "abcde12345";
260 271
261 key_sign(key, &sig, &slen, data, sizeof data); 272 key_sign(key, &sig, &slen, data, sizeof(data));
262 key_verify(key, sig, slen, data, sizeof data); 273 key_verify(key, sig, slen, data, sizeof(data));
263 xfree(sig); 274 xfree(sig);
264 } 275 }
265#endif 276#endif