RSA BSAFE Micro Edition Suite

Streamlined security for mobile and embedded devices

Search  Print

r_pkey.h

Go to the documentation of this file.
00001 /* $Id: r_pkey.h,v 1.141.2.1 2005/10/12 04:15:57 hpriddle 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_CERT_R_PKEY_H
00017 #define HEADER_COMMON_CERT_R_PKEY_H
00018 
00019 #ifdef  __cplusplus
00020 extern "C" {
00021 #endif
00022 
00023 #include "r_lib.h"
00024 #include "r_types.h"
00025 #include "pk_ids.h"
00026 #include "r_pkey_err.h"
00027 #include "r_format.h"
00028 
00029 #ifndef NO_BIO
00030 #include "bio.h"
00031 #endif /* NO_BIO */
00032 
00033 /* definitions from cryp_mod.h so that types match in R_PKEY_ALG_INFO */
00034 #ifndef HEADER_COMMON_MODULE_CRYP_MOD_TYPEDEF_DEF
00035 #define HEADER_COMMON_MODULE_CRYP_MOD_TYPEDEF_DEF
00036 typedef int R_CR_ALG_ID;
00037 typedef int R_CR_ALG_TYPE;
00038 typedef int R_CR_ALG_SUB;
00039 #endif /* HEADER_COMMON_MODULE_CRYP_MOD_TYPEDEF_DEF */
00040 
00086 /*
00087  * Exported macro constants
00088  */
00089 
00097 /*
00098  * There are definitions for a PKEY type used in R_PKEY_from_binary()
00099  * which are deliberately compatible with the defines used for the
00100  * @ref EVP_PKEY types in older implementations .
00101  *
00102  * That is the values are the same as @ref EVP_PKEY_RSA, @ref EVP_PKEY_DSA and
00103  * @ref EVP_PKEY_DH.
00104  *
00105  */
00106 
00112 typedef int R_PKEY_TYPE;
00113 
00117 #define R_PKEY_TYPE_UNKNOWN  -1
00118 
00122 #define R_PKEY_TYPE_RSA       6
00123 
00127 #define R_PKEY_TYPE_DH        28
00128 
00132 #define R_PKEY_TYPE_DSA       116
00133 
00138 #define R_PKEY_TYPE_DSAPARAMS  1001
00139 
00142 #define R_PKEY_TYPE_ECC       178
00143 
00155 /*
00156  * Defines for flags used in the _from_binary calls.
00157  *
00158  * NOTE: the flag values for both R_CERT and R_PKEY are the same.
00159  *
00160  */
00161 
00165 #define R_PKEY_FL_DEFAULT          0x0000
00166 
00170 #define R_PKEY_FL_COPY_DATA        0x0000
00171 
00175 #define R_PKEY_FL_BY_REFERENCE     0x0001
00176 
00192 typedef int R_PKEY_FORMAT;
00193 
00195 #define R_PKEY_FORMAT_BINARY            R_FORMAT_BINARY
00196 
00202 #define R_PKEY_FORMAT_PEM               R_FORMAT_PEM
00203 
00205 #define R_PKEY_FORMAT_PKCS1             (0x0000 | R_FORMAT_BINARY)
00206 
00208 #define R_PKEY_FORMAT_PKCS8             (0x0001 | R_FORMAT_BINARY)
00209 
00214 /* Indicates that the #R_PKEY is in text format. */
00215 #define R_PKEY_FORMAT_TEXT              R_FORMAT_TEXT
00216 
00217 /* Indicates text output format. */
00218 #define R_PKEY_PRINT_FORMAT_TEXT        R_FORMAT_TEXT
00219 
00220 /* Indicates C code function format.  */
00221 #define R_PKEY_PRINT_FORMAT_CODE_BINARY R_FORMAT_CODE_BINARY
00222 
00223 /* Indicates C code fields format.  */
00224 #define R_PKEY_PRINT_FORMAT_CODE_FIELDS R_FORMAT_CODE_FIELDS
00225 
00226 /* Indicates C code data format. */
00227 #define R_PKEY_PRINT_FORMAT_CODE_HEX    R_FORMAT_CODE_HEX
00228 
00229 /* Indicates plain hexadecimal Bytes format. */
00230 #define R_PKEY_PRINT_FORMAT_HEX         R_FORMAT_HEX
00231 
00233 #define R_PKEY_FORMAT_PUBKEY_INFO       (0x0002 | R_FORMAT_BINARY)
00234 
00235 #ifndef NO_PEM
00236 
00246 /* supported PEM cipher strings for encrypted keys */
00247 
00254 #define R_PKEY_PEM_CIPHER_DES           "DES-CBC"
00255 
00262 #define R_PKEY_PEM_CIPHER_DES_EDE       "DES-EDE3-CBC"
00263 
00264 /*
00265  * \ifnot MES
00266  * @}
00267  * \endif
00268  */
00269 #endif /* NO_PEM */
00270 
00278 /* ID values for R_PKEY_get_field - defines come from pk_ids.h */
00279 
00284 #define R_PKEY_FIELD_ID_RSA_MOD         PK_RSA_N
00285 
00291 #define R_PKEY_FIELD_ID_RSA_EXP         PK_RSA_E
00292 
00297 #define R_PKEY_FIELD_ID_RSA_PRIV_EXP    PK_RSA_D
00298 
00300 #define R_PKEY_FIELD_ID_RSA_PRIME_N(n)    PK_RSA_PRIME(n)
00301 
00307 #define R_PKEY_FIELD_ID_RSA_EXP_N(n)    PK_RSA_EXP(n)
00308 
00314 #define R_PKEY_FIELD_ID_RSA_INV_N(n)    PK_RSA_INV(n)
00315 
00319 #define R_PKEY_FIELD_ID_RSA_SUBPRIME1_N(n) PK_RSA_SUBPRIME1(n)
00320 
00324 #define R_PKEY_FIELD_ID_RSA_SUBPRIME2_N(n) PK_RSA_SUBPRIME2(n)
00325 
00328 #define R_PKEY_FIELD_ID_RSA_Q           PK_RSA_Q
00329 
00335 #define R_PKEY_FIELD_ID_RSA_DMQ1        PK_RSA_DMQ1
00336 
00340 #define R_PKEY_FIELD_ID_RSA_Q1          PK_RSA_Q1
00341 
00345 #define R_PKEY_FIELD_ID_RSA_Q2          PK_RSA_Q2
00346 
00349 #define R_PKEY_FIELD_ID_RSA_P           PK_RSA_P
00350 
00356 #define R_PKEY_FIELD_ID_RSA_DMP1        PK_RSA_DMP1
00357 
00363 #define R_PKEY_FIELD_ID_RSA_IQMP        PK_RSA_IQMP
00364 
00368 #define R_PKEY_FIELD_ID_RSA_P1          PK_RSA_P1
00369 
00373 #define R_PKEY_FIELD_ID_RSA_P2          PK_RSA_P2
00374 
00379 #define R_PKEY_FIELD_ID_DH_PRIME        PK_DH_PRIME
00380 
00384 #define R_PKEY_FIELD_ID_DH_GENERATOR    PK_DH_GENERATOR
00385 
00392 #define R_PKEY_FIELD_ID_DH_PUB_KEY      PK_DH_PUB_KEY
00393 
00398 #define R_PKEY_FIELD_ID_DH_PRIV_KEY     PK_DH_PRIV_KEY
00399 
00406 #define R_PKEY_FIELD_ID_DSA_PRIME       PK_DSA_P
00407 
00413 #define R_PKEY_FIELD_ID_DSA_SUBPRIME    PK_DSA_Q
00414 
00420 #define R_PKEY_FIELD_ID_DSA_BASE        PK_DSA_G
00421 
00427 #define R_PKEY_FIELD_ID_DSA_PUB_KEY     PK_DSA_PUB_KEY
00428 
00436 #define R_PKEY_FIELD_ID_DSA_PRIV_KEY    PK_DSA_PRIV_KEY
00437 
00442 #define R_PKEY_FIELD_ID_DSA_SEED        PK_DSA_SEED
00443 
00448 #define R_PKEY_FIELD_ID_DSA_COUNTER     PK_DSA_COUNTER
00449 
00454 #define R_PKEY_FIELD_ID_DSA_H           PK_DSA_H
00455 
00456 
00457 #define R_PKEY_FIELD_ID_ECC_OID          PK_ECC_OID
00458 #define R_PKEY_FIELD_ID_ECC_PARAMS       PK_ECC_PARAMS
00459 #define R_PKEY_FIELD_ID_ECC_PUB_KEY      PK_ECC_PUB_KEY
00460 
00465 /* Indicates that the R_PKEY field has no type */
00466 #define R_PKEY_FIELD_TYPE_NONE          0
00467 
00468 /* Indicates that the R_PKEY field is an integer */
00469 #define R_PKEY_FIELD_TYPE_INT           1
00470 
00471 /* Indicates that the R_PKEY field is an R_ITEM */
00472 #define R_PKEY_FIELD_TYPE_ITEM          2
00473 
00810 #define R_PKEY_INFO_ID_BASE           2000
00811 
00819 #define R_PKEY_INFO_ID_RSA_MOD        R_PKEY_FIELD_ID_RSA_MOD
00820 
00828 #define R_PKEY_INFO_ID_RSA_EXP        R_PKEY_FIELD_ID_RSA_EXP
00829 
00837 #define R_PKEY_INFO_ID_RSA_PRIV_EXP   R_PKEY_FIELD_ID_RSA_PRIV_EXP
00838 
00846 #define R_PKEY_INFO_ID_RSA_PRIME_N(n) R_PKEY_FIELD_ID_RSA_PRIME_N(n)
00847 
00855 #define R_PKEY_INFO_ID_RSA_EXP_N(n)   R_PKEY_FIELD_ID_RSA_EXP_N(n)
00856 
00864 #define R_PKEY_INFO_ID_RSA_INV_N(n)   R_PKEY_FIELD_ID_RSA_INV_N(n)
00865 
00873 #define R_PKEY_INFO_ID_RSA_Q          R_PKEY_FIELD_ID_RSA_Q
00874 
00882 #define R_PKEY_INFO_ID_RSA_DMQ1       R_PKEY_FIELD_ID_RSA_DMQ1
00883 
00891 #define R_PKEY_INFO_ID_RSA_X931_Q1    R_PKEY_FIELD_ID_RSA_Q1
00892 
00899 #define R_PKEY_INFO_ID_RSA_X931_Q2    R_PKEY_FIELD_ID_RSA_Q2
00900 
00907 #define R_PKEY_INFO_ID_RSA_P          R_PKEY_FIELD_ID_RSA_P
00908 
00916 #define R_PKEY_INFO_ID_RSA_DMP1       R_PKEY_FIELD_ID_RSA_DMP1
00917 
00925 #define R_PKEY_INFO_ID_RSA_IQMP       R_PKEY_FIELD_ID_RSA_IQMP
00926 
00934 #define R_PKEY_INFO_ID_RSA_X931_P1    R_PKEY_FIELD_ID_RSA_P1
00935 
00942 #define R_PKEY_INFO_ID_RSA_X931_P2    R_PKEY_FIELD_ID_RSA_P2
00943 
00951 #define R_PKEY_INFO_ID_DH_PRIME       R_PKEY_FIELD_ID_DH_PRIME
00952 
00961 #define R_PKEY_INFO_ID_DH_GENERATOR   R_PKEY_FIELD_ID_DH_GENERATOR
00962 
00971 #define R_PKEY_INFO_ID_DH_PUB_KEY     R_PKEY_FIELD_ID_DH_PUB_KEY
00972 
00981 #define R_PKEY_INFO_ID_DH_PRIV_KEY    R_PKEY_FIELD_ID_DH_PRIV_KEY
00982 
00991 #define R_PKEY_INFO_ID_DSA_PRIME      R_PKEY_FIELD_ID_DSA_PRIME
00992 
01001 #define R_PKEY_INFO_ID_DSA_SUBPRIME   R_PKEY_FIELD_ID_DSA_SUBPRIME
01002 
01011 #define R_PKEY_INFO_ID_DSA_BASE       R_PKEY_FIELD_ID_DSA_BASE
01012 
01021 #define R_PKEY_INFO_ID_DSA_PUB_KEY    R_PKEY_FIELD_ID_DSA_PUB_KEY
01022 
01031 #define R_PKEY_INFO_ID_DSA_PRIV_KEY   R_PKEY_FIELD_ID_DSA_PRIV_KEY
01032 
01041 #define R_PKEY_INFO_ID_DSA_SEED       R_PKEY_FIELD_ID_DSA_SEED
01042 
01051 #define R_PKEY_INFO_ID_DSA_COUNTER    R_PKEY_FIELD_ID_DSA_COUNTER
01052 
01061 #define R_PKEY_INFO_ID_DSA_H          R_PKEY_FIELD_ID_DSA_H
01062 
01070 #define R_PKEY_INFO_ID_R_PKEY_CTX     (R_PKEY_INFO_ID_BASE+1)
01071 
01079 #define R_PKEY_INFO_ID_R_EITEMS       (R_PKEY_INFO_ID_BASE+2)
01080 
01088 #define R_PKEY_INFO_ID_FLAG           (R_PKEY_INFO_ID_BASE+3)
01089 
01097 #define R_PKEY_INFO_ID_DATA           (R_PKEY_INFO_ID_BASE+4)
01098 
01106 #define R_PKEY_INFO_ID_REFERENCE      (R_PKEY_INFO_ID_BASE+5)
01107 
01115 #define R_PKEY_INFO_ID_TYPE           (R_PKEY_INFO_ID_BASE+6)
01116 
01124 #define R_PKEY_INFO_ID_NUM_BITS       (R_PKEY_INFO_ID_BASE+7)
01125 
01134 #define R_PKEY_INFO_ID_NUM_PRIMES     (R_PKEY_INFO_ID_BASE+8)
01135 
01143 #define R_PKEY_INFO_ID_BY_ALG             PK_OBJECT_ID_BY_ALG
01144 
01151 #define R_PKEY_INFO_ID_DELETE               PK_SHARED_ID_DELETE_ITEM
01152 
01159 #define R_PKEY_INFO_ID_KEY_ID               PK_SHARED_ID_HW_ID
01160 
01166 #define R_PKEY_INFO_ID_R_HW_OBJ_PUBLIC      PK_SHARED_ID_R_HW_OBJ_PUBLIC
01167 
01173 #define R_PKEY_INFO_ID_HW_CLASS             PK_SHARED_ID_HW_CLASS
01174 
01180 #define R_PKEY_INFO_ID_HW_SUBJECT           PK_SHARED_ID_SUBJECT
01181 
01182 /*
01183  *  This identifier is used to locate export Key Encryption Key (KEK)
01184  *  authority in an #R_PKEY.
01185  *
01186  *  @see R_PKEY_get_info().
01187  */
01188 #define R_PKEY_INFO_ID_KEY_WRAP             PK_SHARED_ID_KEY_WRAP
01189 
01190 /*
01191  *  This identifier is used to locate import Key Encryption Key (KEK)
01192  *  authority in an #R_PKEY.
01193  *
01194  *  @see R_PKEY_get_info().
01195  */
01196 #define R_PKEY_INFO_ID_KEY_UNWRAP           PK_SHARED_ID_KEY_UNWRAP
01197 
01205 #define R_PKEY_INFO_ID_KEY_SENSITIVE        PK_SHARED_ID_SENSITIVE
01206 
01213 #define R_PKEY_INFO_ID_IS_TOKEN             PK_SHARED_ID_IS_TOKEN
01214 
01221 #define R_PKEY_INFO_ID_LABEL                PK_SHARED_ID_LABEL
01222 
01223 /*
01224  *  This identifier is a handle for storing the key's extractable
01225  *  indicator. If the attribute is <tt>FALSE</tt> then the key
01226  *  cannot be wrapped.
01227  *
01228  *  @see R_PKEY_get_info().
01229  */
01230 #define R_PKEY_INFO_ID_KEY_EXTRACTABLE      PK_SHARED_ID_EXTRACTABLE
01231 
01238 #define R_PKEY_INFO_ID_ENCRYPT              PK_SHARED_ID_ENCRYPT
01239 
01246 #define R_PKEY_INFO_ID_DECRYPT              PK_SHARED_ID_DECRYPT
01247 
01254 #define R_PKEY_INFO_ID_VERIFY               PK_SHARED_ID_VERIFY
01255 
01262 #define R_PKEY_INFO_ID_SIGN                 PK_SHARED_ID_SIGN
01263 
01270 #define R_PKEY_INFO_ID_PRIVATE              PK_SHARED_ID_PRIVATE
01271 
01278 #define R_PKEY_INFO_ID_MODIFIABLE           PK_SHARED_ID_MODIFIABLE
01279 
01284 #define R_PKEY_INFO_ID_PURPOSE              PK_SHARED_ID_PURPOSE
01285 
01291 #define R_PKEY_INFO_ID_HW_KEY_TYPE          PK_SHARED_ID_HW_KEY_TYPE
01292 
01298 #define R_PKEY_INFO_ID_LOCATION             PK_SHARED_ID_LOCATION
01299 
01304 #define R_PKEY_INFO_ID_R_HW_OBJ_PRIVATE     PK_SHARED_ID_R_HW_OBJ_PRIVATE
01305 
01306 #define R_PK_SETUP_REC(type,obj) { (type), { sizeof(obj), ((void*)(obj)) } },
01307 
01308 typedef struct r_pkey_setup_st
01309 {
01310    int      type;
01311    R_ITEM object;
01312 
01313 } R_PKEY_SETUP, *R_PKEY_SETUP_PTR;
01314 
01319 /*
01320  * There are opaque data types for those things for which can
01321  * switch the implementation routines - hence they do not really have
01322  * a known type as this is able to be changed at runtime.
01323  *
01324  */
01325 #ifndef HEADER_COMMON_R_PKEY_TYPEDEF_DEF
01326 #define HEADER_COMMON_R_PKEY_TYPEDEF_DEF
01327 
01330 typedef struct r_pkey_st R_PKEY;
01331 #endif /* HEADER_COMMON_R_PKEY_TYPEDEF_DEF */
01332 
01333 #ifndef HEADER_COMMON_DATA_R_EITEMS_TYPEDEF_DEF
01334 #define HEADER_COMMON_DATA_R_EITEMS_TYPEDEF_DEF
01335 typedef struct r_eitem_st R_EITEM;      /* Extended item structure. */
01336 typedef struct r_eitems_st R_EITEMS;    /* Extended items structure. */
01337 #endif /* HEADER_COMMON_DATA_R_EITEMS_TYPEDEF_DEF */
01338 
01339 /*
01340  * There is a method table (which encapsulates the functions that implement
01341  * the handling of all public key related functions for a particular type).
01342  */
01346 typedef struct r_pkey_method_st R_PKEY_METHOD;
01347 
01348 
01349 /*
01350  * There is a context which holds a method and other information needed
01351  * for the runtime glue between routines.
01352  */
01353 #ifndef HEADER_COMMON_R_PKEY_CTX_TYPEDEF_DEF
01354 #define HEADER_COMMON_R_PKEY_CTX_TYPEDEF_DEF
01355 
01358 typedef struct r_pkey_ctx_st R_PKEY_CTX;
01359 #endif /* HEADER_COMMON_R_PKEY_CTX_TYPEDEF_DEF */
01360 
01365 typedef struct r_pkey_alg_info_st
01366 {
01367     R_CR_ALG_TYPE type;  
01368     R_CR_ALG_ID   id;    
01369     R_CR_ALG_SUB  sub;   
01370     R_PKEY *pkey; 
01371 } R_PKEY_ALG_INFO;
01372 
01373 #ifndef NO_HDW
01374 
01390 #endif /* NO_HDW */
01391 
01396 #define R_PKEY_PURPOSE_PRIVATE_KEY         1
01397 
01401 #define R_PKEY_PURPOSE_PUBLIC_KEY          2
01402 
01406 #define R_PKEY_PURPOSE_PARAMETERS          3
01407 
01408 #include "r_pkey_m.h"
01409 
01410 /*
01411  * Exported functions
01412  */
01413 
01470 #define R_PKEY_CTX_INFO_ID_LIB_CTX               1
01471 
01479 #define R_PKEY_CTX_INFO_ID_R_PKEY_METHOD         2
01480 
01488 #define R_PKEY_CTX_INFO_ID_CRYPTO_CTX            3
01489 
01497 #define R_PKEY_CTX_INFO_ID_FLAG                  4
01498 
01506 #define R_PKEY_CTX_INFO_ID_DATA                  5
01507 
01543  typedef int R_PKEY_CB_T(void *arg, int type, R_ITEM *item);
01544 
01556 #ifndef NO_R_PKEY_METH_TABLE
01557 int R_CDECL R_PKEY_CTX_new(R_LIB_CTX *lib_ctx, R_RES_FLAG flag, R_PKEY_TYPE pkeytype,
01558     R_PKEY_CTX **pkey_ctx);
01559 int R_CDECL R_PKEY_CTX_free(R_PKEY_CTX *ctx);
01560 
01561 int R_CDECL R_PKEY_CTX_get_info(R_PKEY_CTX *pkey_ctx, int id, void *param);
01562 int R_CDECL R_PKEY_CTX_set_info(R_PKEY_CTX *pkey_ctx, int id, void *param);
01563 
01564 R_LIB_CTX * R_CDECL R_PKEY_CTX_get_LIB_CTX(R_PKEY_CTX *ctx);
01565 #endif /* !defined(NO_R_PKEY_METH_TABLE) */
01566 
01567 R_PKEY_METHOD * R_CDECL R_PKEY_pk_method(void *imp_data);
01568 
01580 #ifndef NO_R_PKEY_METH_TABLE
01581 R_PKEY_CTX * R_CDECL R_PKEY_get_PKEY_CTX(R_PKEY *pkey);
01582 
01583 /* Return the "type" of a pkey - R_PKEY_TYPE_* */
01584 int R_CDECL R_PKEY_get_type(R_PKEY *pkey);
01585 
01586 /* Public/Private key functions */
01587 int R_CDECL R_PKEY_new(R_PKEY_CTX *ctx, R_PKEY_TYPE pkeytype, R_PKEY **pkey);
01588 int R_CDECL R_PKEY_free(R_PKEY *pkey);
01589 int R_CDECL R_PKEY_copy(R_PKEY *new_pkey, R_PKEY *pkey, int flag);
01590 int R_CDECL R_PKEY_dup(R_PKEY *pkey, int flag, R_PKEY **new_pkey);
01591 
01592 int R_CDECL R_PKEY_from_binary(R_PKEY_CTX *pkey_ctx, int flag, R_PKEY_TYPE type,
01593     unsigned int max_buf_len, const unsigned char *buf,
01594     unsigned int *consumed_len, R_PKEY **pkey);
01595 int R_CDECL R_PKEY_to_binary(R_PKEY *pkey, unsigned int max_buf_len, unsigned char *buf,
01596     unsigned int *consumed_len);
01597 int R_CDECL R_PKEY_from_public_key_binary(R_PKEY_CTX *pkey_ctx, int flag,
01598     R_PKEY_TYPE type, unsigned int max_buf_len, const unsigned char *buf,
01599     unsigned int *consumed_len, R_PKEY **pkey);
01600 int R_CDECL R_PKEY_to_public_key_binary(R_PKEY *pkey, unsigned int max_buf_len,
01601     unsigned char *buf, unsigned int *out_len);
01602 
01603 int R_CDECL R_PKEY_reference_inc(R_PKEY *pkey);
01604 int R_CDECL R_PKEY_cmp(R_PKEY *key1, R_PKEY *key2);
01605 int R_CDECL R_PKEY_public_cmp(R_PKEY *key1, R_PKEY *key2);
01606 
01607 int R_CDECL R_PKEY_get_info(R_PKEY *pkey, int id, void *param);
01608 int R_CDECL R_PKEY_set_info(R_PKEY *pkey, int type, void *param);
01609 
01610 int R_CDECL R_PKEY_iterate_fields(R_PKEY *pkey, R_PKEY_CB_T *func, void *arg);
01611 
01612 /* Crypto-related functions */
01613 int R_CDECL R_PKEY_get_num_bits(R_PKEY *pkey);
01614 int R_CDECL R_PKEY_get_num_primes(R_PKEY *pkey);
01615 int R_CDECL R_PKEY_signhash(R_PKEY *pkey, unsigned char *data, unsigned int dlen,
01616     unsigned char *out, unsigned int *olen);
01617 int R_CDECL R_PKEY_verifyhash(R_PKEY *pkey, unsigned char *data, unsigned int dlen,
01618     unsigned char *hash, unsigned int hlen);
01619 #endif /* !defined(NO_R_PKEY_METH_TABLE) */
01620 
01621 int R_CDECL R_PKEY_generate_simple(R_PKEY_CTX *pkey_ctx, R_PKEY **rpkey, int type,
01622     int num_bits, int modifier, int flags, R_SURRENDER *surrender);
01623 
01624 /* wrapper functions - common non-format specific functions that simply
01625  * encapsulate often used steps
01626  */
01627 
01628 int R_CDECL R_PKEY_public_from_file(R_PKEY_CTX *pkey_ctx, R_PKEY **pkey,
01629     char *filename, int type, R_FORMAT format);
01630 
01631 int R_CDECL R_PKEY_from_file(R_PKEY_CTX *pkey_ctx, R_PKEY **pkey,
01632     char *filename, int type, R_FORMAT format);
01633 
01634 int R_CDECL R_PKEY_TYPE_to_string(R_PKEY_TYPE type, unsigned int max_str_len,
01635     char *str);
01636 int R_CDECL R_PKEY_TYPE_from_string(R_PKEY_TYPE *type, char *str);
01637 int R_CDECL R_PKEY_TYPE_to_PEM_header(R_PKEY_TYPE type, unsigned int max_str_len, char *str);
01638 int R_CDECL R_PKEY_TYPE_public_to_PEM_header(R_PKEY_TYPE type, unsigned int max_str_len, char *str);
01639 
01640 int R_CDECL R_PKEY_FORMAT_to_string(R_PKEY_FORMAT format, unsigned int max_str_len,
01641     char *str);
01642 int R_CDECL R_PKEY_FORMAT_from_string(char *str, R_PKEY_FORMAT *format);
01643 
01644 #ifndef NO_BIO
01645 int R_CDECL R_PKEY_to_bio(BIO *bio, R_PKEY *pkey, R_FORMAT format, char *cipher);
01646 
01647 #ifndef NO_R_PKEY_METH_TABLE
01648 int R_CDECL R_PKEY_print(BIO *bio, R_PKEY *pkey, R_FORMAT format, char *format_arg);
01649 #endif /* !defined(NO_R_PKEY_METH_TABLE) */
01650 
01651 int R_CDECL R_PKEY_from_bio(BIO *bio, R_PKEY_CTX *pkey_ctx, R_PKEY **pkey, int type, R_FORMAT format);
01652 
01653 int R_CDECL R_PKEY_public_from_bio(BIO *bio, R_PKEY_CTX *pkey_ctx, R_PKEY **pkey, int type, R_FORMAT format);
01654 
01655 /* R_PKEY print function to add into the resource list */
01656 typedef int (R_CDECL R_PKEY_PRINT_FUNC_T)(BIO *bio, R_PKEY *pkey, R_FORMAT format,
01657     char *format_arg);
01658 
01659 R_PKEY_PRINT_FUNC_T * R_CDECL R_PKEY_get_print_func(void *imp_data);
01660 
01661 #else /* NO_BIO */
01662 
01663 int R_CDECL R_PKEY_print(FILE *bio, R_PKEY *pkey, R_FORMAT format, char *format_arg);
01664 
01665 #endif /* NO_BIO */
01666 
01667 
01673 #ifdef  __cplusplus
01674 }
01675 #endif
01676 #endif /* HEADER_COMMON_CERT_R_PKEY_H */

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