pkcs15init: allocate EC parameters
This commit is contained in:
parent
1123768ac3
commit
31124ac4f9
|
@ -1114,6 +1114,31 @@ void sc_print_cache(struct sc_card *card) {
|
|||
sc_print_path(&card->cache.current_df->path));
|
||||
}
|
||||
|
||||
int sc_copy_ec_params(struct sc_ec_parameters *dst, struct sc_ec_parameters *src)
|
||||
{
|
||||
if (!dst || !src)
|
||||
return SC_ERROR_INVALID_ARGUMENTS;
|
||||
|
||||
memset(dst, 0, sizeof(*dst));
|
||||
if (src->named_curve) {
|
||||
dst->named_curve = strdup(src->named_curve);
|
||||
if (!dst->named_curve)
|
||||
return SC_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
dst->id = src->id;
|
||||
if (src->der.value && src->der.len) {
|
||||
dst->der.value = malloc(src->der.len);
|
||||
if (!dst->der.value)
|
||||
return SC_ERROR_OUT_OF_MEMORY;
|
||||
memcpy(dst->der.value, src->der.value, src->der.len);
|
||||
dst->der.len = src->der.len;
|
||||
}
|
||||
src->type = dst->type;
|
||||
src->field_length = dst->field_length;
|
||||
|
||||
return SC_SUCCESS;
|
||||
}
|
||||
|
||||
scconf_block *
|
||||
sc_match_atr_block(sc_context_t *ctx, struct sc_card_driver *driver, struct sc_atr *atr)
|
||||
{
|
||||
|
|
|
@ -1315,6 +1315,15 @@ unsigned sc_crc32(unsigned char *value, size_t len);
|
|||
*/
|
||||
void sc_remote_data_init(struct sc_remote_data *rdata);
|
||||
|
||||
|
||||
/**
|
||||
* Copy and allocate if needed EC parameters data
|
||||
* @dst destination
|
||||
* @src source
|
||||
*/
|
||||
int sc_copy_ec_params(struct sc_ec_parameters *, struct sc_ec_parameters *);
|
||||
|
||||
|
||||
struct sc_card_error {
|
||||
unsigned int SWs;
|
||||
int errorno;
|
||||
|
|
|
@ -1314,10 +1314,14 @@ sc_pkcs15init_generate_key(struct sc_pkcs15_card *p15card, struct sc_profile *pr
|
|||
pubkey_args.usage = keygen_args->prkey_args.usage;
|
||||
pubkey_args.x509_usage = keygen_args->prkey_args.x509_usage;
|
||||
|
||||
if (keygen_args->prkey_args.key.algorithm == SC_ALGORITHM_GOSTR3410)
|
||||
if (keygen_args->prkey_args.key.algorithm == SC_ALGORITHM_GOSTR3410) {
|
||||
pubkey_args.params.gost = keygen_args->prkey_args.params.gost;
|
||||
else if (keygen_args->prkey_args.key.algorithm == SC_ALGORITHM_EC)
|
||||
}
|
||||
else if (keygen_args->prkey_args.key.algorithm == SC_ALGORITHM_EC) {
|
||||
pubkey_args.key.u.ec.params = keygen_args->prkey_args.key.u.ec.params;
|
||||
r = sc_copy_ec_params(&pubkey_args.key.u.ec.params, &keygen_args->prkey_args.key.u.ec.params);
|
||||
LOG_TEST_RET(ctx, r, "Cannot allocate EC parameters");
|
||||
}
|
||||
|
||||
/* Generate the private key on card */
|
||||
r = profile->ops->create_key(profile, p15card, object);
|
||||
|
|
Loading…
Reference in New Issue