tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ckhelper.h (4894B)


      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/. */
      4 
      5 /*
      6 * ckhelper.h
      7 *
      8 * This file contains some helper utilities for interaction with cryptoki.
      9 */
     10 
     11 #ifndef CKHELPER_H
     12 #define CKHELPER_H
     13 
     14 PR_BEGIN_EXTERN_C
     15 
     16 /* Some globals to keep from constantly redeclaring common cryptoki
     17 * attribute types on the stack.
     18 */
     19 
     20 /* Boolean values */
     21 NSS_EXTERN_DATA const NSSItem g_ck_true;
     22 NSS_EXTERN_DATA const NSSItem g_ck_false;
     23 
     24 /* Object classes */
     25 NSS_EXTERN_DATA const NSSItem g_ck_class_cert;
     26 NSS_EXTERN_DATA const NSSItem g_ck_class_pubkey;
     27 NSS_EXTERN_DATA const NSSItem g_ck_class_privkey;
     28 
     29 #define NSS_CK_TEMPLATE_START(_template, attr, size) \
     30    attr = _template;                                \
     31    size = 0;
     32 
     33 #define NSS_CK_SET_ATTRIBUTE_ITEM(pattr, kind, item) \
     34    (pattr)->type = kind;                            \
     35    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
     36    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
     37    (pattr)++;
     38 
     39 #define NSS_CK_SET_ATTRIBUTE_UTF8(pattr, kind, utf8)          \
     40    (pattr)->type = kind;                                     \
     41    (pattr)->pValue = (CK_VOID_PTR)utf8;                      \
     42    (pattr)->ulValueLen = (CK_ULONG)nssUTF8_Size(utf8, NULL); \
     43    if ((pattr)->ulValueLen)                                  \
     44        ((pattr)->ulValueLen)--;                              \
     45    (pattr)++;
     46 
     47 #define NSS_CK_SET_ATTRIBUTE_VAR(pattr, kind, var) \
     48    (pattr)->type = kind;                          \
     49    (pattr)->pValue = (CK_VOID_PTR)&var;           \
     50    (pattr)->ulValueLen = (CK_ULONG)sizeof(var);   \
     51    (pattr)++;
     52 
     53 #define NSS_CK_SET_ATTRIBUTE_FIXED_PTR(pattr, kind, var) \
     54    (pattr)->type = kind;                                \
     55    (pattr)->pValue = (CK_VOID_PTR)var;                  \
     56    (pattr)->ulValueLen = (CK_ULONG)sizeof(*var);        \
     57    (pattr)++;
     58 
     59 #define NSS_CK_SET_ATTRIBUTE_NULL(pattr, kind) \
     60    (pattr)->type = kind;                      \
     61    (pattr)->pValue = (CK_VOID_PTR)NULL;       \
     62    (pattr)->ulValueLen = 0;                   \
     63    (pattr)++;
     64 
     65 #define NSS_CK_TEMPLATE_FINISH(_template, attr, size) \
     66    size = (attr) - (_template);                      \
     67    PR_ASSERT(size <= sizeof(_template) / sizeof(_template[0]));
     68 
     69 /* NSS_CK_ATTRIBUTE_TO_ITEM(attrib, item)
     70 *
     71 * Convert a CK_ATTRIBUTE to an NSSItem.
     72 */
     73 #define NSS_CK_ATTRIBUTE_TO_ITEM(attrib, item)         \
     74    if ((CK_LONG)(attrib)->ulValueLen > 0) {           \
     75        (item)->data = (void *)(attrib)->pValue;       \
     76        (item)->size = (PRUint32)(attrib)->ulValueLen; \
     77    } else {                                           \
     78        (item)->data = 0;                              \
     79        (item)->size = 0;                              \
     80    }
     81 
     82 #define NSS_CK_ATTRIBUTE_TO_BOOL(attrib, boolvar)         \
     83    if ((attrib)->ulValueLen > 0) {                       \
     84        if (*((CK_BBOOL *)(attrib)->pValue) == CK_TRUE) { \
     85            boolvar = PR_TRUE;                            \
     86        } else {                                          \
     87            boolvar = PR_FALSE;                           \
     88        }                                                 \
     89    }
     90 
     91 #define NSS_CK_ATTRIBUTE_TO_ULONG(attrib, ulongvar) \
     92    if ((attrib)->ulValueLen > 0) {                 \
     93        ulongvar = *((CK_ULONG *)(attrib)->pValue); \
     94    }
     95 
     96 /* NSS_CK_ATTRIBUTE_TO_UTF8(attrib, str)
     97 *
     98 * Convert a CK_ATTRIBUTE to a string.
     99 */
    100 #define NSS_CK_ATTRIBUTE_TO_UTF8(attrib, str) \
    101    str = (NSSUTF8 *)((attrib)->pValue);
    102 
    103 /* NSS_CK_ITEM_TO_ATTRIBUTE(item, attrib)
    104 *
    105 * Convert an NSSItem to a  CK_ATTRIBUTE.
    106 */
    107 #define NSS_CK_ITEM_TO_ATTRIBUTE(item, attrib)    \
    108    (attrib)->pValue = (CK_VOID_PTR)(item)->data; \
    109    (attrib)->ulValueLen = (CK_ULONG)(item)->size;
    110 
    111 /* Get an array of attributes from an object. */
    112 NSS_EXTERN PRStatus
    113 nssCKObject_GetAttributes(
    114    CK_OBJECT_HANDLE object,
    115    CK_ATTRIBUTE_PTR obj_template,
    116    CK_ULONG count,
    117    NSSArena *arenaOpt,
    118    nssSession *session,
    119    NSSSlot *slot);
    120 
    121 /* Get a single attribute as an item. */
    122 NSS_EXTERN PRStatus
    123 nssCKObject_GetAttributeItem(
    124    CK_OBJECT_HANDLE object,
    125    CK_ATTRIBUTE_TYPE attribute,
    126    NSSArena *arenaOpt,
    127    nssSession *session,
    128    NSSSlot *slot,
    129    NSSItem *rvItem);
    130 
    131 NSS_EXTERN PRBool
    132 nssCKObject_IsAttributeTrue(
    133    CK_OBJECT_HANDLE object,
    134    CK_ATTRIBUTE_TYPE attribute,
    135    nssSession *session,
    136    NSSSlot *slot,
    137    PRStatus *rvStatus);
    138 
    139 NSS_EXTERN PRStatus
    140 nssCKObject_SetAttributes(
    141    CK_OBJECT_HANDLE object,
    142    CK_ATTRIBUTE_PTR obj_template,
    143    CK_ULONG count,
    144    nssSession *session,
    145    NSSSlot *slot);
    146 
    147 NSS_EXTERN PRBool
    148 nssCKObject_IsTokenObjectTemplate(
    149    CK_ATTRIBUTE_PTR objectTemplate,
    150    CK_ULONG otsize);
    151 
    152 PR_END_EXTERN_C
    153 
    154 #endif /* CKHELPER_H */