break;
default:
+ _gnutls_debug_log("requested reading public key of unsupported type %u\n", (unsigned)key_type);
ret = gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE);
goto cleanup;
}
return GNUTLS_PK_UNKNOWN;
}
-static inline int pk_to_genmech(gnutls_pk_algorithm_t pk)
+static inline int pk_to_genmech(gnutls_pk_algorithm_t pk, ck_key_type_t *type)
{
- if (pk == GNUTLS_PK_DSA)
+ if (pk == GNUTLS_PK_DSA) {
+ *type = CKK_DSA;
return CKM_DSA_KEY_PAIR_GEN;
- else if (pk == GNUTLS_PK_EC)
+ } else if (pk == GNUTLS_PK_EC) {
+ *type = CKK_ECDSA;
return CKM_ECDSA_KEY_PAIR_GEN;
- else
+ } else {
+ *type = CKK_RSA;
return CKM_RSA_PKCS_KEY_PAIR_GEN;
+ }
}
ck_rv_t
struct ck_mechanism mech;
gnutls_pubkey_t pkey = NULL;
gnutls_pkcs11_obj_t obj = NULL;
+ ck_key_type_t key_type;
PKCS11_CHECK_INIT;
a_val = p_val = 0;
mech.parameter = NULL;
mech.parameter_len = 0;
- mech.mechanism = pk_to_genmech(pk);
+ mech.mechanism = pk_to_genmech(pk, &key_type);
switch (pk) {
case GNUTLS_PK_RSA:
obj->type = GNUTLS_PKCS11_OBJ_PUBKEY;
ret =
pkcs11_read_pubkey(sinfo.module, sinfo.pks, pub,
- mech.mechanism, obj->pubkey);
+ key_type, obj->pubkey);
if (ret < 0) {
gnutls_assert();
goto cleanup;