version 1.29, 2019/01/20 23:00:12 |
version 1.30, 2019/01/20 23:01:59 |
|
|
CK_SESSION_HANDLE session; |
CK_SESSION_HANDLE session; |
CK_FUNCTION_LIST *f = NULL; |
CK_FUNCTION_LIST *f = NULL; |
CK_RV rv; |
CK_RV rv; |
|
ASN1_OCTET_STRING *octet = NULL; |
EC_KEY *ec = NULL; |
EC_KEY *ec = NULL; |
EC_GROUP *group = NULL; |
EC_GROUP *group = NULL; |
struct sshkey *key = NULL; |
struct sshkey *key = NULL; |
|
|
goto fail; |
goto fail; |
} |
} |
|
|
attrp = (const unsigned char *)key_attr[1].pValue; |
attrp = key_attr[1].pValue; |
if (o2i_ECPublicKey(&ec, &attrp, key_attr[1].ulValueLen) == NULL) { |
octet = d2i_ASN1_OCTET_STRING(NULL, &attrp, key_attr[1].ulValueLen); |
/* try to skip DER header (octet string type and length byte) */ |
if (octet == NULL) { |
attrp = (const unsigned char *)key_attr[1].pValue + 2; |
ossl_error("d2i_ASN1_OCTET_STRING failed"); |
if (o2i_ECPublicKey(&ec, &attrp, key_attr[1].ulValueLen - 2) |
goto fail; |
== NULL) { |
|
ossl_error("o2i_ECPublicKey failed"); |
|
goto fail; |
|
} |
|
} |
} |
|
attrp = octet->data; |
|
if (o2i_ECPublicKey(&ec, &attrp, octet->length) == NULL) { |
|
ossl_error("o2i_ECPublicKey failed"); |
|
goto fail; |
|
} |
|
|
nid = sshkey_ecdsa_key_to_nid(ec); |
nid = sshkey_ecdsa_key_to_nid(ec); |
if (nid < 0) { |
if (nid < 0) { |
|
|
EC_KEY_free(ec); |
EC_KEY_free(ec); |
if (group) |
if (group) |
EC_GROUP_free(group); |
EC_GROUP_free(group); |
|
if (octet) |
|
ASN1_OCTET_STRING_free(octet); |
|
|
return (key); |
return (key); |
} |
} |