RSA BSAFE Micro Edition Suite

Streamlined security for mobile and embedded devices

Search  Print

r_cert.h

Go to the documentation of this file.
00001 /* $Id: r_cert.h,v 1.247.4.5 2005/10/27 04:49:42 sparki Exp $ */
00002 /*
00003  * Copyright (C) 1998-2003 RSA Security Inc. All rights reserved.
00004  *
00005  * This work contains proprietary information of RSA Security.
00006  * Distribution is limited to authorized licensees of RSA
00007  * Security. Any unauthorized reproduction, distribution or
00008  * modification of this work is strictly prohibited.
00009  */
00010 
00016 #ifndef HEADER_COMMON_R_CERT_H
00017 #define HEADER_COMMON_R_CERT_H
00018 
00019 #ifdef  __cplusplus
00020 extern "C" {
00021 #endif
00022 
00023 /* If Rm_ALL_DIRECT is defined then make sure that this module is configured
00024  * to operate in DIRECT mode.
00025  */
00026 #if (defined(Rm_ALL_DIRECT) && !defined(Rm_CERT_DIRECT))
00027 #define Rm_CERT_DIRECT
00028 #endif /* defined(Rm_ALL_DIRECT) && !defined(Rm_CERT_DIRECT) */
00029 
00030 /* Can't have both TABLE and DIRECT active at the same time. DIRECT is
00031  * considered to take precedence.
00032  */
00033 #if (defined(Rm_CERT_TABLE) && defined(Rm_CERT_DIRECT))
00034 #undef Rm_CERT_TABLE
00035 #endif /* defined(Rm_CERT_TABLE) && defined(Rm_CERT_DIRECT) */
00036 
00037 /* If FULL is defined then the configurable public API needs access to a
00038  * 'clean' set of function prototypes. This in an internal switch! It needs
00039  * to be here because this is the last point in time, after this point no
00040  * more configuration can be applied.
00041  */
00042 #ifdef Rm_CERT_FULL
00043 
00044 #ifdef Rm_CERT_TABLE
00045 #undef Rm_CERT_TABLE
00046 #endif /* Rm_CERT_TABLE */
00047 
00048 #ifdef Rm_CERT_DIRECT
00049 #undef Rm_CERT_DIRECT
00050 #endif /* Rm_CERT_DIRECT */
00051 
00052 #endif /* Rm_CERT_FULL */
00053 
00054 /* Include all header files needed to make this header file compile, do not
00055  * worry about TABLE or DIRECT as these headers are only here to make things
00056  * compile. If TABLE or DIRECT were defined for other modules then this would
00057  * make it hard for an application to configure according to it's wishes. The
00058  * internal header file is responsible for making sure the implementation gets
00059  * correctly configured external headers.
00060  */
00061 #include "r_lib.h"
00062 #ifndef NO_BIO
00063 #include "bio.h"
00064 #endif /* NO_BIO */
00065 #include "time_mod.h"
00066 #include "r_nid.h"
00067 #include "cryp_mod.h"
00068 #include "r_oid_str.h"
00069 #include "r_format.h"
00070 #ifndef NO_EXT
00071 #include "r_ext.h"
00072 #endif
00073 
00104 /*
00105  * Exported macro constants
00106  */
00107 
00116 /* Defines for implementation identification */
00121 #define R_RES_IMPL_ID_OP           R_RES_IMPL_ID_DEF
00122 
00134 /* Defines for Certificate Types known to R_CERT */
00139 #define R_CERT_TYPE_X509              1
00140 
00145 #define R_CERT_TYPE_NULL              0
00146 
00151 #define R_CERT_TYPE_WTLS              2
00152 
00153 /*
00154  * Indicates a URL certificate type.
00155  * The string equivalent is <tt>"URL"/"url"</tt>.
00156  */
00157 #define R_CERT_TYPE_URL               3
00158 
00163 /* Note: R_PKEY_TYPE values are also part of this list */
00164 
00229 #define  R_CERT_CTX_INFO_R_LIB_CTX   0
00230 
00246 #define  R_CERT_CTX_INFO_CERT_TYPE   1
00247 
00269 #define R_CERT_CTX_INFO_R_CR_CTX     2
00270 
00291 #define R_CERT_CTX_INFO_R_PKEY_CTX   3
00292 
00545 #define R_CERT_INFO_BASE                   PK_OBJECT_ID_BASE
00546 
00565 #define R_CERT_INFO_VERSION                 PK_CERT_VER
00566 
00586 #define R_CERT_INFO_SERIAL_NUMBER           PK_CERT_SERIAL
00587 
00607 #define R_CERT_INFO_ISSUER                  PK_CERT_ISSUER
00608 
00628 #define R_CERT_INFO_NOT_BEFORE              PK_CERT_NOT_BEFORE
00629 
00649 #define R_CERT_INFO_NOT_AFTER               PK_CERT_NOT_AFTER
00650 
00670 #define R_CERT_INFO_SUBJECT                 PK_CERT_SUBJECT
00671 
00691 #define R_CERT_INFO_PUBLIC_KEY              PK_CERT_PUBKEY
00692 
00712 #define R_CERT_INFO_ISSUER_UNIQUE_ID        PK_CERT_ISSUER_ATTRS
00713 
00735 #define R_CERT_INFO_SUBJECT_UNIQUE_ID       PK_CERT_SUBJECT_ATTRS
00736 
00758 #define R_CERT_INFO_EXTENSIONS              PK_CERT_EXTENSIONS
00759 
00778 #define R_CERT_INFO_KEY_USAGE               R_EXT_ID_KEY_USAGE
00779 
00780 
00785 #define R_CERT_INFO_KEY_USAGE_INT           (R_CERT_INFO_BASE + 16)
00786 
00803 #define R_CERT_INFO_EXTENDED_KEY_USAGE      R_EXT_ID_EXT_KEY_USAGE
00804 
00822 #define R_CERT_INFO_AUTH_INFO_ACCESS        R_EXT_ID_AUTH_INFO_ACCESS
00823 
00840 #define R_CERT_INFO_BASIC_CONSTRAINTS       R_EXT_ID_BASIC_CONSTRAINTS
00841 
00858 #define R_CERT_INFO_AUTHORITY_KEY_ID        R_EXT_ID_AUTHORITY_KEY_ID
00859 
00876 #define R_CERT_INFO_SUBJECT_KEY_ID          R_EXT_ID_SUBJECT_KEY_ID
00877 
00894 #define R_CERT_INFO_SUBJECT_ALT_NAME            R_EXT_ID_SUBJECT_ALT_NAME
00895 
00911 #define R_CERT_INFO_SUBJECT_DNS_NAME            R_EXT_INFO_SAN_DNS_NAME
00912 
00928 #define R_CERT_INFO_SUBJECT_IP_ADDRESS          R_EXT_INFO_SAN_IP_ADDRESS
00929 
00945 #define R_CERT_INFO_SUBJECT_RFC822_NAME         R_EXT_INFO_SAN_RFC822_NAME
00946 
00963 #define R_CERT_INFO_ISSUER_ALT_NAME             R_EXT_ID_ISSUER_ALT_NAME
00964 
00980 #define R_CERT_INFO_ISSUER_DNS_NAME            R_EXT_INFO_IAN_DNS_NAME
00981 
00997 #define R_CERT_INFO_ISSUER_IP_ADDRESS          R_EXT_INFO_IAN_IP_ADDRESS
00998 
01014 #define R_CERT_INFO_ISSUER_RFC822_NAME         R_EXT_INFO_IAN_RFC822_NAME
01015 
01016 
01031 #define R_CERT_INFO_EXTENSION_COUNT         R_CERT_INFO_BASE
01032 
01049 #define R_CERT_INFO_EXTENSION               (R_CERT_INFO_BASE + 1)
01050 
01067 #define R_CERT_INFO_EXTENSION_BY_OID        (R_CERT_INFO_BASE + 2)
01068 
01090 #define R_CERT_INFO_TO_BE_SIGNED            PK_CERT_BODY
01091 
01113 #define R_CERT_INFO_BINARY                  PK_CERT_ALL
01114 
01136 #define R_CERT_INFO_SIGNATURE               PK_CERT_SIGNATURE
01137 
01142 #define R_CERT_INFO_INTERNAL_SIG_INFO       PK_CERT_SIG_INFO
01143 
01147 #define R_CERT_INFO_ALL                     (R_CERT_INFO_BASE + 3)
01148 
01163 #define R_CERT_INFO_TYPE                    (R_CERT_INFO_BASE + 4)
01164 
01179 #define R_CERT_INFO_R_CERT_CTX              (R_CERT_INFO_BASE + 5)
01180 
01214 #define R_CERT_INFO_VERSION_STRING          (R_CERT_INFO_BASE + 6)
01215 
01230 #define R_CERT_INFO_SIGNATURE_TYPE          (R_CERT_INFO_BASE + 7)
01231 
01246 #define R_CERT_INFO_SIGNATURE_DIGEST_TYPE   (R_CERT_INFO_BASE + 8)
01247 
01266 #define R_CERT_INFO_R_PKEY                  (R_CERT_INFO_BASE + 9)
01267 
01288 #define R_CERT_INFO_ISSUER_R_CERT_NAME      (R_CERT_INFO_BASE + 10)
01289 
01311 #define R_CERT_INFO_SUBJECT_R_CERT_NAME     (R_CERT_INFO_BASE + 11)
01312 
01316 #define R_CERT_INFO_PARAMETERS              (R_CERT_INFO_BASE + 12)
01317 
01321 #define R_CERT_INFO_END_PARAMETERS          0x0000
01322 
01326 #define R_CERT_INFO_METHOD                  (R_CERT_INFO_BASE + 13)
01327 
01328 /* TYPE in an R_TITEM rather than as a raw int pointer */
01329 #define R_CERT_INFO_CERT_TYPE               (R_CERT_INFO_BASE + 14)
01330 
01334 #define R_CERT_KEY_USAGE                    (R_CERT_INFO_BASE + 15)
01335 
01336 
01342 #define R_CERT_INFO_DELETE                  PK_SHARED_ID_DELETE_ITEM
01343 
01347 #define R_CERT_INFO_HW_LABEL                PK_SHARED_ID_LABEL
01348 
01353 #define R_CERT_INFO_HW_ID                   PK_SHARED_ID_HW_ID
01354 
01366 #define R_CERT_INFO_HW_MODIFIABLE           PK_SHARED_ID_MODIFIABLE
01367 
01379 #define R_CERT_INFO_HW_PRIVATE               PK_SHARED_ID_PRIVATE
01380 
01385 #define R_CERT_INFO_PURPOSE                  PK_SHARED_ID_PURPOSE
01386 
01390 #define R_CERT_INFO_R_HW_OBJ                 PK_SHARED_ID_R_HW_OBJ_CERT
01391 
01401 #define R_CERT_INFO_HW_CERT_CATEGORY         PK_SHARED_ID_CERT_CATEGORY
01402 
01407 #define R_CERT_INFO_HW_HASH_SUB_PUBKEY       PK_SHARED_ID_HASH_SUB_PUBKEY
01408 
01413 #define R_CERT_INFO_HW_HASH_ISS_PUBKEY       PK_SHARED_ID_HASH_ISS_PUBKEY
01414 
01423 #define R_CERT_INFO_HW_URL                   PK_SHARED_ID_URL
01424 
01436 #define R_CERT_INFO_HW_JAVA_MIDP_SEC_DOM     PK_SHARED_ID_JAVA_MIDP_SEC_DOM
01437 
01449 #define R_CERT_INFO_HW_TRUSTED               PK_SHARED_ID_TRUSTED
01450 
01454 #define R_CERT_INFO_LOCATION                 PK_SHARED_ID_LOCATION
01455 
01460 /* Indicates that the certificate is binary encoded. */
01461 #define R_CERT_FORMAT_BINARY            R_FORMAT_BINARY
01462 
01463 /* Indicates that the certificate is text format encoded. */
01464 #define R_CERT_FORMAT_TEXT              R_FORMAT_TEXT
01465 
01466 /* Indicates that the certificate is Privacy Enhanced Mail (PEM) encoded. */
01467 #define R_CERT_FORMAT_PEM               R_FORMAT_PEM
01468 
01469 /* Indicates that the certificate is in a C code function format. */
01470 #define R_CERT_FORMAT_CODE_BINARY       R_FORMAT_CODE_BINARY
01471 
01472 /* Indicates that the certificate is in a C code fields format. */
01473 #define R_CERT_FORMAT_CODE_FIELDS       R_FORMAT_CODE_FIELDS
01474 
01475 /* Indicates that the certificate is in a C code data format. */
01476 #define R_CERT_FORMAT_CODE_HEX          R_FORMAT_CODE_HEX
01477 
01478 /* Indicates that the certificate is in a plain hexadecimal Bytes format. */
01479 #define R_CERT_FORMAT_HEX               R_FORMAT_HEX
01480 
01481 /* Backwards compatibility macro for R_CERT_FORMAT_from_string */
01482 #define R_CERT_FORMAT_from_string(str, fmt)       \
01483     R_FORMAT_from_string((str), (fmt))
01484 
01485 /* Backwards compatibility macro for R_CERT_FORMAT_to_string */
01486 #define R_CERT_FORMAT_to_string(fmt, max, str)    \
01487     R_FORMAT_to_string((fmt), (max), (str))
01488 
01544 #define R_CERT_NAME_INFO_TYPE            1
01545 
01550 #define R_CERT_NAME_INFO_R_CERT_CTX      2
01551 
01566 #define R_CERT_NAME_INFO_ENTRY_COUNT    10
01567 
01611 #define R_CERT_NAME_INFO_ENTRY          11
01612 
01627 #define R_CERT_NAME_INFO_HASH           80
01628 
01629 #define R_CERT_NAME_INFO_STRING_LENGTH  81
01630 
01694 #define R_CERT_NAME_ENTRY_INFO_TYPE     1
01695 
01714 #define R_CERT_NAME_ENTRY_INFO_DATA     2
01715 
01716 #define R_CERT_NAME_ENTRY_INFO_DEPTH   10
01717 
01733 #define R_CERT_NAME_ENTRY_TYPE_COMMON_NAME          NID_commonName
01734 
01738 #define R_CERT_NAME_ENTRY_TYPE_COUNTRY              NID_countryName
01739 
01743 #define R_CERT_NAME_ENTRY_TYPE_LOCALITY             NID_localityName
01744 
01748 #define R_CERT_NAME_ENTRY_TYPE_STREET               NID_street
01749 
01753 #define R_CERT_NAME_ENTRY_TYPE_STATE_PROVINCE       NID_stateOrProvinceName
01754 
01758 #define R_CERT_NAME_ENTRY_TYPE_ORGANIZATION         NID_organizationName
01759 
01764 #define R_CERT_NAME_ENTRY_TYPE_ORGANIZATIONAL_UNIT  NID_organizationalUnitName
01765 
01769 #define R_CERT_NAME_ENTRY_TYPE_GIVEN_NAME           NID_givenName
01770 
01774 #define R_CERT_NAME_ENTRY_TYPE_SURNAME              NID_surname
01775 
01779 #define R_CERT_NAME_ENTRY_TYPE_INITIALS             NID_initials
01780 
01784 #define R_CERT_NAME_ENTRY_TYPE_UNIQUE_ID            NID_uniqueIdentifier
01785 
01789 #define R_CERT_NAME_ENTRY_TYPE_SERIAL_NUMBER        NID_serialNumber
01790 
01794 #define R_CERT_NAME_ENTRY_TYPE_TITLE                NID_title
01795 
01799 #define R_CERT_NAME_ENTRY_TYPE_DESCRIPTION          NID_description
01800 
01804 #define R_CERT_NAME_ENTRY_TYPE_EMAIL_ADDRESS        NID_pkcs9_emailAddress
01805 
01809 #define R_CERT_NAME_ENTRY_TYPE_DOMAIN_COMPONENT     NID_domainComponent
01810 
01814 #define R_CERT_NAME_ENTRY_TYPE_GENERATION_QUALIFIER NID_generationQualifier
01815 
01819 #define R_CERT_NAME_ENTRY_TYPE_DN_QUALIFIER         NID_dnQualifier
01820 
01824 #define R_CERT_NAME_ENTRY_TYPE_USER_ID              NID_userID
01825 
01830 /*
01831  * @defgroup CERT_SECTION Certificate Sections
01832  * This section outlines the sections of the method table that group
01833  * certificate handling functionality. R_CERT_METHOD_merge() can be
01834  * used to combine sections.
01835  * @ingroup CERT_IDENTIFIER
01836  * @{
01837  */
01838 
01839 /* Sections are parts of an R_CERT implementation which are optional to
01840  * provide - R_CERT_METHOD_merge can be used to combine sections of two
01841  * implementation
01842  */
01846 #define R_CERT_SECTION_CRYPTO      0x0001
01847 
01851 #define R_CERT_SECTION_STORE       0x0002
01852 
01856 #define R_CERT_SECTION_NAME        0x0004
01857 
01861 #define R_CERT_SECTION_BIO         0x0008
01862 
01863 /*
01864  * @}
01865  */
01866 
01875 /* Time related definitions */
01879 #define R_CERT_TIME_STRING_LENGTH      20
01880 
01881 /* Certificate Currency states */
01885 #define R_CERT_TIME_NOT_YET_CURRENT     1
01886 
01890 #define R_CERT_TIME_CURRENT             2
01891 
01895 #define R_CERT_TIME_EXPIRED             3
01896 
01909 /* Defines to check if a keyUsage extension is set */
01911 #define R_CERT_KEY_USAGE_DIGITAL_SIGNATURE   0x0080
01912 
01914 #define R_CERT_KEY_USAGE_NON_REPUDIATION     0x0040
01915 
01917 #define R_CERT_KEY_USAGE_KEY_ENCIPHERMENT    0x0020
01918 
01920 #define R_CERT_KEY_USAGE_DATA_ENCIPHERMENT   0x0010
01921 
01923 #define R_CERT_KEY_USAGE_KEY_AGREEMENT       0x0008
01924 
01926 #define R_CERT_KEY_USAGE_KEY_CERT_SIGN       0x0004
01927 
01929 #define R_CERT_KEY_USAGE_CRL_SIGN            0x0002
01930 
01932 #define R_CERT_KEY_USAGE_ENCIPHER_ONLY       0x0001
01933 
01935 #define R_CERT_KEY_USAGE_DECIPHER_ONLY       0x8000
01936 
01954 #define R_CERT_AIA_LOCATION_TYPE_DIR_NAME    0x00
01955 
01961 #define R_CERT_AIA_LOCATION_TYPE_RFC822NAME  0x01
01962 
01968 #define R_CERT_AIA_LOCATION_TYPE_URI         0x02
01969 
01989 #define R_CERT_CHECK_FLAG_VERSION            0x1000
01990 
01996 #define R_CERT_CHECK_FLAG_EXTENSIONS         0x2000
01997 
02001 #define R_CERT_CHECK_FLAG_ALL                0xF000
02002 
02007 /*
02008  * @defgroup CERT_NAME_STRING_FORMAT Certificate Name String Formats
02009  * This section details the different string formats that a certificate name
02010  * can be encoded in.
02011  * @{
02012  */
02013 
02014 /* The default string format for the certificate type. */
02015 #define R_CERT_NAME_STRING_FORMAT_DEFAULT       1
02016 
02017 /*
02018  * The MIDLET string format as defined in the Java Specification Request (JSR)
02019  * 118 for a Mobile Information Device (MID).
02020  */
02021 #define R_CERT_NAME_STRING_FORMAT_MIDLET        2
02022 
02023 /*
02024  * @}
02025  */
02026 
02027 typedef unsigned int R_CERT_CTRL;
02028 
02029 #define R_CERT_CTRL_INC_REFERENCE            1
02030 
02031 /*
02032  * Exported types
02033  */
02034 
02043 /*
02044  * there are opaque data types for those things for which can
02045  * switch the implementation routines - hence they don't really have
02046  * a known type as this is able to be changed at runtime
02047  *
02048  */
02049 #ifndef HEADER_COMMON_R_CERT_TYPEDEF_DEF
02050 #define HEADER_COMMON_R_CERT_TYPEDEF_DEF
02051 
02066 typedef struct r_cert_st                 R_CERT;
02067 #endif /* HEADER_COMMON_R_CERT_TYPEDEF_DEF */
02068 
02072 typedef struct r_cert_items_st           R_CERT_ITEMS;
02073 
02087 typedef struct r_cert_name_st            R_CERT_NAME;
02088 
02101 typedef struct r_cert_name_entry_st      R_CERT_NAME_ENTRY;
02102 
02103 /* there is a context which holds a method and other things that are needed
02104  * for the runtime glue between routines
02105  */
02106 #ifndef HEADER_COMMON_R_CERT_CTX_TYPEDEF_DEF
02107 #define HEADER_COMMON_R_CERT_CTX_TYPEDEF_DEF
02108 
02125 typedef struct r_cert_ctx_st R_CERT_CTX;
02126 #endif /* HEADER_COMMON_R_CERT_CTX_TYPEDEF_DEF */
02127 
02131 typedef int R_CERT_TYPE;
02132 
02136 typedef int R_CERT_CTX_INFO;
02137 
02141 typedef int R_CERT_INFO;
02142 
02146 typedef int R_CERT_NAME_INFO;
02147 
02151 typedef int R_CERT_NAME_TYPE;
02152 
02156 typedef int R_CERT_NAME_ENTRY_INFO;
02157 
02158 #ifndef HEADER_COMMON_R_CERT_NAME_ENTRY_TYPEDEF_DEF
02159 #define HEADER_COMMON_R_CERT_NAME_ENTRY_TYPEDEF_DEF
02160 
02163 typedef int R_CERT_NAME_ENTRY_TYPE;
02164 #endif /* HEADER_COMMON_R_CERT_NAME_ENTRY_TYPEDEF_DEF */
02165 
02169 typedef int R_CERT_TIME_VALIDITY;
02170 
02175 #ifndef HEADER_COMMON_R_PKEY_TYPEDEF_DEF
02176 #define HEADER_COMMON_R_PKEY_TYPEDEF_DEF
02177 
02180 typedef void R_PKEY;
02181 #endif /* HEADER_COMMON_R_PKEY_TYPEDEF_DEF */
02182 
02183 #ifndef HEADER_COMMON_R_PKEY_CTX_TYPEDEF_DEF
02184 #define HEADER_COMMON_R_PKEY_CTX_TYPEDEF_DEF
02185 
02188 typedef struct r_cert_ctx_st R_PKEY_CTX;
02189 #endif /* HEADER_COMMON_R_PKEY_CTX_TYPEDEF_DEF */
02190 
02191 /* there is a method table (which encapsulates the functions that implement
02192  * the handling of all certificate related functions for a particular type
02193  * of certificate)
02194  */
02195 #ifndef HEADER_COMMON_R_CERT_METHOD_TYPEDEF_DEF
02196 #define HEADER_COMMON_R_CERT_METHOD_TYPEDEF_DEF
02197 
02200 typedef struct r_cert_method_st R_CERT_METHOD;
02204 typedef struct r_cert_name_funcs_st R_NAME_METHOD;
02205 #endif /* HEADER_COMMON_R_CERT_METHOD_TYPEDEF_DEF */
02206 
02207 
02208 /*
02209  * Prints certificate details.
02210  *
02211  * @param   bio        [In]  The #BIO to which the output is printed.
02212  * @param   cert       [In]  The certificate to print.
02213  * @param   format     [In]  The format of the output data.
02214  * @param   format_arg [In]  The format argument.
02215  *
02216  * @see     R_CERT_get_print_func().
02217  */
02218 #ifndef NO_BIO
02219 typedef int  R_CDECL R_CERT_PRINT_FUNC_T(BIO *bio, R_CERT *cert,
02220     int format, char *format_arg);
02221 #else /* !NO_BIO */
02222 typedef int  R_CDECL R_CERT_PRINT_FUNC_T(void *bio, R_CERT *cert,
02223     int format, char *format_arg);
02224 #endif /* NO_BIO */
02225 
02226 /*
02227  * Exported functions
02228  */
02229 
02230 
02231 #if defined(Rm_CERT_TABLE) || defined (Rm_CERT_DIRECT)
02232 
02233 /* Include the extension header when building a small application */
02234 #include "rx_cert.h"
02235 
02236 #endif /* defined(Rm_CERT_TABLE) && defined(Rm_CERT_DIRECT) */
02237 
02259 #ifndef Rm_CERT_DIRECT
02260 
02261 int R_CDECL R_CERT_CTX_new(R_LIB_CTX *lib_ctx, R_RES_FLAG flag, R_CERT_TYPE certtype,
02262     R_CERT_CTX **cert_ctx);
02263 
02264 #endif /* !Rm_CERT_DIRECT */
02265 
02266 #if !defined(Rm_CERT_TABLE) && !defined(Rm_CERT_DIRECT)
02267 
02268 int R_CDECL R_CERT_CTX_free(R_CERT_CTX *cert_ctx);
02269 
02270 int R_CDECL R_CERT_CTX_get_info(R_CERT_CTX *cert_ctx, int info_id, void *value);
02271 int R_CDECL R_CERT_CTX_set_info(R_CERT_CTX *cert_ctx, int info_id, void *value);
02272 
02288 int R_CDECL R_CERT_new(R_CERT_CTX *cert_ctx, R_CERT_TYPE type, R_CERT **cert);
02289 int R_CDECL R_CERT_free(R_CERT *cert);
02290 
02291 int R_CDECL R_CERT_from_binary(R_CERT_CTX *cert_ctx, R_FLAG_SHARE flag,
02292     R_CERT_TYPE type, unsigned int max_buf_len, const unsigned char *buf,
02293     unsigned int *consumed_len, R_CERT **cert);
02294 
02295 int R_CDECL R_CERT_to_binary(R_CERT *cert, unsigned int max_buf_len, unsigned char *buf,
02296     unsigned int *outlen);
02297 
02298 #define R_CERT_reference_inc(cert)      R_CERT_inc_reference(cert)
02299 
02300 int R_CDECL R_CERT_inc_reference(R_CERT *cert);
02301 int R_CDECL R_CERT_dup(R_CERT *cert, R_FLAG_SHARE flag, R_CERT **dup);
02302 int R_CDECL R_CERT_time_to_R_TIME(R_CERT *cert, R_TITEM *time_data, R_TIME *r_time);
02303 
02304 /*
02305  * the get_*_info functions return references to the underlying binary
02306  * data for use by those routines that do not need to pull apart the
02307  * certificates in order to work with them and can simply extract the
02308  * mandatory pieces to work with
02309  */
02310 int R_CDECL R_CERT_get_info(R_CERT *cert, R_CERT_INFO info_id, void *value);
02311 int R_CDECL R_CERT_set_info(R_CERT *cert, R_CERT_INFO info_id, void *value);
02312 
02313 /* Public key functions */
02314 int R_CDECL R_CERT_public_key_to_R_PKEY(R_CERT *cert, R_FLAG_SHARE flag,
02315     R_PKEY **pkey);
02316 
02317 /* Crypto-related functions */
02318 int R_CDECL R_CERT_sign(R_CERT *cert, R_PKEY *pkey, int sig_type);
02319 int R_CDECL R_CERT_verify(R_CERT *cert, R_PKEY *pkey, int *verified);
02320 #endif /* !defined(Rm_CERT_TABLE) && !defined(Rm_CERT_DIRECT) */
02321 
02322 #ifndef Rm_CERT_DIRECT
02323 
02324 #ifndef NO_BIO
02325 int R_CDECL R_CERT_print(R_CERT *cert, R_FORMAT format, char *format_arg, BIO *bio);
02326 #endif
02327 
02328 #endif /* !Rm_CERT_DIRECT */
02329 
02330 int R_CDECL R_CERT_compare_cb(R_CERT *cert1, R_CERT *cert2);
02331 int R_CDECL R_CERT_is_equal(R_CERT *cert1, R_CERT *cert2);
02332 
02333 int R_CDECL R_CERT_is_info_present(R_CERT *cert, R_CERT_INFO info_id);
02334 int R_CDECL R_CERT_is_info_critical(R_CERT *cert, R_CERT_INFO info_id);
02335 
02336 int R_CDECL R_CERT_subject_name_compare_cb(R_CERT *cert1, R_CERT *cert2);
02337 int R_CDECL R_CERT_subject_name_is_equal(R_CERT *cert1, R_CERT *cert2);
02338 
02339 int R_CDECL R_CERT_subject_name_to_string(R_CERT *cert, unsigned int max_str_len,
02340     char *str);
02341 
02342 int R_CDECL R_CERT_issuer_name_to_string(R_CERT *cert, unsigned int max_str_len,
02343     char *str);
02344 
02345 int R_CDECL R_CERT_not_after_to_R_TIME(R_CERT *cert, R_TIME *not_after_time);
02346 int R_CDECL R_CERT_not_after_from_R_TIME(R_CERT *cert, R_TIME *not_after_time);
02347 
02348 int R_CDECL R_CERT_not_before_to_R_TIME(R_CERT *cert, R_TIME *not_before_time);
02349 int R_CDECL R_CERT_not_before_from_R_TIME(R_CERT *cert, R_TIME *not_before_time);
02350 
02351 int R_CDECL R_CERT_not_after_to_binary(R_CERT *cert, unsigned int max_buf_len,
02352     unsigned char *buf, unsigned int *out_len);
02353 
02354 int R_CDECL R_CERT_not_before_to_binary(R_CERT *cert, unsigned int max_buf_len,
02355     unsigned char *buf, unsigned int *out_len);
02356 
02357 int R_CDECL R_CERT_not_after_to_string(R_CERT *cert, unsigned int max_buf_len,
02358     char *str);
02359 int R_CDECL R_CERT_not_before_to_string(R_CERT *cert, unsigned int max_buf_len,
02360     char *str);
02361 
02362 #ifndef NO_BIO
02363 int R_CDECL R_CERT_read(R_CERT_CTX *cert_ctx, BIO *bio, R_CERT_TYPE type,
02364     R_FORMAT format, R_CERT **cert);
02365 #endif /* !NO_BIO */
02366 
02367 int R_CDECL R_CERT_read_file(R_CERT_CTX *cert_ctx, char *filename, R_CERT_TYPE type,
02368     R_FORMAT format, R_CERT **cert);
02369 
02370 #ifndef NO_BIO
02371 int R_CDECL R_CERT_write(R_CERT *cert, BIO *bio, R_FORMAT format, void *format_arg);
02372 #endif /* NO_BIO */
02373 
02374 int R_CDECL R_CERT_write_file(R_CERT *cert, char *filename, R_FORMAT format,
02375     void *format_arg);
02376 
02377 int R_CDECL R_CERT_TYPE_from_string(char *str, R_CERT_TYPE *type);
02378 int R_CDECL R_CERT_TYPE_to_string(R_CERT_TYPE type, unsigned int max_str_len,
02379     char *str);
02380 int R_CDECL R_CERT_TYPE_to_PEM_header(R_CERT_TYPE type, unsigned int max_str_len,
02381     char *str);
02382 
02383 int R_CDECL R_CERT_fingerprint(R_CERT *cert, int md_type, unsigned int max_buf_len,
02384     unsigned char *buf, unsigned int *out_len);
02385 int R_CDECL R_CERT_is_matching_private_key(R_CERT *cert, R_PKEY *pkey);
02386 
02387 int R_CDECL R_CERT_digest(R_CERT *cert, R_CERT_INFO part, int md_type,
02388     unsigned int max_buf_len, unsigned char *out_buf, unsigned int *out_len);
02389 int R_CDECL R_CERT_time_validity(R_CERT *cert, int *validity);
02390 
02391 int R_CDECL R_CERT_issuer_name_to_R_CERT_NAME(R_CERT *cert, R_FLAG_SHARE flag,
02392     R_CERT_NAME **issuer);
02393 int R_CDECL R_CERT_subject_name_to_R_CERT_NAME(R_CERT *cert, R_FLAG_SHARE flag,
02394     R_CERT_NAME **subject);
02395 
02396 int R_CDECL R_CERT_check(R_CERT *cert, unsigned int check_flag);
02397 
02409 #if !defined(Rm_CERT_TABLE) && !defined(Rm_CERT_DIRECT)
02410 
02411 int R_CDECL R_CERT_NAME_new(R_CERT_CTX *cert_ctx, R_CERT_NAME **name);
02412 int R_CDECL R_CERT_NAME_free(R_CERT_NAME *name);
02413 int R_CDECL R_CERT_NAME_dup(R_CERT_NAME *name, R_FLAG_SHARE flag,
02414     R_CERT_NAME **dup_name);
02415 
02416 int R_CDECL R_CERT_NAME_from_binary(R_CERT_CTX *cert_ctx, R_FLAG_SHARE flag,
02417     unsigned int max_buf_len, const unsigned char *buf,
02418     unsigned int *consumed_len, R_CERT_NAME **name);
02419 int R_CDECL R_CERT_NAME_to_binary(R_CERT_NAME *name, unsigned int max_buf_len,
02420     unsigned char *buf, unsigned int *out_len);
02421 
02422 int R_CDECL R_CERT_NAME_to_string(R_CERT_NAME *name, unsigned int max_str_len,
02423     char *str);
02424 int R_CDECL R_CERT_NAME_to_MID_string(R_CERT_NAME *name, unsigned int max_str_len,
02425     R_UTF8 str);
02426 int R_CDECL R_CERT_NAME_from_string(R_CERT_CTX *cert_ctx, char *str,
02427     R_CERT_NAME **name);
02428 
02429 int R_CDECL R_CERT_NAME_get_info(R_CERT_NAME *name, R_CERT_NAME_INFO info_id,
02430     void *value);
02431 int R_CDECL R_CERT_NAME_set_info(R_CERT_NAME *name, R_CERT_NAME_INFO info_id,
02432     void *value);
02433 
02434 #endif /* !defined(Rm_CERT_TABLE) && !defined(Rm_CERT_DIRECT) */
02435 
02436 
02437 int R_CDECL R_OID_from_R_CERT_NAME_ENTRY_TYPE(R_LIB_CTX *lib_ctx,
02438                                       R_CERT_NAME_ENTRY_TYPE type,
02439                                       R_OID **oid);
02440 int R_CDECL R_CERT_NAME_entry_to_R_CERT_NAME_ENTRY(R_CERT_NAME *name,
02441     R_FLAG_SHARE flag, R_CERT_NAME_ENTRY_TYPE type, int index,
02442     R_CERT_NAME_ENTRY **entry);
02443 
02444 int R_CDECL R_OID_to_R_CERT_NAME_ENTRY_TYPE(R_OID *oid, R_CERT_NAME_ENTRY_TYPE *type);
02445 
02446 int R_CDECL R_CERT_NAME_compare_cb(R_CERT_NAME *name1, R_CERT_NAME *name2);
02447 int R_CDECL R_CERT_NAME_is_equal(R_CERT_NAME *name1, R_CERT_NAME *name2);
02448 
02449 #if !defined(Rm_CERT_TABLE) && !defined(Rm_CERT_DIRECT)
02450 
02451 int R_CDECL R_CERT_NAME_ENTRY_new(R_CERT_NAME *name, R_CERT_NAME_ENTRY **entry);
02452 int R_CDECL R_CERT_NAME_ENTRY_free(R_CERT_NAME_ENTRY *entry);
02453 int R_CDECL R_CERT_NAME_ENTRY_get_info(R_CERT_NAME_ENTRY *entry,
02454     R_CERT_NAME_ENTRY_INFO info_id, void *value);
02455 int R_CDECL R_CERT_NAME_ENTRY_set_info(R_CERT_NAME_ENTRY *entry,
02456     R_CERT_NAME_ENTRY_INFO info_id, void *value);
02457 
02458 #endif /* !defined(Rm_CERT_TABLE) && !defined(Rm_CERT_DIRECT) */
02459 
02460 
02472 #ifndef NO_EXT
02473 int R_CDECL R_CERT_test_key_usage(R_CERT *cert, int bits);
02474 int R_CDECL R_CERT_test_extended_key_usage(R_CERT *cert, R_OID **oid,
02475     unsigned int count);
02476 int R_CDECL R_CERT_key_usage_to_string(R_CERT *cert, char *separator,
02477     unsigned int max_str_len, char *str);
02478 int R_CDECL R_CERT_extended_key_usage_to_string(R_CERT *cert, char *separator,
02479     unsigned int max_str_len, char *str);
02480 #endif /* !NO_EXT */
02481 
02492 #ifndef NO_EXT
02493 int R_CDECL R_CERT_get_authority_info_access(R_CERT *cert,
02494     unsigned char *method, unsigned int method_len, R_TITEM *titem);
02495 int R_CDECL R_CERT_authority_info_access_to_string(R_CERT *cert,
02496     char *separator, unsigned int max_str_len, char *str);
02497 #endif /* !NO_EXT */
02498 
02509 #ifndef NO_EXT
02510 int R_CDECL R_CERT_crl_point_get_count(R_CERT *cert, int *count);
02511 int R_CDECL R_CERT_crl_point_get_types(R_CERT *cert, int index,
02512     int *name_types);
02513 int R_CDECL R_CERT_crl_point_get_info(R_CERT *cert, int index, int name_type,
02514     void *point, int reasons, void *issuer);
02515 #endif /* !NO_EXT */
02516 
02520 #ifdef  __cplusplus
02521 }
02522 #endif
02523 #endif /* HEADER_COMMON_R_CERT_H */
02524 

Copyright (c) 1999-2005 RSA Security Inc. All rights reserved. 072-001001-2100-001-000 - 2.1