| RSA BSAFE Micro Edition Suite |
Streamlined security for mobile and embedded devices |
 
![]() |
00001 /* $Id: cryp_meth.h,v 1.22 2005/06/23 02:15:53 jmckee 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
00017 #ifndef HEADER_COMMON_CRYP_METH_H
00018 #define HEADER_COMMON_CRYP_METH_H
00019
00020 #ifdef __cplusplus
00021 extern "C" {
00022 #endif
00023
00024 #include "cryp_mod.h"
00025
00037 struct r_cr_method_st
00038 {
00040 int (*ctx_new)(R_LIB_CTX *lib_ctx, R_RES_FLAG flag, R_CR_CTX **ctx);
00041
00043 int (*ctx_free)(R_CR_CTX *ctx);
00044
00046 int (*crypto_new)(R_CR_CTX *crypto_ctx, int alg_type, int alg_id,
00047 int alg_sub, R_CR **crypto);
00048
00050 int (*crypto_dup)(R_CR *crypto, R_CR **new_crypto);
00051
00053 int (*crypto_free)(R_CR *crypto);
00054
00061 int (*crypto_get_errinfo)(R_CR *crypto, int what, void **data);
00062
00064 int (*crypto_getinfo)(R_CR *crypto, int id, void **param);
00065
00067 int (*crypto_setinfo)(R_CR *crypto, int id, void *param);
00068
00070 int (*encrypt_init)(R_CR *crypto, R_SKEY *key, R_ITEM *iv);
00071
00073 int (*encrypt)(R_CR *crypto, unsigned char *data,
00074 unsigned int data_len, unsigned char *out,
00075 unsigned int *out_len);
00076
00078 int (*encrypt_update)(R_CR *crypto, unsigned char *data,
00079 unsigned int dlen, unsigned char *out, unsigned int *olen);
00080
00082 int (*encrypt_final)(R_CR *crypto, unsigned char *out,
00083 unsigned int *olen);
00084
00086 int (*decrypt_init)(R_CR *crypto, R_SKEY *key, R_ITEM *iv);
00087
00089 int (*decrypt)(R_CR *crypto, unsigned char *data,
00090 unsigned int data_len, unsigned char *out,
00091 unsigned int *out_len);
00092
00094 int (*decrypt_update)(R_CR *crypto, unsigned char *data,
00095 unsigned int dlen, unsigned char *out, unsigned int *olen);
00096
00098 int (*decrypt_final)(R_CR *crypto, unsigned char *out,
00099 unsigned int *olen);
00100
00102 int (*sign_init)(R_CR *crypto, R_PKEY *key);
00103
00105 int (*sign)(R_CR *crypto, unsigned char *data,
00106 unsigned int dlen, unsigned char *out, unsigned int *olen);
00107
00109 int (*sign_update)(R_CR *crypto, unsigned char *data,
00110 unsigned int data_len);
00111
00113 int (*sign_final)(R_CR *crypto,unsigned char *out,
00114 unsigned int *out_len);
00115
00117 int (*verify_init)(R_CR *crypto, R_PKEY *key);
00118
00120 int (*verify)(R_CR *crypto, unsigned char *data,
00121 unsigned int dlen, unsigned char *signature,
00122 unsigned int slen, int *result);
00123
00125 int (*verify_update)(R_CR *crypto, unsigned char *data,
00126 unsigned int data_len);
00127
00129 int (*verify_final)(R_CR *crypto, unsigned char *signature,
00130 unsigned int sig_len, int *result);
00131
00133 int (*asym_encrypt_init)(R_CR *crypto, R_PKEY *key);
00134
00136 int (*asym_encrypt)(R_CR *crypto, unsigned char *data,
00137 unsigned int data_len, unsigned char *out,
00138 unsigned int *out_len);
00139
00141 int (*asym_decrypt_init)(R_CR *crypto, R_PKEY *key);
00142
00144 int (*asym_decrypt)(R_CR *crypto, unsigned char *data,
00145 unsigned int data_len, unsigned char *out,
00146 unsigned int *out_len);
00147
00149 int (*digest_init)(R_CR *crypto);
00150
00152 int (*digest)(R_CR *crypto, unsigned char *data,
00153 unsigned int data_len, unsigned char *out,
00154 unsigned int *out_len);
00155
00157 int (*digest_update)(R_CR *crypto, unsigned char *data,
00158 unsigned int data_len);
00159
00161 int (*digest_final)(R_CR *crypto, unsigned char *out,
00162 unsigned int *olen);
00163
00165 int (*mac_init)(R_CR *crypto, R_SKEY *key);
00166
00168 int (*mac)(R_CR *crypto, unsigned char *data,
00169 unsigned int data_len, unsigned char *out,
00170 unsigned int *olen);
00171
00173 int (*mac_update)(R_CR *crypto, unsigned char *data,
00174 unsigned int data_len);
00175
00177 int (*mac_final)(R_CR *crypto, unsigned char *out,
00178 unsigned int *olen);
00179
00181 int (*verify_mac_init)(R_CR *crypto, R_SKEY *key);
00182
00184 int (*verify_mac)(R_CR *crypto, unsigned char *data,
00185 unsigned int data_len, unsigned char *mac,
00186 unsigned int mac_len, int *result);
00187
00189 int (*verify_mac_update)(R_CR *crypto, unsigned char *data,
00190 unsigned int data_len);
00191
00193 int (*verify_mac_final)(R_CR *crypto, unsigned char *mac,
00194 unsigned int mac_len, int *result);
00195
00201 int (*key_exchange_init)(R_CR *crypto, R_PKEY *key);
00202
00208 int (*key_exchange_phase_1)(R_CR *crypto, unsigned char *out,
00209 unsigned int *olen);
00210
00216 int (*key_exchange_phase_2)(R_CR *crypto, unsigned char *data,
00217 unsigned int dlen, unsigned char *out, unsigned int * olen);
00218
00220 int (*generate_key_init)(R_CR *crypto);
00221
00223 int (*generate_key)(R_CR *crypto, R_PKEY **key);
00224
00226 int (*generate_params_init)(R_CR *crypto);
00227
00229 int (*generate_params)(R_CR *crypto, R_PKEY **params);
00230
00232 int (*random_seed)(R_CR *crypto, unsigned char *bytes,
00233 unsigned int len);
00234
00236 int (*gen_rand)(R_CR *crypto, unsigned int len,
00237 unsigned char *out, unsigned int *olen);
00238 };
00239
00240
00246 int R_CDECL r_crm_not_implemented(void);
00247
00248 int R_CDECL r_crm_ctx_new(R_LIB_CTX *lib_ctx, R_RES_FLAG flag, R_CR_CTX **crypto_ctx);
00249 int R_CDECL r_crm_ctx_free(R_CR_CTX *crypto_ctx);
00250
00251 int R_CDECL r_crm_new(R_CR_CTX *crypto_ctx, R_CR_ALG_TYPE alg_type, R_CR_ALG_ID alg_id,
00252 R_CR_ALG_SUB alg_sub, R_CR **crypto);
00253 int R_CDECL r_crm_dup(R_CR *crypto, R_CR **new_crypto);
00254 int R_CDECL r_crm_free(R_CR *crypto);
00255
00256 int R_CDECL r_crm_digest_init(R_CR *crypto);
00257 int R_CDECL r_crm_digest(R_CR *crypto, unsigned char *data,
00258 unsigned int data_len, unsigned char *out,
00259 unsigned int *out_len);
00260 int R_CDECL r_crm_digest_update(R_CR *crypto, unsigned char *data,
00261 unsigned int data_len);
00262 int R_CDECL r_crm_digest_final(R_CR *crypto, unsigned char *out,
00263 unsigned int *olen);
00264
00265 int R_CDECL r_crm_mac_init(R_CR *crypto, R_SKEY *key);
00266 int R_CDECL r_crm_mac(R_CR *crypto, unsigned char *data,
00267 unsigned int data_len, unsigned char *out,
00268 unsigned int *olen);
00269 int R_CDECL r_crm_mac_update(R_CR *crypto, unsigned char *data,
00270 unsigned int data_len);
00271 int R_CDECL r_crm_mac_final(R_CR *crypto, unsigned char *out,
00272 unsigned int *olen);
00273
00274 int R_CDECL r_crm_verify_mac(R_CR *crypto, unsigned char *data,
00275 unsigned int data_len, unsigned char *mac, unsigned int mac_len,
00276 int *result);
00277 int R_CDECL r_crm_verify_mac_update(R_CR *crypto, unsigned char *data,
00278 unsigned int data_len);
00279 int R_CDECL r_crm_verify_mac_final(R_CR *crypto, unsigned char *mac,
00280 unsigned int mac_len, int *result);
00281
00282 int R_CDECL r_crm_encrypt_init(R_CR *crypto, R_SKEY *key, R_ITEM *iv);
00283 int R_CDECL r_crm_decrypt_init(R_CR *crypto, R_SKEY *key, R_ITEM *iv);
00284 int R_CDECL r_crm_cipher(R_CR *crypto, unsigned char *data,
00285 unsigned int data_len, unsigned char *out, unsigned int *out_len);
00286 int R_CDECL r_crm_cipher_update(R_CR *crypto, unsigned char *data,
00287 unsigned int dlen, unsigned char *out, unsigned int *olen);
00288 int R_CDECL r_crm_cipher_final(R_CR *crypto, unsigned char *out,unsigned int *olen);
00289
00290 int R_CDECL r_crm_asym_init(R_CR *crypto, R_PKEY *key);
00291 int R_CDECL r_crm_asym_enc(R_CR *crypto, unsigned char *data,
00292 unsigned int data_len, unsigned char *out,
00293 unsigned int *out_len);
00294 int R_CDECL r_crm_asym_dec(R_CR *crypto, unsigned char *data,
00295 unsigned int data_len, unsigned char *out, unsigned int *out_len);
00296
00297 int R_CDECL r_crm_ke_init(R_CR *crypto, R_PKEY *key);
00298 int R_CDECL r_crm_ke_phase_1(R_CR *crypto, unsigned char *out,
00299 unsigned int *olen);
00300 int R_CDECL r_crm_ke_phase_2(R_CR *crypto, unsigned char *data,
00301 unsigned int dlen, unsigned char *out, unsigned int * olen);
00302
00303 int R_CDECL r_crm_kgen_init(R_CR *crypto);
00304 int R_CDECL r_crm_generate_key(R_CR *crypto, R_PKEY **key);
00305
00306 int R_CDECL r_crm_pgen_init(R_CR *crypto);
00307 int R_CDECL r_crm_generate_params(R_CR *crypto, R_PKEY **params);
00308
00309 int R_CDECL r_crm_sign_vfy_init(R_CR *crypto, R_PKEY *key);
00310 int R_CDECL r_crm_sign(R_CR *crypto, unsigned char *data, unsigned int dlen,
00311 unsigned char *out, unsigned int *olen);
00312 int R_CDECL r_crm_sign_update(R_CR *crypto, unsigned char *data, unsigned int data_len);
00313 int R_CDECL r_crm_sign_final(R_CR *crypto,unsigned char *out, unsigned int *out_len);
00314 int R_CDECL r_crm_verify(R_CR *crypto, unsigned char *data, unsigned int dlen,
00315 unsigned char *signature, unsigned int slen, int *result);
00316 int R_CDECL r_crm_verify_update(R_CR *crypto, unsigned char *data,
00317 unsigned int data_len);
00318 int R_CDECL r_crm_verify_final(R_CR *crypto, unsigned char *signature,
00319 unsigned int sig_len, int *result);
00320
00321 int R_CDECL r_crm_random_seed(R_CR *crypto, unsigned char *seed, unsigned int len);
00322 int R_CDECL r_crm_gen_rand(R_CR *crypto, unsigned int len,
00323 unsigned char *out, unsigned int *olen);
00324
00325 int R_CDECL r_crm_get_errinfo(R_CR *crypto, int what, void **data);
00326
00327 int R_CDECL r_crm_get_info(R_CR *crypto, int id, void **param);
00328 int R_CDECL r_crm_set_info(R_CR *crypto, int id, void *param);
00329
00330 int R_CDECL r_crm_function_lookup(R_CR *crypto, R_CR_IMP_METHOD *table,
00331 R_CR_IMP_METHOD **imp_meth);
00332
00333
00334 #ifdef __cplusplus
00335 }
00336 #endif
00337
00338 #endif /* HEADER_COMMON_CRYP_METH_H */