X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/blobdiff_plain/cd332296749e690ab32b786cc4e74ea6b20fb377..a96070d4a78780ec40d58924df12a934dd7768ed:/key.c diff --git a/key.c b/key.c index 8623fd30..2000c275 100644 --- a/key.c +++ b/key.c @@ -9,7 +9,7 @@ * called by a name other than "ssh" or "Secure Shell". * * - * Copyright (c) 2000 Markus Friedl. All rights reserved. + * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -32,7 +32,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "includes.h" -RCSID("$OpenBSD: key.c,v 1.23 2001/04/05 10:42:50 markus Exp $"); +RCSID("$OpenBSD: key.c,v 1.28 2001/06/25 08:25:37 markus Exp $"); #include @@ -153,7 +153,7 @@ key_equal(Key *a, Key *b) return 0; } -u_char* +static u_char* key_fingerprint_raw(Key *k, enum fp_type dgst_type, size_t *dgst_raw_length) { EVP_MD *md = NULL; @@ -210,13 +210,13 @@ key_fingerprint_raw(Key *k, enum fp_type dgst_type, size_t *dgst_raw_length) return retval; } -char* +static char* key_fingerprint_hex(u_char* dgst_raw, size_t dgst_raw_len) { char *retval; int i; - retval = xmalloc(dgst_raw_len * 3); + retval = xmalloc(dgst_raw_len * 3 + 1); retval[0] = '\0'; for(i = 0; i < dgst_raw_len; i++) { char hex[4]; @@ -227,7 +227,7 @@ key_fingerprint_hex(u_char* dgst_raw, size_t dgst_raw_len) return retval; } -char* +static char* key_fingerprint_bubblebabble(u_char* dgst_raw, size_t dgst_raw_len) { char vowels[] = { 'a', 'e', 'i', 'o', 'u', 'y' }; @@ -308,7 +308,7 @@ key_fingerprint(Key *k, enum fp_type dgst_type, enum fp_rep dgst_rep) * last processed (and maybe modified) character. Note that this may modify * the buffer containing the number. */ -int +static int read_bignum(char **cpp, BIGNUM * value) { char *cp = *cpp; @@ -344,7 +344,7 @@ read_bignum(char **cpp, BIGNUM * value) *cpp = cp; return 1; } -int +static int write_bignum(FILE *f, BIGNUM *num) { char *buf = BN_bn2dec(num); @@ -544,7 +544,7 @@ key_size(Key *k){ return 0; } -RSA * +static RSA * rsa_generate_private_key(u_int bits) { RSA *private; @@ -554,7 +554,7 @@ rsa_generate_private_key(u_int bits) return private; } -DSA* +static DSA* dsa_generate_private_key(u_int bits) { DSA *private = DSA_generate_parameters(bits, NULL, 0, NULL, NULL, NULL, NULL); @@ -629,6 +629,28 @@ key_type_from_name(char *name) return KEY_UNSPEC; } +int +key_names_valid2(const char *names) +{ + char *s, *cp, *p; + + if (names == NULL || strcmp(names, "") == 0) + return 0; + s = cp = xstrdup(names); + for ((p = strsep(&cp, ",")); p && *p != '\0'; + (p = strsep(&cp, ","))) { + switch (key_type_from_name(p)) { + case KEY_RSA1: + case KEY_UNSPEC: + xfree(s); + return 0; + } + } + debug3("key names ok: [%s]", names); + xfree(s); + return 1; +} + Key * key_from_blob(char *blob, int blen) { @@ -746,6 +768,9 @@ key_verify( u_char *signature, int signaturelen, u_char *data, int datalen) { + if (signaturelen == 0) + return -1; + switch(key->type){ case KEY_DSA: return ssh_dss_verify(key, signature, signaturelen, data, datalen);