add support for split keys in engine_opensc.c (backported from the

opensc stuff in openssh)
Thanks to Neil Dunbar


git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@1767 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
nils 2004-04-17 22:21:28 +00:00
parent b057f4055d
commit 5e080b8202
1 changed files with 11 additions and 4 deletions

View File

@ -113,7 +113,14 @@ void sc_set_pubkey_data(EVP_PKEY * key_out, sc_pkcs15_pubkey_t * pubkey)
/* private key operations */
int sc_prkey_op_init(const RSA * rsa, struct sc_pkcs15_object **key_obj_out)
#define SC_USAGE_DECRYPT SC_PKCS15_PRKEY_USAGE_DECRYPT | \
SC_PKCS15_PRKEY_USAGE_UNWRAP
#define SC_USAGE_SIGN SC_PKCS15_PRKEY_USAGE_SIGN | \
SC_PKCS15_PRKEY_USAGE_SIGNRECOVER
int sc_prkey_op_init(const RSA * rsa, struct sc_pkcs15_object **key_obj_out,
unsigned int usage)
{
int r;
struct sc_pkcs15_object *key_obj;
@ -136,7 +143,7 @@ int sc_prkey_op_init(const RSA * rsa, struct sc_pkcs15_object **key_obj_out)
goto err;
}
}
r = sc_pkcs15_find_prkey_by_id(p15card, key_id, &key_obj);
r = sc_pkcs15_find_prkey_by_id_usage(p15card, key_id, usage, &key_obj);
if (r) {
fprintf(stderr, "Unable to find private key from SmartCard: %s",
sc_strerror(r));
@ -290,7 +297,7 @@ sc_private_decrypt(int flen, const u_char * from, u_char * to, RSA * rsa,
if (padding != RSA_PKCS1_PADDING)
return -1;
r = sc_prkey_op_init(rsa, &key_obj);
r = sc_prkey_op_init(rsa, &key_obj, SC_USAGE_DECRYPT);
if (r)
return -1;
r = sc_pkcs15_decipher(p15card, key_obj, 0, from, flen, to, flen);
@ -314,7 +321,7 @@ sc_sign(int type, const u_char * m, unsigned int m_len,
if (!quiet)
fprintf(stderr, "signing with type %d\n", type);
r = sc_prkey_op_init(rsa, &key_obj);
r = sc_prkey_op_init(rsa, &key_obj, SC_USAGE_SIGN);
if (r)
return -1;
/* FIXME: length of sigret correct? */