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, |