RSA BSAFE Micro Edition Suite

Streamlined security for mobile and embedded devices

Search  Print

cert_sm.h

Go to the documentation of this file.
00001 /* $Id: cert_sm.h,v 1.97.4.3 2005/10/12 05:45:47 hpriddle Exp $ */
00002 /*
00003  * Copyright (C) 2001-2002 RSA Security Inc. All rights reserved. This
00004  * work contains proprietary information of RSA Security. Distribution
00005  * is limited to authorized licensees of RSA Security. Any unauthorized
00006  * reproduction, distribution or modification of this work is strictly
00007  * prohibited.
00008  */
00009 
00018 #ifndef HEADER_CERT_SM_H
00019 #define HEADER_CERT_SM_H
00020 
00021 #ifdef  __cplusplus
00022 extern "C" {
00023 #endif
00024 
00025 /*
00026  * Include files
00027  */
00028 
00029 #include "stack.h"
00030 #ifndef NO_PEM
00031 #include "pem.h"
00032 #endif
00033 #include "x509tc.h"
00034 
00035 #ifdef INCLUDE_MHP_SSLSIGN_API
00036 #include "sslsign.h"
00037 #endif
00038 
00039 /*
00040  * Exported macro constants
00041  */
00042 
00043 /*
00044  * numeric identifiers for public key types that may be used for signing.
00045  * we need to have a definition for a PKEY type for SSLCERT_PKEY_from_binary
00046  * These values could be returned by SSLCERT_get_signature_type.
00047  */
00048 #ifndef EVP_PKEY_RSA
00049 #define EVP_PKEY_RSA     6
00050 #endif
00051 
00052 #ifndef EVP_PKEY_DSA
00053 #define EVP_PKEY_DSA     116
00054 #endif
00055 
00056 /* These values could be returned by SSLCERT_get_signature_digest_type
00057  * NOTE: These *must* be the same values as the X509_DIGEST_TYPE_* defines
00058  * in xtc_locl.h
00059  */
00076 #define SSLCERT_DIGEST_TYPE_MD2            1
00077 
00080 #define SSLCERT_DIGEST_TYPE_MD5            2
00081 
00084 #define SSLCERT_DIGEST_TYPE_SHA1           3
00085 
00101 #define  SSLCERT_TIME_NOTBEFORE      TC_X509_TIME_NOTBEFORE
00102 
00104 #define  SSLCERT_TIME_NOTAFTER       TC_X509_TIME_NOTAFTER
00105 /* END: SSLCERT_VALIDITY_TIME_IDS */
00110 /*
00111  * Exported types
00112  */
00113 
00114 /* make sure we have a definition (safe) for EVP_PKEY and EVP_MD */
00115 #if !defined(HEADER_COMMON_EVP_H) && !defined(HEADER_SSL_H)
00116 #ifndef HEADER_COMMON_EVP_H_TYPEDEF_DEF
00117 #define HEADER_COMMON_EVP_H_TYPEDEF_DEF
00118 typedef struct evp_pkey_st EVP_PKEY; /* EVP asymmetric key type */
00119 typedef struct evp_md_st EVP_MD;    /* EVP message digest type */
00120 typedef struct evp_md_ctx_st EVP_MD_CTX; /* EVP message digest ctx type */
00121 typedef struct evp_cipher_st EVP_CIPHER; /* EVP cipher type */
00122 typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; /* EVP cipher ctx type */
00123 typedef struct evp_encode_ctx_st EVP_ENCODE_CTX; /* EVP Base64 ctx type */
00124 /* To remove a dependence of the old evp on ASN.1 definitions */
00125 typedef void EVP_ASN1_TYPE;    /* EVP general ASN.1 object type */
00126 #endif /* HEADER_COMMON_EVP_H_TYPEDEF_DEF */
00127 #endif /* !defined(HEADER_COMMON_EVP_H) && !defined(HEADER_SSL_H) */
00128 
00129 /* we declare opaque data types for those things for which we can
00130  * switch the implementation routines - hence they do not really have
00131  * a known type as it can change at runtime
00132  */
00133 
00137 typedef TC_X509 SSLCERT;            /* X509 certificate type */
00138 
00143 typedef TC_X509_NAME SSLCERT_NAME;  /* X509 NAME type */
00144 
00149 typedef TC_X509_NAME_ENTRY SSLCERT_NAME_ENTRY; /* X509 NAME_ENTRY type */
00150 
00158 typedef EVP_PKEY SSLCERT_PKEY;      /* Asymmetric key type */
00159 
00164 typedef void SSLCERT_STORE_CTX;     /* Certificate store instance type */
00165 
00170 typedef void SSLCERT_STORE;         /* Certificate store type */
00171 
00172 /* Some functions from EVP layer are public APIs */
00173 void R_CDECL EVP_PKEY_free(EVP_PKEY *pkey);
00174 void R_CDECL EVP_PKEY_reference_inc(EVP_PKEY *pkey);
00175 EVP_PKEY * R_CDECL EVP_PKEY_new(void);
00176 
00177 /* make sure we have a definition (safe) for SSL */
00178 #ifndef HEADER_SSL_H_TYPEDEF_DEF
00179 #define HEADER_SSL_H_TYPEDEF_DEF
00180 typedef struct ssl_st SSL;           /* SSL structure type */
00181 #endif /* HEADER_SSL_H_TYPEDEF_DEF*/
00182 
00183 /*
00184  * Exported macro functions
00185  */
00186 
00187 /* Much of the SSLCERT API for a SSL-C small code build is defined to
00188  * call directly to TC_X509 functions for certificate handling. Because
00189  * this implementation is limited some of the API macros are undefined.
00190  * The list follows:
00191  *   void *SSLCERT_from_binary_bio(BIO *bio, SSLCERT *cert),
00192  *   SSLCERT_STORE_new(),               SSLCERT_STORE_free(),
00193  *   SSLCERT_STORE_load_locations(),    SSLCERT_STORE_set_default_paths(s),
00194  *   SSLCERT_STORE_set_verify_cb(s,cb),SSLCERT_STORE_get_by_subject(sc,t,n,r),
00195  *   SSLCERT_STORE_CTX_new(),           SSLCERT_STORE_CTX_free(sc),
00196  *   SSLCERT_STORE_CTX_init(sc,s,c,ch), SSLCERT_STORE_CTX_cleanup(sc),
00197  *   SSLCERT_STORE_get_ex_new_index(l,p,nf,df,ff),
00198  *   SSLCERT_STORE_cleanup_ex_data(),   SSLCERT_STORE_set_ex_data(c,i,d),
00199  *   SSLCERT_STORE_get_ex_data(sc,i),   SSLCERT_STORE_CTX_get_error(sc),
00200  *   SSLCERT_STORE_CTX_set_error(sc,err),
00201  *   SSLCERT_STORE_CTX_get_error_depth(sc),
00202  *   SSLCERT_STORE_CTX_get_current_cert(sc)
00203  *
00204  */
00205 
00216 #define SSLCERT_tinycode_setup()
00217 
00218 
00228 #define SSLCERT_normal_setup()
00229 
00254 #define SSLCERT_new          TC_X509_new
00255 
00271 #define SSLCERT_free         TC_X509_free
00272 
00283 #define SSLCERT_set_meth_data TC_X509_set_meth_data
00284 
00296 #define SSLCERT_get_meth_data TC_X509_get_meth_data
00297 
00313 #define SSLCERT_set_info TC_X509_set_info
00314 
00331 #define SSLCERT_get_info TC_X509_get_info
00332 
00340 #define SSLCERT_dup TC_X509_dup
00341 
00361 #define SSLCERT_verify       TC_X509_verify
00362 
00380 #define SSLCERT_digest       TC_X509_digest
00381 
00404 #define SSLCERT_to_binary    i2d_TC_X509
00405 
00423 #define SSLCERT_from_binary  d2i_TC_X509
00424 
00440 #define SSLCERT_reference_inc      TC_X509_reference_inc
00441 
00447 #define SSLCERT_get_signature_type TC_X509_get_signature_type
00448 
00454 #define SSLCERT_get_signature_digest_type TC_X509_get_signature_digest_type
00455 
00473 #define SSLCERT_get_signature_data(cert,len,data) \
00474     TC_X509_get_signature_data((cert),(len),(data))
00475 
00481 #define SSLCERT_get_version TC_X509_get_version
00482 
00488 #define SSLCERT_get_version_string TC_X509_get_version_string
00489 
00510 #define SSLCERT_subject_name_cmp   TC_X509_subject_name_cmp
00511 
00523 #define SSLCERT_get_issuer_name    TC_X509_get_issuer_name
00524 
00535 #define SSLCERT_get_subject_name   TC_X509_get_subject_name
00536 
00551 #define SSLCERT_get_pubkey         TC_X509_get_pubkey
00552 
00568 #define SSLCERT_get_pubkey_info(cert,pp,length) \
00569     TC_X509_get_pubkey_info_data((cert),(pp),(length))
00570 
00581 #define SSLCERT_check_private_key  TC_X509_check_private_key
00582 
00591 #define SSLCERT_do_application_cb(s,sk,cb,cbarg,vr) \
00592   ((cb) != NULL)?((cb)((s),(SSLCERT **)(sk_data(sk)),\
00593                         sk_num((sk)),(cbarg),(vr))):0
00594 
00603 #define SSLCERT_do_verify_cb(s,sk,sc,cb,cbarg,vr) \
00604         ((*(vr)=X509_V_ERR_APPLICATION_VERIFICATION), 0)
00605 
00614 #define SSLCERT_NAME_new    TC_X509_NAME_new
00615 
00625 #define SSLCERT_NAME_free   TC_X509_NAME_free
00626 
00638 #define SSLCERT_NAME_dup   TC_X509_NAME_dup
00639 
00649 #define SSLCERT_NAME_hash   TC_X509_NAME_hash
00650 
00665 #define SSLCERT_NAME_cmp    TC_X509_NAME_cmp
00666 
00689 #define SSLCERT_NAME_from_binary        d2i_TC_X509_NAME
00690 
00708 #define SSLCERT_NAME_to_binary          i2d_TC_X509_NAME
00709 
00721 #define SSLCERT_NAME_oneline   TC_X509_NAME_oneline
00722 
00735 #define SSLCERT_NAME_get_entry_count    TC_X509_NAME_get_entry_count
00736 
00756 #define SSLCERT_NAME_get_entry          TC_X509_NAME_get_entry
00757 
00781 #define SSLCERT_NAME_ENTRY_get_oid_info(cne,oidtype,oidpp,oidlen) \
00782         SSLCERT_NAME_ENTRY_get_info \
00783                              ((cne),(oidtype),(oidpp),(oidlen),NULL,NULL,NULL)
00784 
00804 #define SSLCERT_NAME_ENTRY_get_data_info(cne,datatype,datapp,datalen) \
00805         SSLCERT_NAME_ENTRY_get_info \
00806                           ((cne),NULL,NULL,NULL,(datatype),(datapp),(datalen))
00807 
00808 
00809 #ifndef NO_PEM
00810 
00812 #define SSLCERT_PEM_read_bio_SSLCERT(bp,c,cb) \
00813     PEM_ASN1_read_bio((char *(*)())d2i_TC_X509,PEM_STRING_X509,(bp),(c),cb)
00814 
00815 #endif /* NO_PEM */
00816 
00827 #define SSLCERT_PKEY_new      EVP_PKEY_new
00828 
00838 #define SSLCERT_PKEY_free     EVP_PKEY_free
00839 
00865 #define SSLCERT_PKEY_from_PUBKEY_binary(type,ppkey,pp,length) \
00866     d2i_TC_PublicKey((type),(ppkey),(pp),(length))
00867 
00885 #define SSLCERT_verify_signature        TC_X509_verify_signature
00886 
00900 #define SSLCERT_PKEY_reference_inc   EVP_PKEY_reference_inc
00901 
00924 #define SSLCERT_PKEY_from_binary(type,ppkey,pp,length) \
00925     d2i_TC_PrivateKey((type),(ppkey),(pp),(length))
00926 
00946 #define SSLCERT_PKEY_to_binary(ppkey,pp) \
00947     i2d_TC_PrivateKey((ppkey),(pp))
00948 
00968 #define SSLCERT_PKEY_to_PUBKEY_binary(ppkey,pp) \
00969     i2d_TC_PublicKey((ppkey),(pp))
00970 
00988 #define SSLCERT_verify_signature        TC_X509_verify_signature
00989 
01007 #define SSLCERT_get_serialNumber_info(cert,type,pp,length) \
01008     TC_X509_get_serialNumber_info((cert),(type),(pp),(length))
01009 
01022 #define SSLCERT_get_serialNumber_int(cert,snump) \
01023     TC_X509_get_serialNumber_int((cert),(snump))
01024 
01051 #define SSLCERT_get_notAfter(cert,type,pp,length) \
01052     TC_X509_get_notAfter_info((cert),(type),(pp),(length))
01053 
01081 #define SSLCERT_get_notBefore(cert,type,pp,length) \
01082     TC_X509_get_notBefore_info((cert),(type),(pp),(length))
01083 
01100 #define SSLCERT_NAME_get_info(xn,pp,length) \
01101     TC_X509_NAME_get_info_data((xn),(pp),(length))
01102 
01135 #define SSLCERT_NAME_ENTRY_get_info(cne,oidtype,oidpp,oidlen,datatype,datapp, \
01136                                     datalen) \
01137     TC_X509_NAME_ENTRY_get_info_data((cne),(oidtype),(oidpp),(oidlen), \
01138                                      (datatype),(datapp),(datalen))
01139 
01156 #define SSLCERT_get_TBSCertificate_data(cert,len,data) \
01157     TC_X509_get_TBSCertificate_data((cert),(len),(data))
01158 
01172 #define SSLCERT_get_validity_seconds(cert,id,pseconds) \
01173     TC_X509_get_validity_seconds((cert),(id),(pseconds))
01174 
01196 #define SSLCERT_get_basic_constraints_int(cert,crit,constraints,is_ca) \
01197     TC_X509_get_basic_constraints_int(cert,crit,constraints,is_ca)
01198 
01214 #define SSLCERT_get_key_usage_int(cert,crit,usage) \
01215     TC_X509_get_key_usage_int(cert,crit,usage)
01216 
01239 #define SSLCERT_get_crl_distribution_points(cert,index,what,crit,len,data) \
01240     TC_X509_get_crl_distribution_points(cert,index,what,crit,len,data)
01241 
01242 /*
01243  * Function prototypes
01244  */
01245 
01246 char * R_CDECL SSLCERT_OID_to_string(unsigned char *data,long len,int flag);
01247 int R_CDECL SSLCERT_fingerprint(SSLCERT *cert,unsigned char *buf,unsigned int *plen);
01248 int R_CDECL SSLCERT_compare_ASN1_time(int time_encoding, unsigned char *cert_time,
01249     unsigned int now_time, int *result);
01250 
01251 /*
01252  * These macros are defined to be backward compatibile with  SSL-C ME 1.0.1
01253  */
01254 #define SSLCERT_get_cRLDistributionPoints \
01255     SSLCERT_get_crl_distribution_points
01256 
01257 #define SSLCERT_get_key_Usage_int SSLCERT_get_key_usage_int
01258 
01259 /* end group SSL_CERT_HAND_FUNCS */
01263 void R_CDECL ERR_load_SSLCERT_strings(void);
01264 
01265 
01266 
01267 /* BEGIN ERROR CODES */
01268 /* Error codes for the SSLCERT functions. */
01269 
01270 /* Function codes. */
01271 #define SSLCERT_F_FINGERPRINT                 101
01272 #define SSLCERT_F_FROM_BINARY_BIO             113
01273 #define SSLCERT_F_GET_VERSION                 154
01274 #define SSLCERT_F_PKEY_FROM_BINARY            107
01275 #define SSLCERT_F_STORE_CTX_CLEANUP           137
01276 #define SSLCERT_F_STORE_CTX_CLEANUP_EX_DATA   138
01277 #define SSLCERT_F_STORE_CTX_FREE              152
01278 #define SSLCERT_F_STORE_CTX_GET_CURRENT_CERT  139
01279 #define SSLCERT_F_STORE_CTX_GET_ERROR         140
01280 #define SSLCERT_F_STORE_CTX_GET_ERROR_DEPTH   141
01281 #define SSLCERT_F_STORE_CTX_GET_EX_DATA       142
01282 #define SSLCERT_F_STORE_CTX_GET_EX_NEW_INDEX  102
01283 #define SSLCERT_F_STORE_CTX_INIT              143
01284 #define SSLCERT_F_STORE_CTX_NEW               153
01285 #define SSLCERT_F_STORE_CTX_SET_ERROR         144
01286 #define SSLCERT_F_STORE_CTX_SET_EX_DATA       145
01287 #define SSLCERT_F_STORE_GET_BY_SUBJECT        147
01288 #define SSLCERT_F_STORE_LOAD_LOCATIONS        103
01289 #define SSLCERT_F_STORE_SET_DEFAULT_PATHS     104
01290 #define SSLCERT_F_STORE_SET_VERIFY_CB         155
01291 #define SSLCERT_F_PKEY_TO_BINARY              174
01292 #define SSLCERT_F_PKEY_TO_PUBKEY_BINARY       175
01293 
01294 /* Reason codes. */
01295 
01296 #ifdef  __cplusplus
01297 }
01298 #endif
01299 
01300 #endif /* HEADER_CERT_SM_H */
01301 

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