@@ -111,8 +111,8 @@ static struct ec_curve_info {
111
111
const char * name ; /* common name of curve */
112
112
const char * oid ; /* formatted printable OID */
113
113
unsigned char * ec_params ; /* der of OID or printable string */
114
- size_t ec_params_size ;
115
- size_t size ; /* field_size in bits */
114
+ CK_ULONG ec_params_size ;
115
+ CK_ULONG size ; /* field_size in bits */
116
116
CK_KEY_TYPE mechanism ;
117
117
} ec_curve_infos [] = {
118
118
{"secp192r1" , "1.2.840.10045.3.1.1" , (unsigned char * )"\x06\x08\x2A\x86\x48\xCE\x3D\x03\x01\x01" , 10 , 192 , 0 },
@@ -2638,7 +2638,6 @@ static void verify_signature(CK_SLOT_ID slot, CK_SESSION_HANDLE session,
2638
2638
unsigned char rs_buffer [512 ];
2639
2639
bytes = getEC_POINT (session , key , & len );
2640
2640
free (bytes );
2641
- /* TODO DEE EDDSA and EC_POINT returned in BIT STRING needs some work */
2642
2641
/*
2643
2642
* (We only support uncompressed for now)
2644
2643
* Uncompressed EC_POINT is DER OCTET STRING of "04||x||y"
@@ -4268,7 +4267,7 @@ parse_ec_pkey(EVP_PKEY *pkey, int private, struct gostkey_info *gost)
4268
4267
4269
4268
#ifdef ENABLE_OPENSSL
4270
4269
/* Return PKCS11 key type based on OpenSSL EVP_PKEY type
4271
- * which are support by PKCS11 and OpenSSL used when compiling.
4270
+ * which are supported by PKCS11 and OpenSSL used when compiling.
4272
4271
* PKCS11 defines CKK_EC_EDWARDS for both Ed25529 and Ed448
4273
4272
* and CKK_EC_MONTGOMERY for X25519 and X448.
4274
4273
* If requested, return pointer to struct ec_curve_info containing OID and size
@@ -4720,9 +4719,6 @@ static CK_RV write_object(CK_SESSION_HANDLE session)
4720
4719
clazz = CKO_PUBLIC_KEY ;
4721
4720
4722
4721
#ifdef ENABLE_OPENSSL
4723
- if (evp_pkey2ck_key_type (evp_key , & type , & pk_type , & ec_curve_info ) != CKR_OK )
4724
- util_fatal ("Key type not supported by OpenSSL and/or PKCS11" );
4725
-
4726
4722
n_pubkey_attr = 0 ;
4727
4723
FILL_ATTR (pubkey_templ [n_pubkey_attr ], CKA_CLASS , & clazz , sizeof (clazz ));
4728
4724
n_pubkey_attr ++ ;
@@ -5400,7 +5396,10 @@ derive_ec_key(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE key, CK_MECHANISM_TYPE
5400
5396
util_fatal ("Failed to parse peer EC key \n" );
5401
5397
#else
5402
5398
EC_GROUP_free (ecgroup );
5403
- EVP_PKEY_get_octet_string_param (pkey , OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY , NULL , 0 , & buf_size );
5399
+ if (EVP_PKEY_get_octet_string_param (pkey , OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY , NULL , 0 , & buf_size ) != 1 )
5400
+ util_fatal ("Failed to get size of public key\n" );
5401
+ if (buf_size == 0 )
5402
+ util_fatal ("Failed to get size of public key\n" );
5404
5403
if ((buf = (unsigned char * )malloc (buf_size )) == NULL )
5405
5404
util_fatal ("malloc() failure\n" );
5406
5405
@@ -5418,13 +5417,15 @@ derive_ec_key(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE key, CK_MECHANISM_TYPE
5418
5417
#if defined(EVP_PKEY_X448 )
5419
5418
case EVP_PKEY_X448 :
5420
5419
#endif
5421
- EVP_PKEY_get_raw_public_key (pkey , NULL , & buf_size );
5420
+ if (EVP_PKEY_get_raw_public_key (pkey , NULL , & buf_size ) != 1 )
5421
+ util_fatal ("Unable to get public key of peer\n" );
5422
5422
if (buf_size == 0 )
5423
5423
util_fatal ("Unable to get public key of peer\n" );
5424
5424
buf = (unsigned char * )malloc (buf_size );
5425
5425
if (buf == NULL )
5426
5426
util_fatal ("malloc() failure\n" );
5427
- EVP_PKEY_get_raw_public_key (pkey , buf , & buf_size );
5427
+ if (EVP_PKEY_get_raw_public_key (pkey , buf , & buf_size ) != 1 )
5428
+ util_fatal ("Unable to get public key of peer\n" );
5428
5429
5429
5430
if (mech_mech != CKM_ECDH1_DERIVE )
5430
5431
util_fatal ("Peer key %s not usable with %s" , "CKK_EC_MONTGOMERY" , p11_mechanism_to_name (mech_mech ));
@@ -5763,9 +5764,9 @@ show_key(CK_SESSION_HANDLE sess, CK_OBJECT_HANDLE obj)
5763
5764
}
5764
5765
if (pub ) {
5765
5766
unsigned char * point_bytes = NULL ;
5766
- size_t point_size = 0 ;
5767
+ CK_ULONG point_size = 0 ;
5767
5768
unsigned char * params_bytes = NULL ;
5768
- size_t params_size = 0 ;
5769
+ CK_ULONG params_size = 0 ;
5769
5770
const struct ec_curve_info * curve_info = NULL ;
5770
5771
5771
5772
unsigned int n ;
@@ -5803,7 +5804,7 @@ show_key(CK_SESSION_HANDLE sess, CK_OBJECT_HANDLE obj)
5803
5804
else /* if unknown curve, type and print something */
5804
5805
if (params_bytes [0 ] == SC_ASN1_OBJECT ) {
5805
5806
sc_init_oid (& oid );
5806
- if (sc_asn1_decode_object_id (params_bytes + 2 , size - 2 , & oid ) == SC_SUCCESS ) {
5807
+ if (sc_asn1_decode_object_id (params_bytes + 2 , params_size - 2 , & oid ) == SC_SUCCESS ) {
5807
5808
printf (" (OID %i" , oid .value [0 ]);
5808
5809
if (oid .value [0 ] >= 0 )
5809
5810
for (n = 1 ; (n < SC_MAX_OBJECT_ID_OCTETS )
@@ -6450,12 +6451,12 @@ static int read_object(CK_SESSION_HANDLE session)
6450
6451
6451
6452
value = getEC_POINT (session , obj , & len );
6452
6453
/* PKCS#11-compliant modules should return ASN1_OCTET_STRING */
6453
- /* No, should return encoded in BIT STRING, Need to accept both */
6454
+ /* will accept BIT STRING, accept both */
6454
6455
a = value ;
6455
6456
os = d2i_ASN1_OCTET_STRING (NULL , & a , (long )len );
6456
6457
if (!os ) {
6457
6458
os = d2i_ASN1_BIT_STRING (NULL , & a , (long )len );
6458
- len = (len + 7 ) / 8 ;
6459
+ len = (len + 7 ) / 8 ;
6459
6460
}
6460
6461
6461
6462
#if OPENSSL_VERSION_NUMBER < 0x30000000L
0 commit comments