diff options
Diffstat (limited to 'key.c')
-rw-r--r-- | key.c | 31 |
1 files changed, 14 insertions, 17 deletions
@@ -32,7 +32,7 @@ | |||
32 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 32 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
33 | */ | 33 | */ |
34 | #include "includes.h" | 34 | #include "includes.h" |
35 | RCSID("$OpenBSD: key.c,v 1.20 2001/03/11 15:13:09 jakob Exp $"); | 35 | RCSID("$OpenBSD: key.c,v 1.21 2001/03/11 18:29:51 markus Exp $"); |
36 | 36 | ||
37 | #include <openssl/evp.h> | 37 | #include <openssl/evp.h> |
38 | 38 | ||
@@ -156,6 +156,8 @@ key_equal(Key *a, Key *b) | |||
156 | u_char* | 156 | u_char* |
157 | key_fingerprint_raw(Key *k, enum fp_type dgst_type, size_t *dgst_raw_length) | 157 | key_fingerprint_raw(Key *k, enum fp_type dgst_type, size_t *dgst_raw_length) |
158 | { | 158 | { |
159 | EVP_MD *md = NULL; | ||
160 | EVP_MD_CTX ctx; | ||
159 | u_char *blob = NULL; | 161 | u_char *blob = NULL; |
160 | u_char *retval = NULL; | 162 | u_char *retval = NULL; |
161 | int len = 0; | 163 | int len = 0; |
@@ -163,6 +165,17 @@ key_fingerprint_raw(Key *k, enum fp_type dgst_type, size_t *dgst_raw_length) | |||
163 | 165 | ||
164 | *dgst_raw_length = 0; | 166 | *dgst_raw_length = 0; |
165 | 167 | ||
168 | switch (dgst_type) { | ||
169 | case SSH_FP_MD5: | ||
170 | md = EVP_md5(); | ||
171 | break; | ||
172 | case SSH_FP_SHA1: | ||
173 | md = EVP_sha1(); | ||
174 | break; | ||
175 | default: | ||
176 | fatal("key_fingerprint_raw: bad digest type %d", | ||
177 | dgst_type); | ||
178 | } | ||
166 | switch (k->type) { | 179 | switch (k->type) { |
167 | case KEY_RSA1: | 180 | case KEY_RSA1: |
168 | nlen = BN_num_bytes(k->rsa->n); | 181 | nlen = BN_num_bytes(k->rsa->n); |
@@ -184,23 +197,7 @@ key_fingerprint_raw(Key *k, enum fp_type dgst_type, size_t *dgst_raw_length) | |||
184 | break; | 197 | break; |
185 | } | 198 | } |
186 | if (blob != NULL) { | 199 | if (blob != NULL) { |
187 | EVP_MD *md = NULL; | ||
188 | EVP_MD_CTX ctx; | ||
189 | |||
190 | retval = xmalloc(EVP_MAX_MD_SIZE); | 200 | retval = xmalloc(EVP_MAX_MD_SIZE); |
191 | |||
192 | switch (dgst_type) { | ||
193 | case SSH_FP_MD5: | ||
194 | md = EVP_md5(); | ||
195 | break; | ||
196 | case SSH_FP_SHA1: | ||
197 | md = EVP_sha1(); | ||
198 | break; | ||
199 | default: | ||
200 | fatal("key_fingerprint_raw: bad digest type %d", | ||
201 | dgst_type); | ||
202 | } | ||
203 | |||
204 | EVP_DigestInit(&ctx, md); | 201 | EVP_DigestInit(&ctx, md); |
205 | EVP_DigestUpdate(&ctx, blob, len); | 202 | EVP_DigestUpdate(&ctx, blob, len); |
206 | EVP_DigestFinal(&ctx, retval, NULL); | 203 | EVP_DigestFinal(&ctx, retval, NULL); |