diff options
Diffstat (limited to 'dsa.c')
-rw-r--r-- | dsa.c | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -28,7 +28,7 @@ | |||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include "includes.h" | 30 | #include "includes.h" |
31 | RCSID("$Id: dsa.c,v 1.7 2000/05/08 17:42:24 markus Exp $"); | 31 | RCSID("$OpenBSD: dsa.c,v 1.9 2000/06/20 01:39:41 markus Exp $"); |
32 | 32 | ||
33 | #include "ssh.h" | 33 | #include "ssh.h" |
34 | #include "xmalloc.h" | 34 | #include "xmalloc.h" |
@@ -72,7 +72,7 @@ dsa_key_from_blob( | |||
72 | buffer_append(&b, blob, blen); | 72 | buffer_append(&b, blob, blen); |
73 | ktype = buffer_get_string(&b, NULL); | 73 | ktype = buffer_get_string(&b, NULL); |
74 | if (strcmp(KEX_DSS, ktype) != 0) { | 74 | if (strcmp(KEX_DSS, ktype) != 0) { |
75 | error("dsa_key_from_blob: cannot handle type %s", ktype); | 75 | error("dsa_key_from_blob: cannot handle type %s", ktype); |
76 | key_free(key); | 76 | key_free(key); |
77 | return NULL; | 77 | return NULL; |
78 | } | 78 | } |
@@ -197,7 +197,6 @@ dsa_verify( | |||
197 | DSA_SIG *sig; | 197 | DSA_SIG *sig; |
198 | EVP_MD *evp_md = EVP_sha1(); | 198 | EVP_MD *evp_md = EVP_sha1(); |
199 | EVP_MD_CTX md; | 199 | EVP_MD_CTX md; |
200 | char *ktype; | ||
201 | unsigned char *sigblob; | 200 | unsigned char *sigblob; |
202 | char *txt; | 201 | char *txt; |
203 | unsigned int len; | 202 | unsigned int len; |
@@ -227,14 +226,24 @@ dsa_verify( | |||
227 | len = signaturelen; | 226 | len = signaturelen; |
228 | } else { | 227 | } else { |
229 | /* ietf-drafts */ | 228 | /* ietf-drafts */ |
229 | char *ktype; | ||
230 | buffer_init(&b); | 230 | buffer_init(&b); |
231 | buffer_append(&b, (char *) signature, signaturelen); | 231 | buffer_append(&b, (char *) signature, signaturelen); |
232 | ktype = buffer_get_string(&b, NULL); | 232 | ktype = buffer_get_string(&b, NULL); |
233 | if (strcmp(KEX_DSS, ktype) != 0) { | ||
234 | error("dsa_verify: cannot handle type %s", ktype); | ||
235 | buffer_free(&b); | ||
236 | return -1; | ||
237 | } | ||
233 | sigblob = (unsigned char *)buffer_get_string(&b, &len); | 238 | sigblob = (unsigned char *)buffer_get_string(&b, &len); |
234 | rlen = buffer_len(&b); | 239 | rlen = buffer_len(&b); |
235 | if(rlen != 0) | 240 | if(rlen != 0) { |
236 | error("remaining bytes in signature %d", rlen); | 241 | error("remaining bytes in signature %d", rlen); |
242 | buffer_free(&b); | ||
243 | return -1; | ||
244 | } | ||
237 | buffer_free(&b); | 245 | buffer_free(&b); |
246 | xfree(ktype); | ||
238 | } | 247 | } |
239 | 248 | ||
240 | if (len != SIGBLOB_LEN) { | 249 | if (len != SIGBLOB_LEN) { |