security/nss/lib/ckfw/nssmkey/ckmk.h

changeset 0
6474c204b198
     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

mercurial