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

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 #ifndef CKMK_H
     6 #define CKMK_H 1
     8 #include <Security/SecKeychainSearch.h>
     9 #include <Security/SecKeychainItem.h>
    10 #include <Security/SecKeychain.h>
    11 #include <Security/cssmtype.h>
    12 #include <Security/cssmapi.h>
    13 #include <Security/SecKey.h>
    14 #include <Security/SecCertificate.h>
    16 #define NTO
    18 #include "nssckmdt.h"
    19 #include "nssckfw.h"
    20 /*
    21  * I'm including this for access to the arena functions.
    22  * Looks like we should publish that API.
    23  */
    24 #ifndef BASE_H
    25 #include "base.h"
    26 #endif /* BASE_H */
    27 /*
    28  * This is where the Netscape extensions live, at least for now.
    29  */
    30 #ifndef CKT_H
    31 #include "ckt.h"
    32 #endif /* CKT_H */
    34 /*
    35  * statically defined raw objects. Allows us to data description objects
    36  * to this PKCS #11 module.
    37  */
    38 struct ckmkRawObjectStr {
    39   CK_ULONG n;
    40   const CK_ATTRIBUTE_TYPE *types;
    41   const NSSItem *items;
    42 };
    43 typedef struct ckmkRawObjectStr ckmkRawObject;
    45 /*
    46  * Key/Cert Items
    47  */
    48 struct ckmkItemObjectStr {
    49   SecKeychainItemRef itemRef;
    50   SecItemClass    itemClass;
    51   PRBool          hasID;
    52   NSSItem	  modify;
    53   NSSItem	  private;
    54   NSSItem	  encrypt;
    55   NSSItem	  decrypt;
    56   NSSItem	  derive;
    57   NSSItem	  sign;
    58   NSSItem	  signRecover;
    59   NSSItem	  verify;
    60   NSSItem	  verifyRecover;
    61   NSSItem	  wrap;
    62   NSSItem	  unwrap;
    63   NSSItem	  label;
    64   NSSItem	  subject;
    65   NSSItem	  issuer;
    66   NSSItem	  serial;
    67   NSSItem	  derCert;
    68   NSSItem	  id;
    69   NSSItem	  modulus;
    70   NSSItem	  exponent;
    71   NSSItem	  privateExponent;
    72   NSSItem	  prime1;
    73   NSSItem	  prime2;
    74   NSSItem	  exponent1;
    75   NSSItem	  exponent2;
    76   NSSItem	  coefficient;
    77 };
    78 typedef struct ckmkItemObjectStr ckmkItemObject;
    80 typedef enum {
    81   ckmkRaw,
    82   ckmkItem,
    83 } ckmkObjectType;
    85 /*
    86  * all the various types of objects are abstracted away in cobject and
    87  * cfind as ckmkInternalObjects.
    88  */
    89 struct ckmkInternalObjectStr {
    90   ckmkObjectType type;
    91   union {
    92     ckmkRawObject  raw;
    93     ckmkItemObject item;
    94   } u;
    95   CK_OBJECT_CLASS objClass;
    96   NSSItem	  hashKey;
    97   unsigned char   hashKeyData[128];
    98   NSSCKMDObject mdObject;
    99 };
   100 typedef struct ckmkInternalObjectStr ckmkInternalObject;
   102 /* our raw object data array */
   103 NSS_EXTERN_DATA ckmkInternalObject nss_ckmk_data[];
   104 NSS_EXTERN_DATA const PRUint32               nss_ckmk_nObjects;
   106 NSS_EXTERN_DATA const CK_VERSION   nss_ckmk_CryptokiVersion;
   107 NSS_EXTERN_DATA const NSSUTF8 *    nss_ckmk_ManufacturerID;
   108 NSS_EXTERN_DATA const NSSUTF8 *    nss_ckmk_LibraryDescription;
   109 NSS_EXTERN_DATA const CK_VERSION   nss_ckmk_LibraryVersion;
   110 NSS_EXTERN_DATA const NSSUTF8 *    nss_ckmk_SlotDescription;
   111 NSS_EXTERN_DATA const CK_VERSION   nss_ckmk_HardwareVersion;
   112 NSS_EXTERN_DATA const CK_VERSION   nss_ckmk_FirmwareVersion;
   113 NSS_EXTERN_DATA const NSSUTF8 *    nss_ckmk_TokenLabel;
   114 NSS_EXTERN_DATA const NSSUTF8 *    nss_ckmk_TokenModel;
   115 NSS_EXTERN_DATA const NSSUTF8 *    nss_ckmk_TokenSerialNumber;
   117 NSS_EXTERN_DATA const NSSCKMDInstance  nss_ckmk_mdInstance;
   118 NSS_EXTERN_DATA const NSSCKMDSlot      nss_ckmk_mdSlot;
   119 NSS_EXTERN_DATA const NSSCKMDToken     nss_ckmk_mdToken;
   120 NSS_EXTERN_DATA const NSSCKMDMechanism nss_ckmk_mdMechanismRSA;
   122 NSS_EXTERN NSSCKMDSession *
   123 nss_ckmk_CreateSession
   124 (
   125   NSSCKFWSession *fwSession,
   126   CK_RV *pError
   127 );
   129 NSS_EXTERN NSSCKMDFindObjects *
   130 nss_ckmk_FindObjectsInit
   131 (
   132   NSSCKFWSession *fwSession,
   133   CK_ATTRIBUTE_PTR pTemplate,
   134   CK_ULONG ulAttributeCount,
   135   CK_RV *pError
   136 );
   138 /*
   139  * Object Utilities
   140  */
   141 NSS_EXTERN NSSCKMDObject *
   142 nss_ckmk_CreateMDObject
   143 (
   144   NSSArena *arena,
   145   ckmkInternalObject *io,
   146   CK_RV *pError
   147 );
   149 NSS_EXTERN NSSCKMDObject *
   150 nss_ckmk_CreateObject
   151 (
   152   NSSCKFWSession *fwSession,
   153   CK_ATTRIBUTE_PTR pTemplate,
   154   CK_ULONG ulAttributeCount,
   155   CK_RV *pError
   156 );
   158 NSS_EXTERN const NSSItem *
   159 nss_ckmk_FetchAttribute
   160 (
   161   ckmkInternalObject *io, 
   162   CK_ATTRIBUTE_TYPE type,
   163   CK_RV *pError
   164 );
   166 NSS_EXTERN void
   167 nss_ckmk_DestroyInternalObject
   168 (
   169   ckmkInternalObject *io
   170 );
   172 unsigned char *
   173 nss_ckmk_DERUnwrap
   174 (
   175   unsigned char *src,
   176   int size,
   177   int *outSize,
   178   unsigned char **next
   179 );
   181 CK_ULONG
   182 nss_ckmk_GetULongAttribute
   183 (
   184   CK_ATTRIBUTE_TYPE type,
   185   CK_ATTRIBUTE *template,
   186   CK_ULONG templateSize,
   187   CK_RV *pError
   188 );
   190 #define NSS_CKMK_ARRAY_SIZE(x) ((sizeof (x))/(sizeof ((x)[0])))
   192 #ifdef DEBUG
   193 #define CKMK_MACERR(str,err) cssmPerror(str,err)
   194 #else
   195 #define CKMK_MACERR(str,err) 
   196 #endif
   198 #endif

mercurial