Author: mturk Date: Wed Sep 7 18:47:25 2011 New Revision: 1166310 URL: http://svn.apache.org/viewvc?rev=1166310&view=rev Log: Fill current ssl dynamic api
Modified: commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c Modified: commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c?rev=1166310&r1=1166309&r2=1166310&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c Wed Sep 7 18:47:25 2011 @@ -76,15 +76,90 @@ struct SSLAPIst { unsigned long (*fpSSLeay)(void); const char* (*fpSSLeay_version)(int); + /*** BIO ***/ + long (*fpBIO_ctrl)(BIO *, int, long, void *); + int (*fpBIO_free)(BIO *); + BIO* (*fpBIO_new)(BIO_METHOD *); + BIO* (*fpBIO_new_file)(const char *, const char *); + BIO* (*fpBIO_new_fp)(FILE *, int); + BIO_METHOD* (*fpBIO_s_file)(void); + + /*** BIGNUM ***/ + BIGNUM* (*fpBN_bin2bn)(const unsigned char *s, int len, BIGNUM *ret); + + /*** CRYPTO ***/ + int (*fpCRYPTO_num_locks)(void); + void (*fpCRYPTO_set_dynlock_create_callback)(struct CRYPTO_dynlock_value *(*)(const char *, int)); + void (*fpCRYPTO_set_dynlock_lock_callback)(void (*)(int, struct CRYPTO_dynlock_value *, const char *, int)); + void (*fpCRYPTO_set_dynlock_destroy_callback)(void (*)(struct CRYPTO_dynlock_value *, const char *, int)); + void (*fpCRYPTO_set_id_callback)(unsigned long (*)(void)); + void (*fpCRYPTO_set_locking_callback)(void (*)(int, int, const char *, int)); + int (*fpCRYPTO_set_mem_functions)(void *(*)(size_t),void *(*)(void *,size_t), void (*)(void *)); + + /*** DH ***/ + DH* (*fpDH_new)(void); + void (*fpDH_free)(DH *dh); + + /*** ENGINE ***/ + ENGINE* (*fpENGINE_by_id)(const char *id); + int (*fpENGINE_ctrl)(ENGINE *e, int cmd, long i, void *p, void (*f)(void)); + int (*fpENGINE_ctrl_cmd)(ENGINE *e, const char *cmd_name, long i, void *p, void (*f)(void), int cmd_optional); + int (*fpENGINE_ctrl_cmd_string)(ENGINE *e, const char *cmd_name, const char *arg, int cmd_optional); + + int (*fpENGINE_free)(ENGINE *e); + void (*fpENGINE_load_builtin_engines)(void); + int (*fpENGINE_register_all_complete)(void); + int (*fpENGINE_set_default)(ENGINE *e, unsigned int flags); + + /*** ERR ***/ + void (*fpERR_error_string_n)(unsigned long e, char *buf, size_t len); + unsigned long (*fpERR_get_error)(void); + void (*fpERR_load_crypto_strings)(void); + unsigned long (*fpERR_peek_error)(void); + + /*** MD5 ***/ + int (*fpMD5_Final)(unsigned char *md, MD5_CTX *c); + int (*fpMD5_Init)(MD5_CTX *c); + int (*fpMD5_Update)(MD5_CTX *c, const void *data, size_t len); + + /*** OPENSSL ***/ + void (*fpOPENSSL_load_builtin_modules)(void); + + /*** PEM ***/ + DH* (*fpPEM_read_bio_DHparams)(BIO *bp, DH **x, pem_password_cb *cb, void *u); + X509* (*fpPEM_read_bio_X509)(BIO *bp, X509 **x, pem_password_cb *cb, void *u); + + /*** RAND ***/ + int (*fpRAND_egd)(const char *path); + const char* (*fpRAND_file_name)(char *file,size_t num); + int (*fpRAND_load_file)(const char *file,long max_bytes); + void (*fpRAND_seed)(const void *buf,int num); + int (*fpRAND_status)(void); + + /*** RSA ***/ + RSA* (*fpRSA_generate_key)(int bits, unsigned long e,void (*callback)(int,int,void *),void *cb_arg); + + /*** SSL_CTX ***/ + long (*fpSSL_CTX_ctrl)(SSL_CTX *ctx,int cmd, long larg, void *parg); SSL_CTX* (*fpSSL_CTX_new)(const SSL_METHOD *); void (*fpSSL_CTX_free)(SSL_CTX *); + + /*** SSL ***/ + void* (*fpSSL_get_ex_data)(const SSL *ssl,int idx); + int (*fpSSL_get_ex_new_index)(long, void *, CRYPTO_EX_new *, CRYPTO_EX_dup *, CRYPTO_EX_free *); + int (*fpSSL_library_init)(void); + void (*fpSSL_load_error_strings)(void); + int (*fpSSL_set_ex_data)(SSL *ssl,int idx,void *data); + /*** X509 ***/ + void (*fpX509_free)(X509 *); void (*fpNULL)(void); }; struct SSLOPTst { #if HAVE_FIPS int (*fpFIPS_mode)(void); + int (*fpFIPS_mode_set)(int onoff); #endif #if HAVE_OCSP @@ -119,9 +194,83 @@ ACR_JNI_EXPORT(jboolean, Native, ldopens "OpenSSL 0.9.8 or greater is required"); return JNI_FALSE; } + + /*** BIO ***/ + CRYPTO_FPLOAD(BIO_ctrl); + CRYPTO_FPLOAD(BIO_free); + CRYPTO_FPLOAD(BIO_new); + CRYPTO_FPLOAD(BIO_new_file); + CRYPTO_FPLOAD(BIO_new_fp); + CRYPTO_FPLOAD(BIO_s_file); + + /*** BIGNUM ***/ + CRYPTO_FPLOAD(BN_bin2bn); + + /*** CRYPTO ***/ + CRYPTO_FPLOAD(CRYPTO_num_locks); + CRYPTO_FPLOAD(CRYPTO_set_dynlock_create_callback); + CRYPTO_FPLOAD(CRYPTO_set_dynlock_destroy_callback); + CRYPTO_FPLOAD(CRYPTO_set_dynlock_lock_callback); + CRYPTO_FPLOAD(CRYPTO_set_id_callback); + CRYPTO_FPLOAD(CRYPTO_set_locking_callback); + CRYPTO_FPLOAD(CRYPTO_set_mem_functions); + + /*** DH ***/ + CRYPTO_FPLOAD(DH_new); + CRYPTO_FPLOAD(DH_free); + + /*** ENGINE ***/ + CRYPTO_FPLOAD(ENGINE_by_id); + CRYPTO_FPLOAD(ENGINE_ctrl); + CRYPTO_FPLOAD(ENGINE_ctrl_cmd); + CRYPTO_FPLOAD(ENGINE_ctrl_cmd_string); + CRYPTO_FPLOAD(ENGINE_free); + CRYPTO_FPLOAD(ENGINE_load_builtin_engines); + CRYPTO_FPLOAD(ENGINE_register_all_complete); + CRYPTO_FPLOAD(ENGINE_set_default); + + /*** ERR ***/ + CRYPTO_FPLOAD(ERR_error_string_n); + CRYPTO_FPLOAD(ERR_get_error); + CRYPTO_FPLOAD(ERR_load_crypto_strings); + CRYPTO_FPLOAD(ERR_peek_error); + + /*** MD5 ***/ + CRYPTO_FPLOAD(MD5_Final); + CRYPTO_FPLOAD(MD5_Init); + CRYPTO_FPLOAD(MD5_Update); + + /*** OPENSSL ***/ + CRYPTO_FPLOAD(OPENSSL_load_builtin_modules); + + /*** PEM ***/ + CRYPTO_FPLOAD(PEM_read_bio_DHparams); + CRYPTO_FPLOAD(PEM_read_bio_X509); + + /*** RAND ***/ + CRYPTO_FPLOAD(RAND_egd); + CRYPTO_FPLOAD(RAND_file_name); + CRYPTO_FPLOAD(RAND_load_file); + CRYPTO_FPLOAD(RAND_seed); + CRYPTO_FPLOAD(RAND_status); + + /*** RSA ***/ + CRYPTO_FPLOAD(RSA_generate_key); + + LIBSSL_FPLOAD(SSL_CTX_ctrl); LIBSSL_FPLOAD(SSL_CTX_new); LIBSSL_FPLOAD(SSL_CTX_free); + /*** SSL ***/ + LIBSSL_FPLOAD(SSL_get_ex_data); + LIBSSL_FPLOAD(SSL_get_ex_new_index); + LIBSSL_FPLOAD(SSL_library_init); + LIBSSL_FPLOAD(SSL_load_error_strings); + LIBSSL_FPLOAD(SSL_set_ex_data); + + /*** X509 ***/ + CRYPTO_FPLOAD(X509_free); + /* Optional functions * We could compile with the HAVE_FIPS, but target OpenSSL might not @@ -129,7 +278,9 @@ ACR_JNI_EXPORT(jboolean, Native, ldopens */ #if HAVE_FIPS LIBSSL_LDDOPT(FIPS_mode); + LIBSSL_LDDOPT(FIPS_mode_set); #endif + return JNI_TRUE; failed: AcrThrowEx(env, ACR_EX_ENOENT, "Cannot find %s::%s()", dname, fname); @@ -155,6 +306,215 @@ const char *SSLeay_version(int type) return SSLAPI_LINK(SSLeay_version)(type); } +long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg) +{ + return SSLAPI_LINK(BIO_ctrl)(bp, cmd, larg, parg); +} + +BIO *BIO_new(BIO_METHOD *type) +{ + return SSLAPI_LINK(BIO_new)(type); +} + +int BIO_free(BIO *a) +{ + return SSLAPI_LINK(BIO_free)(a); +} + +BIO *BIO_new_file(const char *filename, const char *mode) +{ + return SSLAPI_LINK(BIO_new_file)(filename, mode); +} + +BIO *BIO_new_fp(FILE *stream, int close_flag) +{ + return SSLAPI_LINK(BIO_new_fp)(stream, close_flag); +} + +BIO_METHOD *BIO_s_file(void) +{ + return SSLAPI_LINK(BIO_s_file)(); +} + +BIGNUM *BN_bin2bn(const unsigned char *s,int len,BIGNUM *ret) +{ + return SSLAPI_LINK(BN_bin2bn)(s, len, ret); +} + +int CRYPTO_num_locks(void) +{ + return SSLAPI_LINK(CRYPTO_num_locks)(); +} + +void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)(const char *file, int line)) +{ + SSLAPI_LINK(CRYPTO_set_dynlock_create_callback)(dyn_create_function); +} + +void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line)) +{ + SSLAPI_LINK(CRYPTO_set_dynlock_lock_callback)(dyn_lock_function); +} + +void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l, const char *file, int line)) +{ + SSLAPI_LINK(CRYPTO_set_dynlock_destroy_callback)(dyn_destroy_function); +} + +void CRYPTO_set_id_callback(unsigned long (*func)(void)) +{ + SSLAPI_LINK(CRYPTO_set_id_callback)(func); +} + +void CRYPTO_set_locking_callback(void (*func)(int mode,int type, + const char *file,int line)) +{ + SSLAPI_LINK(CRYPTO_set_locking_callback)(func); +} + +int CRYPTO_set_mem_functions(void *(*m)(size_t),void *(*r)(void *,size_t), void (*f)(void *)) +{ + return SSLAPI_LINK(CRYPTO_set_mem_functions)(m, r, f); +} + +DH *DH_new(void) +{ + return SSLAPI_LINK(DH_new)(); +} + +void DH_free(DH *dh) +{ + SSLAPI_LINK(DH_free)(dh); +} + +ENGINE *ENGINE_by_id(const char *id) +{ + return SSLAPI_LINK(ENGINE_by_id)(id); +} + +int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)(void)) +{ + return SSLAPI_LINK(ENGINE_ctrl)(e, cmd, i, p, f); +} + +int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f)(void), int cmd_optional) +{ + return SSLAPI_LINK(ENGINE_ctrl_cmd)(e, cmd_name, i, p, f, cmd_optional); +} + +int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, + int cmd_optional) +{ + return SSLAPI_LINK(ENGINE_ctrl_cmd_string)(e, cmd_name, arg, cmd_optional); +} + +int ENGINE_free(ENGINE *e) +{ + return SSLAPI_LINK(ENGINE_free)(e); +} + +void ENGINE_load_builtin_engines(void) +{ + SSLAPI_LINK(ENGINE_load_builtin_engines)(); +} + +int ENGINE_register_all_complete(void) +{ + return SSLAPI_LINK(ENGINE_register_all_complete)(); +} + +int ENGINE_set_default(ENGINE *e, unsigned int flags) +{ + return SSLAPI_LINK(ENGINE_set_default)(e, flags); +} + +void ERR_error_string_n(unsigned long e, char *buf, size_t len) +{ + return SSLAPI_LINK(ERR_error_string_n)(e, buf, len); +} + +unsigned long ERR_get_error(void) +{ + return SSLAPI_LINK(ERR_get_error)(); +} + +void ERR_load_crypto_strings(void) +{ + SSLAPI_LINK(ERR_load_crypto_strings)(); +} + +unsigned long ERR_peek_error(void) +{ + return SSLAPI_LINK(ERR_peek_error)(); +} + +int MD5_Init(MD5_CTX *c) +{ + return SSLAPI_LINK(MD5_Init)(c); +} + +int MD5_Update(MD5_CTX *c, const void *data, size_t len) +{ + return SSLAPI_LINK(MD5_Update)(c, data, len); +} + +int MD5_Final(unsigned char *md, MD5_CTX *c) +{ + return SSLAPI_LINK(MD5_Final)(md, c); +} + +void OPENSSL_load_builtin_modules(void) +{ + SSLAPI_LINK(OPENSSL_load_builtin_modules)(); +} + +DH *PEM_read_bio_DHparams(BIO *bp, DH **x, pem_password_cb *cb, void *u) +{ + return SSLAPI_LINK(PEM_read_bio_DHparams)(bp, x, cb, u); +} + +X509 *PEM_read_bio_X509(BIO *bp, X509 **x, pem_password_cb *cb, void *u) +{ + return SSLAPI_LINK(PEM_read_bio_X509)(bp, x, cb, u); +} + +int RAND_egd(const char *path) +{ + return SSLAPI_LINK(RAND_egd)(path); +} + +const char *RAND_file_name(char *file, size_t num) +{ + return SSLAPI_LINK(RAND_file_name)(file, num); +} + +int RAND_load_file(const char *file, long max_bytes) +{ + return SSLAPI_LINK(RAND_load_file)(file, max_bytes); +} + +void RAND_seed(const void *buf, int num) +{ + SSLAPI_LINK(RAND_seed)(buf, num); +} + +int RAND_status(void) +{ + return SSLAPI_LINK(RAND_status)(); +} + +RSA *RSA_generate_key(int bits, unsigned long e, + void (*callback)(int, int, void *), void *cb_arg) +{ + return SSLAPI_LINK(RSA_generate_key)(bits, e, callback, cb_arg); +} + +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) +{ + return SSLAPI_LINK(SSL_CTX_ctrl)(ctx, cmd, larg, parg); +} + SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) { return SSLAPI_LINK(SSL_CTX_new)(meth); @@ -165,13 +525,50 @@ void SSL_CTX_free(SSL_CTX *ctx) SSLAPI_LINK(SSL_CTX_free)(ctx); } +void *SSL_get_ex_data(const SSL *ssl, int idx) +{ + return SSLAPI_LINK(SSL_get_ex_data)(ssl, idx); +} + +int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) +{ + return SSLAPI_LINK(SSL_get_ex_new_index)(argl, argp, new_func, dup_func, free_func); +} + +int SSL_library_init(void) +{ + return SSLAPI_LINK(SSL_library_init)(); +} + +void SSL_load_error_strings(void) +{ + SSLAPI_LINK(SSL_load_error_strings)(); +} + +int SSL_set_ex_data(SSL *ssl,int idx,void *data) +{ + return SSLAPI_LINK(SSL_set_ex_data)(ssl, idx, data); +} + +void X509_free(X509 *x) +{ + SSLAPI_LINK(X509_free)(x); +} + #if HAVE_FIPS -int FIPS_mode() +int FIPS_mode(void) { if (SSLOPT_HAVE(FIPS_mode)) return SSLOPT_LINK(FIPS_mode)(); else return 0; } + +int FIPS_mode_set(int onoff) +{ + return SSLOPT_LINK(FIPS_mode_set)(onoff); +} + #endif /* HAVE_FIPS */ #endif /* HAVE_OPENSSL_STATIC */