compile on Windows, minor codding style issues
This commit is contained in:
parent
457426543d
commit
8b07b9c5a7
|
@ -1123,11 +1123,12 @@ static int myeid_activate_card(struct sc_card *card)
|
||||||
|
|
||||||
static int myeid_get_info(struct sc_card *card, u8 *rbuf, size_t buflen)
|
static int myeid_get_info(struct sc_card *card, u8 *rbuf, size_t buflen)
|
||||||
{
|
{
|
||||||
int r;
|
|
||||||
sc_apdu_t apdu;
|
sc_apdu_t apdu;
|
||||||
|
int r;
|
||||||
|
u8 nameBuf[100];
|
||||||
|
|
||||||
LOG_FUNC_CALLED(card->ctx);
|
LOG_FUNC_CALLED(card->ctx);
|
||||||
|
|
||||||
sc_format_apdu(card, &apdu, SC_APDU_CASE_2_SHORT, 0xca, 0x01, 0xA0);
|
sc_format_apdu(card, &apdu, SC_APDU_CASE_2_SHORT, 0xca, 0x01, 0xA0);
|
||||||
apdu.resp = rbuf;
|
apdu.resp = rbuf;
|
||||||
apdu.resplen = buflen;
|
apdu.resplen = buflen;
|
||||||
|
@ -1143,13 +1144,12 @@ static int myeid_get_info(struct sc_card *card, u8 *rbuf, size_t buflen)
|
||||||
{
|
{
|
||||||
sc_log(card->ctx, "Unexpected response to GET DATA (applet info)\n");
|
sc_log(card->ctx, "Unexpected response to GET DATA (applet info)\n");
|
||||||
return SC_ERROR_INTERNAL;
|
return SC_ERROR_INTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* store the applet version */
|
/* store the applet version */
|
||||||
card->version.fw_major = rbuf[5] * 10 + rbuf[6];
|
card->version.fw_major = rbuf[5] * 10 + rbuf[6];
|
||||||
card->version.fw_minor = rbuf[7];
|
card->version.fw_minor = rbuf[7];
|
||||||
/* add version to name */
|
/* add version to name */
|
||||||
u8 nameBuf[100];
|
|
||||||
sprintf(nameBuf, "%s %d.%d.%d", card->name, rbuf[5], rbuf[6], rbuf[7]);
|
sprintf(nameBuf, "%s %d.%d.%d", card->name, rbuf[5], rbuf[6], rbuf[7]);
|
||||||
card->name = nameBuf;
|
card->name = nameBuf;
|
||||||
//card->driver->name
|
//card->driver->name
|
||||||
|
@ -1162,13 +1162,13 @@ static int myeid_get_serialnr(sc_card_t *card, sc_serial_number_t *serial)
|
||||||
u8 rbuf[256];
|
u8 rbuf[256];
|
||||||
|
|
||||||
LOG_FUNC_CALLED(card->ctx);
|
LOG_FUNC_CALLED(card->ctx);
|
||||||
|
|
||||||
/* if number cached, get it
|
/* if number cached, get it
|
||||||
if(card->serialnr.value) {
|
if(card->serialnr.value) {
|
||||||
memcpy(serial, &card->serialnr, sizeof(*serial));
|
memcpy(serial, &card->serialnr, sizeof(*serial));
|
||||||
LOG_FUNC_RETURN(card->ctx, r);
|
LOG_FUNC_RETURN(card->ctx, r);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
/* get number from card */
|
/* get number from card */
|
||||||
r = myeid_get_info(card, rbuf, sizeof(rbuf));
|
r = myeid_get_info(card, rbuf, sizeof(rbuf));
|
||||||
LOG_TEST_RET(card->ctx, r, "Get applet info failed");
|
LOG_TEST_RET(card->ctx, r, "Get applet info failed");
|
||||||
|
|
|
@ -575,7 +575,6 @@ sc_pkcs15_free_prkey(struct sc_pkcs15_prkey *key)
|
||||||
free(key->u.gostr3410.d.data);
|
free(key->u.gostr3410.d.data);
|
||||||
break;
|
break;
|
||||||
case SC_ALGORITHM_EC:
|
case SC_ALGORITHM_EC:
|
||||||
/* TODO: -DEE may not need much */
|
|
||||||
if (key->u.ec.params.der.value)
|
if (key->u.ec.params.der.value)
|
||||||
free(key->u.ec.params.der.value);
|
free(key->u.ec.params.der.value);
|
||||||
if (key->u.ec.params.named_curve)
|
if (key->u.ec.params.named_curve)
|
||||||
|
@ -668,38 +667,34 @@ sc_pkcs15_convert_prkey(struct sc_pkcs15_prkey *pkcs15_key, void *evp_key)
|
||||||
}
|
}
|
||||||
case EVP_PKEY_EC: {
|
case EVP_PKEY_EC: {
|
||||||
struct sc_pkcs15_prkey_ec *dst = &pkcs15_key->u.ec;
|
struct sc_pkcs15_prkey_ec *dst = &pkcs15_key->u.ec;
|
||||||
EC_KEY *src = EVP_PKEY_get0(pk);
|
EC_KEY *src = NULL;
|
||||||
|
const EC_GROUP *grp = NULL;
|
||||||
assert(src);
|
|
||||||
pkcs15_key->algorithm = SC_ALGORITHM_EC;
|
|
||||||
assert(EC_KEY_get0_private_key(src));
|
|
||||||
if (!sc_pkcs15_convert_bignum(&dst->privateD, EC_KEY_get0_private_key(src)))
|
|
||||||
return SC_ERROR_INCOMPATIBLE_KEY;
|
|
||||||
|
|
||||||
assert(EC_KEY_get0_public_key(src));
|
|
||||||
|
|
||||||
unsigned char buf[255];
|
unsigned char buf[255];
|
||||||
size_t buflen = 255;
|
size_t buflen = 255;
|
||||||
|
|
||||||
const EC_GROUP *grp = EC_KEY_get0_group(src);
|
|
||||||
if(grp == 0) {
|
|
||||||
//EC_KEY_free(src);
|
|
||||||
return SC_ERROR_INCOMPATIBLE_KEY;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get curve name */
|
|
||||||
int nid;
|
int nid;
|
||||||
|
|
||||||
|
src = EVP_PKEY_get0(pk);
|
||||||
|
assert(src);
|
||||||
|
assert(EC_KEY_get0_private_key(src));
|
||||||
|
assert(EC_KEY_get0_public_key(src));
|
||||||
|
|
||||||
|
pkcs15_key->algorithm = SC_ALGORITHM_EC;
|
||||||
|
if (!sc_pkcs15_convert_bignum(&dst->privateD, EC_KEY_get0_private_key(src)))
|
||||||
|
return SC_ERROR_INCOMPATIBLE_KEY;
|
||||||
|
|
||||||
|
grp = EC_KEY_get0_group(src);
|
||||||
|
if(grp == 0)
|
||||||
|
return SC_ERROR_INCOMPATIBLE_KEY;
|
||||||
|
|
||||||
|
/* get curve name */
|
||||||
nid = EC_GROUP_get_curve_name(grp);
|
nid = EC_GROUP_get_curve_name(grp);
|
||||||
if(nid != 0)
|
if(nid != 0)
|
||||||
dst->params.named_curve = strdup(OBJ_nid2sn(nid));
|
dst->params.named_curve = strdup(OBJ_nid2sn(nid));
|
||||||
|
|
||||||
/* Decode EC_POINT from a octet string */
|
/* Decode EC_POINT from a octet string */
|
||||||
buflen = EC_POINT_point2oct(grp, (const EC_POINT *) EC_KEY_get0_public_key(src),
|
buflen = EC_POINT_point2oct(grp, (const EC_POINT *) EC_KEY_get0_public_key(src),
|
||||||
POINT_CONVERSION_UNCOMPRESSED, buf, buflen, NULL);
|
POINT_CONVERSION_UNCOMPRESSED, buf, buflen, NULL);
|
||||||
|
|
||||||
/* clean up */
|
|
||||||
//EC_KEY_free(src);
|
|
||||||
|
|
||||||
/* copy the public key */
|
/* copy the public key */
|
||||||
if (buflen > 0) {
|
if (buflen > 0) {
|
||||||
dst->ecpointQ.value = malloc(buflen);
|
dst->ecpointQ.value = malloc(buflen);
|
||||||
|
@ -708,8 +703,9 @@ sc_pkcs15_convert_prkey(struct sc_pkcs15_prkey *pkcs15_key, void *evp_key)
|
||||||
/* calculate the field length */
|
/* calculate the field length */
|
||||||
dst->params.field_length = (buflen - 1) / 2 * 8;
|
dst->params.field_length = (buflen - 1) / 2 * 8;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
return SC_ERROR_INCOMPATIBLE_KEY;
|
return SC_ERROR_INCOMPATIBLE_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -646,24 +646,16 @@ int
|
||||||
sc_pkcs15_encode_pubkey_ec(sc_context_t *ctx, struct sc_pkcs15_pubkey_ec *key,
|
sc_pkcs15_encode_pubkey_ec(sc_context_t *ctx, struct sc_pkcs15_pubkey_ec *key,
|
||||||
u8 **buf, size_t *buflen)
|
u8 **buf, size_t *buflen)
|
||||||
{
|
{
|
||||||
int r;
|
|
||||||
/*u8 * ecpoint_data;
|
|
||||||
size_t ecpoint_len;*/
|
|
||||||
struct sc_asn1_entry asn1_ec_pointQ[C_ASN1_EC_POINTQ_SIZE];
|
struct sc_asn1_entry asn1_ec_pointQ[C_ASN1_EC_POINTQ_SIZE];
|
||||||
|
int r;
|
||||||
/*buf = malloc(key->ecpointQ.len);
|
|
||||||
if (*buf == NULL)
|
|
||||||
return SC_ERROR_OUT_OF_MEMORY;*/
|
|
||||||
|
|
||||||
sc_copy_asn1_entry(c_asn1_ec_pointQ, asn1_ec_pointQ);
|
sc_copy_asn1_entry(c_asn1_ec_pointQ, asn1_ec_pointQ);
|
||||||
sc_format_asn1_entry(asn1_ec_pointQ + 0, key->ecpointQ.value, &key->ecpointQ.len, 1);
|
sc_format_asn1_entry(asn1_ec_pointQ + 0, key->ecpointQ.value, &key->ecpointQ.len, 1);
|
||||||
|
|
||||||
/* memcpy(*buf, key->ecpointQ.value, key->ecpointQ.len);
|
|
||||||
*buflen = key->ecpointQ.len;
|
|
||||||
*/
|
|
||||||
r = sc_asn1_encode(ctx, asn1_ec_pointQ, buf, buflen);
|
|
||||||
|
|
||||||
sc_log(ctx, "DEE-EC key->ecpointQ=%p:%d *buf=%p:%d", key->ecpointQ.value, key->ecpointQ.len, *buf, *buflen);
|
r = sc_asn1_encode(ctx, asn1_ec_pointQ, buf, buflen);
|
||||||
|
LOG_TEST_RET(ctx, r, "ASN.1 encoding failed");
|
||||||
|
|
||||||
|
sc_log(ctx, "EC key->ecpointQ=%p:%d *buf=%p:%d", key->ecpointQ.value, key->ecpointQ.len, *buf, *buflen);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -833,7 +825,6 @@ sc_pkcs15_pubkey_from_prvkey(struct sc_context *ctx, struct sc_pkcs15_prkey *prv
|
||||||
pubkey->u.ec.ecpointQ.value = malloc(prvkey->u.ec.ecpointQ.len);
|
pubkey->u.ec.ecpointQ.value = malloc(prvkey->u.ec.ecpointQ.len);
|
||||||
memcpy(pubkey->u.ec.ecpointQ.value, prvkey->u.ec.ecpointQ.value, prvkey->u.ec.ecpointQ.len);
|
memcpy(pubkey->u.ec.ecpointQ.value, prvkey->u.ec.ecpointQ.value, prvkey->u.ec.ecpointQ.len);
|
||||||
pubkey->u.ec.ecpointQ.len = prvkey->u.ec.ecpointQ.len;
|
pubkey->u.ec.ecpointQ.len = prvkey->u.ec.ecpointQ.len;
|
||||||
rv = SC_SUCCESS;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sc_log(ctx, "Unsupported private key algorithm");
|
sc_log(ctx, "Unsupported private key algorithm");
|
||||||
|
@ -845,7 +836,7 @@ sc_pkcs15_pubkey_from_prvkey(struct sc_context *ctx, struct sc_pkcs15_prkey *prv
|
||||||
else
|
else
|
||||||
*out = pubkey;
|
*out = pubkey;
|
||||||
|
|
||||||
return SC_SUCCESS;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -984,7 +975,7 @@ out:
|
||||||
* or can be called from the sc_pkcs15_pubkey_from_spki_filename
|
* or can be called from the sc_pkcs15_pubkey_from_spki_filename
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
sc_pkcs15_pubkey_from_spki(sc_context_t *ctx, sc_pkcs15_pubkey_t ** outpubkey,
|
sc_pkcs15_pubkey_from_spki(sc_context_t *ctx, sc_pkcs15_pubkey_t ** outpubkey,
|
||||||
u8 *buf, size_t buflen, int depth)
|
u8 *buf, size_t buflen, int depth)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1258,37 +1249,33 @@ sc_pkcs15_convert_pubkey(struct sc_pkcs15_pubkey *pkcs15_key, void *evp_key)
|
||||||
}
|
}
|
||||||
case EVP_PKEY_EC: {
|
case EVP_PKEY_EC: {
|
||||||
struct sc_pkcs15_pubkey_ec *dst = &pkcs15_key->u.ec;
|
struct sc_pkcs15_pubkey_ec *dst = &pkcs15_key->u.ec;
|
||||||
EC_KEY *src = EVP_PKEY_get0(pk);
|
EC_KEY *src = NULL;
|
||||||
|
const EC_GROUP *grp = NULL;
|
||||||
assert(src);
|
|
||||||
pkcs15_key->algorithm = SC_ALGORITHM_EC;
|
|
||||||
|
|
||||||
assert(EC_KEY_get0_public_key(src));
|
|
||||||
|
|
||||||
unsigned char buf[255];
|
unsigned char buf[255];
|
||||||
size_t buflen = 255;
|
size_t buflen = 255;
|
||||||
|
|
||||||
const EC_GROUP *grp = EC_KEY_get0_group(src);
|
|
||||||
if(grp == 0) {
|
|
||||||
//EC_KEY_free(src);
|
|
||||||
return SC_ERROR_INCOMPATIBLE_KEY;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Decode EC_POINT from a octet string */
|
|
||||||
buflen = EC_POINT_point2oct(grp, (const EC_POINT *) EC_KEY_get0_public_key(src),
|
|
||||||
POINT_CONVERSION_UNCOMPRESSED, buf, buflen, NULL);
|
|
||||||
|
|
||||||
/* get curve name */
|
|
||||||
int nid;
|
int nid;
|
||||||
|
|
||||||
|
src = EVP_PKEY_get0(pk);
|
||||||
|
assert(src);
|
||||||
|
assert(EC_KEY_get0_public_key(src));
|
||||||
|
|
||||||
|
pkcs15_key->algorithm = SC_ALGORITHM_EC;
|
||||||
|
grp = EC_KEY_get0_group(src);
|
||||||
|
if(grp == 0)
|
||||||
|
return SC_ERROR_INCOMPATIBLE_KEY;
|
||||||
|
|
||||||
|
/* Decode EC_POINT from a octet string */
|
||||||
|
buflen = EC_POINT_point2oct(grp, (const EC_POINT *) EC_KEY_get0_public_key(src),
|
||||||
|
POINT_CONVERSION_UNCOMPRESSED, buf, buflen, NULL);
|
||||||
|
|
||||||
|
/* get curve name */
|
||||||
nid = EC_GROUP_get_curve_name(grp);
|
nid = EC_GROUP_get_curve_name(grp);
|
||||||
if(nid != 0) {
|
if(nid != 0) {
|
||||||
const char *name = OBJ_nid2sn(nid);
|
const char *name = OBJ_nid2sn(nid);
|
||||||
if(sizeof(name) > 0)
|
if(sizeof(name) > 0)
|
||||||
dst->params.named_curve = strdup(name);
|
dst->params.named_curve = strdup(name);
|
||||||
}
|
}
|
||||||
/* clean up */
|
|
||||||
//EC_KEY_free(src);
|
|
||||||
|
|
||||||
/* copy the public key */
|
/* copy the public key */
|
||||||
if (buflen > 0) {
|
if (buflen > 0) {
|
||||||
dst->ecpointQ.value = malloc(buflen);
|
dst->ecpointQ.value = malloc(buflen);
|
||||||
|
@ -1298,7 +1285,7 @@ sc_pkcs15_convert_pubkey(struct sc_pkcs15_pubkey *pkcs15_key, void *evp_key)
|
||||||
dst->params.field_length = (buflen - 1) / 2 * 8;
|
dst->params.field_length = (buflen - 1) / 2 * 8;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return SC_ERROR_INCOMPATIBLE_KEY;
|
return SC_ERROR_INCOMPATIBLE_KEY;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1530,7 +1530,7 @@ sc_pkcs15init_store_public_key(struct sc_pkcs15_card *p15card,
|
||||||
}
|
}
|
||||||
else if(key.algorithm == SC_ALGORITHM_EC)
|
else if(key.algorithm == SC_ALGORITHM_EC)
|
||||||
key_info->field_length = keybits;
|
key_info->field_length = keybits;
|
||||||
|
|
||||||
/* Select a intrinsic Key ID if the user didn't specify one */
|
/* Select a intrinsic Key ID if the user didn't specify one */
|
||||||
r = select_intrinsic_id(p15card, profile, SC_PKCS15_TYPE_PUBKEY, &keyargs->id, &key);
|
r = select_intrinsic_id(p15card, profile, SC_PKCS15_TYPE_PUBKEY, &keyargs->id, &key);
|
||||||
LOG_TEST_RET(ctx, r, "Get intrinsic ID error");
|
LOG_TEST_RET(ctx, r, "Get intrinsic ID error");
|
||||||
|
@ -1969,7 +1969,8 @@ check_keygen_params_consistency(struct sc_card *card, struct sc_pkcs15init_keyge
|
||||||
* Check whether the card has native crypto support for this key.
|
* Check whether the card has native crypto support for this key.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
check_key_compatibility(struct sc_pkcs15_card *p15card, struct sc_pkcs15_prkey *key, unsigned int x509_usage, unsigned int key_length, unsigned int flags)
|
check_key_compatibility(struct sc_pkcs15_card *p15card, struct sc_pkcs15_prkey *key, unsigned int x509_usage,
|
||||||
|
unsigned int key_length, unsigned int flags)
|
||||||
{
|
{
|
||||||
struct sc_algorithm_info *info;
|
struct sc_algorithm_info *info;
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
|
@ -1977,7 +1978,9 @@ check_key_compatibility(struct sc_pkcs15_card *p15card, struct sc_pkcs15_prkey *
|
||||||
count = p15card->card->algorithm_count;
|
count = p15card->card->algorithm_count;
|
||||||
for (info = p15card->card->algorithms; count--; info++) {
|
for (info = p15card->card->algorithms; count--; info++) {
|
||||||
/* don't check flags if none was specified */
|
/* don't check flags if none was specified */
|
||||||
if (info->algorithm != key->algorithm || info->key_length != key_length || (flags != 0 && (info->flags & flags) != flags))
|
if (info->algorithm != key->algorithm || info->key_length != key_length)
|
||||||
|
continue;
|
||||||
|
if (flags != 0 && ((info->flags & flags) != flags))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (key->algorithm == SC_ALGORITHM_RSA) {
|
if (key->algorithm == SC_ALGORITHM_RSA) {
|
||||||
|
|
Loading…
Reference in New Issue