| RSA BSAFE Micro Edition Suite |
Streamlined security for mobile and embedded devices |
 
![]() |
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 */