1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/security/nss/lib/ckfw/nssmkey/ckmk.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,198 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +#ifndef CKMK_H 1.9 +#define CKMK_H 1 1.10 + 1.11 +#include <Security/SecKeychainSearch.h> 1.12 +#include <Security/SecKeychainItem.h> 1.13 +#include <Security/SecKeychain.h> 1.14 +#include <Security/cssmtype.h> 1.15 +#include <Security/cssmapi.h> 1.16 +#include <Security/SecKey.h> 1.17 +#include <Security/SecCertificate.h> 1.18 + 1.19 +#define NTO 1.20 + 1.21 +#include "nssckmdt.h" 1.22 +#include "nssckfw.h" 1.23 +/* 1.24 + * I'm including this for access to the arena functions. 1.25 + * Looks like we should publish that API. 1.26 + */ 1.27 +#ifndef BASE_H 1.28 +#include "base.h" 1.29 +#endif /* BASE_H */ 1.30 +/* 1.31 + * This is where the Netscape extensions live, at least for now. 1.32 + */ 1.33 +#ifndef CKT_H 1.34 +#include "ckt.h" 1.35 +#endif /* CKT_H */ 1.36 + 1.37 +/* 1.38 + * statically defined raw objects. Allows us to data description objects 1.39 + * to this PKCS #11 module. 1.40 + */ 1.41 +struct ckmkRawObjectStr { 1.42 + CK_ULONG n; 1.43 + const CK_ATTRIBUTE_TYPE *types; 1.44 + const NSSItem *items; 1.45 +}; 1.46 +typedef struct ckmkRawObjectStr ckmkRawObject; 1.47 + 1.48 +/* 1.49 + * Key/Cert Items 1.50 + */ 1.51 +struct ckmkItemObjectStr { 1.52 + SecKeychainItemRef itemRef; 1.53 + SecItemClass itemClass; 1.54 + PRBool hasID; 1.55 + NSSItem modify; 1.56 + NSSItem private; 1.57 + NSSItem encrypt; 1.58 + NSSItem decrypt; 1.59 + NSSItem derive; 1.60 + NSSItem sign; 1.61 + NSSItem signRecover; 1.62 + NSSItem verify; 1.63 + NSSItem verifyRecover; 1.64 + NSSItem wrap; 1.65 + NSSItem unwrap; 1.66 + NSSItem label; 1.67 + NSSItem subject; 1.68 + NSSItem issuer; 1.69 + NSSItem serial; 1.70 + NSSItem derCert; 1.71 + NSSItem id; 1.72 + NSSItem modulus; 1.73 + NSSItem exponent; 1.74 + NSSItem privateExponent; 1.75 + NSSItem prime1; 1.76 + NSSItem prime2; 1.77 + NSSItem exponent1; 1.78 + NSSItem exponent2; 1.79 + NSSItem coefficient; 1.80 +}; 1.81 +typedef struct ckmkItemObjectStr ckmkItemObject; 1.82 + 1.83 +typedef enum { 1.84 + ckmkRaw, 1.85 + ckmkItem, 1.86 +} ckmkObjectType; 1.87 + 1.88 +/* 1.89 + * all the various types of objects are abstracted away in cobject and 1.90 + * cfind as ckmkInternalObjects. 1.91 + */ 1.92 +struct ckmkInternalObjectStr { 1.93 + ckmkObjectType type; 1.94 + union { 1.95 + ckmkRawObject raw; 1.96 + ckmkItemObject item; 1.97 + } u; 1.98 + CK_OBJECT_CLASS objClass; 1.99 + NSSItem hashKey; 1.100 + unsigned char hashKeyData[128]; 1.101 + NSSCKMDObject mdObject; 1.102 +}; 1.103 +typedef struct ckmkInternalObjectStr ckmkInternalObject; 1.104 + 1.105 +/* our raw object data array */ 1.106 +NSS_EXTERN_DATA ckmkInternalObject nss_ckmk_data[]; 1.107 +NSS_EXTERN_DATA const PRUint32 nss_ckmk_nObjects; 1.108 + 1.109 +NSS_EXTERN_DATA const CK_VERSION nss_ckmk_CryptokiVersion; 1.110 +NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_ManufacturerID; 1.111 +NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_LibraryDescription; 1.112 +NSS_EXTERN_DATA const CK_VERSION nss_ckmk_LibraryVersion; 1.113 +NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_SlotDescription; 1.114 +NSS_EXTERN_DATA const CK_VERSION nss_ckmk_HardwareVersion; 1.115 +NSS_EXTERN_DATA const CK_VERSION nss_ckmk_FirmwareVersion; 1.116 +NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenLabel; 1.117 +NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenModel; 1.118 +NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenSerialNumber; 1.119 + 1.120 +NSS_EXTERN_DATA const NSSCKMDInstance nss_ckmk_mdInstance; 1.121 +NSS_EXTERN_DATA const NSSCKMDSlot nss_ckmk_mdSlot; 1.122 +NSS_EXTERN_DATA const NSSCKMDToken nss_ckmk_mdToken; 1.123 +NSS_EXTERN_DATA const NSSCKMDMechanism nss_ckmk_mdMechanismRSA; 1.124 + 1.125 +NSS_EXTERN NSSCKMDSession * 1.126 +nss_ckmk_CreateSession 1.127 +( 1.128 + NSSCKFWSession *fwSession, 1.129 + CK_RV *pError 1.130 +); 1.131 + 1.132 +NSS_EXTERN NSSCKMDFindObjects * 1.133 +nss_ckmk_FindObjectsInit 1.134 +( 1.135 + NSSCKFWSession *fwSession, 1.136 + CK_ATTRIBUTE_PTR pTemplate, 1.137 + CK_ULONG ulAttributeCount, 1.138 + CK_RV *pError 1.139 +); 1.140 + 1.141 +/* 1.142 + * Object Utilities 1.143 + */ 1.144 +NSS_EXTERN NSSCKMDObject * 1.145 +nss_ckmk_CreateMDObject 1.146 +( 1.147 + NSSArena *arena, 1.148 + ckmkInternalObject *io, 1.149 + CK_RV *pError 1.150 +); 1.151 + 1.152 +NSS_EXTERN NSSCKMDObject * 1.153 +nss_ckmk_CreateObject 1.154 +( 1.155 + NSSCKFWSession *fwSession, 1.156 + CK_ATTRIBUTE_PTR pTemplate, 1.157 + CK_ULONG ulAttributeCount, 1.158 + CK_RV *pError 1.159 +); 1.160 + 1.161 +NSS_EXTERN const NSSItem * 1.162 +nss_ckmk_FetchAttribute 1.163 +( 1.164 + ckmkInternalObject *io, 1.165 + CK_ATTRIBUTE_TYPE type, 1.166 + CK_RV *pError 1.167 +); 1.168 + 1.169 +NSS_EXTERN void 1.170 +nss_ckmk_DestroyInternalObject 1.171 +( 1.172 + ckmkInternalObject *io 1.173 +); 1.174 + 1.175 +unsigned char * 1.176 +nss_ckmk_DERUnwrap 1.177 +( 1.178 + unsigned char *src, 1.179 + int size, 1.180 + int *outSize, 1.181 + unsigned char **next 1.182 +); 1.183 + 1.184 +CK_ULONG 1.185 +nss_ckmk_GetULongAttribute 1.186 +( 1.187 + CK_ATTRIBUTE_TYPE type, 1.188 + CK_ATTRIBUTE *template, 1.189 + CK_ULONG templateSize, 1.190 + CK_RV *pError 1.191 +); 1.192 + 1.193 +#define NSS_CKMK_ARRAY_SIZE(x) ((sizeof (x))/(sizeof ((x)[0]))) 1.194 + 1.195 +#ifdef DEBUG 1.196 +#define CKMK_MACERR(str,err) cssmPerror(str,err) 1.197 +#else 1.198 +#define CKMK_MACERR(str,err) 1.199 +#endif 1.200 + 1.201 +#endif