|
Lines 20-25
Link Here
|
| 20 |
#include "h_extern.h" |
20 |
#include "h_extern.h" |
| 21 |
#include "tok_spec_struct.h" |
21 |
#include "tok_spec_struct.h" |
| 22 |
#include "trace.h" |
22 |
#include "trace.h" |
|
|
23 |
#include <stdint.h> |
| 24 |
#include "ec_defs.h" |
| 25 |
|
| 26 |
CK_BYTE brainpoolP160r1[] = { 0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x01 }; |
| 27 |
CK_BYTE brainpoolP192r1[] = { 0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x03 }; |
| 28 |
CK_BYTE brainpoolP224r1[] = { 0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x05 }; |
| 29 |
CK_BYTE brainpoolP256r1[] = { 0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x07 }; |
| 30 |
CK_BYTE brainpoolP320r1[] = { 0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x09 }; |
| 31 |
CK_BYTE brainpoolP384r1[] = { 0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0B }; |
| 32 |
CK_BYTE brainpoolP512r1[] = { 0x06, 0x09, 0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0D }; |
| 33 |
CK_BYTE prime192[] = { 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x01 }; |
| 34 |
CK_BYTE secp224[] = { 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x21 }; |
| 35 |
CK_BYTE prime256[] = { 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07 }; |
| 36 |
CK_BYTE secp384[] = { 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22 }; |
| 37 |
CK_BYTE secp521[] = { 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x23 }; |
| 38 |
|
| 39 |
struct _ec der_ec_supported[NUMEC] = { |
| 40 |
{BRAINPOOL_CURVE, CURVE160, sizeof(brainpoolP160r1), &brainpoolP160r1}, |
| 41 |
{BRAINPOOL_CURVE, CURVE192, sizeof(brainpoolP192r1), &brainpoolP192r1}, |
| 42 |
{BRAINPOOL_CURVE, CURVE224, sizeof(brainpoolP224r1), &brainpoolP224r1}, |
| 43 |
{BRAINPOOL_CURVE, CURVE256, sizeof(brainpoolP256r1), &brainpoolP256r1}, |
| 44 |
{BRAINPOOL_CURVE, CURVE320, sizeof(brainpoolP320r1), &brainpoolP320r1}, |
| 45 |
{BRAINPOOL_CURVE, CURVE384, sizeof(brainpoolP384r1), &brainpoolP384r1}, |
| 46 |
{BRAINPOOL_CURVE, CURVE512, sizeof(brainpoolP512r1), &brainpoolP512r1}, |
| 47 |
{PRIME_CURVE, CURVE192, sizeof(prime192), &prime192}, |
| 48 |
{PRIME_CURVE, CURVE224, sizeof(secp224), &secp224}, |
| 49 |
{PRIME_CURVE, CURVE256, sizeof(prime256), &prime256}, |
| 50 |
{PRIME_CURVE, CURVE384, sizeof(secp384), &secp384}, |
| 51 |
{PRIME_CURVE, CURVE521, sizeof(secp521), &secp521}, |
| 52 |
}; |
| 23 |
|
53 |
|
| 24 |
CK_RV |
54 |
CK_RV |
| 25 |
ckm_ec_key_pair_gen( TEMPLATE * publ_tmpl, |
55 |
ckm_ec_key_pair_gen( TEMPLATE * publ_tmpl, |
|
Lines 66-71
Link Here
|
| 66 |
} |
96 |
} |
| 67 |
|
97 |
|
| 68 |
CK_RV |
98 |
CK_RV |
|
|
99 |
get_ecsiglen(OBJECT *key_obj, CK_ULONG *size) |
| 100 |
{ |
| 101 |
CK_BBOOL flag; |
| 102 |
CK_ATTRIBUTE *attr = NULL; |
| 103 |
int i; |
| 104 |
|
| 105 |
flag = template_attribute_find( key_obj->template, |
| 106 |
CKA_ECDSA_PARAMS, &attr ); |
| 107 |
if (flag == FALSE) { |
| 108 |
TRACE_ERROR("Could not find CKA_ECDSA_PARAMS for the key.\n"); |
| 109 |
return CKR_FUNCTION_FAILED; |
| 110 |
} |
| 111 |
|
| 112 |
/* loop thru supported curves to find the size. |
| 113 |
* both pkcs#11v2.20 and CCA expect the signature length to be |
| 114 |
* twice the length of p. |
| 115 |
* (See EC Signatures in pkcs#11v2.20 and docs for CSNDDSG.) |
| 116 |
*/ |
| 117 |
for (i = 0; i < NUMEC; i++) { |
| 118 |
if ((memcmp(attr->pValue, der_ec_supported[i].data, |
| 119 |
attr->ulValueLen) == 0)) { |
| 120 |
*size = der_ec_supported[i].len_bits; |
| 121 |
/* round up if necessary */ |
| 122 |
if ((*size % 8) == 0) |
| 123 |
*size = (*size / 8) * 2; |
| 124 |
else |
| 125 |
*size = ((*size / 8) + 1) * 2; |
| 126 |
TRACE_DEVEL("getlen, curve = %d, size = %d\n", der_ec_supported[i].len_bits, *size); |
| 127 |
return CKR_OK; |
| 128 |
} |
| 129 |
} |
| 130 |
|
| 131 |
TRACE_ERROR("%s\n", ock_err(ERR_MECHANISM_PARAM_INVALID)); |
| 132 |
return CKR_MECHANISM_PARAM_INVALID; |
| 133 |
} |
| 134 |
|
| 135 |
CK_RV |
| 69 |
ec_sign( SESSION *sess, |
136 |
ec_sign( SESSION *sess, |
| 70 |
CK_BBOOL length_only, |
137 |
CK_BBOOL length_only, |
| 71 |
SIGN_VERIFY_CONTEXT *ctx, |
138 |
SIGN_VERIFY_CONTEXT *ctx, |