summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dropbearkey.c57
-rw-r--r--ecdsa.h6
2 files changed, 44 insertions, 19 deletions
diff --git a/dropbearkey.c b/dropbearkey.c
index 8bc114c..1d3dfe7 100644
--- a/dropbearkey.c
+++ b/dropbearkey.c
@@ -76,7 +76,7 @@ static void printhelp(char * progname) {
" dss\n"
#endif
#ifdef DROPBEAR_ECDSA
- " ecdsa\n"
+ " ecdsa\n"
#endif
"-f filename Use filename for the secret key\n"
"-s bits Key size in bits, should be a multiple of 8 (optional)\n"
@@ -200,23 +200,44 @@ int main(int argc, char ** argv) {
}
// TODO: put RSA and DSS size checks into genrsa.c etc
- if (keytype == DROPBEAR_SIGNKEY_DSS && bits != 1024) {
- fprintf(stderr, "DSS keys have a fixed size of 1024 bits\n");
- exit(EXIT_FAILURE);
- } else if (bits < 512 || bits > 4096 || (bits % 8 != 0)) {
- fprintf(stderr, "Bits must satisfy 512 <= bits <= 4096, and be a"
- " multiple of 8\n");
- exit(EXIT_FAILURE);
- }
- } else {
- if (keytype == DROPBEAR_SIGNKEY_DSS) {
- bits = DSS_DEFAULT_SIZE;
- } else if (keytype == DROPBEAR_SIGNKEY_RSA) {
- bits = RSA_DEFAULT_SIZE;
- } else if (keytype == DROPBEAR_SIGNKEY_ECDSA_KEYGEN) {
- bits = ECDSA_DEFAULT_SIZE;
- } else {
- exit(EXIT_FAILURE); /* not reached */
+ switch (keytype) {
+#ifdef DROPBEAR_RSA
+ case DROPBEAR_SIGNKEY_RSA:
+ if (bits < 512 || bits > 4096 || (bits % 8 != 0)) {
+ fprintf(stderr, "Bits must satisfy 512 <= bits <= 4096, and be a"
+ " multiple of 8\n");
+ exit(EXIT_FAILURE);
+ }
+ break;
+#endif
+#ifdef DROPEAR_DSS
+ case DROPBEAR_SIGNKEY_DSS:
+ if (bits != 1024) {
+ fprintf(stderr, "DSS keys have a fixed size of 1024 bits\n");
+ exit(EXIT_FAILURE);
+ }
+#endif
+ // pass. ecdsa handles checks itself
+ }
+
+ switch (keytype) {
+#ifdef DROPBEAR_RSA
+ case DROPBEAR_SIGNKEY_RSA:
+ bits = RSA_DEFAULT_SIZE;
+ break;
+#endif
+#ifdef DROPBEAR_DSS
+ case DROPBEAR_SIGNKEY_DSS:
+ bits = DSS_DEFAULT_SIZE;
+ break;
+#endif
+#ifdef DROPBEAR_ECDSA
+ case DROPBEAR_SIGNKEY_ECDSA_KEYGEN:
+ bits = ECDSA_DEFAULT_SIZE;
+ break;
+#endif
+ default:
+ exit(EXIT_FAILURE); /* not reached */
}
}
diff --git a/ecdsa.h b/ecdsa.h
index db4ae18..84e4000 100644
--- a/ecdsa.h
+++ b/ecdsa.h
@@ -5,6 +5,8 @@
#include "buffer.h"
#include "signkey.h"
+#ifdef DROPBEAR_ECDSA
+
#ifdef DROPBEAR_ECC_256
#define ECDSA_DEFAULT_SIZE 256
#elif DROPBEAR_ECC_384
@@ -25,4 +27,6 @@ enum signkey_type ecdsa_signkey_type(ecc_key * key);
void buf_put_ecdsa_sign(buffer *buf, ecc_key *key, buffer *data_buf);
int buf_ecdsa_verify(buffer *buf, ecc_key *key, buffer *data_buf);
-#endif // _ECDSA_H_ \ No newline at end of file
+#endif
+
+#endif // _ECDSA_H_