RSA Security logo

RSA BSAFE Cert-C
API Reference

certext.h

Go to the documentation of this file.
00001 /*
00002 * Copyright (c) RSA Security Inc., 1999-2003.  All rights reserved.
00003 * This work contains proprietary, confidential, and trade secret
00004 * information of RSA Security Inc.  Use, disclosure or reproduction
00005 * without the express written authorization of RSA Security Inc. is
00006 * prohibited.
00007 */
00008 
00009 #ifndef HEADER_BSAFE_CERTC_CERTEXT
00010 #define HEADER_BSAFE_CERTC_CERTEXT 1
00011 
00018 #include "basetype.h"
00019 #include "certlist.h"
00020 #include "certattr.h"
00021 #include "certname.h"
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00087 typedef struct TYPED_STRING {
00088   unsigned int  type;           /* the character type for the string */
00089   ITEM          value;          /* string length and value in bytes */
00090 } TYPED_STRING;
00091 
00092 
00093 /* Extension type handler call-backs */
00094 
00275 typedef struct EXTENSION_HANDLER {
00276   /* Allocate and add new value to the value list */
00277   int (*AllocAndCopy) (
00278     POINTER *newValue,          /* (out) new copy of value */
00279     POINTER  value);            /* value to be copied */
00280 
00281   /* Delete value allocated by AllocAndCopy by freeing its storage */
00282   VALUE_DESTRUCTOR Destructor;
00283 
00284   /* Get value in encoded format */
00285   int (*GetEncodedValue) (
00286     LIST_OBJ        valueList,  /* values to be encoded */
00287     unsigned char **der,        /* (out) encoded values */
00288     unsigned int   *derLen);    /* (out) length of encoded values */
00289 
00290   /* Decode the encoded value into components and save */
00291   int (*SetEncodedValue) (
00292     LIST_OBJ       valueList,         /* decoded value(s) */
00293     unsigned char *ber,               /* value(s) to be decoded */
00294     unsigned int   berLen,            /* length of value(s) to be decoded */
00295     LIST_OBJ_ENTRY_HANDLER
00296                   *listEntryHandler); /* list entry handler */
00297 } EXTENSION_HANDLER;
00298 
00299 #define ALLOW_OVERRIDE_CRITICALITY 1
00300 
00301 /* Type(s) of extensionsObject to which an extension may belong */
00302 #define CERT_EXTENSIONS_OBJ         0x01
00303 #define CRL_EXTENSIONS_OBJ          0x02
00304 #define CRL_ENTRY_EXTENSIONS_OBJ    0x04
00305 #define OCSP_REQUEST_EXTENSIONS_OBJ 0x08
00306 #define OCSP_SINGLE_EXTENSIONS_OBJ  0x10
00307 #define _EXTENSIONS_OBJ_TYPE_MASK   0x1f /* the union of all bits above (not
00308                                             needed for application use) */
00309 
00415 typedef struct EXTENSION_TYPE_INFO {
00416   ITEM              type;                /* extension's OID */
00417   unsigned int      criticality;         /* extension's criticality */
00418   unsigned int      overrideCriticality; /* allow override criticality */
00419   unsigned int      overrideHandler;     /* allow override handler */
00420   UINT2             authenObjects;       /* object which can include this extension */
00421   unsigned int      uniqueValue;         /* if it is set to 0, the extension can have
00422                                                                                               multiple values; otherwise it can have at
00423                                             most one */
00424   EXTENSION_HANDLER handler;             /* extension's handler */
00425 } EXTENSION_TYPE_INFO;
00426 
00471 typedef struct EXTENSION_INFO {
00472   unsigned char *type;         /* extension's OID */
00473   unsigned int   typeLen;      /* extension's OID length */
00474   unsigned int   criticalFlag; /* extension criticality */
00475   unsigned int   valueCount;   /* extension value entries count */
00476   POINTER reserved;            /* reserved for future use */
00477 } EXTENSION_INFO;
00478 
00479 /* Supported X.509 v3 CRL Extension types */
00480 extern unsigned char ET_CRL_NUMBER[];
00481 extern unsigned char ET_DELTA_CRL_INDICATOR[];
00482 extern unsigned char ET_ISSUING_DISTRIBUTION_POINTS[];
00483 
00484 /* Supported x.509 v3 CRL Entry Extension types */
00485 extern unsigned char ET_REASON_CODE[];
00486 extern unsigned char ET_INSTRUCTION_CODE[];
00487 extern unsigned char ET_INVALID_DATE[];
00488 extern unsigned char ET_CERT_ISSUER[];
00489 
00490 /* Supported X.509 v3 Certificate Extension types */
00491 extern unsigned char ET_AUTHORITY_KEY_ID[];
00492 extern unsigned char ET_CERT_POLICIES[];
00493 extern unsigned char ET_ISSUER_ALTNAME[];
00494 extern unsigned char ET_SUBJECT_ALTNAME[];
00495 extern unsigned char ET_BASIC_CONSTRAINTS[];
00496 extern unsigned char ET_POLICY_CONSTRAINTS_36[];
00497 extern unsigned char ET_SUBJECT_DIR_ATTRIB[];
00498 extern unsigned char ET_SUBJECT_KEY_ID[];
00499 extern unsigned char ET_KEY_USAGE[];
00500 extern unsigned char ET_INHIBIT_ANYPOLICY[];
00501 extern unsigned char ET_POLICY_MAPPINGS[];
00502 extern unsigned char ET_PRIVATE_KEY_USAGE_PERIOD[];
00503 extern unsigned char ET_NAME_CONSTRAINTS[];
00504 extern unsigned char ET_EXTENDED_KEY_USAGE[];
00505 extern unsigned char ET_CRL_DISTRIBUTION_POINTS[];
00506 extern unsigned char ET_AUTHORITY_INFO_ACCESS[];
00507 
00508 /* Supported OCSP Request Extension types
00509  * (requestExtensions only) */
00510 extern unsigned char ET_OCSP_NONCE[];
00511 extern unsigned char ET_OCSP_RESPONSE[];
00512 
00513 /* OCSP Response Extension types */
00514 extern unsigned char ET_OCSP_CRL_REFERENCES[];
00515 extern unsigned char ET_OCSP_ARCHIVE_CUTOFF[];
00516 extern unsigned char ET_OCSP_NOCHECK[];
00517 
00518 /* Supported X.509 v3 Extension type lengths
00519  */
00520 #define ET_AUTHORITY_KEY_ID_LEN    3
00521 #define ET_BASIC_CONSTRAINTS_LEN   3
00522 #define ET_CERT_POLICIES_LEN       3
00523 #define ET_CRL_NUMBER_LEN          3
00524 #define ET_DELTA_CRL_INDICATOR_LEN 3
00525 #define ET_INSTRUCTION_CODE_LEN    3
00526 #define ET_INVALID_DATE_LEN        3
00527 #define ET_ISSUER_ALTNAME_LEN      3
00528 #define ET_REASON_CODE_LEN         3
00529 #define ET_SUBJECT_ALTNAME_LEN     3
00530 #define ET_POLICY_CONSTRAINTS_36_LEN 3
00531 #define ET_SUBJECT_DIR_ATTRIB_LEN  3
00532 #define ET_SUBJECT_KEY_ID_LEN      3
00533 #define ET_KEY_USAGE_LEN           3
00534 #define ET_INHIBIT_ANYPOLICY_LEN   3
00535 #define ET_PRIVATE_KEY_USAGE_PERIOD_LEN 3
00536 #define ET_POLICY_MAPPINGS_LEN     3
00537 #define ET_NAME_CONSTRAINTS_LEN    3
00538 #define ET_EXTENDED_KEY_USAGE_LEN  3
00539 #define ET_ISSUING_DISTRIBUTION_POINTS_LEN 3
00540 #define ET_CERT_ISSUER_LEN         3
00541 #define ET_CRL_DISTRIBUTION_POINTS_LEN 3
00542 #define ET_AUTHORITY_INFO_ACCESS_LEN 8
00543 
00544 #define ET_OCSP_NONCE_LEN          9
00545 #define ET_OCSP_RESPONSE_LEN       9
00546 #define ET_OCSP_CRL_REFERENCES_LEN 9
00547 #define ET_OCSP_ARCHIVE_CUTOFF_LEN 9
00548 #define ET_OCSP_NOCHECK_LEN        9
00549 
00550 /* Default Unknown Extension Type */
00551 extern unsigned char ET_UNKNOWN_TYPE[];
00552 
00553 /* Default Unknown Extension Type Length */
00554 #define ET_UNKNOWN_TYPE_LEN 12
00555 
00556 
00557 /* Extension Criticality flags */
00558 #define NON_CRITICAL  0             /* extension is not critical */
00559 #define CRITICAL      1             /* extension is critical */
00560 
00561 #define ALLOW_OVERRIDE_HANDLER 1    /* allow overriding of the extension */
00562 
00622 typedef UINT4  KEY_USAGE;
00623 
00624 
00625 /* Subject Key Identifier extension value type.
00626    The subjectKeyIdentifier extension is an object identifier.
00627  */
00628 
00659 typedef ITEM  SUBJECT_KEY_ID;
00660 
00661 
00662 /* Subject Directory Attributes extension value type.
00663    The subjectDirectoryAttributes extension is an ATTRIBUTES_OBJ.
00664  */
00665 
00682 typedef ATTRIBUTES_OBJ  SUBJECT_DIR_ATTRIB;
00683 
00684 
00685 /* Supported standard extension value data types */
00686 
00687 /* Certificate Extension value data type */
00688 
00689 /* Alternate name for the certficate and crl extensions */
00690 #define CN_OTHER_NAME        0
00691 #define CN_RFC822_NAME       1
00692 #define CN_DNS_NAME          2
00693 #define CN_X400_ADDRESS      3
00694 #define CN_DIRECTORY_NAME    4
00695 #define CN_EDI_PARTY_NAME    5
00696 #define CN_RESOURCE_LOCATOR  6
00697 #define CN_IP_ADDRESS        7
00698 #define CN_REGISTERED_ID     8
00699 
00700 /* alternateName data structures.  Used as extension value for
00701    issuerAlternateName and subjectAlternateName extensions. */
00702 
00720 typedef struct OTHER_NAME {
00721   ITEM typeId;      /* OID for value type */
00722   ITEM value;       /* value */
00723 } OTHER_NAME;
00724 
00745 typedef struct EDI_PARTY_NAME {
00746   TYPED_STRING  nameAssigner;  /* PKIX / X.520 Directory String */
00747   TYPED_STRING  partyName;     /* PKIX / X.520 Directory String */
00748 } EDI_PARTY_NAME;
00749 
00750 /* X.400 OR_ADDRESS data structures for use in ALTERNATE_NAME */
00751 
00752 /* Upper bound buffer size limitation */
00753 #define UB_CommonNameLength             64
00754 #define UB_CountryNameNumericLength      3
00755 #define UB_CountryNameAlphaLength        2
00756 #define UB_DomainNameLength             16
00757 #define UB_x121AddressLength            16
00758 #define UB_TerminalIdLength             24
00759 #define UB_OrganizationNameLength       64
00760 #define UB_NumericUserIdLength          32
00761 #define UB_SurNameLength                40
00762 #define UB_GivenNameLength              16
00763 #define UB_InitialsLength                5
00764 #define UB_GenerationQualifierLength     3
00765 #define UB_OrganizationalUnits           4
00766 #define UB_OrganizationalUnitNameLength 32
00767 #define UB_DefinedAttributes             4
00768 #define UB_DefinedAttributeTypeLength    8
00769 #define UB_DefinedAttributeValueLength 128
00770 #define UB_ExtensionAttributes         256
00771 #define UB_pdsNameLength                16
00772 #define UB_postalCodeLength             16
00773 #define UB_pdsParameterLength           30
00774 #define UB_pdsPhysicalAddressLines       6
00775 #define UB_unformattedAddressLength    180
00776 #define UB_e1634NumberLength            15
00777 #define UB_e1634SubAddressLength        40
00778 
00829 typedef struct PERSONAL_NAME {
00830   ITEM surname;             /* Type is Printable String. Max length is UB_SurNameLength */
00831   ITEM givenName;           /* Type is Printable String. Max length is UB_GivenNameLength */
00832   ITEM initials;            /* Type is Printable String. Max length is UB_InitialsLength */
00833   ITEM generationQualifier; /* Type is Printable String. Max length is UB_GenerationQualifierLength */
00834 } PERSONAL_NAME;
00835 
00873 typedef struct ORG_UNIT_NAMES {
00874   unsigned int  orgUnitNamesCount; /* number of orgUnitName items */
00875   ITEM         *orgUnitName;       /* points to printable string */
00876 } ORG_UNIT_NAMES;
00877 
00878 #define SA_COUNTRY_NAME_VALID       0x00000001
00879 #define SA_ADMIN_DOMAIN_NAME_VALID  0x00000002
00880 #define SA_NETWORK_ADDRESS_VALID    0x00000004
00881 #define SA_TERMINAL_ID_VALID        0x00000008
00882 #define SA_PRIVATE_DOMAIN_VALID     0x00000010
00883 #define SA_ORGANIZATION_NAME_VALID  0x00000020
00884 #define SA_NUMERIC_USER_ID_VALID    0x00000040
00885 #define SA_PERSON_NAME_VALID        0x00000080
00886 #define SA_ORG_UNIT_NAMES_VALID     0x00000100
00887 
01009 typedef struct STANDARD_ATTRIBUTES {
01010   UINT4         validFields;
01011   TYPED_STRING  countryName;  /* valid only if SA_COUNTRY_NAME_VALID is set in validFields */
01012                               /* points to numeric string or printable string */
01013                               /* Max length of the Data member is UB_CountryNameNumericLength
01014                                  for numeric string and UB_CountryNameAlphaLength for printable string */
01015   TYPED_STRING  administrationDomainName; /* valid only if SA_ADMIN_DOMAIN_NAME_VALID is set in validFields */
01016                               /* points to numeric string or printable string */
01017                               /* Max length of the Data member is UB_DomainNameLength */
01018   ITEM          networkAddress; /* valid only if SA_NETWORK_ADDRESS_VALID is set in validFields */
01019                               /* points to numeric string */
01020                               /* Max length of the Data member is UB_x121AddressLength */
01021   ITEM          terminalId;   /* valid only if SA_TERMINAL_ID_VALID is set in validFields */
01022                               /* points to printable string */
01023                               /* Max length of the Data member is UB_TerminalIdLength */
01024   TYPED_STRING  privateDomainName; /* valid only if SA_PRIVATE_DOMAIN_VALID is set in validFields */
01025                               /* points to numeric string or printable string */
01026                               /* Max length of the Data member is UB_DomainNameLength */
01027   ITEM          organizationName; /* valid only if SA_ORGANIZATION_NAME_VALID is set in validFields */
01028                               /* points to printable string */
01029                               /* Max length of the Data member is UB_OrganizationNameLength */
01030   ITEM          numericUserId;/* valid only if SA_NUMERIC_USER_ID_VALID is set in validFields */
01031                               /* points to numeric string */
01032                               /* Max length of the Data member is UB_NumericUserIdLength */
01033   PERSONAL_NAME personalName; /* valid only if SA_PERSON_NAME_VALID is set in validFields */
01034                               /* points to printable string */
01035   ORG_UNIT_NAMES orgUnitNames;/* valid only if SA_ORG_UNIT_NAMES_VALID is set in validFields */
01036                               /* points to printable string */
01037 } STANDARD_ATTRIBUTES;
01038 
01080 typedef struct DEFINED_ATTRIBUTE {
01081   ITEM type;     /* points to printable string */
01082   ITEM value;    /* points to printable string */
01083 } DEFINED_ATTRIBUTE;
01084 
01110 typedef struct DEFINED_ATTRIBUTES {
01111   unsigned int       definedAttributesCount;
01112   DEFINED_ATTRIBUTE *definedAttribute;
01113 } DEFINED_ATTRIBUTES;
01114 
01115 /* Extension value structures for ENTENSION_ATTRIBUTE value */
01116 
01133 #define TELETEX_PERSONAL_NAME  PERSONAL_NAME
01134 
01155 #define TELETEX_DOMAIN_DEFINED_ATTRS  DEFINED_ATTRIBUTES
01156 
01181 typedef struct PDS_PARAMETER {
01182   ITEM printableString;  /* points to printable string */
01183   ITEM teletexString;    /* points to teletex string */
01184 } PDS_PARAMETER;
01185 
01218 typedef struct UNFORMATTED_POSTAL_ADDR {
01219   unsigned int  printableAddrCount; /* number of printableAddr items */
01220   ITEM         *printableAddr;      /* points to printable string */
01221   ITEM          teletexString;      /* points to teletex string */
01222 } UNFORMATTED_POSTAL_ADDR;
01223 
01224 
01225 #define ENA_PRESENTATION 1
01226 #define ENA_E163_4       2
01227 
01252 typedef struct E163_4_ADDR {
01253   ITEM  number;     /* points to numeric string */
01254   ITEM  subAddress; /* points to numeric string */
01255 } E163_4_ADDR;
01256 
01289 typedef struct PRESENTATION_ADDR {
01290   ITEM          pSelector;     /* points to octet string */
01291   ITEM          sSelector;     /* points to octet string */
01292   ITEM          tSelector;     /* points to octet string */
01293   unsigned int  nAddressCount; /* Number of nAddress */
01294   ITEM        * nAddress;      /* points to octet string */
01295 } PRESENTATION_ADDR;
01296 
01342 typedef struct EXTENDED_NETWORK_ADDR {
01343   unsigned int type;
01344   union {
01345     E163_4_ADDR       e1634Addr;
01346     PRESENTATION_ADDR presentationAddr;
01347   } addr;
01348 } EXTENDED_NETWORK_ADDR;
01349 
01350 /* defined integer values for EA_TERMINAL_TYPE */
01351 #define EA_TT_TELEX         3
01352 #define EA_TT_TELETEX       4
01353 #define EA_TT_G3_FACSIMILE  5
01354 #define EA_TT_G4_FACSIMILE  6
01355 #define EA_TT_IA5_TERMINAL  7
01356 #define EA_TT_VIDEOTEX      8
01357 
01358 /* ENTENSION_ATTRIBUTE type values */
01359 #define EA_COMMON_NAME                        1   /* ITEM - Printable string */
01360 #define EA_TELETEX_COMMON_NAME                2   /* ITEM - Teletex/T61 string */
01361 #define EA_TELETEX_ORG_NAME                   3   /* ITEM - Teletex/T61 string */
01362 #define EA_TELETEX_PERSONAL_NAME              4   /* TELETEX_PERSONAL_NAME */
01363 #define EA_TELETEX_ORG_UNIT_NAME              5   /* ORG_UNIT_NAMES */
01364 #define EA_TELETEX_DOMAIN_DEFINED_ATTRS       6   /* TELETEX_DOMAIN_DEFINED_ATTRS */
01365 #define EA_PDS_NAME                           7   /* ITEM - Printable string */
01366 #define EA_PHYSICAL_DELIVERY_COUNTRY_NAME     8   /* TYPED_STRING - either printable
01367                                                      string or numeric string */
01368 #define EA_POSTAL_CODE                        9   /* TYPED_STRING - either printable
01369                                                      string or numeric string */
01370 #define EA_PHYSICAL_DELIVERY_OFFICE_NAME      10  /* PDS_PARAMETER */
01371 #define EA_PHYSICAL_DELIVERY_OFFICE_NUMBER    11  /* PDS_PARAMETER */
01372 #define EA_EXTENSION_OR_ADDR_COMPONENTS       12  /* PDS_PARAMETER */
01373 #define EA_PHYSICAL_DELIVERY_PERSONAL_NAME    13  /* PDS_PARAMETER */
01374 #define EA_PHYSICAL_DELIVERY_ORG_NAME         14  /* PDS_PARAMETER */
01375 #define EA_PHYSICAL_DELIVERY_ADDR_COMPONENTS  15  /* PDS_PARAMETER */
01376 #define EA_UNFORMATTED_POSTAL_ADDR            16  /* UNFORMATTED_POSTAL_ADDR */
01377 #define EA_STREET_ADDR                        17  /* PDS_PARAMETER */
01378 #define EA_PO_BOX                             18  /* PDS_PARAMETER */
01379 #define EA_POSTE_RESTANTE_ADDR                19  /* PDS_PARAMETER */
01380 #define EA_UNIQUE_POSTAL_NAME                 20  /* PDS_PARAMETER */
01381 #define EA_LOCAL_POSTAL_ATTRS                 21  /* PDS_PARAMETER */
01382 #define EA_EXTENDED_NETWORK_ADDR              22  /* EXTENDED_NETWORK_ADDR */
01383 #define EA_TERMINAL_TYPE                      23  /* Integer */
01384 
01482 typedef struct EXTENSION_ATTRIBUTE {
01483   unsigned int type;
01484   POINTER      value;    /* Pointer to value defined by "type" */
01485 } EXTENSION_ATTRIBUTE;
01486 
01505 typedef struct EXTENSION_ATTRIBUTES {
01506   unsigned int         extensionAttributesCount;
01507   EXTENSION_ATTRIBUTE *extensionAttribute;
01508 } EXTENSION_ATTRIBUTES;
01509 
01535 typedef struct OR_ADDRESS {
01536   STANDARD_ATTRIBUTES  standardAttributes;
01537   DEFINED_ATTRIBUTES   definedAttributes;
01538   EXTENSION_ATTRIBUTES extensionAttributes;
01539 } OR_ADDRESS;
01540 
01645 typedef struct ALTERNATE_NAME {
01646   unsigned int altNameType;
01647   union {
01648     OTHER_NAME     otherName;       /* OTHER_NAME structure */
01649     ITEM           rfc822Name;      /* IA5String type */
01650     ITEM           dNSName;         /* IA5String type */
01651     OR_ADDRESS     x400Address;     /* OR_ADDRESS structure */
01652     NAME_OBJ       directoryName;   /* Distinguished NameObject type */
01653     EDI_PARTY_NAME ediPartyName;    /* EDI_PARTY_MAME structure */
01654     ITEM           resourceLocator; /* IA5String type */
01655     ITEM           ipAddress;       /* Octet string type */
01656     ITEM           registeredID;    /* Object identifier type */
01657   } altName;
01658 } ALTERNATE_NAME;
01659 
01673 typedef ALTERNATE_NAME GENERAL_NAME;
01674 
01692 typedef ALTERNATE_NAME ISSUER_ALTNAME;
01693 
01694 /* Subject Alt Name extension value type
01695 */
01696 
01719 typedef ALTERNATE_NAME SUBJECT_ALTNAME;
01720 
01781 typedef struct AUTHORITY_KEY_ID {
01782   ITEM            keyIdentifier;    /* Optional unique key identifier  OR */
01783   ITEM            serialNumber;     /* issuer's certificate serial number */
01784   unsigned int    issuerNameCount;  /* issuer name count */
01785   ALTERNATE_NAME *issuerNames;      /* list of issuerNames */
01786 } AUTHORITY_KEY_ID;
01787 
01788 /* basicConstraint extension flags */
01789 #define SUBJECT_TYPE_END_ENTITY  0   /* subject is an end user */
01790 #define SUBJECT_TYPE_CA          1   /* subject may act as a CA */
01791 #define UNLIMITED_PATH_LEN      -1   /* certificate path length is unlimited */
01792 #define NOT_IN_USE              -2   /* field is not used and should be ignored */
01793 
01794 
01861 typedef struct BASIC_CONSTRAINTS {
01862   unsigned int subjectType;       /* either SUBJECT_TYPE_CA or SUBJECT_TYPE_END_ENTITY */
01863   int          pathLenConstraint; /* this field is ignored if value of subjectType
01864                                      is not SUBJECT_TYPE_CA.  If the value is
01865                                      UNLIMITED_PATH_LEN, then there is no limit to
01866                                      the length of the certificate path. Otherwise,
01867                                      it specifies the length of the certificate path */
01868 } BASIC_CONSTRAINTS;
01869 
01870 
01900 typedef struct PRIVATE_KEY_USAGE_PERIOD {
01901   GENERALIZED_TIME start;       /* key validity starts */
01902   GENERALIZED_TIME end;         /* key validity end */
01903 } PRIVATE_KEY_USAGE_PERIOD;
01904 
01905 
01906 /* Well known policy identifier values
01907  */
01908 extern unsigned char CERT_POLICY_ANYPOLICY[];
01909 
01910 #define CERT_POLICY_ANYPOLICY_LEN       4
01911 
01912 
01936 typedef  struct QualifierInfo{
01937   ITEM qualifierID;             /* policy element id */
01938   ITEM qualifier;               /* policy qualifier, if omitted set the */
01939                                 /* data field to NULL_PTR, and length to 0 */
01940 }QualifierInfo;
01941 
01976 typedef struct POLICY_INFO {
01977   ITEM policyID;                     /* certificate policy identifier */
01978   unsigned int   qualifierInfoCount; /* qualifier count. To omit, set to 0 */
01979   QualifierInfo *qualifierInfo;      /* list of qualifierInfo with 'count' elements
01980                                         To omit, set to (QualifierInfo *)0 */
01981 } POLICY_INFO;
01982 
01983 
01984 /* policyConstraints extension.  This extension uses OID {id-ce 36}
01985    and replaces the deprecated Policy Constraints extension which used
01986    the OID {id-ce 34}.*/
02012 typedef struct POLICY_CONSTRAINTS_36 {
02013   int requireExplicitPolicy;    /* number of certs to skip before required
02014                                    constraints apply.  To omit, set to NOT_IN_USE */
02015   int inhibitPolicyMapping;     /* number of certs to skip before policy mapping
02016                                    is not permitted; To omit, set to NOT_IN_USE */
02017 } POLICY_CONSTRAINTS_36;
02018 
02019 /* extended Key purpose OID*/
02020 extern unsigned char KP_SERVERAUTH[];
02021 extern unsigned char KP_CLIENTAUTH[];
02022 extern unsigned char KP_CODESIGNING[];
02023 extern unsigned char KP_EMAILPROTECTION[];
02024 extern unsigned char KP_IPSECENDSYSTEM[];
02025 extern unsigned char KP_IPSECTUNNEL[];
02026 extern unsigned char KP_IPSECUSER[];
02027 extern unsigned char KP_TIMESTAMPING[];
02028 extern unsigned char KP_OCSPSIGNING[];
02029 
02030 /* extended Key purpose OID lengths */
02031 #define KP_SERVERAUTH_LEN      8
02032 #define KP_CLIENTAUTH_LEN      8
02033 #define KP_CODESIGNING_LEN     8
02034 #define KP_EMAILPROTECTION_LEN 8
02035 #define KP_IPSECENDSYSTEM_LEN  8
02036 #define KP_IPSECTUNNEL_LEN     8
02037 #define KP_IPSECUSER_LEN       8
02038 #define KP_TIMESTAMPING_LEN    8
02039 #define KP_OCSPSIGNING_LEN     8
02040 
02089 typedef struct EXTENDED_KEY_USAGE {
02090   ITEM keyUsagePurpose;             /* The OID for extended Key usage purposes */
02091 } EXTENDED_KEY_USAGE;
02092 
02135 typedef struct GENERAL_SUBTREE {
02136   ALTERNATE_NAME base;
02137   int            minimum;
02138   int            maximum;
02139 } GENERAL_SUBTREE;
02140 
02187 typedef struct NAME_CONSTRAINTS {
02188   unsigned int     permittedSubtreeCount;
02189   GENERAL_SUBTREE *permittedSubtrees;
02190   unsigned int     excludedSubtreeCount;
02191   GENERAL_SUBTREE *excludedSubtrees;
02192 } NAME_CONSTRAINTS;
02193 
02219 typedef struct POLICY_MAPPING {
02220   ITEM issuerDomainPolicy;
02221   ITEM subjectDomainPolicy;
02222 } POLICY_MAPPING;
02223 
02224 /* CRL Distribution Points - Certificate Extension
02225    The CRL distribution points extension identifies how CRL
02226    information is obtained.  This certificate extension
02227    can have multiple values at any instance.
02228 */
02229 #define DPN_FULL_NAME     0
02230 #define DPN_RELATIVE_NAME 1
02231 
02247 typedef struct GENERAL_NAMES {
02248   unsigned int     nameCount;
02249   GENERAL_NAME     *names;
02250 } GENERAL_NAMES;
02251 
02308 typedef struct DIST_POINT_NAME {
02309   unsigned int nameType;
02310   union {
02311     GENERAL_NAMES   fullNames;
02312     NAME_OBJ        nameRelativeToCRLIssuer;
02313   } name;
02314 } DIST_POINT_NAME;
02315 
02389 typedef struct DISTRIBUTION_POINT {
02390   DIST_POINT_NAME  *distPointName;
02391   UINT4            reasons;
02392   GENERAL_NAMES    *cRLIssuers;
02393 } DISTRIBUTION_POINT;
02394 
02395 /* DistributionPoint and IssuingDistributionPoint reasons values */
02396 #define DPR_NO_REASONS             0x00000000
02397 #define DPR_UNUSED                 0x00000040
02398 #define DPR_KEY_COMPROMISE         0x00000020
02399 #define DPR_CA_COMPROMISE          0x00000010
02400 #define DPR_AFFILIATION_CHANGED    0x00000008
02401 #define DPR_SUPERSEDED             0x00000004
02402 #define DPR_CESSATION_OF_OPERATION 0x00000002
02403 #define DPR_CERTIFICATE_HOLD       0x00000001
02404 
02405 /* Issuing Distribute Point - CRL extension */
02406 #define IDP_VALUE_FALSE           0
02407 #define IDP_VALUE_TRUE            1
02408 
02529 typedef struct ISSUING_DISTRIBUTION_POINT {
02530   DIST_POINT_NAME *distributionPoint;
02531   int             userCerts;
02532   int             CACerts;
02533   UINT4           reasons;
02534   int             indirectCRL;
02535 } ISSUING_DISTRIBUTION_POINT;
02536 
02561 typedef GENERAL_NAME CERT_ISSUER ;
02562 
02563 /* AIA access method OIDs and lengths */
02564 extern unsigned char AIA_CAISSUERS[];
02565 extern unsigned char AIA_OCSP[];
02566 #define AIA_CAISSUERS_LEN 8
02567 #define AIA_OCSP_LEN      8
02568 
02607 typedef struct AIA_DESCRIPTION {
02608   ITEM         accessMethod;
02609   GENERAL_NAME accessLocation;
02610 } AIA_DESCRIPTION;
02611 
02624 typedef UINT2 CRL_NUMBER;
02625 
02647 typedef UINT2 DELTA_CRL_INDICATOR;
02648 
02704 typedef unsigned int REASON_CODE;
02705 
02706 /* CRL Reason Extensions values */
02707 #define CR_UNSPECIFIED            0
02708 #define CR_KEY_COMPROMISE         1
02709 #define CR_CA_COMPROMISE          2
02710 #define CR_AFFILIATION_CHANGED    3
02711 #define CR_SUPERSEDED             4
02712 #define CR_CESSATION_OF_OPERATION 5
02713 #define CR_CERTIFICATE_HOLD       6
02714 #define CR_REMOVE_FROM_CRL        8
02715 #define CR_PRIVILEGE_WITHDRAWN    9
02716 #define CR_AA_COMPROMISE          10
02717 
02732 typedef struct OCSP_ACCEPTABLE_RESPONSES {
02733   unsigned int numTypes;
02734   ITEM         *type;        /* OID of the acceptable response W/O the leading type (0x06) and length octet(s) */
02735 } OCSP_ACCEPTABLE_RESPONSES;
02736 
02737 /* Supported OCSP response types are NOT defined here */
02738 
02745 typedef enum {
02746   OCSP_CRLREF_TYPE_UNSPECIFIED=0, 
02747   OCSP_CRLREF_TYPE_URL        =1, 
02748   OCSP_CRLREF_TYPE_NUMBER     =2, 
02749   OCSP_CRLREF_TYPE_TIME       =3  
02750 } OCSP_CRLREF_TYPE;
02751 
02810 typedef struct {
02811   OCSP_CRLREF_TYPE   type; /* specifies use of "url", "number", or "time" */
02812   union {
02813     ITEM             url;
02814     ITEM             number;
02815     GENERALIZED_TIME time;
02816   } info;
02817 } OCSP_CRL_REFERENCE;
02818 
02839 typedef GENERALIZED_TIME ARCHIVE_CUTOFF;
02840 
02864 typedef ITEM  INSTRUCTION_CODE;
02865 
02884 typedef GENERALIZED_TIME  INVALID_DATE;
02885 
02932 int C_GetExtensionTypeInfo (
02933   CERTC_CTX            ctx,     /* Cert-C context */
02934   unsigned char       *type,    /* extension OID */
02935   unsigned int         typeLen, /* extension OID length */
02936   EXTENSION_TYPE_INFO *info);   /* extension definition */
02937 
03045 int C_RegisterExtensionType (
03046   CERTC_CTX            ctx,     /* Cert-C context */
03047   EXTENSION_TYPE_INFO *info);   /* extension definition */
03048 
03092 int C_UnregisterExtensionType (
03093   CERTC_CTX      ctx,           /* Cert-C context */
03094   unsigned char *type,          /* extension OID */
03095   unsigned int   typeLen);      /* extension OID length */
03096 
03133 int C_CreateExtensionsObject (
03134   EXTENSIONS_OBJ *extensionsObject,     /* extensions object */
03135   unsigned int    extensionsObjectType, /* extensions object type */
03136   CERTC_CTX       ctx);                 /* Cert-C context */
03137 
03156 void C_DestroyExtensionsObject (
03157   EXTENSIONS_OBJ *extensionsObject); /* extensions object */
03158 
03180 int C_FindExtensionByType (
03181   EXTENSIONS_OBJ extensionsObject,  /* extensions object */
03182   unsigned char *type,              /* extension OID */
03183   unsigned int   typeLen,           /* extension OID length */
03184   unsigned int  *index);            /* index of extension entry */
03185 
03213 int C_GetExtensionTypeByIndex (
03214   EXTENSIONS_OBJ   extensionsObject, /* extensions object */
03215   unsigned char  **type,             /* extension OID */
03216   unsigned int    *typeLen,          /* extension OID length */
03217   unsigned int     index);           /* index of extension entry */
03218 
03235 int C_GetExtensionCount (
03236   EXTENSIONS_OBJ extensionsObject,  /* extensions object */
03237   unsigned int  *count);            /* extension entry count */
03238 
03255 void C_ResetExtensionsObject (
03256   EXTENSIONS_OBJ extensionsObject);  /* extensions object */
03257 
03285 int C_GetExtensionsObjectDER (
03286   EXTENSIONS_OBJ   extensionsObject,  /* extensions object */
03287   unsigned char  **der,               /* DER encoded extension */
03288   unsigned int    *derLen);           /* length of DER encoding */
03289 
03353 int C_SetExtensionsObjectBER (
03354   EXTENSIONS_OBJ  extensionsObject,  /* extensions object */
03355   unsigned char  *ber,               /* BER encoded extension */
03356   unsigned int    berLen);           /* length of BER encoding */
03357 
03379 int C_GetExtensionsInAttributesObj (
03380   EXTENSIONS_OBJ extensionsObject,   /* extensions object */
03381   ATTRIBUTES_OBJ attributesObject);  /* attributes object */
03382 
03407 int C_GetAttributeInExtensionsObj (
03408   EXTENSIONS_OBJ extensionsObject,   /* extensions object */
03409   ATTRIBUTES_OBJ attributesObject);  /* attributes object */
03410 
03411 /* Extension entry routines */
03412 
03506 int C_CreateExtension (
03507   EXTENSIONS_OBJ     extensionsObject, /* extensions object */
03508   unsigned char     *type,             /* extension OID */
03509   unsigned int       typeLen,          /* extension OID Length */
03510   unsigned int      *index,            /* new extension index */
03511   int                criticality,      /* new extension criticality */
03512   EXTENSION_HANDLER *newHandler);      /* extension handler */
03513 
03590 int C_SetExtensionBER (
03591   EXTENSIONS_OBJ  extensionsObject,  /* extensions object */
03592   unsigned int   *index,             /* index of extension entry */
03593   unsigned char  *ber,               /* BER encoded extension */
03594   unsigned int    berLen);           /* length of BER encoding */
03595 
03636 int C_GetExtensionValue (
03637   EXTENSIONS_OBJ  extensionsObject,  /* extensions object */
03638   unsigned int    extenIndex,        /* index of extension entry */
03639   unsigned int    valueIndex,        /* index of extension's value */
03640   POINTER        *value);            /* extension's value */
03641 
03642 /* Extension value routines */
03643 
03665 int C_DestroyExtension (
03666   EXTENSIONS_OBJ extensionsObject,  /* extensions object */
03667   unsigned int   index);            /* index of extension entry */
03668 
03714 int C_GetExtensionInfo (
03715   EXTENSIONS_OBJ  extensionsObject,  /* extensions object */
03716   unsigned int    index,             /* index of extension */
03717   EXTENSION_INFO *extensionInfo);    /* extension information */
03718 
03768 int C_AddExtensionValue (
03769   EXTENSIONS_OBJ extensionsObject,  /* extensions object */
03770   unsigned int   index,             /* extension's index */
03771   POINTER        value,             /* extension's value */
03772   unsigned int  *valueIndex);       /* new extension value's index */
03773 
03799 int C_DeleteExtensionValue (
03800   EXTENSIONS_OBJ extensionsObject,  /* extensions object */
03801   unsigned int   index,             /* index of extension entry */
03802   unsigned int   valueIndex);       /* indext of extension's value */
03803 
03845 int C_GetExtensionDER (
03846   EXTENSIONS_OBJ   extensionsObject, /* extensions object */
03847   unsigned int     index,            /* index of extension entry */
03848   unsigned char  **valueDER,         /* DER encoded extension entry */
03849   unsigned int    *valueDERLen);     /* length of DER encoding */
03850 
03885 int C_GetEncodedExtensionValue (
03886   EXTENSIONS_OBJ   extensionsObject, /* extensions object */
03887   unsigned int     index,            /* index of extension entry */
03888   unsigned char  **encodedValue,     /* encoded enxtension value */
03889   unsigned int    *encodedValueLen); /* encoded enxtension value length */
03890 
03924 int C_SetEncodedExtensionValue (
03925   EXTENSIONS_OBJ  extensionsObject, /* extensions object */
03926   unsigned int    index,            /* index of extension entry */
03927   unsigned char  *encodedValue,     /* encoded enxtension value */
03928   unsigned int    encodedValueLen); /* encoded enxtension value length */
03929 
03983 int C_CompareExtension (
03984   EXTENSIONS_OBJ extensionsObject1,  /* 1st extensions object */
03985   unsigned int   extensionIndex1,    /* index of 1st extension entry */
03986   EXTENSIONS_OBJ extensionsObject2,  /* 2nd extensions object */
03987   unsigned int   extensionIndex2);   /* index of 2nd extension entry */
03988 
04007 int C_CompareExtensions (
04008   EXTENSIONS_OBJ extensionsObject1,  /* 1st extensions object */
04009   EXTENSIONS_OBJ extensionsObject2); /* 2nd extensions object */
04010 
04011 #ifdef __cplusplus
04012 }
04013 #endif
04014 
04015 #endif /* HEADER_BSAFE_CERTC_CERTEXT */



RSA BSAFE® Cert-C 2.7 API Reference