summaryrefslogtreecommitdiff
path: root/ssh-keygen.c
diff options
context:
space:
mode:
authordjm@openbsd.org <djm@openbsd.org>2017-05-07 23:15:59 +0000
committerDamien Miller <djm@mindrot.org>2017-05-08 09:21:22 +1000
commitbd636f40911094a39c2920bf87d2ec340533c152 (patch)
tree53c4c9655827d6433a26a510f46081dfc4b72b6d /ssh-keygen.c
parent70c1218fc45757a030285051eb4d209403f54785 (diff)
upstream commit
Refuse RSA keys <1024 bits in length. Improve reporting for keys that do not meet this requirement. ok markus@ Upstream-ID: b385e2a7b13b1484792ee681daaf79e1e203df6c
Diffstat (limited to 'ssh-keygen.c')
-rw-r--r--ssh-keygen.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/ssh-keygen.c b/ssh-keygen.c
index 51c24bc55..7886582d7 100644
--- a/ssh-keygen.c
+++ b/ssh-keygen.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keygen.c,v 1.302 2017/04/30 23:18:44 djm Exp $ */ 1/* $OpenBSD: ssh-keygen.c,v 1.303 2017/05/07 23:15:59 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -226,13 +226,21 @@ type_bits_valid(int type, const char *name, u_int32_t *bitsp)
226 OPENSSL_DSA_MAX_MODULUS_BITS : OPENSSL_RSA_MAX_MODULUS_BITS; 226 OPENSSL_DSA_MAX_MODULUS_BITS : OPENSSL_RSA_MAX_MODULUS_BITS;
227 if (*bitsp > maxbits) 227 if (*bitsp > maxbits)
228 fatal("key bits exceeds maximum %d", maxbits); 228 fatal("key bits exceeds maximum %d", maxbits);
229 if (type == KEY_DSA && *bitsp != 1024) 229 switch (type) {
230 fatal("DSA keys must be 1024 bits"); 230 case KEY_DSA:
231 else if (type != KEY_ECDSA && type != KEY_ED25519 && *bitsp < 1024) 231 if (*bitsp != 1024)
232 fatal("Key must at least be 1024 bits"); 232 fatal("Invalid DSA key length: must be 1024 bits");
233 else if (type == KEY_ECDSA && sshkey_ecdsa_bits_to_nid(*bitsp) == -1) 233 break;
234 fatal("Invalid ECDSA key length - valid lengths are " 234 case KEY_RSA:
235 "256, 384 or 521 bits"); 235 if (*bitsp < SSH_RSA_MINIMUM_MODULUS_SIZE)
236 fatal("Invalid RSA key length: minimum is %d bits",
237 SSH_RSA_MINIMUM_MODULUS_SIZE);
238 break;
239 case KEY_ECDSA:
240 if (sshkey_ecdsa_bits_to_nid(*bitsp) == -1)
241 fatal("Invalid ECDSA key length: valid lengths are "
242 "256, 384 or 521 bits");
243 }
236#endif 244#endif
237} 245}
238 246