18 string2hex(
const unsigned char *
buf,
int buf_len,
char **hexbuf,
int *hexbuf_len)
20 static const char hex[]=
"0123456789abcdef";
21 int i,
len = 2 * buf_len;
23 if (buf_len < 0 || len < buf_len) {
32 if (!(*hexbuf = OPENSSL_malloc(len + 1))) {
35 for (i = 0; i < buf_len; i++) {
36 (*hexbuf)[2 *
i] = hex[((
unsigned char)buf[i]) >> 4];
37 (*hexbuf)[2 * i + 1] = hex[buf[
i] & 0x0f];
39 (*hexbuf)[2 *
i] =
'\0';
50 #define OSSL_IMPL_ARY2SK(name, type, expected_class, dup) \
52 ossl_##name##_ary2sk0(VALUE ary) \
59 Check_Type(ary, T_ARRAY); \
60 sk = sk_##type##_new_null(); \
61 if (!sk) ossl_raise(eOSSLError, NULL); \
63 for (i = 0; i < RARRAY_LEN(ary); i++) { \
64 val = rb_ary_entry(ary, i); \
65 if (!rb_obj_is_kind_of(val, expected_class)) { \
66 sk_##type##_pop_free(sk, type##_free); \
67 ossl_raise(eOSSLError, "object in array not" \
68 " of class ##type##"); \
71 sk_##type##_push(sk, x); \
77 ossl_protect_##name##_ary2sk(VALUE ary, int *status) \
79 return (STACK_OF(type)*)rb_protect( \
80 (VALUE(*)_((VALUE)))ossl_##name##_ary2sk0, \
86 ossl_##name##_ary2sk(VALUE ary) \
91 sk = ossl_protect_##name##_ary2sk(ary, &status); \
92 if (status) rb_jump_tag(status); \
98 #define OSSL_IMPL_SK2ARY(name, type) \
100 ossl_##name##_sk2ary(STACK_OF(type) *sk) \
107 OSSL_Debug("empty sk!"); \
110 num = sk_##type##_num(sk); \
112 OSSL_Debug("items in sk < -1???"); \
113 return rb_ary_new(); \
115 ary = rb_ary_new2(num); \
117 for (i=0; i<num; i++) { \
118 t = sk_##type##_value(sk, i); \
119 rb_ary_push(ary, ossl_##name##_new(t)); \
178 if (status)
return -1;
181 rb_warning(
"password must be longer than 4 bytes");
185 rb_warning(
"password must be shorter then %d bytes", max_len-1);
209 VALUE proc, rctx, ret;
213 proc = (
VALUE)X509_STORE_CTX_get_ex_data(ctx, ossl_verify_cb_idx);
214 if ((
void*)proc == 0)
216 if ((
void*)proc == 0)
229 rb_warn(
"exception in verify_callback is ignored");
233 X509_STORE_CTX_set_error(ctx, X509_V_OK);
237 if (X509_STORE_CTX_get_error(ctx) == X509_V_OK) {
238 X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_REJECTED);
291 #ifdef HAVE_ERR_PEEK_LAST_ERROR
292 e = ERR_peek_last_error();
294 e = ERR_peek_error();
301 msg = ERR_error_string(e,
NULL);
303 msg = ERR_reason_error_string(e);
313 while ((e = ERR_get_error()) != 0){
314 rb_warn(
"error on stack: %s", ERR_error_string(e,
NULL));
360 while ((e = ERR_get_error()) != 0){
372 #if !defined(HAVE_VA_ARGS_MACRO)
378 if (dOSSL ==
Qtrue) {
379 fprintf(stderr,
"OSSL_DEBUG: ");
381 vfprintf(stderr, fmt, args);
383 fprintf(stderr,
" [CONTEXT N/A]\n");
412 if (dOSSL ==
Qtrue) {
413 CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
414 fprintf(stderr,
"OSSL_DEBUG: IS NOW ON!\n");
415 }
else if (old ==
Qtrue) {
416 CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF);
417 fprintf(stderr,
"OSSL_DEBUG: IS NOW OFF!\n");
811 OpenSSL_add_ssl_algorithms();
812 OpenSSL_add_all_algorithms();
813 ERR_load_crypto_strings();
814 SSL_load_error_strings();
821 CONF_modules_unload(1);
825 CRYPTO_cleanup_all_ex_data();
859 if ((ossl_verify_cb_idx = X509_STORE_CTX_get_ex_new_index(0, (
void *)
"ossl_verify_cb_idx", 0, 0, 0)) < 0)
860 ossl_raise(eOSSLError,
"X509_STORE_CTX_get_ex_new_index");
896 #if defined(OSSL_DEBUG)