version 1.20, 2001/03/11 15:13:09 |
version 1.21, 2001/03/11 18:29:51 |
|
|
u_char* |
u_char* |
key_fingerprint_raw(Key *k, enum fp_type dgst_type, size_t *dgst_raw_length) |
key_fingerprint_raw(Key *k, enum fp_type dgst_type, size_t *dgst_raw_length) |
{ |
{ |
|
EVP_MD *md = NULL; |
|
EVP_MD_CTX ctx; |
u_char *blob = NULL; |
u_char *blob = NULL; |
u_char *retval = NULL; |
u_char *retval = NULL; |
int len = 0; |
int len = 0; |
|
|
|
|
*dgst_raw_length = 0; |
*dgst_raw_length = 0; |
|
|
|
switch (dgst_type) { |
|
case SSH_FP_MD5: |
|
md = EVP_md5(); |
|
break; |
|
case SSH_FP_SHA1: |
|
md = EVP_sha1(); |
|
break; |
|
default: |
|
fatal("key_fingerprint_raw: bad digest type %d", |
|
dgst_type); |
|
} |
switch (k->type) { |
switch (k->type) { |
case KEY_RSA1: |
case KEY_RSA1: |
nlen = BN_num_bytes(k->rsa->n); |
nlen = BN_num_bytes(k->rsa->n); |
|
|
break; |
break; |
} |
} |
if (blob != NULL) { |
if (blob != NULL) { |
EVP_MD *md = NULL; |
|
EVP_MD_CTX ctx; |
|
|
|
retval = xmalloc(EVP_MAX_MD_SIZE); |
retval = xmalloc(EVP_MAX_MD_SIZE); |
|
|
switch (dgst_type) { |
|
case SSH_FP_MD5: |
|
md = EVP_md5(); |
|
break; |
|
case SSH_FP_SHA1: |
|
md = EVP_sha1(); |
|
break; |
|
default: |
|
fatal("key_fingerprint_raw: bad digest type %d", |
|
dgst_type); |
|
} |
|
|
|
EVP_DigestInit(&ctx, md); |
EVP_DigestInit(&ctx, md); |
EVP_DigestUpdate(&ctx, blob, len); |
EVP_DigestUpdate(&ctx, blob, len); |
EVP_DigestFinal(&ctx, retval, NULL); |
EVP_DigestFinal(&ctx, retval, NULL); |