corePKCS11 v3.5.0
PKCS #11 Cryptoki Library
core_pkcs11.h
Go to the documentation of this file.
1/*
2 * corePKCS11 v3.5.0
3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4 *
5 * SPDX-License-Identifier: MIT
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy of
8 * this software and associated documentation files (the "Software"), to deal in
9 * the Software without restriction, including without limitation the rights to
10 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
11 * the Software, and to permit persons to whom the Software is furnished to do so,
12 * subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in all
15 * copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
19 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
20 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
21 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25#ifndef _CORE_PKCS11_H_
26#define _CORE_PKCS11_H_
27
28#include <stdint.h>
29
30/* *INDENT-OFF* */
31#ifdef __cplusplus
32 extern "C" {
33#endif
34/* *INDENT-ON* */
35
36#ifdef _WIN32
37 #pragma pack(push, cryptoki, 1)
38#endif
39
55#define CK_PTR *
56
61#ifndef NULL_PTR
62 #define NULL_PTR 0
63#endif
64
70#define CK_DEFINE_FUNCTION( returnType, name ) returnType name
71
77#define CK_DECLARE_FUNCTION( returnType, name ) returnType name
78
84#define CK_DECLARE_FUNCTION_POINTER( returnType, name ) returnType( CK_PTR name )
85
91#define CK_CALLBACK_FUNCTION( returnType, name ) returnType( CK_PTR name )
92
97#define pkcs11SHA256_DIGEST_LENGTH 32UL
98
103#define pkcs11AES_CMAC_SIGNATURE_LENGTH 16UL
104
111#define pkcs11ECDSA_P256_SIGNATURE_LENGTH 64UL
112
117#define pkcs11ECDSA_P256_KEY_BITS 256UL
118
123#define pkcs11RSA_PUBLIC_EXPONENT { 0x01, 0x00, 0x01 }
124
130#define pkcs11RSA_2048_MODULUS_BITS 2048UL
131
136#define pkcs11RSA_2048_SIGNATURE_LENGTH ( pkcs11RSA_2048_MODULUS_BITS / 8UL )
137
145#define pkcs11RSA_SIGNATURE_INPUT_LENGTH 51UL
146
152#define pkcs11ELLIPTIC_CURVE_NISTP256 "1.2.840.10045.3.1.7"
153
158#define pkcs11MAX_LABEL_LENGTH 32UL /* 31 characters + 1 null terminator. */
159
164#define pkcs11DER_ENCODED_OID_P256 { 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07 }
165
166
172#ifndef pkcs11configIMPORT_PRIVATE_KEYS_SUPPORTED
173 #define pkcs11configIMPORT_PRIVATE_KEYS_SUPPORTED 1
174#endif
175
196#define pkcs11STUFF_APPENDED_TO_RSA_SIG { 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20 }
197
198/* Bring in the public header. */
199
200/* Undefine the macro for Keil Compiler to avoid conflict */
201#if defined( __PASTE ) && defined( __CC_ARM )
202 /* ARM RCVT stdint.h has a duplicate definition with PKCS #11. */
203 #undef __PASTE
204#endif
205
206#ifdef CreateMutex
207 #undef CreateMutex /* This is a workaround because CreateMutex is redefined to CreateMutexW in synchapi.h in windows. :/ */
208#endif
209
210#include "pkcs11.h"
211
217typedef struct PKCS11_CertificateTemplate
218{
219 CK_ATTRIBUTE xObjectClass;
220 CK_ATTRIBUTE xSubject;
221 CK_ATTRIBUTE xCertificateType;
222 CK_ATTRIBUTE xValue;
223 CK_ATTRIBUTE xLabel;
224 CK_ATTRIBUTE xTokenObject;
226
227/*------------------------ PKCS #11 wrapper functions -------------------------*/
228
234/* @[declare_pkcs11_core_xinitializepkcs11] */
235CK_RV xInitializePKCS11( void );
236/* @[declare_pkcs11_core_xinitializepkcs11] */
237
252/* @[declare_pkcs11_core_xgetslotlist] */
253CK_RV xGetSlotList( CK_SLOT_ID ** ppxSlotId,
254 CK_ULONG * pxSlotCount );
255/* @[declare_pkcs11_core_xgetslotlist] */
256
266/* @[declare_pkcs11_core_xinitializepkcs11session] */
267CK_RV xInitializePkcs11Session( CK_SESSION_HANDLE * pxSession );
268/* @[declare_pkcs11_core_xinitializepkcs11session] */
269
276/* @[declare_pkcs11_core_xinitializepkcs11token] */
277CK_RV xInitializePkcs11Token( void );
278/* @[declare_pkcs11_core_xinitializepkcs11token] */
279
297/* @[declare_pkcs11_core_xfindobjectwithlabelandclass] */
298CK_RV xFindObjectWithLabelAndClass( CK_SESSION_HANDLE xSession,
299 char * pcLabelName,
300 CK_ULONG ulLabelNameLen,
301 CK_OBJECT_CLASS xClass,
302 CK_OBJECT_HANDLE_PTR pxHandle );
303/* @[declare_pkcs11_core_xfindobjectwithlabelandclass] */
304
324/* @[declare_pkcs11_core_vappendsha256algorithmidentifiersequence] */
325CK_RV vAppendSHA256AlgorithmIdentifierSequence( const uint8_t * puc32ByteHashedMessage,
326 uint8_t * puc51ByteHashOidBuffer );
327/* @[declare_pkcs11_core_vappendsha256algorithmidentifiersequence] */
328
329#ifdef _WIN32
330 #pragma pack(pop, cryptoki)
331#endif
332
333/* *INDENT-OFF* */
334#ifdef __cplusplus
335 }
336#endif
337/* *INDENT-ON* */
338
339#endif /* ifndef _CORE_PKCS11_H_ */
CK_RV vAppendSHA256AlgorithmIdentifierSequence(const uint8_t *puc32ByteHashedMessage, uint8_t *puc51ByteHashOidBuffer)
Appends digest algorithm sequence to SHA-256 hash for RSA signatures.
Definition: core_pkcs11.c:382
CK_RV xGetSlotList(CK_SLOT_ID **ppxSlotId, CK_ULONG *pxSlotCount)
Get a list of available PKCS #11 slots.
Definition: core_pkcs11.c:72
CK_RV xInitializePkcs11Session(CK_SESSION_HANDLE *pxSession)
Initializes the PKCS #11 module and opens a session.
Definition: core_pkcs11.c:261
CK_RV xFindObjectWithLabelAndClass(CK_SESSION_HANDLE xSession, char *pcLabelName, CK_ULONG ulLabelNameLen, CK_OBJECT_CLASS xClass, CK_OBJECT_HANDLE_PTR pxHandle)
Searches for an object with a matching label and class provided.
Definition: core_pkcs11.c:317
CK_RV xInitializePkcs11Token(void)
Initializes a PKCS #11 module and token.
Definition: core_pkcs11.c:181
CK_RV xInitializePKCS11(void)
Initializes a PKCS #11 session.
Definition: core_pkcs11.c:155
Certificate Template The object class must be the first attribute in the array.
Definition: core_pkcs11.h:218
CK_ATTRIBUTE xValue
CKA_VALUE, the DER byte array of the certificate contents.
Definition: core_pkcs11.h:222
CK_ATTRIBUTE xSubject
CKA_SUBJECT, this parameter is required by the PKCS #11 standard.
Definition: core_pkcs11.h:220
CK_ATTRIBUTE xCertificateType
CKA_CERTIFICATE_TYPE, set to CKC_X_509.
Definition: core_pkcs11.h:221
CK_ATTRIBUTE xTokenObject
CKA_TOKEN.
Definition: core_pkcs11.h:224
CK_ATTRIBUTE xObjectClass
CKA_CLASS, set to CKO_CERTIFICATE.
Definition: core_pkcs11.h:219
CK_ATTRIBUTE xLabel
CKA_LABEL.
Definition: core_pkcs11.h:223