|
|
1.1 ! root 1: /**************************************************************************** ! 2: * * ! 3: * cryptlib Interface * ! 4: * Copyright Peter Gutmann 1992-2006 * ! 5: * * ! 6: ****************************************************************************/ ! 7: ! 8: #ifndef _CRYPTLIB_DEFINED ! 9: ! 10: #define _CRYPTLIB_DEFINED ! 11: ! 12: /* The current cryptlib version: 3.3.0.0 */ ! 13: ! 14: #define CRYPTLIB_VERSION 3300 ! 15: ! 16: /* Fixup for Windows support. We need to include windows.h for various types ! 17: and prototypes needed for DLL's. In addition wincrypt.h defines some ! 18: values with the same names as cryptlib ones, so we need to check for this ! 19: and issue a warning not to mix cryptlib with CryptoAPI (that's like taking ! 20: a bank vault and making one side out of papier mache). ! 21: ! 22: A second, less likely condition can occur when wincrypt.h is included ! 23: after cryptlib.h, which shouldn't happen if developers follow the ! 24: convention of including local headers after system headers, but can occur ! 25: if they ignore this convention. The NOCRYPT doesn't fix this since ! 26: wincrypt.h can be pulled in indirectly and unconditionally, for example ! 27: via winldap.h -> schnlsp.h -> schannel.h -> wincrypt.h. To fix this, we ! 28: create a redundant define for CRYPT_MODE_ECB which produces a compile ! 29: error if wincrypt.h is included after cryptlib.h. Since thie will ! 30: conflict with the enum, we have to place it after the CRYPT_MODE_xxx ! 31: enums */ ! 32: ! 33: #if ( defined( _WINDOWS ) || defined( WIN32 ) || defined( _WIN32 ) || \ ! 34: defined( __WIN32__ ) || defined( _WIN32_WCE ) ) && \ ! 35: !defined( _SCCTK ) && !defined( _CVI_ ) ! 36: #define WIN32_LEAN_AND_MEAN /* Skip RPC, OLE, Multimedia, etc */ ! 37: #define NOCRYPT /* Disable include of wincrypt.h */ ! 38: #include <windows.h> ! 39: ! 40: /* Catch use of CryptoAPI and cryptlib at the same time */ ! 41: #if defined( CRYPT_MODE_ECB ) ! 42: #error "cryptlib.h and wincrypt.h can't both be used at the same time due to conflicting type names" ! 43: #endif /* Clash with wincrypt.h defines */ ! 44: #endif /* Windows other than a cross-development environment */ ! 45: ! 46: /* Machine-dependant types to allow use in special library types such as ! 47: DLL's. Under Win32 and BeOS we need to use the dllimport and dllexport ! 48: directives for the DLL/shared-lib version so we define the type used for ! 49: functions depending on whether we're being included via the cryptlib- ! 50: internal crypt.h or not */ ! 51: ! 52: #if ( defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || \ ! 53: defined( _WIN32_WCE ) ) && !( defined( STATIC_LIB ) || defined( _SCCTK ) ) ! 54: #define C_PTR * /* General pointer */ ! 55: #if defined( _WIN32_WCE ) ! 56: /* Rather than relying on _UNICODE being defined (which would cause ! 57: problems if cryptlib is built with char * but the calling app is built ! 58: with wchar_t *), we always use the default native char type, which is ! 59: ASCII (or at least 8-bit) under Win32 and Unicode under WinCE */ ! 60: #define C_CHR wchar_t ! 61: #else ! 62: #define C_CHR char ! 63: #endif /* WinCE vs. Win32 */ ! 64: #define C_STR C_CHR * ! 65: #if defined( __BORLANDC__ ) && ( __BORLANDC__ < 0x500 ) ! 66: #ifdef _CRYPT_DEFINED ! 67: #define C_RET int _export _stdcall /* BC++ DLL export ret.val.*/ ! 68: #else ! 69: #define C_RET int _import _stdcall /* BC++ DLL import ret.val.*/ ! 70: #endif /* CRYPT_DEFINED */ ! 71: #else ! 72: #ifdef _CRYPT_DEFINED ! 73: #define C_RET __declspec( dllexport ) int __stdcall /* DLL export ret.val.*/ ! 74: #else ! 75: #define C_RET __declspec( dllimport ) int __stdcall /* DLL import ret.val.*/ ! 76: #endif /* CRYPT_DEFINED */ ! 77: #endif /* BC++ vs.VC++ DLL functions */ ! 78: #elif defined( _WINDOWS ) && !defined( STATIC_LIB ) ! 79: #define C_PTR FAR * /* DLL pointer */ ! 80: #define C_CHR char ! 81: #define C_STR C_CHR FAR * /* DLL string pointer */ ! 82: #define C_RET int FAR PASCAL _export /* DLL return value */ ! 83: #elif defined( __BEOS__ ) ! 84: /* #include <BeBuild.h> // _EXPORT/_IMPORT defines */ ! 85: #define C_PTR * ! 86: #define C_CHR char ! 87: #define C_STR C_CHR * ! 88: #ifdef _STATIC_LINKING ! 89: #define C_RET int ! 90: #else ! 91: #ifdef _CRYPT_DEFINED ! 92: #define C_RET __declspec( dllexport ) int /* Shared lib export ret.val.*/ ! 93: #else ! 94: #define C_RET __declspec( dllimport ) int /* Shared lib import ret.val.*/ ! 95: #endif /* CRYPT_DEFINED */ ! 96: #endif /* Static vs. shared lib */ ! 97: #elif defined( __SYMBIAN__ ) ! 98: #ifdef _CRYPT_DEFINED ! 99: #define C_RET EXPORT_C /* DLL export ret.val.*/ ! 100: #else ! 101: #define C_RET IMPORT_C /* DLL import ret.val.*/ ! 102: #endif /* CRYPT_DEFINED */ ! 103: #else ! 104: #define C_PTR * ! 105: #define C_CHR char ! 106: #define C_STR C_CHR * ! 107: #define C_RET int ! 108: #endif /* Windows vs.everything else function types */ ! 109: ! 110: /* Symbolic defines to make it clearer how the function parameters behave */ ! 111: ! 112: #define C_IN const /* Input-only */ ! 113: #define C_OUT /* Output-only */ ! 114: #define C_INOUT /* Modified in-place */ ! 115: ! 116: #ifdef _CRYPTLIB_DEFINED /* Disable use in non-C versions of header */ ! 117: ! 118: /* Alongside the externally visible types, cryptlib also has various internal ! 119: types that are extended forms of the external types that are invisible ! 120: to the user (e.g. SignedPublicKeyAndChallenge == certRequest). These can ! 121: only be used internally and are blocked by the security kernel, so they ! 122: can never be accessed from outside cryptlib (in fact for good measure ! 123: they're blocked before they even get to the kernel by preliminary range ! 124: checks in the API wrapper functions). The only reason they're defined ! 125: here is because it's not possible to extend an enum outside the point ! 126: where it's originally defined */ ! 127: ! 128: #endif /* _CRYPTLIB_DEFINED */ ! 129: ! 130: /**************************************************************************** ! 131: * * ! 132: * Algorithm and Object Types * ! 133: * * ! 134: ****************************************************************************/ ! 135: ! 136: /* Algorithm and mode types */ ! 137: ! 138: typedef enum { /* Algorithms */ ! 139: /* No encryption */ ! 140: CRYPT_ALGO_NONE, /* No encryption */ ! 141: ! 142: /* Conventional encryption */ ! 143: CRYPT_ALGO_DES, /* DES */ ! 144: CRYPT_ALGO_3DES, /* Triple DES */ ! 145: CRYPT_ALGO_IDEA, /* IDEA */ ! 146: CRYPT_ALGO_CAST, /* CAST-128 */ ! 147: CRYPT_ALGO_RC2, /* RC2 */ ! 148: CRYPT_ALGO_RC4, /* RC4 */ ! 149: CRYPT_ALGO_RC5, /* RC5 */ ! 150: CRYPT_ALGO_AES, /* AES */ ! 151: CRYPT_ALGO_BLOWFISH, /* Blowfish */ ! 152: CRYPT_ALGO_SKIPJACK, /* Skipjack */ ! 153: ! 154: /* Public-key encryption */ ! 155: CRYPT_ALGO_DH = 100, /* Diffie-Hellman */ ! 156: CRYPT_ALGO_RSA, /* RSA */ ! 157: CRYPT_ALGO_DSA, /* DSA */ ! 158: CRYPT_ALGO_ELGAMAL, /* ElGamal */ ! 159: CRYPT_ALGO_KEA, /* KEA */ ! 160: ! 161: /* Hash algorithms */ ! 162: CRYPT_ALGO_MD2 = 200, /* MD2 */ ! 163: CRYPT_ALGO_MD4, /* MD4 */ ! 164: CRYPT_ALGO_MD5, /* MD5 */ ! 165: CRYPT_ALGO_SHA, /* SHA/SHA1 */ ! 166: CRYPT_ALGO_RIPEMD160, /* RIPE-MD 160 */ ! 167: CRYPT_ALGO_SHA2, /* SHA2 (SHA-256/384/512)*/ ! 168: ! 169: /* MAC's */ ! 170: CRYPT_ALGO_HMAC_MD5 = 300, /* HMAC-MD5 */ ! 171: CRYPT_ALGO_HMAC_SHA1, /* HMAC-SHA */ ! 172: CRYPT_ALGO_HMAC_SHA = CRYPT_ALGO_HMAC_SHA1, /* Older form */ ! 173: CRYPT_ALGO_HMAC_RIPEMD160, /* HMAC-RIPEMD-160 */ ! 174: ! 175: /* Vendors may want to use their own algorithms that aren't part of the ! 176: general cryptlib suite. The following values are for vendor-defined ! 177: algorithms, and can be used just like the named algorithm types (it's ! 178: up to the vendor to keep track of what _VENDOR1 actually corresponds ! 179: to) */ ! 180: #ifdef USE_VENDOR_ALGOS ! 181: CRYPT_ALGO_VENDOR1 = 10000, CRYPT_ALGO_VENDOR2, CRYPT_ALGO_VENDOR3, ! 182: #endif /* USE_VENDOR_ALGOS */ ! 183: ! 184: CRYPT_ALGO_LAST, /* Last possible crypt algo value */ ! 185: ! 186: /* In order that we can scan through a range of algorithms with ! 187: cryptQueryCapability(), we define the following boundary points for ! 188: each algorithm class */ ! 189: CRYPT_ALGO_FIRST_CONVENTIONAL = CRYPT_ALGO_DES, ! 190: CRYPT_ALGO_LAST_CONVENTIONAL = CRYPT_ALGO_DH - 1, ! 191: CRYPT_ALGO_FIRST_PKC = CRYPT_ALGO_DH, ! 192: CRYPT_ALGO_LAST_PKC = CRYPT_ALGO_MD2 - 1, ! 193: CRYPT_ALGO_FIRST_HASH = CRYPT_ALGO_MD2, ! 194: CRYPT_ALGO_LAST_HASH = CRYPT_ALGO_HMAC_MD5 - 1, ! 195: CRYPT_ALGO_FIRST_MAC = CRYPT_ALGO_HMAC_MD5, ! 196: CRYPT_ALGO_LAST_MAC = CRYPT_ALGO_HMAC_MD5 + 99 /* End of mac algo.range */ ! 197: } CRYPT_ALGO_TYPE; ! 198: ! 199: typedef enum { /* Block cipher modes */ ! 200: CRYPT_MODE_NONE, /* No encryption mode */ ! 201: CRYPT_MODE_ECB, /* ECB */ ! 202: CRYPT_MODE_CBC, /* CBC */ ! 203: CRYPT_MODE_CFB, /* CFB */ ! 204: CRYPT_MODE_OFB, /* OFB */ ! 205: CRYPT_MODE_LAST /* Last possible crypt mode value */ ! 206: } CRYPT_MODE_TYPE; ! 207: ! 208: #if ( defined( _WINDOWS ) || defined( WIN32 ) || defined( _WIN32 ) || \ ! 209: defined( __WIN32__ ) ) && !defined( _SCCTK ) ! 210: /* Force an error if wincrypt.h is included after cryptlib.h, see note at ! 211: the start of the file */ ! 212: #define CRYPT_MODE_ECB 1 ! 213: #endif /* Windows other than a cross-development environment */ ! 214: ! 215: /* Keyset subtypes */ ! 216: ! 217: typedef enum { /* Keyset types */ ! 218: CRYPT_KEYSET_NONE, /* No keyset type */ ! 219: CRYPT_KEYSET_FILE, /* Generic flat file keyset */ ! 220: CRYPT_KEYSET_HTTP, /* Web page containing cert/CRL */ ! 221: CRYPT_KEYSET_LDAP, /* LDAP directory service */ ! 222: CRYPT_KEYSET_ODBC, /* Generic ODBC interface */ ! 223: CRYPT_KEYSET_DATABASE, /* Generic RDBMS interface */ ! 224: CRYPT_KEYSET_PLUGIN, /* Generic database plugin */ ! 225: CRYPT_KEYSET_ODBC_STORE, /* ODBC certificate store */ ! 226: CRYPT_KEYSET_DATABASE_STORE, /* Database certificate store */ ! 227: CRYPT_KEYSET_PLUGIN_STORE, /* Database plugin certificate store */ ! 228: CRYPT_KEYSET_LAST /* Last possible keyset type */ ! 229: ! 230: #ifdef _CRYPT_DEFINED ! 231: /* Useful defines used internally for range checking */ ! 232: , CRYPT_FIRST_RDBMS = CRYPT_KEYSET_ODBC, ! 233: CRYPT_LAST_RDBMS = CRYPT_KEYSET_PLUGIN_STORE ! 234: #endif /* _CRYPT_DEFINED */ ! 235: } CRYPT_KEYSET_TYPE; ! 236: ! 237: /* Device subtypes */ ! 238: ! 239: typedef enum { /* Crypto device types */ ! 240: CRYPT_DEVICE_NONE, /* No crypto device */ ! 241: CRYPT_DEVICE_FORTEZZA, /* Fortezza card */ ! 242: CRYPT_DEVICE_PKCS11, /* PKCS #11 crypto token */ ! 243: CRYPT_DEVICE_CRYPTOAPI, /* Microsoft CryptoAPI */ ! 244: CRYPT_DEVICE_LAST /* Last possible crypto device type */ ! 245: } CRYPT_DEVICE_TYPE; ! 246: ! 247: /* Certificate subtypes */ ! 248: ! 249: typedef enum { /* Certificate object types */ ! 250: CRYPT_CERTTYPE_NONE, /* No certificate type */ ! 251: CRYPT_CERTTYPE_CERTIFICATE, /* Certificate */ ! 252: CRYPT_CERTTYPE_ATTRIBUTE_CERT, /* Attribute certificate */ ! 253: CRYPT_CERTTYPE_CERTCHAIN, /* PKCS #7 certificate chain */ ! 254: CRYPT_CERTTYPE_CERTREQUEST, /* PKCS #10 certification request */ ! 255: CRYPT_CERTTYPE_REQUEST_CERT, /* CRMF certification request */ ! 256: CRYPT_CERTTYPE_REQUEST_REVOCATION, /* CRMF revocation request */ ! 257: CRYPT_CERTTYPE_CRL, /* CRL */ ! 258: CRYPT_CERTTYPE_CMS_ATTRIBUTES, /* CMS attributes */ ! 259: CRYPT_CERTTYPE_RTCS_REQUEST, /* RTCS request */ ! 260: CRYPT_CERTTYPE_RTCS_RESPONSE, /* RTCS response */ ! 261: CRYPT_CERTTYPE_OCSP_REQUEST, /* OCSP request */ ! 262: CRYPT_CERTTYPE_OCSP_RESPONSE, /* OCSP response */ ! 263: CRYPT_CERTTYPE_PKIUSER, /* PKI user information */ ! 264: #ifdef _CRYPT_DEFINED ! 265: /* Alongside the usual types we can also wind up with various ! 266: certificate-bagging schemes such as cert chains and sequences that ! 267: can't be exported in this format and therefore aren't visible to the ! 268: user, but that need to be distinguished internally. The following ! 269: types are only visible internally */ ! 270: CRYPT_ICERTTYPE_CMS_CERTSET, /* CMS SET OF Certificate = cert chain */ ! 271: CRYPT_ICERTTYPE_SSL_CERTCHAIN, /* SSL certificate chain = cert chain */ ! 272: #endif /* _CRYPT_DEFINED */ ! 273: CRYPT_CERTTYPE_LAST /* Last possible cert.type */ ! 274: #ifdef _CRYPT_DEFINED ! 275: , CRYPT_CERTTYPE_LAST_EXTERNAL = CRYPT_CERTTYPE_PKIUSER + 1 ! 276: #endif /* _CRYPT_DEFINED */ ! 277: } CRYPT_CERTTYPE_TYPE; ! 278: ! 279: /* Envelope/data format subtypes */ ! 280: ! 281: typedef enum { ! 282: CRYPT_FORMAT_NONE, /* No format type */ ! 283: CRYPT_FORMAT_AUTO, /* Deenv, auto-determine type */ ! 284: CRYPT_FORMAT_CRYPTLIB, /* cryptlib native format */ ! 285: CRYPT_FORMAT_CMS, /* PKCS #7 / CMS / S/MIME fmt.*/ ! 286: CRYPT_FORMAT_PKCS7 = CRYPT_FORMAT_CMS, ! 287: CRYPT_FORMAT_SMIME, /* As CMS with MSG-style behaviour */ ! 288: CRYPT_FORMAT_PGP, /* PGP format */ ! 289: #ifdef _CRYPT_DEFINED ! 290: /* Alongside the usual types we can also wind up with various protocol- ! 291: specific format types such as SSL and SSH. The following types are ! 292: only visible internally */ ! 293: CRYPT_IFORMAT_SSL, /* SSL format */ ! 294: CRYPT_IFORMAT_SSH, /* SSH format */ ! 295: #endif /* _CRYPT_DEFINED */ ! 296: CRYPT_FORMAT_LAST /* Last possible format type */ ! 297: #ifdef _CRYPT_DEFINED ! 298: , CRYPT_FORMAT_LAST_EXTERNAL = CRYPT_FORMAT_PGP + 1 ! 299: #endif /* _CRYPT_DEFINED */ ! 300: } CRYPT_FORMAT_TYPE; ! 301: ! 302: /* Session subtypes */ ! 303: ! 304: typedef enum { ! 305: CRYPT_SESSION_NONE, /* No session type */ ! 306: CRYPT_SESSION_SSH, /* SSH */ ! 307: CRYPT_SESSION_SSH_SERVER, /* SSH server */ ! 308: CRYPT_SESSION_SSL, /* SSL/TLS */ ! 309: CRYPT_SESSION_SSL_SERVER, /* SSL/TLS server */ ! 310: CRYPT_SESSION_RTCS, /* RTCS */ ! 311: CRYPT_SESSION_RTCS_SERVER, /* RTCS server */ ! 312: CRYPT_SESSION_OCSP, /* OCSP */ ! 313: CRYPT_SESSION_OCSP_SERVER, /* OCSP server */ ! 314: CRYPT_SESSION_TSP, /* TSP */ ! 315: CRYPT_SESSION_TSP_SERVER, /* TSP server */ ! 316: CRYPT_SESSION_CMP, /* CMP */ ! 317: CRYPT_SESSION_CMP_SERVER, /* CMP server */ ! 318: CRYPT_SESSION_SCEP, /* SCEP */ ! 319: CRYPT_SESSION_SCEP_SERVER, /* SCEP server */ ! 320: CRYPT_SESSION_CERTSTORE_SERVER, /* HTTP cert store interface */ ! 321: CRYPT_SESSION_LAST /* Last possible session type */ ! 322: } CRYPT_SESSION_TYPE; ! 323: ! 324: /* User subtypes */ ! 325: ! 326: typedef enum { ! 327: CRYPT_USER_NONE, /* No user type */ ! 328: CRYPT_USER_NORMAL, /* Normal user */ ! 329: CRYPT_USER_SO, /* Security officer */ ! 330: CRYPT_USER_CA, /* CA user */ ! 331: CRYPT_USER_LAST /* Last possible user type */ ! 332: } CRYPT_USER_TYPE; ! 333: ! 334: /**************************************************************************** ! 335: * * ! 336: * Attribute Types * ! 337: * * ! 338: ****************************************************************************/ ! 339: ! 340: /* Attribute types. These are arranged in the following order: ! 341: ! 342: PROPERTY - Object property ! 343: ATTRIBUTE - Generic attributes ! 344: OPTION - Global or object-specific config.option ! 345: CTXINFO - Context-specific attribute ! 346: CERTINFO - Certificate-specific attribute ! 347: KEYINFO - Keyset-specific attribute ! 348: DEVINFO - Device-specific attribute ! 349: ENVINFO - Envelope-specific attribute ! 350: SESSINFO - Session-specific attribute ! 351: USERINFO - User-specific attribute */ ! 352: ! 353: typedef enum { ! 354: CRYPT_ATTRIBUTE_NONE, /* Non-value */ ! 355: ! 356: /* Used internally */ ! 357: CRYPT_PROPERTY_FIRST, ! 358: ! 359: /*********************/ ! 360: /* Object attributes */ ! 361: /*********************/ ! 362: ! 363: /* Object properties */ ! 364: CRYPT_PROPERTY_HIGHSECURITY, /* Owned+non-forwardcount+locked */ ! 365: CRYPT_PROPERTY_OWNER, /* Object owner */ ! 366: CRYPT_PROPERTY_FORWARDCOUNT, /* No.of times object can be forwarded */ ! 367: CRYPT_PROPERTY_LOCKED, /* Whether properties can be chged/read */ ! 368: CRYPT_PROPERTY_USAGECOUNT, /* Usage count before object expires */ ! 369: CRYPT_PROPERTY_NONEXPORTABLE, /* Whether key is nonexp.from context */ ! 370: ! 371: /* Used internally */ ! 372: CRYPT_PROPERTY_LAST, CRYPT_GENERIC_FIRST, ! 373: ! 374: /* Extended error information */ ! 375: CRYPT_ATTRIBUTE_ERRORTYPE, /* Type of last error */ ! 376: CRYPT_ATTRIBUTE_ERRORLOCUS, /* Locus of last error */ ! 377: CRYPT_ATTRIBUTE_INT_ERRORCODE, /* Low-level software-specific */ ! 378: CRYPT_ATTRIBUTE_INT_ERRORMESSAGE, /* error code and message */ ! 379: ! 380: /* Generic information */ ! 381: CRYPT_ATTRIBUTE_CURRENT_GROUP, /* Cursor mgt: Group in attribute list */ ! 382: CRYPT_ATTRIBUTE_CURRENT, /* Cursor mgt: Entry in attribute list */ ! 383: CRYPT_ATTRIBUTE_CURRENT_INSTANCE, /* Cursor mgt: Instance in attribute list */ ! 384: CRYPT_ATTRIBUTE_BUFFERSIZE, /* Internal data buffer size */ ! 385: ! 386: /* User internally */ ! 387: CRYPT_GENERIC_LAST, CRYPT_OPTION_FIRST = 100, ! 388: ! 389: /****************************/ ! 390: /* Configuration attributes */ ! 391: /****************************/ ! 392: ! 393: /* cryptlib information (read-only) */ ! 394: CRYPT_OPTION_INFO_DESCRIPTION, /* Text description */ ! 395: CRYPT_OPTION_INFO_COPYRIGHT, /* Copyright notice */ ! 396: CRYPT_OPTION_INFO_MAJORVERSION, /* Major release version */ ! 397: CRYPT_OPTION_INFO_MINORVERSION, /* Minor release version */ ! 398: CRYPT_OPTION_INFO_STEPPING, /* Release stepping */ ! 399: ! 400: /* Encryption options */ ! 401: CRYPT_OPTION_ENCR_ALGO, /* Encryption algorithm */ ! 402: CRYPT_OPTION_ENCR_HASH, /* Hash algorithm */ ! 403: CRYPT_OPTION_ENCR_MAC, /* MAC algorithm */ ! 404: ! 405: /* PKC options */ ! 406: CRYPT_OPTION_PKC_ALGO, /* Public-key encryption algorithm */ ! 407: CRYPT_OPTION_PKC_KEYSIZE, /* Public-key encryption key size */ ! 408: ! 409: /* Signature options */ ! 410: CRYPT_OPTION_SIG_ALGO, /* Signature algorithm */ ! 411: CRYPT_OPTION_SIG_KEYSIZE, /* Signature keysize */ ! 412: ! 413: /* Keying options */ ! 414: CRYPT_OPTION_KEYING_ALGO, /* Key processing algorithm */ ! 415: CRYPT_OPTION_KEYING_ITERATIONS, /* Key processing iterations */ ! 416: ! 417: /* Certificate options */ ! 418: CRYPT_OPTION_CERT_SIGNUNRECOGNISEDATTRIBUTES, /* Whether to sign unrecog.attrs */ ! 419: CRYPT_OPTION_CERT_VALIDITY, /* Certificate validity period */ ! 420: CRYPT_OPTION_CERT_UPDATEINTERVAL, /* CRL update interval */ ! 421: CRYPT_OPTION_CERT_COMPLIANCELEVEL, /* PKIX compliance level for cert chks.*/ ! 422: CRYPT_OPTION_CERT_REQUIREPOLICY, /* Whether explicit policy req'd for certs */ ! 423: ! 424: /* CMS/SMIME options */ ! 425: CRYPT_OPTION_CMS_DEFAULTATTRIBUTES, /* Add default CMS attributes */ ! 426: CRYPT_OPTION_SMIME_DEFAULTATTRIBUTES = CRYPT_OPTION_CMS_DEFAULTATTRIBUTES, ! 427: ! 428: /* LDAP keyset options */ ! 429: CRYPT_OPTION_KEYS_LDAP_OBJECTCLASS, /* Object class */ ! 430: CRYPT_OPTION_KEYS_LDAP_OBJECTTYPE, /* Object type to fetch */ ! 431: CRYPT_OPTION_KEYS_LDAP_FILTER, /* Query filter */ ! 432: CRYPT_OPTION_KEYS_LDAP_CACERTNAME, /* CA certificate attribute name */ ! 433: CRYPT_OPTION_KEYS_LDAP_CERTNAME, /* Certificate attribute name */ ! 434: CRYPT_OPTION_KEYS_LDAP_CRLNAME, /* CRL attribute name */ ! 435: CRYPT_OPTION_KEYS_LDAP_EMAILNAME, /* Email attribute name */ ! 436: ! 437: /* Crypto device options */ ! 438: CRYPT_OPTION_DEVICE_PKCS11_DVR01, /* Name of first PKCS #11 driver */ ! 439: CRYPT_OPTION_DEVICE_PKCS11_DVR02, /* Name of second PKCS #11 driver */ ! 440: CRYPT_OPTION_DEVICE_PKCS11_DVR03, /* Name of third PKCS #11 driver */ ! 441: CRYPT_OPTION_DEVICE_PKCS11_DVR04, /* Name of fourth PKCS #11 driver */ ! 442: CRYPT_OPTION_DEVICE_PKCS11_DVR05, /* Name of fifth PKCS #11 driver */ ! 443: CRYPT_OPTION_DEVICE_PKCS11_HARDWAREONLY,/* Use only hardware mechanisms */ ! 444: ! 445: /* Network access options */ ! 446: CRYPT_OPTION_NET_SOCKS_SERVER, /* Socks server name */ ! 447: CRYPT_OPTION_NET_SOCKS_USERNAME, /* Socks user name */ ! 448: CRYPT_OPTION_NET_HTTP_PROXY, /* Web proxy server */ ! 449: CRYPT_OPTION_NET_CONNECTTIMEOUT, /* Timeout for network connection setup */ ! 450: CRYPT_OPTION_NET_READTIMEOUT, /* Timeout for network reads */ ! 451: CRYPT_OPTION_NET_WRITETIMEOUT, /* Timeout for network writes */ ! 452: ! 453: /* Miscellaneous options */ ! 454: CRYPT_OPTION_MISC_ASYNCINIT, /* Whether to init cryptlib async'ly */ ! 455: CRYPT_OPTION_MISC_SIDECHANNELPROTECTION, /* Protect against side-channel attacks */ ! 456: ! 457: /* cryptlib state information */ ! 458: CRYPT_OPTION_CONFIGCHANGED, /* Whether in-mem.opts match on-disk ones */ ! 459: CRYPT_OPTION_SELFTESTOK, /* Whether self-test was completed and OK */ ! 460: ! 461: /* Used internally */ ! 462: CRYPT_OPTION_LAST, CRYPT_CTXINFO_FIRST = 1000, ! 463: ! 464: /**********************/ ! 465: /* Context attributes */ ! 466: /**********************/ ! 467: ! 468: /* Algorithm and mode information */ ! 469: CRYPT_CTXINFO_ALGO, /* Algorithm */ ! 470: CRYPT_CTXINFO_MODE, /* Mode */ ! 471: CRYPT_CTXINFO_NAME_ALGO, /* Algorithm name */ ! 472: CRYPT_CTXINFO_NAME_MODE, /* Mode name */ ! 473: CRYPT_CTXINFO_KEYSIZE, /* Key size in bytes */ ! 474: CRYPT_CTXINFO_BLOCKSIZE, /* Block size */ ! 475: CRYPT_CTXINFO_IVSIZE, /* IV size */ ! 476: CRYPT_CTXINFO_KEYING_ALGO, /* Key processing algorithm */ ! 477: CRYPT_CTXINFO_KEYING_ITERATIONS,/* Key processing iterations */ ! 478: CRYPT_CTXINFO_KEYING_SALT, /* Key processing salt */ ! 479: CRYPT_CTXINFO_KEYING_VALUE, /* Value used to derive key */ ! 480: ! 481: /* State information */ ! 482: CRYPT_CTXINFO_KEY, /* Key */ ! 483: CRYPT_CTXINFO_KEY_COMPONENTS, /* Public-key components */ ! 484: CRYPT_CTXINFO_IV, /* IV */ ! 485: CRYPT_CTXINFO_HASHVALUE, /* Hash value */ ! 486: ! 487: /* Misc.information */ ! 488: CRYPT_CTXINFO_LABEL, /* Label for private/secret key */ ! 489: ! 490: /* Used internally */ ! 491: CRYPT_CTXINFO_LAST, CRYPT_CERTINFO_FIRST = 2000, ! 492: ! 493: /**************************/ ! 494: /* Certificate attributes */ ! 495: /**************************/ ! 496: ! 497: /* Because there are so many cert attributes, we break them down into ! 498: blocks to minimise the number of values that change if a new one is ! 499: added halfway through */ ! 500: ! 501: /* Pseudo-information on a cert object or meta-information which is used ! 502: to control the way that a cert object is processed */ ! 503: CRYPT_CERTINFO_SELFSIGNED, /* Cert is self-signed */ ! 504: CRYPT_CERTINFO_IMMUTABLE, /* Cert is signed and immutable */ ! 505: CRYPT_CERTINFO_XYZZY, /* Cert is a magic just-works cert */ ! 506: CRYPT_CERTINFO_CERTTYPE, /* Certificate object type */ ! 507: CRYPT_CERTINFO_FINGERPRINT, /* Certificate fingerprints */ ! 508: CRYPT_CERTINFO_FINGERPRINT_MD5 = CRYPT_CERTINFO_FINGERPRINT, ! 509: CRYPT_CERTINFO_FINGERPRINT_SHA, ! 510: CRYPT_CERTINFO_CURRENT_CERTIFICATE,/* Cursor mgt: Rel.pos in chain/CRL/OCSP */ ! 511: CRYPT_CERTINFO_TRUSTED_USAGE, /* Usage that cert is trusted for */ ! 512: CRYPT_CERTINFO_TRUSTED_IMPLICIT,/* Whether cert is implicitly trusted */ ! 513: CRYPT_CERTINFO_SIGNATURELEVEL, /* Amount of detail to include in sigs.*/ ! 514: ! 515: /* General certificate object information */ ! 516: CRYPT_CERTINFO_VERSION, /* Cert.format version */ ! 517: CRYPT_CERTINFO_SERIALNUMBER, /* Serial number */ ! 518: CRYPT_CERTINFO_SUBJECTPUBLICKEYINFO, /* Public key */ ! 519: CRYPT_CERTINFO_CERTIFICATE, /* User certificate */ ! 520: CRYPT_CERTINFO_USERCERTIFICATE = CRYPT_CERTINFO_CERTIFICATE, ! 521: CRYPT_CERTINFO_CACERTIFICATE, /* CA certificate */ ! 522: CRYPT_CERTINFO_ISSUERNAME, /* Issuer DN */ ! 523: CRYPT_CERTINFO_VALIDFROM, /* Cert valid-from time */ ! 524: CRYPT_CERTINFO_VALIDTO, /* Cert valid-to time */ ! 525: CRYPT_CERTINFO_SUBJECTNAME, /* Subject DN */ ! 526: CRYPT_CERTINFO_ISSUERUNIQUEID, /* Issuer unique ID */ ! 527: CRYPT_CERTINFO_SUBJECTUNIQUEID, /* Subject unique ID */ ! 528: CRYPT_CERTINFO_CERTREQUEST, /* Cert.request (DN + public key) */ ! 529: CRYPT_CERTINFO_THISUPDATE, /* CRL/OCSP current-update time */ ! 530: CRYPT_CERTINFO_NEXTUPDATE, /* CRL/OCSP next-update time */ ! 531: CRYPT_CERTINFO_REVOCATIONDATE, /* CRL/OCSP cert-revocation time */ ! 532: CRYPT_CERTINFO_REVOCATIONSTATUS,/* OCSP revocation status */ ! 533: CRYPT_CERTINFO_CERTSTATUS, /* RTCS certificate status */ ! 534: CRYPT_CERTINFO_DN, /* Currently selected DN in string form */ ! 535: CRYPT_CERTINFO_PKIUSER_ID, /* PKI user ID */ ! 536: CRYPT_CERTINFO_PKIUSER_ISSUEPASSWORD, /* PKI user issue password */ ! 537: CRYPT_CERTINFO_PKIUSER_REVPASSWORD, /* PKI user revocation password */ ! 538: ! 539: /* X.520 Distinguished Name components. This is a composite field, the ! 540: DN to be manipulated is selected through the addition of a ! 541: pseudocomponent, and then one of the following is used to access the ! 542: DN components directly */ ! 543: CRYPT_CERTINFO_COUNTRYNAME = CRYPT_CERTINFO_FIRST + 100, /* countryName */ ! 544: CRYPT_CERTINFO_STATEORPROVINCENAME, /* stateOrProvinceName */ ! 545: CRYPT_CERTINFO_LOCALITYNAME, /* localityName */ ! 546: CRYPT_CERTINFO_ORGANIZATIONNAME, /* organizationName */ ! 547: CRYPT_CERTINFO_ORGANISATIONNAME = CRYPT_CERTINFO_ORGANIZATIONNAME, ! 548: CRYPT_CERTINFO_ORGANIZATIONALUNITNAME, /* organizationalUnitName */ ! 549: CRYPT_CERTINFO_ORGANISATIONALUNITNAME = CRYPT_CERTINFO_ORGANIZATIONALUNITNAME, ! 550: CRYPT_CERTINFO_COMMONNAME, /* commonName */ ! 551: ! 552: /* X.509 General Name components. These are handled in the same way as ! 553: the DN composite field, with the current GeneralName being selected by ! 554: a pseudo-component after which the individual components can be ! 555: modified through one of the following */ ! 556: CRYPT_CERTINFO_OTHERNAME_TYPEID, /* otherName.typeID */ ! 557: CRYPT_CERTINFO_OTHERNAME_VALUE, /* otherName.value */ ! 558: CRYPT_CERTINFO_RFC822NAME, /* rfc822Name */ ! 559: CRYPT_CERTINFO_EMAIL = CRYPT_CERTINFO_RFC822NAME, ! 560: CRYPT_CERTINFO_DNSNAME, /* dNSName */ ! 561: #if 0 /* Not supported yet, these are never used in practice and have an ! 562: insane internal structure */ ! 563: CRYPT_CERTINFO_X400ADDRESS, /* x400Address */ ! 564: #endif /* 0 */ ! 565: CRYPT_CERTINFO_DIRECTORYNAME, /* directoryName */ ! 566: CRYPT_CERTINFO_EDIPARTYNAME_NAMEASSIGNER, /* ediPartyName.nameAssigner */ ! 567: CRYPT_CERTINFO_EDIPARTYNAME_PARTYNAME, /* ediPartyName.partyName */ ! 568: CRYPT_CERTINFO_UNIFORMRESOURCEIDENTIFIER, /* uniformResourceIdentifier */ ! 569: CRYPT_CERTINFO_IPADDRESS, /* iPAddress */ ! 570: CRYPT_CERTINFO_REGISTEREDID, /* registeredID */ ! 571: ! 572: /* X.509 certificate extensions. Although it would be nicer to use names ! 573: that match the extensions more closely (e.g. ! 574: CRYPT_CERTINFO_BASICCONSTRAINTS_PATHLENCONSTRAINT), these exceed the ! 575: 32-character ANSI minimum length for unique names, and get really ! 576: hairy once you get into the weird policy constraints extensions whose ! 577: names wrap around the screen about three times. ! 578: ! 579: The following values are defined in OID order, this isn't absolutely ! 580: necessary but saves an extra layer of processing when encoding them */ ! 581: ! 582: /* 1 2 840 113549 1 9 7 challengePassword. This is here even though it's ! 583: a CMS attribute because SCEP stuffs it into PKCS #10 requests */ ! 584: CRYPT_CERTINFO_CHALLENGEPASSWORD = CRYPT_CERTINFO_FIRST + 200, ! 585: ! 586: /* 1 3 6 1 4 1 3029 3 1 4 cRLExtReason */ ! 587: CRYPT_CERTINFO_CRLEXTREASON, ! 588: ! 589: /* 1 3 6 1 4 1 3029 3 1 5 keyFeatures */ ! 590: CRYPT_CERTINFO_KEYFEATURES, ! 591: ! 592: /* 1 3 6 1 5 5 7 1 1 authorityInfoAccess */ ! 593: CRYPT_CERTINFO_AUTHORITYINFOACCESS, ! 594: CRYPT_CERTINFO_AUTHORITYINFO_RTCS, /* accessDescription.accessLocation */ ! 595: CRYPT_CERTINFO_AUTHORITYINFO_OCSP, /* accessDescription.accessLocation */ ! 596: CRYPT_CERTINFO_AUTHORITYINFO_CAISSUERS, /* accessDescription.accessLocation */ ! 597: CRYPT_CERTINFO_AUTHORITYINFO_CERTSTORE, /* accessDescription.accessLocation */ ! 598: CRYPT_CERTINFO_AUTHORITYINFO_CRLS, /* accessDescription.accessLocation */ ! 599: ! 600: /* 1 3 6 1 5 5 7 1 2 biometricInfo */ ! 601: CRYPT_CERTINFO_BIOMETRICINFO, ! 602: CRYPT_CERTINFO_BIOMETRICINFO_TYPE, /* biometricData.typeOfData */ ! 603: CRYPT_CERTINFO_BIOMETRICINFO_HASHALGO, /* biometricData.hashAlgorithm */ ! 604: CRYPT_CERTINFO_BIOMETRICINFO_HASH, /* biometricData.dataHash */ ! 605: CRYPT_CERTINFO_BIOMETRICINFO_URL, /* biometricData.sourceDataUri */ ! 606: ! 607: /* 1 3 6 1 5 5 7 1 3 qcStatements */ ! 608: CRYPT_CERTINFO_QCSTATEMENT, ! 609: CRYPT_CERTINFO_QCSTATEMENT_SEMANTICS, ! 610: /* qcStatement.statementInfo.semanticsIdentifier */ ! 611: CRYPT_CERTINFO_QCSTATEMENT_REGISTRATIONAUTHORITY, ! 612: /* qcStatement.statementInfo.nameRegistrationAuthorities */ ! 613: ! 614: /* 1 3 6 1 5 5 7 48 1 2 ocspNonce */ ! 615: CRYPT_CERTINFO_OCSP_NONCE, /* nonce */ ! 616: ! 617: /* 1 3 6 1 5 5 7 48 1 4 ocspAcceptableResponses */ ! 618: CRYPT_CERTINFO_OCSP_RESPONSE, ! 619: CRYPT_CERTINFO_OCSP_RESPONSE_OCSP, /* OCSP standard response */ ! 620: ! 621: /* 1 3 6 1 5 5 7 48 1 5 ocspNoCheck */ ! 622: CRYPT_CERTINFO_OCSP_NOCHECK, ! 623: ! 624: /* 1 3 6 1 5 5 7 48 1 6 ocspArchiveCutoff */ ! 625: CRYPT_CERTINFO_OCSP_ARCHIVECUTOFF, ! 626: ! 627: /* 1 3 6 1 5 5 7 48 1 11 subjectInfoAccess */ ! 628: CRYPT_CERTINFO_SUBJECTINFOACCESS, ! 629: CRYPT_CERTINFO_SUBJECTINFO_CAREPOSITORY,/* accessDescription.accessLocation */ ! 630: CRYPT_CERTINFO_SUBJECTINFO_TIMESTAMPING,/* accessDescription.accessLocation */ ! 631: ! 632: /* 1 3 36 8 3 1 siggDateOfCertGen */ ! 633: CRYPT_CERTINFO_SIGG_DATEOFCERTGEN, ! 634: ! 635: /* 1 3 36 8 3 2 siggProcuration */ ! 636: CRYPT_CERTINFO_SIGG_PROCURATION, ! 637: CRYPT_CERTINFO_SIGG_PROCURE_COUNTRY, /* country */ ! 638: CRYPT_CERTINFO_SIGG_PROCURE_TYPEOFSUBSTITUTION, /* typeOfSubstitution */ ! 639: CRYPT_CERTINFO_SIGG_PROCURE_SIGNINGFOR, /* signingFor.thirdPerson */ ! 640: ! 641: /* 1 3 36 8 3 4 siggMonetaryLimit */ ! 642: CRYPT_CERTINFO_SIGG_MONETARYLIMIT, ! 643: CRYPT_CERTINFO_SIGG_MONETARY_CURRENCY, /* currency */ ! 644: CRYPT_CERTINFO_SIGG_MONETARY_AMOUNT, /* amount */ ! 645: CRYPT_CERTINFO_SIGG_MONETARY_EXPONENT, /* exponent */ ! 646: ! 647: /* 1 3 36 8 3 8 siggRestriction */ ! 648: CRYPT_CERTINFO_SIGG_RESTRICTION, ! 649: ! 650: /* 1 3 101 1 4 1 strongExtranet */ ! 651: CRYPT_CERTINFO_STRONGEXTRANET, ! 652: CRYPT_CERTINFO_STRONGEXTRANET_ZONE, /* sxNetIDList.sxNetID.zone */ ! 653: CRYPT_CERTINFO_STRONGEXTRANET_ID, /* sxNetIDList.sxNetID.id */ ! 654: ! 655: /* 2 5 29 9 subjectDirectoryAttributes */ ! 656: CRYPT_CERTINFO_SUBJECTDIRECTORYATTRIBUTES, ! 657: CRYPT_CERTINFO_SUBJECTDIR_TYPE, /* attribute.type */ ! 658: CRYPT_CERTINFO_SUBJECTDIR_VALUES, /* attribute.values */ ! 659: ! 660: /* 2 5 29 14 subjectKeyIdentifier */ ! 661: CRYPT_CERTINFO_SUBJECTKEYIDENTIFIER, ! 662: ! 663: /* 2 5 29 15 keyUsage */ ! 664: CRYPT_CERTINFO_KEYUSAGE, ! 665: ! 666: /* 2 5 29 16 privateKeyUsagePeriod */ ! 667: CRYPT_CERTINFO_PRIVATEKEYUSAGEPERIOD, ! 668: CRYPT_CERTINFO_PRIVATEKEY_NOTBEFORE, /* notBefore */ ! 669: CRYPT_CERTINFO_PRIVATEKEY_NOTAFTER, /* notAfter */ ! 670: ! 671: /* 2 5 29 17 subjectAltName */ ! 672: CRYPT_CERTINFO_SUBJECTALTNAME, ! 673: ! 674: /* 2 5 29 18 issuerAltName */ ! 675: CRYPT_CERTINFO_ISSUERALTNAME, ! 676: ! 677: /* 2 5 29 19 basicConstraints */ ! 678: CRYPT_CERTINFO_BASICCONSTRAINTS, ! 679: CRYPT_CERTINFO_CA, /* cA */ ! 680: CRYPT_CERTINFO_AUTHORITY = CRYPT_CERTINFO_CA, ! 681: CRYPT_CERTINFO_PATHLENCONSTRAINT, /* pathLenConstraint */ ! 682: ! 683: /* 2 5 29 20 cRLNumber */ ! 684: CRYPT_CERTINFO_CRLNUMBER, ! 685: ! 686: /* 2 5 29 21 cRLReason */ ! 687: CRYPT_CERTINFO_CRLREASON, ! 688: ! 689: /* 2 5 29 23 holdInstructionCode */ ! 690: CRYPT_CERTINFO_HOLDINSTRUCTIONCODE, ! 691: ! 692: /* 2 5 29 24 invalidityDate */ ! 693: CRYPT_CERTINFO_INVALIDITYDATE, ! 694: ! 695: /* 2 5 29 27 deltaCRLIndicator */ ! 696: CRYPT_CERTINFO_DELTACRLINDICATOR, ! 697: ! 698: /* 2 5 29 28 issuingDistributionPoint */ ! 699: CRYPT_CERTINFO_ISSUINGDISTRIBUTIONPOINT, ! 700: CRYPT_CERTINFO_ISSUINGDIST_FULLNAME, /* distributionPointName.fullName */ ! 701: CRYPT_CERTINFO_ISSUINGDIST_USERCERTSONLY, /* onlyContainsUserCerts */ ! 702: CRYPT_CERTINFO_ISSUINGDIST_CACERTSONLY, /* onlyContainsCACerts */ ! 703: CRYPT_CERTINFO_ISSUINGDIST_SOMEREASONSONLY, /* onlySomeReasons */ ! 704: CRYPT_CERTINFO_ISSUINGDIST_INDIRECTCRL, /* indirectCRL */ ! 705: ! 706: /* 2 5 29 29 certificateIssuer */ ! 707: CRYPT_CERTINFO_CERTIFICATEISSUER, ! 708: ! 709: /* 2 5 29 30 nameConstraints */ ! 710: CRYPT_CERTINFO_NAMECONSTRAINTS, ! 711: CRYPT_CERTINFO_PERMITTEDSUBTREES, /* permittedSubtrees */ ! 712: CRYPT_CERTINFO_EXCLUDEDSUBTREES, /* excludedSubtrees */ ! 713: ! 714: /* 2 5 29 31 cRLDistributionPoint */ ! 715: CRYPT_CERTINFO_CRLDISTRIBUTIONPOINT, ! 716: CRYPT_CERTINFO_CRLDIST_FULLNAME, /* distributionPointName.fullName */ ! 717: CRYPT_CERTINFO_CRLDIST_REASONS, /* reasons */ ! 718: CRYPT_CERTINFO_CRLDIST_CRLISSUER, /* cRLIssuer */ ! 719: ! 720: /* 2 5 29 32 certificatePolicies */ ! 721: CRYPT_CERTINFO_CERTIFICATEPOLICIES, ! 722: CRYPT_CERTINFO_CERTPOLICYID, /* policyInformation.policyIdentifier */ ! 723: CRYPT_CERTINFO_CERTPOLICY_CPSURI, ! 724: /* policyInformation.policyQualifiers.qualifier.cPSuri */ ! 725: CRYPT_CERTINFO_CERTPOLICY_ORGANIZATION, ! 726: /* policyInformation.policyQualifiers.qualifier.userNotice.noticeRef.organization */ ! 727: CRYPT_CERTINFO_CERTPOLICY_NOTICENUMBERS, ! 728: /* policyInformation.policyQualifiers.qualifier.userNotice.noticeRef.noticeNumbers */ ! 729: CRYPT_CERTINFO_CERTPOLICY_EXPLICITTEXT, ! 730: /* policyInformation.policyQualifiers.qualifier.userNotice.explicitText */ ! 731: ! 732: /* 2 5 29 33 policyMappings */ ! 733: CRYPT_CERTINFO_POLICYMAPPINGS, ! 734: CRYPT_CERTINFO_ISSUERDOMAINPOLICY, /* policyMappings.issuerDomainPolicy */ ! 735: CRYPT_CERTINFO_SUBJECTDOMAINPOLICY, /* policyMappings.subjectDomainPolicy */ ! 736: ! 737: /* 2 5 29 35 authorityKeyIdentifier */ ! 738: CRYPT_CERTINFO_AUTHORITYKEYIDENTIFIER, ! 739: CRYPT_CERTINFO_AUTHORITY_KEYIDENTIFIER, /* keyIdentifier */ ! 740: CRYPT_CERTINFO_AUTHORITY_CERTISSUER, /* authorityCertIssuer */ ! 741: CRYPT_CERTINFO_AUTHORITY_CERTSERIALNUMBER, /* authorityCertSerialNumber */ ! 742: ! 743: /* 2 5 29 36 policyConstraints */ ! 744: CRYPT_CERTINFO_POLICYCONSTRAINTS, ! 745: CRYPT_CERTINFO_REQUIREEXPLICITPOLICY, /* policyConstraints.requireExplicitPolicy */ ! 746: CRYPT_CERTINFO_INHIBITPOLICYMAPPING, /* policyConstraints.inhibitPolicyMapping */ ! 747: ! 748: /* 2 5 29 37 extKeyUsage */ ! 749: CRYPT_CERTINFO_EXTKEYUSAGE, ! 750: CRYPT_CERTINFO_EXTKEY_MS_INDIVIDUALCODESIGNING, /* individualCodeSigning */ ! 751: CRYPT_CERTINFO_EXTKEY_MS_COMMERCIALCODESIGNING, /* commercialCodeSigning */ ! 752: CRYPT_CERTINFO_EXTKEY_MS_CERTTRUSTLISTSIGNING, /* certTrustListSigning */ ! 753: CRYPT_CERTINFO_EXTKEY_MS_TIMESTAMPSIGNING, /* timeStampSigning */ ! 754: CRYPT_CERTINFO_EXTKEY_MS_SERVERGATEDCRYPTO, /* serverGatedCrypto */ ! 755: CRYPT_CERTINFO_EXTKEY_MS_ENCRYPTEDFILESYSTEM, /* encrypedFileSystem */ ! 756: CRYPT_CERTINFO_EXTKEY_SERVERAUTH, /* serverAuth */ ! 757: CRYPT_CERTINFO_EXTKEY_CLIENTAUTH, /* clientAuth */ ! 758: CRYPT_CERTINFO_EXTKEY_CODESIGNING, /* codeSigning */ ! 759: CRYPT_CERTINFO_EXTKEY_EMAILPROTECTION, /* emailProtection */ ! 760: CRYPT_CERTINFO_EXTKEY_IPSECENDSYSTEM, /* ipsecEndSystem */ ! 761: CRYPT_CERTINFO_EXTKEY_IPSECTUNNEL, /* ipsecTunnel */ ! 762: CRYPT_CERTINFO_EXTKEY_IPSECUSER, /* ipsecUser */ ! 763: CRYPT_CERTINFO_EXTKEY_TIMESTAMPING, /* timeStamping */ ! 764: CRYPT_CERTINFO_EXTKEY_OCSPSIGNING, /* ocspSigning */ ! 765: CRYPT_CERTINFO_EXTKEY_DIRECTORYSERVICE, /* directoryService */ ! 766: CRYPT_CERTINFO_EXTKEY_ANYKEYUSAGE, /* anyExtendedKeyUsage */ ! 767: CRYPT_CERTINFO_EXTKEY_NS_SERVERGATEDCRYPTO, /* serverGatedCrypto */ ! 768: CRYPT_CERTINFO_EXTKEY_VS_SERVERGATEDCRYPTO_CA, /* serverGatedCrypto CA */ ! 769: ! 770: /* 2 5 29 46 freshestCRL */ ! 771: CRYPT_CERTINFO_FRESHESTCRL, ! 772: CRYPT_CERTINFO_FRESHESTCRL_FULLNAME, /* distributionPointName.fullName */ ! 773: CRYPT_CERTINFO_FRESHESTCRL_REASONS, /* reasons */ ! 774: CRYPT_CERTINFO_FRESHESTCRL_CRLISSUER, /* cRLIssuer */ ! 775: ! 776: /* 2 5 29 54 inhibitAnyPolicy */ ! 777: CRYPT_CERTINFO_INHIBITANYPOLICY, ! 778: ! 779: /* 2 16 840 1 113730 1 x Netscape extensions */ ! 780: CRYPT_CERTINFO_NS_CERTTYPE, /* netscape-cert-type */ ! 781: CRYPT_CERTINFO_NS_BASEURL, /* netscape-base-url */ ! 782: CRYPT_CERTINFO_NS_REVOCATIONURL, /* netscape-revocation-url */ ! 783: CRYPT_CERTINFO_NS_CAREVOCATIONURL, /* netscape-ca-revocation-url */ ! 784: CRYPT_CERTINFO_NS_CERTRENEWALURL, /* netscape-cert-renewal-url */ ! 785: CRYPT_CERTINFO_NS_CAPOLICYURL, /* netscape-ca-policy-url */ ! 786: CRYPT_CERTINFO_NS_SSLSERVERNAME, /* netscape-ssl-server-name */ ! 787: CRYPT_CERTINFO_NS_COMMENT, /* netscape-comment */ ! 788: ! 789: /* 2 23 42 7 0 SET hashedRootKey */ ! 790: CRYPT_CERTINFO_SET_HASHEDROOTKEY, ! 791: CRYPT_CERTINFO_SET_ROOTKEYTHUMBPRINT, /* rootKeyThumbPrint */ ! 792: ! 793: /* 2 23 42 7 1 SET certificateType */ ! 794: CRYPT_CERTINFO_SET_CERTIFICATETYPE, ! 795: ! 796: /* 2 23 42 7 2 SET merchantData */ ! 797: CRYPT_CERTINFO_SET_MERCHANTDATA, ! 798: CRYPT_CERTINFO_SET_MERID, /* merID */ ! 799: CRYPT_CERTINFO_SET_MERACQUIRERBIN, /* merAcquirerBIN */ ! 800: CRYPT_CERTINFO_SET_MERCHANTLANGUAGE, /* merNames.language */ ! 801: CRYPT_CERTINFO_SET_MERCHANTNAME, /* merNames.name */ ! 802: CRYPT_CERTINFO_SET_MERCHANTCITY, /* merNames.city */ ! 803: CRYPT_CERTINFO_SET_MERCHANTSTATEPROVINCE,/* merNames.stateProvince */ ! 804: CRYPT_CERTINFO_SET_MERCHANTPOSTALCODE, /* merNames.postalCode */ ! 805: CRYPT_CERTINFO_SET_MERCHANTCOUNTRYNAME, /* merNames.countryName */ ! 806: CRYPT_CERTINFO_SET_MERCOUNTRY, /* merCountry */ ! 807: CRYPT_CERTINFO_SET_MERAUTHFLAG, /* merAuthFlag */ ! 808: ! 809: /* 2 23 42 7 3 SET certCardRequired */ ! 810: CRYPT_CERTINFO_SET_CERTCARDREQUIRED, ! 811: ! 812: /* 2 23 42 7 4 SET tunneling */ ! 813: CRYPT_CERTINFO_SET_TUNNELING, ! 814: CRYPT_CERTINFO_SET_TUNNELLING = CRYPT_CERTINFO_SET_TUNNELING, ! 815: CRYPT_CERTINFO_SET_TUNNELINGFLAG, /* tunneling */ ! 816: CRYPT_CERTINFO_SET_TUNNELLINGFLAG = CRYPT_CERTINFO_SET_TUNNELINGFLAG, ! 817: CRYPT_CERTINFO_SET_TUNNELINGALGID, /* tunnelingAlgID */ ! 818: CRYPT_CERTINFO_SET_TUNNELLINGALGID = CRYPT_CERTINFO_SET_TUNNELINGALGID, ! 819: ! 820: /* S/MIME attributes */ ! 821: ! 822: /* 1 2 840 113549 1 9 3 contentType */ ! 823: CRYPT_CERTINFO_CMS_CONTENTTYPE = CRYPT_CERTINFO_FIRST + 500, ! 824: ! 825: /* 1 2 840 113549 1 9 4 messageDigest */ ! 826: CRYPT_CERTINFO_CMS_MESSAGEDIGEST, ! 827: ! 828: /* 1 2 840 113549 1 9 5 signingTime */ ! 829: CRYPT_CERTINFO_CMS_SIGNINGTIME, ! 830: ! 831: /* 1 2 840 113549 1 9 6 counterSignature */ ! 832: CRYPT_CERTINFO_CMS_COUNTERSIGNATURE, /* counterSignature */ ! 833: ! 834: /* 1 2 840 113549 1 9 13 signingDescription */ ! 835: CRYPT_CERTINFO_CMS_SIGNINGDESCRIPTION, ! 836: ! 837: /* 1 2 840 113549 1 9 15 sMIMECapabilities */ ! 838: CRYPT_CERTINFO_CMS_SMIMECAPABILITIES, ! 839: CRYPT_CERTINFO_CMS_SMIMECAP_3DES, /* 3DES encryption */ ! 840: CRYPT_CERTINFO_CMS_SMIMECAP_AES, /* AES encryption */ ! 841: CRYPT_CERTINFO_CMS_SMIMECAP_CAST128, /* CAST-128 encryption */ ! 842: CRYPT_CERTINFO_CMS_SMIMECAP_IDEA, /* IDEA encryption */ ! 843: CRYPT_CERTINFO_CMS_SMIMECAP_RC2, /* RC2 encryption (w.128 key) */ ! 844: CRYPT_CERTINFO_CMS_SMIMECAP_RC5, /* RC5 encryption (w.128 key) */ ! 845: CRYPT_CERTINFO_CMS_SMIMECAP_SKIPJACK, /* Skipjack encryption */ ! 846: CRYPT_CERTINFO_CMS_SMIMECAP_DES, /* DES encryption */ ! 847: CRYPT_CERTINFO_CMS_SMIMECAP_PREFERSIGNEDDATA, /* preferSignedData */ ! 848: CRYPT_CERTINFO_CMS_SMIMECAP_CANNOTDECRYPTANY, /* canNotDecryptAny */ ! 849: ! 850: /* 1 2 840 113549 1 9 16 2 1 receiptRequest */ ! 851: CRYPT_CERTINFO_CMS_RECEIPTREQUEST, ! 852: CRYPT_CERTINFO_CMS_RECEIPT_CONTENTIDENTIFIER, /* contentIdentifier */ ! 853: CRYPT_CERTINFO_CMS_RECEIPT_FROM, /* receiptsFrom */ ! 854: CRYPT_CERTINFO_CMS_RECEIPT_TO, /* receiptsTo */ ! 855: ! 856: /* 1 2 840 113549 1 9 16 2 2 essSecurityLabel */ ! 857: CRYPT_CERTINFO_CMS_SECURITYLABEL, ! 858: CRYPT_CERTINFO_CMS_SECLABEL_POLICY, /* securityPolicyIdentifier */ ! 859: CRYPT_CERTINFO_CMS_SECLABEL_CLASSIFICATION, /* securityClassification */ ! 860: CRYPT_CERTINFO_CMS_SECLABEL_PRIVACYMARK,/* privacyMark */ ! 861: CRYPT_CERTINFO_CMS_SECLABEL_CATTYPE, /* securityCategories.securityCategory.type */ ! 862: CRYPT_CERTINFO_CMS_SECLABEL_CATVALUE, /* securityCategories.securityCategory.value */ ! 863: ! 864: /* 1 2 840 113549 1 9 16 2 3 mlExpansionHistory */ ! 865: CRYPT_CERTINFO_CMS_MLEXPANSIONHISTORY, ! 866: CRYPT_CERTINFO_CMS_MLEXP_ENTITYIDENTIFIER, /* mlData.mailListIdentifier.issuerAndSerialNumber */ ! 867: CRYPT_CERTINFO_CMS_MLEXP_TIME, /* mlData.expansionTime */ ! 868: CRYPT_CERTINFO_CMS_MLEXP_NONE, /* mlData.mlReceiptPolicy.none */ ! 869: CRYPT_CERTINFO_CMS_MLEXP_INSTEADOF, /* mlData.mlReceiptPolicy.insteadOf.generalNames.generalName */ ! 870: CRYPT_CERTINFO_CMS_MLEXP_INADDITIONTO, /* mlData.mlReceiptPolicy.inAdditionTo.generalNames.generalName */ ! 871: ! 872: /* 1 2 840 113549 1 9 16 2 4 contentHints */ ! 873: CRYPT_CERTINFO_CMS_CONTENTHINTS, ! 874: CRYPT_CERTINFO_CMS_CONTENTHINT_DESCRIPTION, /* contentDescription */ ! 875: CRYPT_CERTINFO_CMS_CONTENTHINT_TYPE, /* contentType */ ! 876: ! 877: /* 1 2 840 113549 1 9 16 2 9 equivalentLabels */ ! 878: CRYPT_CERTINFO_CMS_EQUIVALENTLABEL, ! 879: CRYPT_CERTINFO_CMS_EQVLABEL_POLICY, /* securityPolicyIdentifier */ ! 880: CRYPT_CERTINFO_CMS_EQVLABEL_CLASSIFICATION, /* securityClassification */ ! 881: CRYPT_CERTINFO_CMS_EQVLABEL_PRIVACYMARK,/* privacyMark */ ! 882: CRYPT_CERTINFO_CMS_EQVLABEL_CATTYPE, /* securityCategories.securityCategory.type */ ! 883: CRYPT_CERTINFO_CMS_EQVLABEL_CATVALUE, /* securityCategories.securityCategory.value */ ! 884: ! 885: /* 1 2 840 113549 1 9 16 2 12 signingCertificate */ ! 886: CRYPT_CERTINFO_CMS_SIGNINGCERTIFICATE, ! 887: CRYPT_CERTINFO_CMS_SIGNINGCERT_ESSCERTID, /* certs.essCertID */ ! 888: CRYPT_CERTINFO_CMS_SIGNINGCERT_POLICIES,/* policies.policyInformation.policyIdentifier */ ! 889: ! 890: /* 1 2 840 113549 1 9 16 2 15 signaturePolicyID */ ! 891: CRYPT_CERTINFO_CMS_SIGNATUREPOLICYID, ! 892: CRYPT_CERTINFO_CMS_SIGPOLICYID, /* sigPolicyID */ ! 893: CRYPT_CERTINFO_CMS_SIGPOLICYHASH, /* sigPolicyHash */ ! 894: CRYPT_CERTINFO_CMS_SIGPOLICY_CPSURI, /* sigPolicyQualifiers.sigPolicyQualifier.cPSuri */ ! 895: CRYPT_CERTINFO_CMS_SIGPOLICY_ORGANIZATION, ! 896: /* sigPolicyQualifiers.sigPolicyQualifier.userNotice.noticeRef.organization */ ! 897: CRYPT_CERTINFO_CMS_SIGPOLICY_NOTICENUMBERS, ! 898: /* sigPolicyQualifiers.sigPolicyQualifier.userNotice.noticeRef.noticeNumbers */ ! 899: CRYPT_CERTINFO_CMS_SIGPOLICY_EXPLICITTEXT, ! 900: /* sigPolicyQualifiers.sigPolicyQualifier.userNotice.explicitText */ ! 901: ! 902: /* 1 2 840 113549 1 9 16 9 signatureTypeIdentifier */ ! 903: CRYPT_CERTINFO_CMS_SIGTYPEIDENTIFIER, ! 904: CRYPT_CERTINFO_CMS_SIGTYPEID_ORIGINATORSIG, /* originatorSig */ ! 905: CRYPT_CERTINFO_CMS_SIGTYPEID_DOMAINSIG, /* domainSig */ ! 906: CRYPT_CERTINFO_CMS_SIGTYPEID_ADDITIONALATTRIBUTES, /* additionalAttributesSig */ ! 907: CRYPT_CERTINFO_CMS_SIGTYPEID_REVIEWSIG, /* reviewSig */ ! 908: ! 909: /* 1 2 840 113549 1 9 25 3 randomNonce */ ! 910: CRYPT_CERTINFO_CMS_NONCE, /* randomNonce */ ! 911: ! 912: /* SCEP attributes: ! 913: 2 16 840 1 113733 1 9 2 messageType ! 914: 2 16 840 1 113733 1 9 3 pkiStatus ! 915: 2 16 840 1 113733 1 9 4 failInfo ! 916: 2 16 840 1 113733 1 9 5 senderNonce ! 917: 2 16 840 1 113733 1 9 6 recipientNonce ! 918: 2 16 840 1 113733 1 9 7 transID */ ! 919: CRYPT_CERTINFO_SCEP_MESSAGETYPE, /* messageType */ ! 920: CRYPT_CERTINFO_SCEP_PKISTATUS, /* pkiStatus */ ! 921: CRYPT_CERTINFO_SCEP_FAILINFO, /* failInfo */ ! 922: CRYPT_CERTINFO_SCEP_SENDERNONCE, /* senderNonce */ ! 923: CRYPT_CERTINFO_SCEP_RECIPIENTNONCE, /* recipientNonce */ ! 924: CRYPT_CERTINFO_SCEP_TRANSACTIONID, /* transID */ ! 925: ! 926: /* 1 3 6 1 4 1 311 2 1 10 spcAgencyInfo */ ! 927: CRYPT_CERTINFO_CMS_SPCAGENCYINFO, ! 928: CRYPT_CERTINFO_CMS_SPCAGENCYURL, /* spcAgencyInfo.url */ ! 929: ! 930: /* 1 3 6 1 4 1 311 2 1 11 spcStatementType */ ! 931: CRYPT_CERTINFO_CMS_SPCSTATEMENTTYPE, ! 932: CRYPT_CERTINFO_CMS_SPCSTMT_INDIVIDUALCODESIGNING, /* individualCodeSigning */ ! 933: CRYPT_CERTINFO_CMS_SPCSTMT_COMMERCIALCODESIGNING, /* commercialCodeSigning */ ! 934: ! 935: /* 1 3 6 1 4 1 311 2 1 12 spcOpusInfo */ ! 936: CRYPT_CERTINFO_CMS_SPCOPUSINFO, ! 937: CRYPT_CERTINFO_CMS_SPCOPUSINFO_NAME, /* spcOpusInfo.name */ ! 938: CRYPT_CERTINFO_CMS_SPCOPUSINFO_URL, /* spcOpusInfo.url */ ! 939: ! 940: /* Used internally */ ! 941: CRYPT_CERTINFO_LAST, CRYPT_KEYINFO_FIRST = 3000, ! 942: ! 943: /*********************/ ! 944: /* Keyset attributes */ ! 945: /*********************/ ! 946: ! 947: CRYPT_KEYINFO_QUERY, /* Keyset query */ ! 948: CRYPT_KEYINFO_QUERY_REQUESTS, /* Query of requests in cert store */ ! 949: ! 950: /* Used internally */ ! 951: CRYPT_KEYINFO_LAST, CRYPT_DEVINFO_FIRST = 4000, ! 952: ! 953: /*********************/ ! 954: /* Device attributes */ ! 955: /*********************/ ! 956: ! 957: CRYPT_DEVINFO_INITIALISE, /* Initialise device for use */ ! 958: CRYPT_DEVINFO_INITIALIZE = CRYPT_DEVINFO_INITIALISE, ! 959: CRYPT_DEVINFO_AUTHENT_USER, /* Authenticate user to device */ ! 960: CRYPT_DEVINFO_AUTHENT_SUPERVISOR, /* Authenticate supervisor to dev.*/ ! 961: CRYPT_DEVINFO_SET_AUTHENT_USER, /* Set user authent.value */ ! 962: CRYPT_DEVINFO_SET_AUTHENT_SUPERVISOR, /* Set supervisor auth.val.*/ ! 963: CRYPT_DEVINFO_ZEROISE, /* Zeroise device */ ! 964: CRYPT_DEVINFO_ZEROIZE = CRYPT_DEVINFO_ZEROISE, ! 965: CRYPT_DEVINFO_LOGGEDIN, /* Whether user is logged in */ ! 966: CRYPT_DEVINFO_LABEL, /* Device/token label */ ! 967: ! 968: /* Used internally */ ! 969: CRYPT_DEVINFO_LAST, CRYPT_ENVINFO_FIRST = 5000, ! 970: ! 971: /***********************/ ! 972: /* Envelope attributes */ ! 973: /***********************/ ! 974: ! 975: /* Pseudo-information on an envelope or meta-information which is used to ! 976: control the way that data in an envelope is processed */ ! 977: CRYPT_ENVINFO_DATASIZE, /* Data size information */ ! 978: CRYPT_ENVINFO_COMPRESSION, /* Compression information */ ! 979: CRYPT_ENVINFO_CONTENTTYPE, /* Inner CMS content type */ ! 980: CRYPT_ENVINFO_DETACHEDSIGNATURE,/* Generate CMS detached signature */ ! 981: CRYPT_ENVINFO_SIGNATURE_RESULT, /* Signature check result */ ! 982: CRYPT_ENVINFO_MAC, /* Use MAC instead of encrypting */ ! 983: ! 984: /* Resources required for enveloping/deenveloping */ ! 985: CRYPT_ENVINFO_PASSWORD, /* User password */ ! 986: CRYPT_ENVINFO_KEY, /* Conventional encryption key */ ! 987: CRYPT_ENVINFO_SIGNATURE, /* Signature/signature check key */ ! 988: CRYPT_ENVINFO_SIGNATURE_EXTRADATA, /* Extra information added to CMS sigs */ ! 989: CRYPT_ENVINFO_RECIPIENT, /* Recipient email address */ ! 990: CRYPT_ENVINFO_PUBLICKEY, /* PKC encryption key */ ! 991: CRYPT_ENVINFO_PRIVATEKEY, /* PKC decryption key */ ! 992: CRYPT_ENVINFO_PRIVATEKEY_LABEL, /* Label of PKC decryption key */ ! 993: CRYPT_ENVINFO_ORIGINATOR, /* Originator info/key */ ! 994: CRYPT_ENVINFO_SESSIONKEY, /* Session key */ ! 995: CRYPT_ENVINFO_HASH, /* Hash value */ ! 996: CRYPT_ENVINFO_TIMESTAMP, /* Timestamp information */ ! 997: ! 998: /* Keysets used to retrieve keys needed for enveloping/deenveloping */ ! 999: CRYPT_ENVINFO_KEYSET_SIGCHECK, /* Signature check keyset */ ! 1000: CRYPT_ENVINFO_KEYSET_ENCRYPT, /* PKC encryption keyset */ ! 1001: CRYPT_ENVINFO_KEYSET_DECRYPT, /* PKC decryption keyset */ ! 1002: ! 1003: /* Used internally */ ! 1004: CRYPT_ENVINFO_LAST, CRYPT_SESSINFO_FIRST = 6000, ! 1005: ! 1006: /**********************/ ! 1007: /* Session attributes */ ! 1008: /**********************/ ! 1009: ! 1010: /* Pseudo-information about the session */ ! 1011: CRYPT_SESSINFO_ACTIVE, /* Whether session is active */ ! 1012: CRYPT_SESSINFO_CONNECTIONACTIVE,/* Whether network connection is active */ ! 1013: ! 1014: /* Security-related information */ ! 1015: CRYPT_SESSINFO_USERNAME, /* User name */ ! 1016: CRYPT_SESSINFO_PASSWORD, /* Password */ ! 1017: CRYPT_SESSINFO_PRIVATEKEY, /* Server/client private key */ ! 1018: CRYPT_SESSINFO_KEYSET, /* Certificate store */ ! 1019: CRYPT_SESSINFO_AUTHRESPONSE, /* Session authorisation OK */ ! 1020: ! 1021: /* Client/server information */ ! 1022: CRYPT_SESSINFO_SERVER_NAME, /* Server name */ ! 1023: CRYPT_SESSINFO_SERVER_PORT, /* Server port number */ ! 1024: CRYPT_SESSINFO_SERVER_FINGERPRINT,/* Server key fingerprint */ ! 1025: CRYPT_SESSINFO_CLIENT_NAME, /* Client name */ ! 1026: CRYPT_SESSINFO_CLIENT_PORT, /* Client port number */ ! 1027: CRYPT_SESSINFO_SESSION, /* Transport mechanism */ ! 1028: CRYPT_SESSINFO_NETWORKSOCKET, /* User-supplied network socket */ ! 1029: ! 1030: /* Generic protocol-related information */ ! 1031: CRYPT_SESSINFO_VERSION, /* Protocol version */ ! 1032: CRYPT_SESSINFO_REQUEST, /* Cert.request object */ ! 1033: CRYPT_SESSINFO_RESPONSE, /* Cert.response object */ ! 1034: CRYPT_SESSINFO_CACERTIFICATE, /* Issuing CA certificate */ ! 1035: ! 1036: /* Protocol-specific information */ ! 1037: CRYPT_SESSINFO_TSP_MSGIMPRINT, /* TSP message imprint */ ! 1038: CRYPT_SESSINFO_CMP_REQUESTTYPE, /* Request type */ ! 1039: CRYPT_SESSINFO_CMP_PKIBOOT, /* Enable PKIBoot facility */ ! 1040: CRYPT_SESSINFO_CMP_PRIVKEYSET, /* Private-key keyset */ ! 1041: CRYPT_SESSINFO_SSH_CHANNEL, /* SSH current channel */ ! 1042: CRYPT_SESSINFO_SSH_CHANNEL_TYPE,/* SSH channel type */ ! 1043: CRYPT_SESSINFO_SSH_CHANNEL_ARG1,/* SSH channel argument 1 */ ! 1044: CRYPT_SESSINFO_SSH_CHANNEL_ARG2,/* SSH channel argument 2 */ ! 1045: CRYPT_SESSINFO_SSH_CHANNEL_ACTIVE,/* SSH channel active */ ! 1046: ! 1047: /* Used internally */ ! 1048: CRYPT_SESSINFO_LAST, CRYPT_USERINFO_FIRST = 7000, ! 1049: ! 1050: /**********************/ ! 1051: /* User attributes */ ! 1052: /**********************/ ! 1053: ! 1054: /* Security-related information */ ! 1055: CRYPT_USERINFO_PASSWORD, /* Password */ ! 1056: ! 1057: /* User role-related information */ ! 1058: CRYPT_USERINFO_CAKEY_CERTSIGN, /* CA cert signing key */ ! 1059: CRYPT_USERINFO_CAKEY_CRLSIGN, /* CA CRL signing key */ ! 1060: CRYPT_USERINFO_CAKEY_RTCSSIGN, /* CA RTCS signing key */ ! 1061: CRYPT_USERINFO_CAKEY_OCSPSIGN, /* CA OCSP signing key */ ! 1062: ! 1063: /* Used internally for range checking */ ! 1064: CRYPT_USERINFO_LAST, CRYPT_ATTRIBUTE_LAST = CRYPT_USERINFO_LAST ! 1065: ! 1066: #ifdef _CRYPT_DEFINED ! 1067: /***********************/ ! 1068: /* Internal attributes */ ! 1069: /***********************/ ! 1070: ! 1071: /* The following attributes are only visible internally and are protected ! 1072: from any external access by the kernel (and for good measure by checks ! 1073: in other places as well). The two attributes CRYPT_IATTRIBUTE_KEY_SPKI ! 1074: and CRYPT_IATTRIBUTE_SPKI are actually the same thing, the difference ! 1075: is that the former is write-only for contexts and the latter is read- ! 1076: only for certificates (the former is used when loading a context from ! 1077: a key contained in a device, where the actual key components aren't ! 1078: directly available in the context but may be needed in the future for ! 1079: things like cert requests). Because a single object can act as both a ! 1080: context and a cert, having two explicitly different attribute names ! 1081: makes things less confusing. In addition, some public-key attributes ! 1082: have _PARTIAL variants that load the public-key components but don't ! 1083: initialise the key/move the context into the high state. This is ! 1084: used for formats in which public and private-key components are loaded ! 1085: separately */ ! 1086: , CRYPT_IATTRIBUTE_FIRST = 8000, ! 1087: CRYPT_IATTRIBUTE_TYPE, /* Object type */ ! 1088: CRYPT_IATTRIBUTE_SUBTYPE, /* Object subtype */ ! 1089: CRYPT_IATTRIBUTE_STATUS, /* Object status */ ! 1090: CRYPT_IATTRIBUTE_INTERNAL, /* Object internal flag */ ! 1091: CRYPT_IATTRIBUTE_ACTIONPERMS, /* Object action permissions */ ! 1092: CRYPT_IATTRIBUTE_LOCKED, /* Object locked for exclusive use */ ! 1093: CRYPT_IATTRIBUTE_INITIALISED, /* Object inited (in high state) */ ! 1094: CRYPT_IATTRIBUTE_KEYSIZE, /* Ctx: Key size (written to non-native ctxs) */ ! 1095: CRYPT_IATTRIBUTE_KEYFEATURES, /* Ctx: Key feature info */ ! 1096: CRYPT_IATTRIBUTE_KEYID, /* Ctx: Key ID */ ! 1097: CRYPT_IATTRIBUTE_KEYID_PGP, /* Ctx: PGP key ID */ ! 1098: CRYPT_IATTRIBUTE_KEYID_OPENPGP, /* Ctx: OpenPGP key ID */ ! 1099: CRYPT_IATTRIBUTE_KEY_KEADOMAINPARAMS,/* Ctx: Key agreement domain parameters */ ! 1100: CRYPT_IATTRIBUTE_KEY_KEAPUBLICVALUE,/* Ctx: Key agreement public value */ ! 1101: CRYPT_IATTRIBUTE_KEY_SPKI, /* Ctx: SubjectPublicKeyInfo */ ! 1102: CRYPT_IATTRIBUTE_KEY_PGP, /* Ctx: PGP-format public key */ ! 1103: CRYPT_IATTRIBUTE_KEY_SSH, /* Ctx: SSH-format public key */ ! 1104: CRYPT_IATTRIBUTE_KEY_SSH1, /* Ctx: SSHv1-format public key */ ! 1105: CRYPT_IATTRIBUTE_KEY_SSL, /* Ctx: SSL-format public key */ ! 1106: CRYPT_IATTRIBUTE_KEY_SPKI_PARTIAL,/* Ctx: SubjectPublicKeyInfo w/o trigger */ ! 1107: CRYPT_IATTRIBUTE_KEY_PGP_PARTIAL,/* Ctx: PGP public key w/o trigger */ ! 1108: CRYPT_IATTRIBUTE_PGPVALIDITY, /* Ctx: PGP key validity */ ! 1109: CRYPT_IATTRIBUTE_DEVICEOBJECT, /* Ctx: Device object handle */ ! 1110: CRYPT_IATTRIBUTE_CRLENTRY, /* Cert: Individual entry from CRL */ ! 1111: CRYPT_IATTRIBUTE_SUBJECT, /* Cert: SubjectName */ ! 1112: CRYPT_IATTRIBUTE_ISSUER, /* Cert: IssuerName */ ! 1113: CRYPT_IATTRIBUTE_ISSUERANDSERIALNUMBER, /* Cert: IssuerAndSerial */ ! 1114: CRYPT_IATTRIBUTE_SPKI, /* Cert: Encoded SubjectPublicKeyInfo */ ! 1115: CRYPT_IATTRIBUTE_CERTHASHALGO, /* Cert: Hash algo.used for cert */ ! 1116: CRYPT_IATTRIBUTE_CERTCOLLECTION,/* Cert: Certs added to cert chain */ ! 1117: CRYPT_IATTRIBUTE_RESPONDERURL, /* Cert: RTCS/OCSP responder name */ ! 1118: CRYPT_IATTRIBUTE_RTCSREQUEST, /* Cert: RTCS req.info added to RTCS resp.*/ ! 1119: CRYPT_IATTRIBUTE_OCSPREQUEST, /* Cert: OCSP req.info added to OCSP resp.*/ ! 1120: CRYPT_IATTRIBUTE_REVREQUEST, /* Cert: CRMF rev.request added to CRL */ ! 1121: CRYPT_IATTRIBUTE_PKIUSERINFO, /* Cert: Additional user info added to cert.req.*/ ! 1122: CRYPT_IATTRIBUTE_BLOCKEDATTRS, /* Cert: Template of disallowed attrs.in cert */ ! 1123: CRYPT_IATTRIBUTE_AUTHCERTID, /* Cert: Authorising cert ID for a cert/rev.req.*/ ! 1124: CRYPT_IATTRIBUTE_ESSCERTID, /* Cert: ESSCertID */ ! 1125: CRYPT_IATTRIBUTE_ENTROPY, /* Dev: Polled entropy data */ ! 1126: CRYPT_IATTRIBUTE_ENTROPY_QUALITY,/* Dev: Quality of entropy data */ ! 1127: CRYPT_IATTRIBUTE_RANDOM_LOPICKET,/* Dev: Low picket for random data attrs.*/ ! 1128: CRYPT_IATTRIBUTE_RANDOM, /* Dev: Random data */ ! 1129: CRYPT_IATTRIBUTE_RANDOM_NZ, /* Dev: Nonzero random data */ ! 1130: CRYPT_IATTRIBUTE_RANDOM_HIPICKET,/* Dev: High picket for random data attrs.*/ ! 1131: CRYPT_IATTRIBUTE_RANDOM_NONCE, /* Dev: Basic nonce */ ! 1132: CRYPT_IATTRIBUTE_SELFTEST, /* Dev: Perform self-test */ ! 1133: CRYPT_IATTRIBUTE_TIME, /* Dev: Reliable (hardware-based) time value */ ! 1134: CRYPT_IATTRIBUTE_INCLUDESIGCERT,/* Env: Whether to include signing cert(s) */ ! 1135: CRYPT_IATTRIBUTE_ATTRONLY, /* Env: Signed data contains only CMS attrs.*/ ! 1136: CRYPT_IATTRIBUTE_CONFIGDATA, /* Keyset: Config information */ ! 1137: CRYPT_IATTRIBUTE_USERINDEX, /* Keyset: Index of users */ ! 1138: CRYPT_IATTRIBUTE_USERID, /* Keyset: User ID */ ! 1139: CRYPT_IATTRIBUTE_USERINFO, /* Keyset: User information */ ! 1140: CRYPT_IATTRIBUTE_TRUSTEDCERT, /* Keyset: First trusted cert */ ! 1141: CRYPT_IATTRIBUTE_TRUSTEDCERT_NEXT, /* Keyset: Successive trusted certs */ ! 1142: CRYPT_IATTRIBUTE_ENC_TIMESTAMP, /* Session: Encoded TSA timestamp */ ! 1143: CRYPT_IATTRUBUTE_CERTKEYSET, /* User: Keyset to send trusted certs to */ ! 1144: CRYPT_IATTRIBUTE_CTL, /* User: Cert.trust list */ ! 1145: CRYPT_IATTRIBUTE_CERT_TRUSTED, /* User: Set trusted cert */ ! 1146: CRYPT_IATTRIBUTE_CERT_UNTRUSTED,/* User: Unset trusted cert */ ! 1147: CRYPT_IATTRIBUTE_CERT_CHECKTRUST,/* User: Check trust status of cert */ ! 1148: CRYPT_IATTRIBUTE_CERT_TRUSTEDISSUER,/* User: Get trusted issuer of cert */ ! 1149: CRYPT_IATTRIBUTE_LAST, ! 1150: ! 1151: /* Subrange values used internally for range checking */ ! 1152: CRYPT_CERTINFO_FIRST_CERTINFO = CRYPT_CERTINFO_FIRST + 1, ! 1153: CRYPT_CERTINFO_LAST_CERTINFO = CRYPT_CERTINFO_PKIUSER_REVPASSWORD, ! 1154: CRYPT_CERTINFO_FIRST_PSEUDOINFO = CRYPT_CERTINFO_SELFSIGNED, ! 1155: CRYPT_CERTINFO_LAST_PSEUDOINFO = CRYPT_CERTINFO_SIGNATURELEVEL, ! 1156: CRYPT_CERTINFO_FIRST_NAME = CRYPT_CERTINFO_COUNTRYNAME, ! 1157: CRYPT_CERTINFO_LAST_NAME = CRYPT_CERTINFO_REGISTEREDID, ! 1158: CRYPT_CERTINFO_FIRST_DN = CRYPT_CERTINFO_COUNTRYNAME, ! 1159: CRYPT_CERTINFO_LAST_DN = CRYPT_CERTINFO_COMMONNAME, ! 1160: CRYPT_CERTINFO_FIRST_GENERALNAME = CRYPT_CERTINFO_OTHERNAME_TYPEID, ! 1161: CRYPT_CERTINFO_LAST_GENERALNAME = CRYPT_CERTINFO_REGISTEREDID, ! 1162: CRYPT_CERTINFO_FIRST_EXTENSION = CRYPT_CERTINFO_CHALLENGEPASSWORD, ! 1163: CRYPT_CERTINFO_LAST_EXTENSION = CRYPT_CERTINFO_SET_TUNNELINGALGID, ! 1164: CRYPT_CERTINFO_FIRST_CMS = CRYPT_CERTINFO_CMS_CONTENTTYPE, ! 1165: CRYPT_CERTINFO_LAST_CMS = CRYPT_CERTINFO_LAST - 1, ! 1166: CRYPT_SESSINFO_FIRST_SPECIFIC = CRYPT_SESSINFO_REQUEST, ! 1167: CRYPT_SESSINFO_LAST_SPECIFIC = CRYPT_SESSINFO_SSH_CHANNEL_ACTIVE ! 1168: #endif /* _CRYPT_DEFINED */ ! 1169: } CRYPT_ATTRIBUTE_TYPE; ! 1170: ! 1171: /**************************************************************************** ! 1172: * * ! 1173: * Attribute Subtypes and Related Values * ! 1174: * * ! 1175: ****************************************************************************/ ! 1176: ! 1177: /* Flags for the X.509 keyUsage extension */ ! 1178: ! 1179: #define CRYPT_KEYUSAGE_NONE 0x000 ! 1180: #define CRYPT_KEYUSAGE_DIGITALSIGNATURE 0x001 ! 1181: #define CRYPT_KEYUSAGE_NONREPUDIATION 0x002 ! 1182: #define CRYPT_KEYUSAGE_KEYENCIPHERMENT 0x004 ! 1183: #define CRYPT_KEYUSAGE_DATAENCIPHERMENT 0x008 ! 1184: #define CRYPT_KEYUSAGE_KEYAGREEMENT 0x010 ! 1185: #define CRYPT_KEYUSAGE_KEYCERTSIGN 0x020 ! 1186: #define CRYPT_KEYUSAGE_CRLSIGN 0x040 ! 1187: #define CRYPT_KEYUSAGE_ENCIPHERONLY 0x080 ! 1188: #define CRYPT_KEYUSAGE_DECIPHERONLY 0x100 ! 1189: #define CRYPT_KEYUSAGE_LAST 0x200 /* Last possible value */ ! 1190: ! 1191: /* X.509 cRLReason and cryptlib cRLExtReason codes */ ! 1192: ! 1193: enum { CRYPT_CRLREASON_UNSPECIFIED, CRYPT_CRLREASON_KEYCOMPROMISE, ! 1194: CRYPT_CRLREASON_CACOMPROMISE, CRYPT_CRLREASON_AFFILIATIONCHANGED, ! 1195: CRYPT_CRLREASON_SUPERSEDED, CRYPT_CRLREASON_CESSATIONOFOPERATION, ! 1196: CRYPT_CRLREASON_CERTIFICATEHOLD, CRYPT_CRLREASON_REMOVEFROMCRL = 8, ! 1197: CRYPT_CRLREASON_PRIVILEGEWITHDRAWN, CRYPT_CRLREASON_AACOMPROMISE, ! 1198: CRYPT_CRLREASON_LAST, /* End of standard CRL reasons */ ! 1199: CRYPT_CRLREASON_NEVERVALID = 20, CRYPT_CRLEXTREASON_LAST }; ! 1200: ! 1201: /* X.509 CRL reason flags. These identify the same thing as the cRLReason ! 1202: codes but allow for multiple reasons to be specified. Note that these ! 1203: don't follow the X.509 naming since in that scheme the enumerated types ! 1204: and bitflags have the same names */ ! 1205: ! 1206: #define CRYPT_CRLREASONFLAG_UNUSED 0x001 ! 1207: #define CRYPT_CRLREASONFLAG_KEYCOMPROMISE 0x002 ! 1208: #define CRYPT_CRLREASONFLAG_CACOMPROMISE 0x004 ! 1209: #define CRYPT_CRLREASONFLAG_AFFILIATIONCHANGED 0x008 ! 1210: #define CRYPT_CRLREASONFLAG_SUPERSEDED 0x010 ! 1211: #define CRYPT_CRLREASONFLAG_CESSATIONOFOPERATION 0x020 ! 1212: #define CRYPT_CRLREASONFLAG_CERTIFICATEHOLD 0x040 ! 1213: #define CRYPT_CRLREASONFLAG_LAST 0x080 /* Last poss.value */ ! 1214: ! 1215: /* X.509 CRL holdInstruction codes */ ! 1216: ! 1217: enum { CRYPT_HOLDINSTRUCTION_NONE, CRYPT_HOLDINSTRUCTION_CALLISSUER, ! 1218: CRYPT_HOLDINSTRUCTION_REJECT, CRYPT_HOLDINSTRUCTION_PICKUPTOKEN, ! 1219: CRYPT_HOLDINSTRUCTION_LAST }; ! 1220: ! 1221: /* Certificate checking compliance levels */ ! 1222: ! 1223: enum { CRYPT_COMPLIANCELEVEL_OBLIVIOUS, CRYPT_COMPLIANCELEVEL_REDUCED, ! 1224: CRYPT_COMPLIANCELEVEL_STANDARD, CRYPT_COMPLIANCELEVEL_PKIX_PARTIAL, ! 1225: CRYPT_COMPLIANCELEVEL_PKIX_FULL, CRYPT_COMPLIANCELEVEL_LAST }; ! 1226: ! 1227: /* Flags for the Netscape netscape-cert-type extension */ ! 1228: ! 1229: #define CRYPT_NS_CERTTYPE_SSLCLIENT 0x001 ! 1230: #define CRYPT_NS_CERTTYPE_SSLSERVER 0x002 ! 1231: #define CRYPT_NS_CERTTYPE_SMIME 0x004 ! 1232: #define CRYPT_NS_CERTTYPE_OBJECTSIGNING 0x008 ! 1233: #define CRYPT_NS_CERTTYPE_RESERVED 0x010 ! 1234: #define CRYPT_NS_CERTTYPE_SSLCA 0x020 ! 1235: #define CRYPT_NS_CERTTYPE_SMIMECA 0x040 ! 1236: #define CRYPT_NS_CERTTYPE_OBJECTSIGNINGCA 0x080 ! 1237: #define CRYPT_NS_CERTTYPE_LAST 0x100 /* Last possible value */ ! 1238: ! 1239: /* Flags for the SET certificate-type extension */ ! 1240: ! 1241: #define CRYPT_SET_CERTTYPE_CARD 0x001 ! 1242: #define CRYPT_SET_CERTTYPE_MER 0x002 ! 1243: #define CRYPT_SET_CERTTYPE_PGWY 0x004 ! 1244: #define CRYPT_SET_CERTTYPE_CCA 0x008 ! 1245: #define CRYPT_SET_CERTTYPE_MCA 0x010 ! 1246: #define CRYPT_SET_CERTTYPE_PCA 0x020 ! 1247: #define CRYPT_SET_CERTTYPE_GCA 0x040 ! 1248: #define CRYPT_SET_CERTTYPE_BCA 0x080 ! 1249: #define CRYPT_SET_CERTTYPE_RCA 0x100 ! 1250: #define CRYPT_SET_CERTTYPE_ACQ 0x200 ! 1251: #define CRYPT_SET_CERTTYPE_LAST 0x400 /* Last possible value */ ! 1252: ! 1253: /* CMS contentType values */ ! 1254: ! 1255: typedef enum { CRYPT_CONTENT_NONE, CRYPT_CONTENT_DATA, ! 1256: CRYPT_CONTENT_SIGNEDDATA, CRYPT_CONTENT_ENVELOPEDDATA, ! 1257: CRYPT_CONTENT_SIGNEDANDENVELOPEDDATA, ! 1258: CRYPT_CONTENT_DIGESTEDDATA, CRYPT_CONTENT_ENCRYPTEDDATA, ! 1259: CRYPT_CONTENT_COMPRESSEDDATA, CRYPT_CONTENT_TSTINFO, ! 1260: CRYPT_CONTENT_SPCINDIRECTDATACONTEXT, ! 1261: CRYPT_CONTENT_RTCSREQUEST, CRYPT_CONTENT_RTCSRESPONSE, ! 1262: CRYPT_CONTENT_RTCSRESPONSE_EXT, CRYPT_CONTENT_LAST ! 1263: } CRYPT_CONTENT_TYPE; ! 1264: ! 1265: /* ESS securityClassification codes */ ! 1266: ! 1267: enum { CRYPT_CLASSIFICATION_UNMARKED, CRYPT_CLASSIFICATION_UNCLASSIFIED, ! 1268: CRYPT_CLASSIFICATION_RESTRICTED, CRYPT_CLASSIFICATION_CONFIDENTIAL, ! 1269: CRYPT_CLASSIFICATION_SECRET, CRYPT_CLASSIFICATION_TOP_SECRET, ! 1270: CRYPT_CLASSIFICATION_LAST = 255 }; ! 1271: ! 1272: /* RTCS certificate status */ ! 1273: ! 1274: enum { CRYPT_CERTSTATUS_VALID, CRYPT_CERTSTATUS_NOTVALID, ! 1275: CRYPT_CERTSTATUS_NONAUTHORITATIVE, CRYPT_CERTSTATUS_UNKNOWN }; ! 1276: ! 1277: /* OCSP revocation status */ ! 1278: ! 1279: enum { CRYPT_OCSPSTATUS_NOTREVOKED, CRYPT_OCSPSTATUS_REVOKED, ! 1280: CRYPT_OCSPSTATUS_UNKNOWN }; ! 1281: ! 1282: /* The amount of detail to include in signatures when signing certificate ! 1283: objects */ ! 1284: ! 1285: typedef enum { ! 1286: CRYPT_SIGNATURELEVEL_NONE, /* Include only signature */ ! 1287: CRYPT_SIGNATURELEVEL_SIGNERCERT,/* Include signer cert */ ! 1288: CRYPT_SIGNATURELEVEL_ALL, /* Include all relevant info */ ! 1289: CRYPT_SIGNATURELEVEL_LAST /* Last possible sig.level type */ ! 1290: } CRYPT_SIGNATURELEVEL_TYPE; ! 1291: ! 1292: /* The certificate export format type, which defines the format in which a ! 1293: certificate object is exported */ ! 1294: ! 1295: typedef enum { ! 1296: CRYPT_CERTFORMAT_NONE, /* No certificate format */ ! 1297: CRYPT_CERTFORMAT_CERTIFICATE, /* DER-encoded certificate */ ! 1298: CRYPT_CERTFORMAT_CERTCHAIN, /* PKCS #7 certificate chain */ ! 1299: CRYPT_CERTFORMAT_TEXT_CERTIFICATE, /* base-64 wrapped cert */ ! 1300: CRYPT_CERTFORMAT_TEXT_CERTCHAIN, /* base-64 wrapped cert chain */ ! 1301: CRYPT_CERTFORMAT_XML_CERTIFICATE, /* XML wrapped cert */ ! 1302: CRYPT_CERTFORMAT_XML_CERTCHAIN, /* XML wrapped cert chain */ ! 1303: #ifdef _CRYPT_DEFINED ! 1304: CRYPT_ICERTFORMAT_CERTSET, /* SET OF Certificate */ ! 1305: CRYPT_ICERTFORMAT_CERTSEQUENCE, /* SEQUENCE OF Certificate */ ! 1306: CRYPT_ICERTFORMAT_SSL_CERTCHAIN,/* SSL certificate chain */ ! 1307: CRYPT_ICERTFORMAT_DATA, /* Non-signed object data */ ! 1308: #endif /* CRYPT_DEFINED */ ! 1309: CRYPT_CERTFORMAT_LAST /* Last possible cert.format type */ ! 1310: #ifdef _CRYPT_DEFINED ! 1311: /* The following is used as an internal format specifier when the format ! 1312: is autodetected, to tell the base64 decoding code to strip MIME ! 1313: headers before the base64 data */ ! 1314: , CRYPT_ICERTFORMAT_SMIME_CERTIFICATE,/* S/MIME cert.request or cert chain */ ! 1315: CRYPT_CERTFORMAT_LAST_EXTERNAL = CRYPT_CERTFORMAT_XML_CERTCHAIN + 1 ! 1316: #endif /* _CRYPT_DEFINED */ ! 1317: } CRYPT_CERTFORMAT_TYPE; ! 1318: ! 1319: /* CMP request types */ ! 1320: ! 1321: typedef enum { ! 1322: CRYPT_REQUESTTYPE_NONE, /* No request type */ ! 1323: CRYPT_REQUESTTYPE_INITIALISATION, /* Initialisation request */ ! 1324: CRYPT_REQUESTTYPE_INITIALIZATION = CRYPT_REQUESTTYPE_INITIALISATION, ! 1325: CRYPT_REQUESTTYPE_CERTIFICATE, /* Certification request */ ! 1326: CRYPT_REQUESTTYPE_KEYUPDATE, /* Key update request */ ! 1327: CRYPT_REQUESTTYPE_REVOCATION, /* Cert revocation request */ ! 1328: CRYPT_REQUESTTYPE_PKIBOOT, /* PKIBoot request */ ! 1329: CRYPT_REQUESTTYPE_LAST /* Last possible request type */ ! 1330: } CRYPT_REQUESTTYPE_TYPE; ! 1331: ! 1332: /* Key ID types */ ! 1333: ! 1334: typedef enum { ! 1335: CRYPT_KEYID_NONE, /* No key ID type */ ! 1336: CRYPT_KEYID_NAME, /* Key owner name */ ! 1337: CRYPT_KEYID_URI, /* Key owner URI */ ! 1338: CRYPT_KEYID_EMAIL = CRYPT_KEYID_URI, /* Synonym: owner email addr.*/ ! 1339: #ifdef _CRYPT_DEFINED ! 1340: /* Internal key ID types */ ! 1341: CRYPT_IKEYID_KEYID, /* SubjectKeyIdentifier/internal ID */ ! 1342: CRYPT_IKEYID_PGPKEYID, /* PGP/OpenPGP key ID */ ! 1343: CRYPT_IKEYID_CERTID, /* Certificate hash */ ! 1344: CRYPT_IKEYID_ISSUERID, /* Hashed issuerAndSerialNumber */ ! 1345: CRYPT_IKEYID_ISSUERANDSERIALNUMBER, /* issuerAndSerialNumber */ ! 1346: #endif /* _CRYPT_DEFINED */ ! 1347: CRYPT_KEYID_LAST /* Last possible key ID type */ ! 1348: #ifdef _CRYPT_DEFINED ! 1349: , CRYPT_KEYID_LAST_EXTERNAL = CRYPT_KEYID_URI + 1/* Last external key ID */ ! 1350: #endif /* _CRYPT_DEFINED */ ! 1351: } CRYPT_KEYID_TYPE; ! 1352: ! 1353: /* The encryption object types */ ! 1354: ! 1355: typedef enum { ! 1356: CRYPT_OBJECT_NONE, /* No object type */ ! 1357: CRYPT_OBJECT_ENCRYPTED_KEY, /* Conventionally encrypted key */ ! 1358: CRYPT_OBJECT_PKCENCRYPTED_KEY, /* PKC-encrypted key */ ! 1359: CRYPT_OBJECT_KEYAGREEMENT, /* Key agreement information */ ! 1360: CRYPT_OBJECT_SIGNATURE, /* Signature */ ! 1361: CRYPT_OBJECT_LAST /* Last possible object type */ ! 1362: } CRYPT_OBJECT_TYPE; ! 1363: ! 1364: /* Object/attribute error type information */ ! 1365: ! 1366: typedef enum { ! 1367: CRYPT_ERRTYPE_NONE, /* No error information */ ! 1368: CRYPT_ERRTYPE_ATTR_SIZE, /* Attribute data too small or large */ ! 1369: CRYPT_ERRTYPE_ATTR_VALUE, /* Attribute value is invalid */ ! 1370: CRYPT_ERRTYPE_ATTR_ABSENT, /* Required attribute missing */ ! 1371: CRYPT_ERRTYPE_ATTR_PRESENT, /* Non-allowed attribute present */ ! 1372: CRYPT_ERRTYPE_CONSTRAINT, /* Cert: Constraint violation in object */ ! 1373: CRYPT_ERRTYPE_ISSUERCONSTRAINT, /* Cert: Constraint viol.in issuing cert */ ! 1374: CRYPT_ERRTYPE_LAST /* Last possible error info type */ ! 1375: } CRYPT_ERRTYPE_TYPE; ! 1376: ! 1377: /* Cert store management action type */ ! 1378: ! 1379: typedef enum { ! 1380: CRYPT_CERTACTION_NONE, /* No cert management action */ ! 1381: CRYPT_CERTACTION_CREATE, /* Create cert store */ ! 1382: CRYPT_CERTACTION_CONNECT, /* Connect to cert store */ ! 1383: CRYPT_CERTACTION_DISCONNECT, /* Disconnect from cert store */ ! 1384: CRYPT_CERTACTION_ERROR, /* Error information */ ! 1385: CRYPT_CERTACTION_ADDUSER, /* Add PKI user */ ! 1386: CRYPT_CERTACTION_DELETEUSER, /* Delete PKI user */ ! 1387: CRYPT_CERTACTION_REQUEST_CERT, /* Cert request */ ! 1388: CRYPT_CERTACTION_REQUEST_RENEWAL,/* Cert renewal request */ ! 1389: CRYPT_CERTACTION_REQUEST_REVOCATION,/* Cert revocation request */ ! 1390: CRYPT_CERTACTION_CERT_CREATION, /* Cert creation */ ! 1391: CRYPT_CERTACTION_CERT_CREATION_COMPLETE,/* Confirmation of cert creation */ ! 1392: CRYPT_CERTACTION_CERT_CREATION_DROP, /* Cancellation of cert creation */ ! 1393: CRYPT_CERTACTION_CERT_CREATION_REVERSE, /* Cancel of creation w.revocation */ ! 1394: CRYPT_CERTACTION_RESTART_CLEANUP, /* Delete reqs after restart */ ! 1395: CRYPT_CERTACTION_RESTART_REVOKE_CERT, /* Complete revocation after restart */ ! 1396: CRYPT_CERTACTION_ISSUE_CERT, /* Cert issue */ ! 1397: CRYPT_CERTACTION_ISSUE_CRL, /* CRL issue */ ! 1398: CRYPT_CERTACTION_REVOKE_CERT, /* Cert revocation */ ! 1399: CRYPT_CERTACTION_EXPIRE_CERT, /* Cert expiry */ ! 1400: CRYPT_CERTACTION_CLEANUP, /* Clean up on restart */ ! 1401: CRYPT_CERTACTION_LAST /* Last possible cert store log action */ ! 1402: #ifdef _CRYPT_DEFINED ! 1403: /* User-settable action types for cert mgmt.actions */ ! 1404: , CRYPT_CERTACTION_FIRST_USER = CRYPT_CERTACTION_ISSUE_CERT, ! 1405: CRYPT_CERTACTION_LAST_USER = CRYPT_CERTACTION_CLEANUP ! 1406: #endif /* _CRYPT_DEFINED */ ! 1407: } CRYPT_CERTACTION_TYPE; ! 1408: ! 1409: /**************************************************************************** ! 1410: * * ! 1411: * General Constants * ! 1412: * * ! 1413: ****************************************************************************/ ! 1414: ! 1415: /* The maximum user key size - 2048 bits */ ! 1416: ! 1417: #define CRYPT_MAX_KEYSIZE 256 ! 1418: ! 1419: /* The maximum IV size - 256 bits */ ! 1420: ! 1421: #define CRYPT_MAX_IVSIZE 32 ! 1422: ! 1423: /* The maximum public-key component size - 4096 bits */ ! 1424: ! 1425: #define CRYPT_MAX_PKCSIZE 512 ! 1426: ! 1427: /* The maximum hash size - 256 bits */ ! 1428: ! 1429: #define CRYPT_MAX_HASHSIZE 32 ! 1430: ! 1431: /* The maximum size of a text string (e.g.key owner name) */ ! 1432: ! 1433: #define CRYPT_MAX_TEXTSIZE 64 ! 1434: ! 1435: /* A magic value indicating that the default setting for this parameter ! 1436: should be used */ ! 1437: ! 1438: #define CRYPT_USE_DEFAULT -100 ! 1439: ! 1440: /* A magic value for unused parameters */ ! 1441: ! 1442: #define CRYPT_UNUSED -101 ! 1443: ! 1444: /* Cursor positioning codes for certificate/CRL extensions */ ! 1445: ! 1446: #define CRYPT_CURSOR_FIRST -200 ! 1447: #define CRYPT_CURSOR_PREVIOUS -201 ! 1448: #define CRYPT_CURSOR_NEXT -202 ! 1449: #define CRYPT_CURSOR_LAST -203 ! 1450: ! 1451: /* The type of information polling to perform to get random seed ! 1452: information. These values have to be negative because they're used ! 1453: as magic length values for cryptAddRandom() */ ! 1454: ! 1455: #define CRYPT_RANDOM_FASTPOLL -300 ! 1456: #define CRYPT_RANDOM_SLOWPOLL -301 ! 1457: ! 1458: /* Whether the PKC key is a public or private key */ ! 1459: ! 1460: #define CRYPT_KEYTYPE_PRIVATE 0 ! 1461: #define CRYPT_KEYTYPE_PUBLIC 1 ! 1462: ! 1463: /* Keyset open options */ ! 1464: ! 1465: typedef enum { ! 1466: CRYPT_KEYOPT_NONE, /* No options */ ! 1467: CRYPT_KEYOPT_READONLY, /* Open keyset in read-only mode */ ! 1468: CRYPT_KEYOPT_CREATE, /* Create a new keyset */ ! 1469: #ifdef _CRYPT_DEFINED ! 1470: /* Internal keyset options */ ! 1471: CRYPT_IKEYOPT_EXCLUSIVEACCESS, /* As _NONE but open for exclusive access */ ! 1472: #endif /* _CRYPT_DEFINED */ ! 1473: CRYPT_KEYOPT_LAST /* Last possible key option type */ ! 1474: #ifdef _CRYPT_DEFINED ! 1475: , CRYPT_KEYOPT_LAST_EXTERNAL = CRYPT_KEYOPT_CREATE + 1 ! 1476: /* Last external keyset option */ ! 1477: #endif /* _CRYPT_DEFINED */ ! 1478: } CRYPT_KEYOPT_TYPE; ! 1479: ! 1480: /* The various cryptlib objects - these are just integer handles */ ! 1481: ! 1482: typedef int CRYPT_CERTIFICATE; ! 1483: typedef int CRYPT_CONTEXT; ! 1484: typedef int CRYPT_DEVICE; ! 1485: typedef int CRYPT_ENVELOPE; ! 1486: typedef int CRYPT_KEYSET; ! 1487: typedef int CRYPT_SESSION; ! 1488: typedef int CRYPT_USER; ! 1489: ! 1490: /* Sometimes we don't know the exact type of a cryptlib object, so we use a ! 1491: generic handle type to identify it */ ! 1492: ! 1493: typedef int CRYPT_HANDLE; ! 1494: ! 1495: /**************************************************************************** ! 1496: * * ! 1497: * Encryption Data Structures * ! 1498: * * ! 1499: ****************************************************************************/ ! 1500: ! 1501: /* Results returned from the capability query */ ! 1502: ! 1503: typedef struct { ! 1504: /* Algorithm information */ ! 1505: C_CHR algoName[ CRYPT_MAX_TEXTSIZE ];/* Algorithm name */ ! 1506: int blockSize; /* Block size of the algorithm */ ! 1507: int minKeySize; /* Minimum key size in bytes */ ! 1508: int keySize; /* Recommended key size in bytes */ ! 1509: int maxKeySize; /* Maximum key size in bytes */ ! 1510: } CRYPT_QUERY_INFO; ! 1511: ! 1512: /* Results returned from the encoded object query. These provide ! 1513: information on the objects created by cryptExportKey()/ ! 1514: cryptCreateSignature() */ ! 1515: ! 1516: typedef struct { ! 1517: /* The object type */ ! 1518: CRYPT_OBJECT_TYPE objectType; ! 1519: ! 1520: /* The encryption algorithm and mode */ ! 1521: CRYPT_ALGO_TYPE cryptAlgo; ! 1522: CRYPT_MODE_TYPE cryptMode; ! 1523: ! 1524: /* The hash algorithm for Signature objects */ ! 1525: CRYPT_ALGO_TYPE hashAlgo; ! 1526: ! 1527: /* The salt for derived keys */ ! 1528: unsigned char salt[ CRYPT_MAX_HASHSIZE ]; ! 1529: int saltSize; ! 1530: } CRYPT_OBJECT_INFO; ! 1531: ! 1532: /* Key information for the public-key encryption algorithms. These fields ! 1533: are not accessed directly, but can be manipulated with the init/set/ ! 1534: destroyComponents() macros */ ! 1535: ! 1536: typedef struct { ! 1537: /* Status information */ ! 1538: int isPublicKey; /* Whether this is a public or private key */ ! 1539: ! 1540: /* Public components */ ! 1541: unsigned char n[ CRYPT_MAX_PKCSIZE ]; /* Modulus */ ! 1542: int nLen; /* Length of modulus in bits */ ! 1543: unsigned char e[ CRYPT_MAX_PKCSIZE ]; /* Public exponent */ ! 1544: int eLen; /* Length of public exponent in bits */ ! 1545: ! 1546: /* Private components */ ! 1547: unsigned char d[ CRYPT_MAX_PKCSIZE ]; /* Private exponent */ ! 1548: int dLen; /* Length of private exponent in bits */ ! 1549: unsigned char p[ CRYPT_MAX_PKCSIZE ]; /* Prime factor 1 */ ! 1550: int pLen; /* Length of prime factor 1 in bits */ ! 1551: unsigned char q[ CRYPT_MAX_PKCSIZE ]; /* Prime factor 2 */ ! 1552: int qLen; /* Length of prime factor 2 in bits */ ! 1553: unsigned char u[ CRYPT_MAX_PKCSIZE ]; /* Mult.inverse of q, mod p */ ! 1554: int uLen; /* Length of private exponent in bits */ ! 1555: unsigned char e1[ CRYPT_MAX_PKCSIZE ]; /* Private exponent 1 (PKCS) */ ! 1556: int e1Len; /* Length of private exponent in bits */ ! 1557: unsigned char e2[ CRYPT_MAX_PKCSIZE ]; /* Private exponent 2 (PKCS) */ ! 1558: int e2Len; /* Length of private exponent in bits */ ! 1559: } CRYPT_PKCINFO_RSA; ! 1560: ! 1561: typedef struct { ! 1562: /* Status information */ ! 1563: int isPublicKey; /* Whether this is a public or private key */ ! 1564: ! 1565: /* Public components */ ! 1566: unsigned char p[ CRYPT_MAX_PKCSIZE ]; /* Prime modulus */ ! 1567: int pLen; /* Length of prime modulus in bits */ ! 1568: unsigned char q[ CRYPT_MAX_PKCSIZE ]; /* Prime divisor */ ! 1569: int qLen; /* Length of prime divisor in bits */ ! 1570: unsigned char g[ CRYPT_MAX_PKCSIZE ]; /* h^( ( p - 1 ) / q ) mod p */ ! 1571: int gLen; /* Length of g in bits */ ! 1572: unsigned char y[ CRYPT_MAX_PKCSIZE ]; /* Public random integer */ ! 1573: int yLen; /* Length of public integer in bits */ ! 1574: ! 1575: /* Private components */ ! 1576: unsigned char x[ CRYPT_MAX_PKCSIZE ]; /* Private random integer */ ! 1577: int xLen; /* Length of private integer in bits */ ! 1578: } CRYPT_PKCINFO_DLP; ! 1579: ! 1580: /* Macros to initialise and destroy the structure that stores the components ! 1581: of a public key */ ! 1582: ! 1583: #define cryptInitComponents( componentInfo, componentKeyType ) \ ! 1584: { memset( ( componentInfo ), 0, sizeof( *componentInfo ) ); \ ! 1585: ( componentInfo )->isPublicKey = ( ( componentKeyType ) ? 1 : 0 ); } ! 1586: ! 1587: #define cryptDestroyComponents( componentInfo ) \ ! 1588: memset( ( componentInfo ), 0, sizeof( *componentInfo ) ) ! 1589: ! 1590: /* Macros to set a component of a public key */ ! 1591: ! 1592: #define cryptSetComponent( destination, source, length ) \ ! 1593: { memcpy( ( destination ), ( source ), ( ( length ) + 7 ) >> 3 ); \ ! 1594: ( destination##Len ) = length; } ! 1595: ! 1596: /**************************************************************************** ! 1597: * * ! 1598: * Status Codes * ! 1599: * * ! 1600: ****************************************************************************/ ! 1601: ! 1602: /* No error in function call */ ! 1603: ! 1604: #define CRYPT_OK 0 /* No error */ ! 1605: ! 1606: /* Error in parameters passed to function */ ! 1607: ! 1608: #define CRYPT_ERROR_PARAM1 -1 /* Bad argument, parameter 1 */ ! 1609: #define CRYPT_ERROR_PARAM2 -2 /* Bad argument, parameter 2 */ ! 1610: #define CRYPT_ERROR_PARAM3 -3 /* Bad argument, parameter 3 */ ! 1611: #define CRYPT_ERROR_PARAM4 -4 /* Bad argument, parameter 4 */ ! 1612: #define CRYPT_ERROR_PARAM5 -5 /* Bad argument, parameter 5 */ ! 1613: #define CRYPT_ERROR_PARAM6 -6 /* Bad argument, parameter 6 */ ! 1614: #define CRYPT_ERROR_PARAM7 -7 /* Bad argument, parameter 7 */ ! 1615: ! 1616: /* Errors due to insufficient resources */ ! 1617: ! 1618: #define CRYPT_ERROR_MEMORY -10 /* Out of memory */ ! 1619: #define CRYPT_ERROR_NOTINITED -11 /* Data has not been initialised */ ! 1620: #define CRYPT_ERROR_INITED -12 /* Data has already been init'd */ ! 1621: #define CRYPT_ERROR_NOSECURE -13 /* Opn.not avail.at requested sec.level */ ! 1622: #define CRYPT_ERROR_RANDOM -14 /* No reliable random data available */ ! 1623: #define CRYPT_ERROR_FAILED -15 /* Operation failed */ ! 1624: #define CRYPT_ERROR_INTERNAL -16 /* Internal consistency check failed */ ! 1625: ! 1626: /* Security violations */ ! 1627: ! 1628: #define CRYPT_ERROR_NOTAVAIL -20 /* This type of opn.not available */ ! 1629: #define CRYPT_ERROR_PERMISSION -21 /* No permiss.to perform this operation */ ! 1630: #define CRYPT_ERROR_WRONGKEY -22 /* Incorrect key used to decrypt data */ ! 1631: #define CRYPT_ERROR_INCOMPLETE -23 /* Operation incomplete/still in progress */ ! 1632: #define CRYPT_ERROR_COMPLETE -24 /* Operation complete/can't continue */ ! 1633: #define CRYPT_ERROR_TIMEOUT -25 /* Operation timed out before completion */ ! 1634: #define CRYPT_ERROR_INVALID -26 /* Invalid/inconsistent information */ ! 1635: #define CRYPT_ERROR_SIGNALLED -27 /* Resource destroyed by extnl.event */ ! 1636: ! 1637: /* High-level function errors */ ! 1638: ! 1639: #define CRYPT_ERROR_OVERFLOW -30 /* Resources/space exhausted */ ! 1640: #define CRYPT_ERROR_UNDERFLOW -31 /* Not enough data available */ ! 1641: #define CRYPT_ERROR_BADDATA -32 /* Bad/unrecognised data format */ ! 1642: #define CRYPT_ERROR_SIGNATURE -33 /* Signature/integrity check failed */ ! 1643: ! 1644: /* Data access function errors */ ! 1645: ! 1646: #define CRYPT_ERROR_OPEN -40 /* Cannot open object */ ! 1647: #define CRYPT_ERROR_READ -41 /* Cannot read item from object */ ! 1648: #define CRYPT_ERROR_WRITE -42 /* Cannot write item to object */ ! 1649: #define CRYPT_ERROR_NOTFOUND -43 /* Requested item not found in object */ ! 1650: #define CRYPT_ERROR_DUPLICATE -44 /* Item already present in object */ ! 1651: ! 1652: /* Data enveloping errors */ ! 1653: ! 1654: #define CRYPT_ENVELOPE_RESOURCE -50 /* Need resource to proceed */ ! 1655: ! 1656: /* Macros to examine return values */ ! 1657: ! 1658: #define cryptStatusError( status ) ( ( status ) < CRYPT_OK ) ! 1659: #define cryptStatusOK( status ) ( ( status ) == CRYPT_OK ) ! 1660: ! 1661: /**************************************************************************** ! 1662: * * ! 1663: * General Functions * ! 1664: * * ! 1665: ****************************************************************************/ ! 1666: ! 1667: /* The following is necessary to stop C++ name mangling */ ! 1668: ! 1669: #ifdef __cplusplus ! 1670: extern "C" { ! 1671: #endif /* __cplusplus */ ! 1672: ! 1673: /* Initialise and shut down cryptlib */ ! 1674: ! 1675: C_RET cryptInit( void ); ! 1676: C_RET cryptEnd( void ); ! 1677: ! 1678: /* Query cryptlibs capabilities */ ! 1679: ! 1680: C_RET cryptQueryCapability( C_IN CRYPT_ALGO_TYPE cryptAlgo, ! 1681: C_OUT CRYPT_QUERY_INFO C_PTR cryptQueryInfo ); ! 1682: ! 1683: /* Create and destroy an encryption context */ ! 1684: ! 1685: C_RET cryptCreateContext( C_OUT CRYPT_CONTEXT C_PTR cryptContext, ! 1686: C_IN CRYPT_USER cryptUser, ! 1687: C_IN CRYPT_ALGO_TYPE cryptAlgo ); ! 1688: C_RET cryptDestroyContext( C_IN CRYPT_CONTEXT cryptContext ); ! 1689: ! 1690: /* Generic "destroy an object" function */ ! 1691: ! 1692: C_RET cryptDestroyObject( C_IN CRYPT_HANDLE cryptObject ); ! 1693: ! 1694: /* Generate a key into a context */ ! 1695: ! 1696: C_RET cryptGenerateKey( C_IN CRYPT_CONTEXT cryptContext ); ! 1697: C_RET cryptGenerateKeyAsync( C_IN CRYPT_CONTEXT cryptContext ); ! 1698: C_RET cryptAsyncQuery( C_IN CRYPT_HANDLE cryptObject ); ! 1699: C_RET cryptAsyncCancel( C_IN CRYPT_HANDLE cryptObject ); ! 1700: ! 1701: /* Encrypt/decrypt/hash a block of memory */ ! 1702: ! 1703: C_RET cryptEncrypt( C_IN CRYPT_CONTEXT cryptContext, C_INOUT void C_PTR buffer, ! 1704: C_IN int length ); ! 1705: C_RET cryptDecrypt( C_IN CRYPT_CONTEXT cryptContext, C_INOUT void C_PTR buffer, ! 1706: C_IN int length ); ! 1707: ! 1708: /* Get/set/delete attribute functions */ ! 1709: ! 1710: C_RET cryptSetAttribute( C_IN CRYPT_HANDLE cryptHandle, ! 1711: C_IN CRYPT_ATTRIBUTE_TYPE attributeType, ! 1712: C_IN int value ); ! 1713: C_RET cryptSetAttributeString( C_IN CRYPT_HANDLE cryptHandle, ! 1714: C_IN CRYPT_ATTRIBUTE_TYPE attributeType, ! 1715: C_IN void C_PTR value, C_IN int valueLength ); ! 1716: C_RET cryptGetAttribute( C_IN CRYPT_HANDLE cryptHandle, ! 1717: C_IN CRYPT_ATTRIBUTE_TYPE attributeType, ! 1718: C_OUT int C_PTR value ); ! 1719: C_RET cryptGetAttributeString( C_IN CRYPT_HANDLE cryptHandle, ! 1720: C_IN CRYPT_ATTRIBUTE_TYPE attributeType, ! 1721: C_OUT void C_PTR value, ! 1722: C_OUT int C_PTR valueLength ); ! 1723: C_RET cryptDeleteAttribute( C_IN CRYPT_HANDLE cryptHandle, ! 1724: C_IN CRYPT_ATTRIBUTE_TYPE attributeType ); ! 1725: ! 1726: /* Oddball functions: Add random data to the pool, query an encoded signature ! 1727: or key data. These are due to be replaced once a suitable alternative can ! 1728: be found */ ! 1729: ! 1730: C_RET cryptAddRandom( C_IN void C_PTR randomData, C_IN int randomDataLength ); ! 1731: C_RET cryptQueryObject( C_IN void C_PTR objectData, ! 1732: C_IN int objectDataLength, ! 1733: C_OUT CRYPT_OBJECT_INFO C_PTR cryptObjectInfo ); ! 1734: ! 1735: /**************************************************************************** ! 1736: * * ! 1737: * Mid-level Encryption Functions * ! 1738: * * ! 1739: ****************************************************************************/ ! 1740: ! 1741: /* Export and import an encrypted session key */ ! 1742: ! 1743: C_RET cryptExportKey( C_OUT void C_PTR encryptedKey, ! 1744: C_IN int encryptedKeyMaxLength, ! 1745: C_OUT int C_PTR encryptedKeyLength, ! 1746: C_IN CRYPT_HANDLE exportKey, ! 1747: C_IN CRYPT_CONTEXT sessionKeyContext ); ! 1748: C_RET cryptExportKeyEx( C_OUT void C_PTR encryptedKey, ! 1749: C_IN int encryptedKeyMaxLength, ! 1750: C_OUT int C_PTR encryptedKeyLength, ! 1751: C_IN CRYPT_FORMAT_TYPE formatType, ! 1752: C_IN CRYPT_HANDLE exportKey, ! 1753: C_IN CRYPT_CONTEXT sessionKeyContext ); ! 1754: C_RET cryptImportKey( C_IN void C_PTR encryptedKey, ! 1755: C_IN int encryptedKeyLength, ! 1756: C_IN CRYPT_CONTEXT importKey, ! 1757: C_IN CRYPT_CONTEXT sessionKeyContext ); ! 1758: C_RET cryptImportKeyEx( C_IN void C_PTR encryptedKey, ! 1759: C_IN int encryptedKeyLength, ! 1760: C_IN CRYPT_CONTEXT importKey, ! 1761: C_IN CRYPT_CONTEXT sessionKeyContext, ! 1762: C_OUT CRYPT_CONTEXT C_PTR returnedContext ); ! 1763: ! 1764: /* Create and check a digital signature */ ! 1765: ! 1766: C_RET cryptCreateSignature( C_OUT void C_PTR signature, ! 1767: C_IN int signatureMaxLength, ! 1768: C_OUT int C_PTR signatureLength, ! 1769: C_IN CRYPT_CONTEXT signContext, ! 1770: C_IN CRYPT_CONTEXT hashContext ); ! 1771: C_RET cryptCreateSignatureEx( C_OUT void C_PTR signature, ! 1772: C_IN int signatureMaxLength, ! 1773: C_OUT int C_PTR signatureLength, ! 1774: C_IN CRYPT_FORMAT_TYPE formatType, ! 1775: C_IN CRYPT_CONTEXT signContext, ! 1776: C_IN CRYPT_CONTEXT hashContext, ! 1777: C_IN CRYPT_CERTIFICATE extraData ); ! 1778: C_RET cryptCheckSignature( C_IN void C_PTR signature, ! 1779: C_IN int signatureLength, ! 1780: C_IN CRYPT_HANDLE sigCheckKey, ! 1781: C_IN CRYPT_CONTEXT hashContext ); ! 1782: C_RET cryptCheckSignatureEx( C_IN void C_PTR signature, ! 1783: C_IN int signatureLength, ! 1784: C_IN CRYPT_HANDLE sigCheckKey, ! 1785: C_IN CRYPT_CONTEXT hashContext, ! 1786: C_OUT CRYPT_HANDLE C_PTR extraData ); ! 1787: ! 1788: /**************************************************************************** ! 1789: * * ! 1790: * Keyset Functions * ! 1791: * * ! 1792: ****************************************************************************/ ! 1793: ! 1794: /* Open and close a keyset */ ! 1795: ! 1796: C_RET cryptKeysetOpen( C_OUT CRYPT_KEYSET C_PTR keyset, ! 1797: C_IN CRYPT_USER cryptUser, ! 1798: C_IN CRYPT_KEYSET_TYPE keysetType, ! 1799: C_IN C_STR name, C_IN CRYPT_KEYOPT_TYPE options ); ! 1800: C_RET cryptKeysetClose( C_IN CRYPT_KEYSET keyset ); ! 1801: ! 1802: /* Get a key from a keyset */ ! 1803: ! 1804: C_RET cryptGetPublicKey( C_IN CRYPT_KEYSET keyset, ! 1805: C_OUT CRYPT_CONTEXT C_PTR cryptContext, ! 1806: C_IN CRYPT_KEYID_TYPE keyIDtype, ! 1807: C_IN C_STR keyID ); ! 1808: C_RET cryptGetPrivateKey( C_IN CRYPT_KEYSET keyset, ! 1809: C_OUT CRYPT_CONTEXT C_PTR cryptContext, ! 1810: C_IN CRYPT_KEYID_TYPE keyIDtype, ! 1811: C_IN C_STR keyID, C_IN C_STR password ); ! 1812: ! 1813: /* Add/delete a key to/from a keyset */ ! 1814: ! 1815: C_RET cryptAddPublicKey( C_IN CRYPT_KEYSET keyset, ! 1816: C_IN CRYPT_CERTIFICATE certificate ); ! 1817: C_RET cryptAddPrivateKey( C_IN CRYPT_KEYSET keyset, ! 1818: C_IN CRYPT_HANDLE cryptKey, ! 1819: C_IN C_STR password ); ! 1820: C_RET cryptDeleteKey( C_IN CRYPT_KEYSET keyset, ! 1821: C_IN CRYPT_KEYID_TYPE keyIDtype, ! 1822: C_IN C_STR keyID ); ! 1823: ! 1824: /**************************************************************************** ! 1825: * * ! 1826: * Certificate Functions * ! 1827: * * ! 1828: ****************************************************************************/ ! 1829: ! 1830: /* Create/destroy a certificate */ ! 1831: ! 1832: C_RET cryptCreateCert( C_OUT CRYPT_CERTIFICATE C_PTR certificate, ! 1833: C_IN CRYPT_USER cryptUser, ! 1834: C_IN CRYPT_CERTTYPE_TYPE certType ); ! 1835: C_RET cryptDestroyCert( C_IN CRYPT_CERTIFICATE certificate ); ! 1836: ! 1837: /* Get/add/delete certificate extensions. These are direct data insertion ! 1838: functions whose use is discouraged, so they fix the string at char * ! 1839: rather than C_STR */ ! 1840: ! 1841: C_RET cryptGetCertExtension( C_IN CRYPT_CERTIFICATE certificate, ! 1842: C_IN char C_PTR oid, ! 1843: C_OUT int C_PTR criticalFlag, ! 1844: C_OUT void C_PTR extension, ! 1845: C_IN int extensionMaxLength, ! 1846: C_OUT int C_PTR extensionLength ); ! 1847: C_RET cryptAddCertExtension( C_IN CRYPT_CERTIFICATE certificate, ! 1848: C_IN char C_PTR oid, C_IN int criticalFlag, ! 1849: C_IN void C_PTR extension, ! 1850: C_IN int extensionLength ); ! 1851: C_RET cryptDeleteCertExtension( C_IN CRYPT_CERTIFICATE certificate, ! 1852: C_IN char C_PTR oid ); ! 1853: ! 1854: /* Sign/sig.check a certificate/certification request */ ! 1855: ! 1856: C_RET cryptSignCert( C_IN CRYPT_CERTIFICATE certificate, ! 1857: C_IN CRYPT_CONTEXT signContext ); ! 1858: C_RET cryptCheckCert( C_IN CRYPT_CERTIFICATE certificate, ! 1859: C_IN CRYPT_HANDLE sigCheckKey ); ! 1860: ! 1861: /* Import/export a certificate/certification request */ ! 1862: ! 1863: C_RET cryptImportCert( C_IN void C_PTR certObject, ! 1864: C_IN int certObjectLength, ! 1865: C_IN CRYPT_USER cryptUser, ! 1866: C_OUT CRYPT_CERTIFICATE C_PTR certificate ); ! 1867: C_RET cryptExportCert( C_OUT void C_PTR certObject, ! 1868: C_IN int certObjectMaxLength, ! 1869: C_OUT int C_PTR certObjectLength, ! 1870: C_IN CRYPT_CERTFORMAT_TYPE certFormatType, ! 1871: C_IN CRYPT_CERTIFICATE certificate ); ! 1872: ! 1873: /* CA management functions */ ! 1874: ! 1875: C_RET cryptCAAddItem( C_IN CRYPT_KEYSET keyset, ! 1876: C_IN CRYPT_CERTIFICATE certificate ); ! 1877: C_RET cryptCAGetItem( C_IN CRYPT_KEYSET keyset, ! 1878: C_OUT CRYPT_CERTIFICATE C_PTR certificate, ! 1879: C_IN CRYPT_CERTTYPE_TYPE certType, ! 1880: C_IN CRYPT_KEYID_TYPE keyIDtype, ! 1881: C_IN C_STR keyID ); ! 1882: C_RET cryptCADeleteItem( C_IN CRYPT_KEYSET keyset, ! 1883: C_IN CRYPT_CERTTYPE_TYPE certType, ! 1884: C_IN CRYPT_KEYID_TYPE keyIDtype, ! 1885: C_IN C_STR keyID ); ! 1886: C_RET cryptCACertManagement( C_OUT CRYPT_CERTIFICATE C_PTR certificate, ! 1887: C_IN CRYPT_CERTACTION_TYPE action, ! 1888: C_IN CRYPT_KEYSET keyset, ! 1889: C_IN CRYPT_CONTEXT caKey, ! 1890: C_IN CRYPT_CERTIFICATE certRequest ); ! 1891: ! 1892: /**************************************************************************** ! 1893: * * ! 1894: * Envelope and Session Functions * ! 1895: * * ! 1896: ****************************************************************************/ ! 1897: ! 1898: /* Create/destroy an envelope */ ! 1899: ! 1900: C_RET cryptCreateEnvelope( C_OUT CRYPT_ENVELOPE C_PTR envelope, ! 1901: C_IN CRYPT_USER cryptUser, ! 1902: C_IN CRYPT_FORMAT_TYPE formatType ); ! 1903: C_RET cryptDestroyEnvelope( C_IN CRYPT_ENVELOPE envelope ); ! 1904: ! 1905: /* Create/destroy a session */ ! 1906: ! 1907: C_RET cryptCreateSession( C_OUT CRYPT_SESSION C_PTR session, ! 1908: C_IN CRYPT_USER cryptUser, ! 1909: C_IN CRYPT_SESSION_TYPE formatType ); ! 1910: C_RET cryptDestroySession( C_IN CRYPT_SESSION session ); ! 1911: ! 1912: /* Add/remove data to/from and envelope or session */ ! 1913: ! 1914: C_RET cryptPushData( C_IN CRYPT_HANDLE envelope, C_IN void C_PTR buffer, ! 1915: C_IN int length, C_OUT int C_PTR bytesCopied ); ! 1916: C_RET cryptFlushData( C_IN CRYPT_HANDLE envelope ); ! 1917: C_RET cryptPopData( C_IN CRYPT_HANDLE envelope, C_OUT void C_PTR buffer, ! 1918: C_IN int length, C_OUT int C_PTR bytesCopied ); ! 1919: ! 1920: /**************************************************************************** ! 1921: * * ! 1922: * Device Functions * ! 1923: * * ! 1924: ****************************************************************************/ ! 1925: ! 1926: /* Open and close a device */ ! 1927: ! 1928: C_RET cryptDeviceOpen( C_OUT CRYPT_DEVICE C_PTR device, ! 1929: C_IN CRYPT_USER cryptUser, ! 1930: C_IN CRYPT_DEVICE_TYPE deviceType, ! 1931: C_IN C_STR name ); ! 1932: C_RET cryptDeviceClose( C_IN CRYPT_DEVICE device ); ! 1933: ! 1934: /* Query a devices capabilities */ ! 1935: ! 1936: C_RET cryptDeviceQueryCapability( C_IN CRYPT_DEVICE device, ! 1937: C_IN CRYPT_ALGO_TYPE cryptAlgo, ! 1938: C_OUT CRYPT_QUERY_INFO C_PTR cryptQueryInfo ); ! 1939: ! 1940: /* Create an encryption context via the device */ ! 1941: ! 1942: C_RET cryptDeviceCreateContext( C_IN CRYPT_DEVICE device, ! 1943: C_OUT CRYPT_CONTEXT C_PTR cryptContext, ! 1944: C_IN CRYPT_ALGO_TYPE cryptAlgo ); ! 1945: ! 1946: /**************************************************************************** ! 1947: * * ! 1948: * User Management Functions * ! 1949: * * ! 1950: ****************************************************************************/ ! 1951: ! 1952: /* Log on and off (create/destroy a user object) */ ! 1953: ! 1954: C_RET cryptLogin( C_OUT CRYPT_USER C_PTR user, ! 1955: C_IN C_STR name, C_IN C_STR password ); ! 1956: C_RET cryptLogout( C_IN CRYPT_USER user ); ! 1957: ! 1958: #if ( defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) ) && \ ! 1959: !( defined( _SCCTK ) || defined( _CVI_ ) ) ! 1960: ! 1961: /**************************************************************************** ! 1962: * * ! 1963: * User Interface Functions * ! 1964: * * ! 1965: ****************************************************************************/ ! 1966: ! 1967: /* User interface functions, only available under Win32 */ ! 1968: ! 1969: C_RET cryptUIGenerateKey( C_IN CRYPT_DEVICE cryptDevice, ! 1970: C_OUT CRYPT_CONTEXT C_PTR cryptContext, ! 1971: C_IN CRYPT_CERTIFICATE cryptCert, ! 1972: C_OUT char C_PTR password, C_IN HWND hWnd ); ! 1973: C_RET cryptUIDisplayCert( C_IN CRYPT_CERTIFICATE cryptCert, ! 1974: C_IN HWND hWnd ); ! 1975: ! 1976: #endif /* Win32 */ ! 1977: ! 1978: #ifdef __cplusplus ! 1979: } ! 1980: #endif /* __cplusplus */ ! 1981: ! 1982: #endif /* _CRYPTLIB_DEFINED */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.