=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/Attic/key.c,v retrieving revision 1.11.2.4 retrieving revision 1.11.2.5 diff -u -r1.11.2.4 -r1.11.2.5 --- src/usr.bin/ssh/Attic/key.c 2001/05/07 21:09:30 1.11.2.4 +++ src/usr.bin/ssh/Attic/key.c 2001/09/27 00:15:42 1.11.2.5 @@ -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.11.2.4 2001/05/07 21:09:30 jason Exp $"); +RCSID("$OpenBSD: key.c,v 1.11.2.5 2001/09/27 00:15:42 miod Exp $"); #include @@ -54,6 +54,7 @@ DSA *dsa; k = xmalloc(sizeof(*k)); k->type = type; + k->flags = 0; k->dsa = NULL; k->rsa = NULL; switch (k->type) { @@ -153,7 +154,7 @@ 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,7 +211,7 @@ return retval; } -char* +static char* key_fingerprint_hex(u_char* dgst_raw, size_t dgst_raw_len) { char *retval; @@ -227,7 +228,7 @@ 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 +309,7 @@ * 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 +345,7 @@ *cpp = cp; return 1; } -int +static int write_bignum(FILE *f, BIGNUM *num) { char *buf = BN_bn2dec(num); @@ -357,7 +358,7 @@ return 1; } -/* returns 1 ok, -1 error, 0 type mismatch */ +/* returns 1 ok, -1 error */ int key_read(Key *ret, char **cpp) { @@ -412,7 +413,7 @@ } else if (ret->type != type) { /* is a key, but different type */ debug3("key_read: type mismatch"); - return 0; + return -1; } len = 2*strlen(cp); blob = xmalloc(len); @@ -544,7 +545,7 @@ return 0; } -RSA * +static RSA * rsa_generate_private_key(u_int bits) { RSA *private; @@ -554,7 +555,7 @@ return private; } -DSA* +static DSA* dsa_generate_private_key(u_int bits) { DSA *private = DSA_generate_parameters(bits, NULL, 0, NULL, NULL, NULL, NULL); @@ -652,7 +653,7 @@ } Key * -key_from_blob(char *blob, int blen) +key_from_blob(u_char *blob, int blen) { Buffer b; char *ktype; @@ -727,8 +728,9 @@ buffer_put_bignum2(&b, key->rsa->n); break; default: - error("key_to_blob: illegal key type %d", key->type); - break; + error("key_to_blob: unsupported key type %d", key->type); + buffer_free(&b); + return 0; } len = buffer_len(&b); buf = xmalloc(len); @@ -768,6 +770,9 @@ 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);