rubysl-openssl 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -7
 - data/ext/rubysl/openssl/extconf.rb +7 -4
 - data/ext/rubysl/openssl/openssl_missing.c +2 -2
 - data/ext/rubysl/openssl/ossl.c +91 -25
 - data/ext/rubysl/openssl/ossl.h +3 -4
 - data/ext/rubysl/openssl/ossl_asn1.c +52 -6
 - data/ext/rubysl/openssl/ossl_bio.c +1 -1
 - data/ext/rubysl/openssl/ossl_bn.c +37 -2
 - data/ext/rubysl/openssl/ossl_cipher.c +1 -1
 - data/ext/rubysl/openssl/ossl_config.c +9 -0
 - data/ext/rubysl/openssl/ossl_digest.c +2 -0
 - data/ext/rubysl/openssl/ossl_engine.c +158 -0
 - data/ext/rubysl/openssl/ossl_hmac.c +97 -3
 - data/ext/rubysl/openssl/ossl_ocsp.c +3 -3
 - data/ext/rubysl/openssl/ossl_pkcs7.c +2 -2
 - data/ext/rubysl/openssl/ossl_pkey.c +6 -3
 - data/ext/rubysl/openssl/ossl_pkey_dh.c +4 -3
 - data/ext/rubysl/openssl/ossl_pkey_dsa.c +2 -0
 - data/ext/rubysl/openssl/ossl_pkey_ec.c +4 -2
 - data/ext/rubysl/openssl/ossl_pkey_rsa.c +3 -2
 - data/ext/rubysl/openssl/ossl_ssl.c +62 -22
 - data/ext/rubysl/openssl/ossl_x509attr.c +2 -2
 - data/ext/rubysl/openssl/ossl_x509cert.c +3 -3
 - data/ext/rubysl/openssl/ossl_x509crl.c +4 -4
 - data/ext/rubysl/openssl/ossl_x509name.c +1 -1
 - data/ext/rubysl/openssl/ossl_x509req.c +2 -2
 - data/ext/rubysl/openssl/ossl_x509revoked.c +2 -2
 - data/ext/rubysl/openssl/ossl_x509store.c +4 -4
 - data/lib/openssl/bn.rb +4 -1
 - data/lib/openssl/buffering.rb +28 -20
 - data/lib/openssl/cipher.rb +1 -1
 - data/lib/openssl/config.rb +164 -5
 - data/lib/openssl/digest.rb +13 -14
 - data/lib/openssl/ssl.rb +58 -11
 - data/lib/rubysl/openssl/version.rb +1 -1
 - metadata +61 -72
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ---
         
     | 
| 
       2 
     | 
    
         
            -
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
       5 
     | 
    
         
            -
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 1 
     | 
    
         
            +
            --- 
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1: 
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 6b3988369f86f1fbb46045c54d623c57099d55c5
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 35112e17b1e09c08fb9418716efae287097b3356
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512: 
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: dc8425d85daf0d3605f1c6cac3015556df849c79d206efa71d629dbaa351473ac6c86c4bc5b17e250c50c7e62d42fab21114b38617ffcafe044a2708a3af12b2
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 25dcc1ecb2117d1427d79c6f01d256e0a70e21c48a454a7ae3adfc517ec781a48384ecf27cb8423f0a912c7ef3df1b2e64b13d3ecd43572a28a11dbb8dba4c11
         
     | 
| 
         @@ -31,9 +31,6 @@ if with_config("debug") or enable_config("debug") 
     | 
|
| 
       31 
31 
     | 
    
         
             
              $defs.push("-DOSSL_DEBUG") unless $defs.include? "-DOSSL_DEBUG"
         
     | 
| 
       32 
32 
     | 
    
         
             
            end
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
            # Nothing we can do about these problems.
         
     | 
| 
       35 
     | 
    
         
            -
            $CPPFLAGS += " -Wno-deprecated-declarations -Wno-pointer-sign"
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
34 
     | 
    
         
             
            Logging::message "=== Checking for system dependent stuff... ===\n"
         
     | 
| 
       38 
35 
     | 
    
         
             
            have_library("nsl", "t_open")
         
     | 
| 
       39 
36 
     | 
    
         
             
            have_library("socket", "socket")
         
     | 
| 
         @@ -61,6 +58,9 @@ end 
     | 
|
| 
       61 
58 
     | 
    
         
             
            unless have_header("openssl/conf_api.h")
         
     | 
| 
       62 
59 
     | 
    
         
             
              raise "OpenSSL 0.9.6 or later required."
         
     | 
| 
       63 
60 
     | 
    
         
             
            end
         
     | 
| 
      
 61 
     | 
    
         
            +
            unless OpenSSL.check_func("SSL_library_init()", "openssl/ssl.h")
         
     | 
| 
      
 62 
     | 
    
         
            +
              raise "Ignore OpenSSL broken by Apple.\nPlease use another openssl. (e.g. using `configure --with-openssl-dir=/path/to/openssl')"
         
     | 
| 
      
 63 
     | 
    
         
            +
            end
         
     | 
| 
       64 
64 
     | 
    
         | 
| 
       65 
65 
     | 
    
         
             
            Logging::message "=== Checking for OpenSSL features... ===\n"
         
     | 
| 
       66 
66 
     | 
    
         
             
            have_func("ERR_peek_last_error")
         
     | 
| 
         @@ -144,6 +144,7 @@ if checking_for('OpenSSL version is 0.9.7 or later') { 
     | 
|
| 
       144 
144 
     | 
    
         
             
              }
         
     | 
| 
       145 
145 
     | 
    
         
             
              have_header("openssl/ocsp.h")
         
     | 
| 
       146 
146 
     | 
    
         
             
            end
         
     | 
| 
      
 147 
     | 
    
         
            +
            have_struct_member("CRYPTO_THREADID", "ptr", "openssl/crypto.h")
         
     | 
| 
       147 
148 
     | 
    
         
             
            have_struct_member("EVP_CIPHER_CTX", "flags", "openssl/evp.h")
         
     | 
| 
       148 
149 
     | 
    
         
             
            have_struct_member("EVP_CIPHER_CTX", "engine", "openssl/evp.h")
         
     | 
| 
       149 
150 
     | 
    
         
             
            have_struct_member("X509_ATTRIBUTE", "single", "openssl/x509.h")
         
     | 
| 
         @@ -153,5 +154,7 @@ have_macro("EVP_CTRL_GCM_GET_TAG", ['openssl/evp.h']) && $defs.push("-DHAVE_AUTH 
     | 
|
| 
       153 
154 
     | 
    
         
             
            Logging::message "=== Checking done. ===\n"
         
     | 
| 
       154 
155 
     | 
    
         | 
| 
       155 
156 
     | 
    
         
             
            create_header
         
     | 
| 
       156 
     | 
    
         
            -
            create_makefile("openssl/openssl")
         
     | 
| 
      
 157 
     | 
    
         
            +
            create_makefile("openssl/openssl") {|conf|
         
     | 
| 
      
 158 
     | 
    
         
            +
              conf << "THREAD_MODEL = #{CONFIG["THREAD_MODEL"]}\n"
         
     | 
| 
      
 159 
     | 
    
         
            +
            }
         
     | 
| 
       157 
160 
     | 
    
         
             
            Logging::message "Done.\n"
         
     | 
| 
         @@ -10,7 +10,7 @@ 
     | 
|
| 
       10 
10 
     | 
    
         
             
             */
         
     | 
| 
       11 
11 
     | 
    
         
             
            #include RUBY_EXTCONF_H
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            #if defined(HAVE_OPENSSL_ENGINE_H) && defined( 
     | 
| 
      
 13 
     | 
    
         
            +
            #if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_EVP_CIPHER_CTX_ENGINE)
         
     | 
| 
       14 
14 
     | 
    
         
             
            # include <openssl/engine.h>
         
     | 
| 
       15 
15 
     | 
    
         
             
            #endif
         
     | 
| 
       16 
16 
     | 
    
         
             
            #include <openssl/x509_vfy.h>
         
     | 
| 
         @@ -122,7 +122,7 @@ EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, EVP_CIPHER_CTX *in) 
     | 
|
| 
       122 
122 
     | 
    
         
             
            {
         
     | 
| 
       123 
123 
     | 
    
         
             
                memcpy(out, in, sizeof(EVP_CIPHER_CTX));
         
     | 
| 
       124 
124 
     | 
    
         | 
| 
       125 
     | 
    
         
            -
            #if defined(HAVE_ENGINE_ADD) && defined( 
     | 
| 
      
 125 
     | 
    
         
            +
            #if defined(HAVE_ENGINE_ADD) && defined(HAVE_EVP_CIPHER_CTX_ENGINE)
         
     | 
| 
       126 
126 
     | 
    
         
             
                if (in->engine) ENGINE_add(out->engine);
         
     | 
| 
       127 
127 
     | 
    
         
             
                if (in->cipher_data) {
         
     | 
| 
       128 
128 
     | 
    
         
             
            	out->cipher_data = OPENSSL_malloc(in->cipher->ctx_size);
         
     | 
    
        data/ext/rubysl/openssl/ossl.c
    CHANGED
    
    | 
         @@ -293,10 +293,9 @@ ossl_to_der_if_possible(VALUE obj) 
     | 
|
| 
       293 
293 
     | 
    
         
             
            static VALUE
         
     | 
| 
       294 
294 
     | 
    
         
             
            ossl_make_error(VALUE exc, const char *fmt, va_list args)
         
     | 
| 
       295 
295 
     | 
    
         
             
            {
         
     | 
| 
       296 
     | 
    
         
            -
                 
     | 
| 
      
 296 
     | 
    
         
            +
                VALUE str = Qnil;
         
     | 
| 
       297 
297 
     | 
    
         
             
                const char *msg;
         
     | 
| 
       298 
298 
     | 
    
         
             
                long e;
         
     | 
| 
       299 
     | 
    
         
            -
                int len = 0;
         
     | 
| 
       300 
299 
     | 
    
         | 
| 
       301 
300 
     | 
    
         
             
            #ifdef HAVE_ERR_PEEK_LAST_ERROR
         
     | 
| 
       302 
301 
     | 
    
         
             
                e = ERR_peek_last_error();
         
     | 
| 
         @@ -304,14 +303,20 @@ ossl_make_error(VALUE exc, const char *fmt, va_list args) 
     | 
|
| 
       304 
303 
     | 
    
         
             
                e = ERR_peek_error();
         
     | 
| 
       305 
304 
     | 
    
         
             
            #endif
         
     | 
| 
       306 
305 
     | 
    
         
             
                if (fmt) {
         
     | 
| 
       307 
     | 
    
         
            -
            	 
     | 
| 
      
 306 
     | 
    
         
            +
            	str = rb_sprintf(fmt, args);
         
     | 
| 
       308 
307 
     | 
    
         
             
                }
         
     | 
| 
       309 
     | 
    
         
            -
                if ( 
     | 
| 
      
 308 
     | 
    
         
            +
                if (e) {
         
     | 
| 
       310 
309 
     | 
    
         
             
            	if (dOSSL == Qtrue) /* FULL INFO */
         
     | 
| 
       311 
310 
     | 
    
         
             
            	    msg = ERR_error_string(e, NULL);
         
     | 
| 
       312 
311 
     | 
    
         
             
            	else
         
     | 
| 
       313 
312 
     | 
    
         
             
            	    msg = ERR_reason_error_string(e);
         
     | 
| 
       314 
     | 
    
         
            -
            	 
     | 
| 
      
 313 
     | 
    
         
            +
            	if (NIL_P(str)) {
         
     | 
| 
      
 314 
     | 
    
         
            +
            	    if (msg) str = rb_str_new_cstr(msg);
         
     | 
| 
      
 315 
     | 
    
         
            +
            	}
         
     | 
| 
      
 316 
     | 
    
         
            +
            	else {
         
     | 
| 
      
 317 
     | 
    
         
            +
            	    if (RSTRING_LEN(str)) rb_str_cat2(str, ": ");
         
     | 
| 
      
 318 
     | 
    
         
            +
            	    rb_str_cat2(str, msg ? msg : "(null)");
         
     | 
| 
      
 319 
     | 
    
         
            +
            	}
         
     | 
| 
       315 
320 
     | 
    
         
             
                }
         
     | 
| 
       316 
321 
     | 
    
         
             
                if (dOSSL == Qtrue){ /* show all errors on the stack */
         
     | 
| 
       317 
322 
     | 
    
         
             
            	while ((e = ERR_get_error()) != 0){
         
     | 
| 
         @@ -320,8 +325,8 @@ ossl_make_error(VALUE exc, const char *fmt, va_list args) 
     | 
|
| 
       320 
325 
     | 
    
         
             
                }
         
     | 
| 
       321 
326 
     | 
    
         
             
                ERR_clear_error();
         
     | 
| 
       322 
327 
     | 
    
         | 
| 
       323 
     | 
    
         
            -
                if( 
     | 
| 
       324 
     | 
    
         
            -
                return  
     | 
| 
      
 328 
     | 
    
         
            +
                if (NIL_P(str)) str = rb_str_new(0, 0);
         
     | 
| 
      
 329 
     | 
    
         
            +
                return rb_exc_new3(exc, str);
         
     | 
| 
       325 
330 
     | 
    
         
             
            }
         
     | 
| 
       326 
331 
     | 
    
         | 
| 
       327 
332 
     | 
    
         
             
            void
         
     | 
| 
         @@ -461,33 +466,89 @@ ossl_fips_mode_set(VALUE self, VALUE enabled) 
     | 
|
| 
       461 
466 
     | 
    
         
             
            /**
         
     | 
| 
       462 
467 
     | 
    
         
             
             * Stores locks needed for OpenSSL thread safety
         
     | 
| 
       463 
468 
     | 
    
         
             
             */
         
     | 
| 
       464 
     | 
    
         
            -
             
     | 
| 
      
 469 
     | 
    
         
            +
            #include "ruby/thread_native.h"
         
     | 
| 
      
 470 
     | 
    
         
            +
            static rb_nativethread_lock_t *ossl_locks;
         
     | 
| 
      
 471 
     | 
    
         
            +
             
     | 
| 
      
 472 
     | 
    
         
            +
            static void
         
     | 
| 
      
 473 
     | 
    
         
            +
            ossl_lock_unlock(int mode, rb_nativethread_lock_t *lock)
         
     | 
| 
      
 474 
     | 
    
         
            +
            {
         
     | 
| 
      
 475 
     | 
    
         
            +
                if (mode & CRYPTO_LOCK) {
         
     | 
| 
      
 476 
     | 
    
         
            +
            	rb_nativethread_lock_lock(lock);
         
     | 
| 
      
 477 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 478 
     | 
    
         
            +
            	rb_nativethread_lock_unlock(lock);
         
     | 
| 
      
 479 
     | 
    
         
            +
                }
         
     | 
| 
      
 480 
     | 
    
         
            +
            }
         
     | 
| 
      
 481 
     | 
    
         
            +
             
     | 
| 
      
 482 
     | 
    
         
            +
            static void
         
     | 
| 
      
 483 
     | 
    
         
            +
            ossl_lock_callback(int mode, int type, const char *file, int line)
         
     | 
| 
      
 484 
     | 
    
         
            +
            {
         
     | 
| 
      
 485 
     | 
    
         
            +
                ossl_lock_unlock(mode, &ossl_locks[type]);
         
     | 
| 
      
 486 
     | 
    
         
            +
            }
         
     | 
| 
      
 487 
     | 
    
         
            +
             
     | 
| 
      
 488 
     | 
    
         
            +
            struct CRYPTO_dynlock_value {
         
     | 
| 
      
 489 
     | 
    
         
            +
                rb_nativethread_lock_t lock;
         
     | 
| 
      
 490 
     | 
    
         
            +
            };
         
     | 
| 
      
 491 
     | 
    
         
            +
             
     | 
| 
      
 492 
     | 
    
         
            +
            static struct CRYPTO_dynlock_value *
         
     | 
| 
      
 493 
     | 
    
         
            +
            ossl_dyn_create_callback(const char *file, int line)
         
     | 
| 
      
 494 
     | 
    
         
            +
            {
         
     | 
| 
      
 495 
     | 
    
         
            +
                struct CRYPTO_dynlock_value *dynlock = (struct CRYPTO_dynlock_value *)OPENSSL_malloc((int)sizeof(struct CRYPTO_dynlock_value));
         
     | 
| 
      
 496 
     | 
    
         
            +
                rb_nativethread_lock_initialize(&dynlock->lock);
         
     | 
| 
      
 497 
     | 
    
         
            +
                return dynlock;
         
     | 
| 
      
 498 
     | 
    
         
            +
            }
         
     | 
| 
      
 499 
     | 
    
         
            +
             
     | 
| 
      
 500 
     | 
    
         
            +
            static void
         
     | 
| 
      
 501 
     | 
    
         
            +
            ossl_dyn_lock_callback(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line)
         
     | 
| 
      
 502 
     | 
    
         
            +
            {
         
     | 
| 
      
 503 
     | 
    
         
            +
                ossl_lock_unlock(mode, &l->lock);
         
     | 
| 
      
 504 
     | 
    
         
            +
            }
         
     | 
| 
       465 
505 
     | 
    
         | 
| 
       466 
     | 
    
         
            -
            static void 
     | 
| 
      
 506 
     | 
    
         
            +
            static void
         
     | 
| 
      
 507 
     | 
    
         
            +
            ossl_dyn_destroy_callback(struct CRYPTO_dynlock_value *l, const char *file, int line)
         
     | 
| 
       467 
508 
     | 
    
         
             
            {
         
     | 
| 
       468 
     | 
    
         
            -
             
     | 
| 
       469 
     | 
    
         
            -
                 
     | 
| 
       470 
     | 
    
         
            -
              } else {
         
     | 
| 
       471 
     | 
    
         
            -
                rb_mutex_unlock(ossl_locks[type]);
         
     | 
| 
       472 
     | 
    
         
            -
              }
         
     | 
| 
      
 509 
     | 
    
         
            +
                rb_nativethread_lock_destroy(&l->lock);
         
     | 
| 
      
 510 
     | 
    
         
            +
                OPENSSL_free(l);
         
     | 
| 
       473 
511 
     | 
    
         
             
            }
         
     | 
| 
       474 
512 
     | 
    
         | 
| 
      
 513 
     | 
    
         
            +
            #ifdef HAVE_CRYPTO_THREADID_PTR
         
     | 
| 
      
 514 
     | 
    
         
            +
            static void ossl_threadid_func(CRYPTO_THREADID *id)
         
     | 
| 
      
 515 
     | 
    
         
            +
            {
         
     | 
| 
      
 516 
     | 
    
         
            +
                /* register native thread id */
         
     | 
| 
      
 517 
     | 
    
         
            +
                CRYPTO_THREADID_set_pointer(id, (void *)rb_nativethread_self());
         
     | 
| 
      
 518 
     | 
    
         
            +
            }
         
     | 
| 
      
 519 
     | 
    
         
            +
            #else
         
     | 
| 
       475 
520 
     | 
    
         
             
            static unsigned long ossl_thread_id(void)
         
     | 
| 
       476 
521 
     | 
    
         
             
            {
         
     | 
| 
       477 
     | 
    
         
            -
             
     | 
| 
      
 522 
     | 
    
         
            +
                /* before OpenSSL 1.0, this is 'unsigned long' */
         
     | 
| 
      
 523 
     | 
    
         
            +
                return (unsigned long)rb_nativethread_self();
         
     | 
| 
       478 
524 
     | 
    
         
             
            }
         
     | 
| 
      
 525 
     | 
    
         
            +
            #endif
         
     | 
| 
       479 
526 
     | 
    
         | 
| 
       480 
527 
     | 
    
         
             
            static void Init_ossl_locks(void)
         
     | 
| 
       481 
528 
     | 
    
         
             
            {
         
     | 
| 
       482 
     | 
    
         
            -
             
     | 
| 
       483 
     | 
    
         
            -
             
     | 
| 
       484 
     | 
    
         
            -
             
     | 
| 
       485 
     | 
    
         
            -
                 
     | 
| 
       486 
     | 
    
         
            -
             
     | 
| 
       487 
     | 
    
         
            -
             
     | 
| 
       488 
     | 
    
         
            -
             
     | 
| 
       489 
     | 
    
         
            -
             
     | 
| 
       490 
     | 
    
         
            -
             
     | 
| 
      
 529 
     | 
    
         
            +
                int i;
         
     | 
| 
      
 530 
     | 
    
         
            +
                int num_locks = CRYPTO_num_locks();
         
     | 
| 
      
 531 
     | 
    
         
            +
             
     | 
| 
      
 532 
     | 
    
         
            +
                if ((unsigned)num_locks >= INT_MAX / (int)sizeof(VALUE)) {
         
     | 
| 
      
 533 
     | 
    
         
            +
            	rb_raise(rb_eRuntimeError, "CRYPTO_num_locks() is too big: %d", num_locks);
         
     | 
| 
      
 534 
     | 
    
         
            +
                }
         
     | 
| 
      
 535 
     | 
    
         
            +
                ossl_locks = (rb_nativethread_lock_t *) OPENSSL_malloc(num_locks * (int)sizeof(rb_nativethread_lock_t));
         
     | 
| 
      
 536 
     | 
    
         
            +
                if (!ossl_locks) {
         
     | 
| 
      
 537 
     | 
    
         
            +
            	rb_raise(rb_eNoMemError, "CRYPTO_num_locks() is too big: %d", num_locks);
         
     | 
| 
      
 538 
     | 
    
         
            +
                }
         
     | 
| 
      
 539 
     | 
    
         
            +
                for (i = 0; i < num_locks; i++) {
         
     | 
| 
      
 540 
     | 
    
         
            +
            	rb_nativethread_lock_initialize(&ossl_locks[i]);
         
     | 
| 
      
 541 
     | 
    
         
            +
                }
         
     | 
| 
      
 542 
     | 
    
         
            +
             
     | 
| 
      
 543 
     | 
    
         
            +
            #ifdef HAVE_CRYPTO_THREADID_PTR
         
     | 
| 
      
 544 
     | 
    
         
            +
                CRYPTO_THREADID_set_callback(ossl_threadid_func);
         
     | 
| 
      
 545 
     | 
    
         
            +
            #else
         
     | 
| 
      
 546 
     | 
    
         
            +
                CRYPTO_set_id_callback(ossl_thread_id);
         
     | 
| 
      
 547 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 548 
     | 
    
         
            +
                CRYPTO_set_locking_callback(ossl_lock_callback);
         
     | 
| 
      
 549 
     | 
    
         
            +
                CRYPTO_set_dynlock_create_callback(ossl_dyn_create_callback);
         
     | 
| 
      
 550 
     | 
    
         
            +
                CRYPTO_set_dynlock_lock_callback(ossl_dyn_lock_callback);
         
     | 
| 
      
 551 
     | 
    
         
            +
                CRYPTO_set_dynlock_destroy_callback(ossl_dyn_destroy_callback);
         
     | 
| 
       491 
552 
     | 
    
         
             
            }
         
     | 
| 
       492 
553 
     | 
    
         | 
| 
       493 
554 
     | 
    
         
             
            /*
         
     | 
| 
         @@ -788,7 +849,7 @@ static void Init_ossl_locks(void) 
     | 
|
| 
       788 
849 
     | 
    
         
             
             *   cipher = OpenSSL::Cipher::Cipher.new 'AES-128-CBC'
         
     | 
| 
       789 
850 
     | 
    
         
             
             *
         
     | 
| 
       790 
851 
     | 
    
         
             
             *   open 'ca_key.pem', 'w', 0400 do |io|
         
     | 
| 
       791 
     | 
    
         
            -
             *     io.write  
     | 
| 
      
 852 
     | 
    
         
            +
             *     io.write ca_key.export(cipher, pass_phrase)
         
     | 
| 
       792 
853 
     | 
    
         
             
             *   end
         
     | 
| 
       793 
854 
     | 
    
         
             
             *
         
     | 
| 
       794 
855 
     | 
    
         
             
             * === CA Certificate
         
     | 
| 
         @@ -1021,6 +1082,11 @@ Init_openssl() 
     | 
|
| 
       1021 
1082 
     | 
    
         
             
                 */
         
     | 
| 
       1022 
1083 
     | 
    
         
             
                rb_define_const(mOSSL, "OPENSSL_VERSION", rb_str_new2(OPENSSL_VERSION_TEXT));
         
     | 
| 
       1023 
1084 
     | 
    
         | 
| 
      
 1085 
     | 
    
         
            +
                /*
         
     | 
| 
      
 1086 
     | 
    
         
            +
                 * Version of OpenSSL the ruby OpenSSL extension is running with
         
     | 
| 
      
 1087 
     | 
    
         
            +
                 */
         
     | 
| 
      
 1088 
     | 
    
         
            +
                rb_define_const(mOSSL, "OPENSSL_LIBRARY_VERSION", rb_str_new2(SSLeay_version(SSLEAY_VERSION)));
         
     | 
| 
      
 1089 
     | 
    
         
            +
             
     | 
| 
       1024 
1090 
     | 
    
         
             
                /*
         
     | 
| 
       1025 
1091 
     | 
    
         
             
                 * Version number of OpenSSL the ruby OpenSSL extension was built with
         
     | 
| 
       1026 
1092 
     | 
    
         
             
                 * (base 16)
         
     | 
    
        data/ext/rubysl/openssl/ossl.h
    CHANGED
    
    | 
         @@ -28,7 +28,6 @@ extern "C" { 
     | 
|
| 
       28 
28 
     | 
    
         
             
            #if defined(RFILE) /*&& !defined(OSSL_DEBUG)*/
         
     | 
| 
       29 
29 
     | 
    
         
             
            #  undef RFILE
         
     | 
| 
       30 
30 
     | 
    
         
             
            #endif
         
     | 
| 
       31 
     | 
    
         
            -
            #define RSTRING_NOT_MODIFIED 1
         
     | 
| 
       32 
31 
     | 
    
         
             
            #include <ruby.h>
         
     | 
| 
       33 
32 
     | 
    
         
             
            #include <ruby/io.h>
         
     | 
| 
       34 
33 
     | 
    
         
             
            #include <ruby/thread.h>
         
     | 
| 
         @@ -67,7 +66,7 @@ extern "C" { 
     | 
|
| 
       67 
66 
     | 
    
         
             
            #include <openssl/conf_api.h>
         
     | 
| 
       68 
67 
     | 
    
         
             
            #undef X509_NAME
         
     | 
| 
       69 
68 
     | 
    
         
             
            #undef PKCS7_SIGNER_INFO
         
     | 
| 
       70 
     | 
    
         
            -
            #if defined(HAVE_OPENSSL_ENGINE_H) && defined( 
     | 
| 
      
 69 
     | 
    
         
            +
            #if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_EVP_CIPHER_CTX_ENGINE)
         
     | 
| 
       71 
70 
     | 
    
         
             
            #  define OSSL_ENGINE_ENABLED
         
     | 
| 
       72 
71 
     | 
    
         
             
            #  include <openssl/engine.h>
         
     | 
| 
       73 
72 
     | 
    
         
             
            #endif
         
     | 
| 
         @@ -97,14 +96,14 @@ extern VALUE eOSSLError; 
     | 
|
| 
       97 
96 
     | 
    
         
             
            #define OSSL_Check_Kind(obj, klass) do {\
         
     | 
| 
       98 
97 
     | 
    
         
             
              if (!rb_obj_is_kind_of((obj), (klass))) {\
         
     | 
| 
       99 
98 
     | 
    
         
             
                ossl_raise(rb_eTypeError, "wrong argument (%s)! (Expected kind of %s)",\
         
     | 
| 
       100 
     | 
    
         
            -
                           rb_obj_classname(obj),  
     | 
| 
      
 99 
     | 
    
         
            +
                           rb_obj_classname(obj), RSTRING_PTR(rb_class_name(klass)));\
         
     | 
| 
       101 
100 
     | 
    
         
             
              }\
         
     | 
| 
       102 
101 
     | 
    
         
             
            } while (0)
         
     | 
| 
       103 
102 
     | 
    
         | 
| 
       104 
103 
     | 
    
         
             
            #define OSSL_Check_Instance(obj, klass) do {\
         
     | 
| 
       105 
104 
     | 
    
         
             
              if (!rb_obj_is_instance_of((obj), (klass))) {\
         
     | 
| 
       106 
105 
     | 
    
         
             
                ossl_raise(rb_eTypeError, "wrong argument (%s)! (Expected instance of %s)",\
         
     | 
| 
       107 
     | 
    
         
            -
                           rb_obj_classname(obj),  
     | 
| 
      
 106 
     | 
    
         
            +
                           rb_obj_classname(obj), RSTRING_PTR(rb_class_name(klass)));\
         
     | 
| 
       108 
107 
     | 
    
         
             
              }\
         
     | 
| 
       109 
108 
     | 
    
         
             
            } while (0)
         
     | 
| 
       110 
109 
     | 
    
         | 
| 
         @@ -33,15 +33,22 @@ asn1time_to_time(ASN1_TIME *time) 
     | 
|
| 
       33 
33 
     | 
    
         
             
            {
         
     | 
| 
       34 
34 
     | 
    
         
             
                struct tm tm;
         
     | 
| 
       35 
35 
     | 
    
         
             
                VALUE argv[6];
         
     | 
| 
      
 36 
     | 
    
         
            +
                int count;
         
     | 
| 
       36 
37 
     | 
    
         | 
| 
       37 
38 
     | 
    
         
             
                if (!time || !time->data) return Qnil;
         
     | 
| 
       38 
39 
     | 
    
         
             
                memset(&tm, 0, sizeof(struct tm));
         
     | 
| 
       39 
40 
     | 
    
         | 
| 
       40 
41 
     | 
    
         
             
                switch (time->type) {
         
     | 
| 
       41 
42 
     | 
    
         
             
                case V_ASN1_UTCTIME:
         
     | 
| 
       42 
     | 
    
         
            -
            	 
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
            	count = sscanf((const char *)time->data, "%2d%2d%2d%2d%2d%2dZ",
         
     | 
| 
      
 44 
     | 
    
         
            +
            		&tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min,
         
     | 
| 
      
 45 
     | 
    
         
            +
            		&tm.tm_sec);
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            	if (count == 5) {
         
     | 
| 
      
 48 
     | 
    
         
            +
            	    tm.tm_sec = 0;
         
     | 
| 
      
 49 
     | 
    
         
            +
            	} else if (count != 6) {
         
     | 
| 
      
 50 
     | 
    
         
            +
            	    ossl_raise(rb_eTypeError, "bad UTCTIME format: \"%s\"",
         
     | 
| 
      
 51 
     | 
    
         
            +
            		    time->data);
         
     | 
| 
       45 
52 
     | 
    
         
             
            	}
         
     | 
| 
       46 
53 
     | 
    
         
             
            	if (tm.tm_year < 69) {
         
     | 
| 
       47 
54 
     | 
    
         
             
            	    tm.tm_year += 2000;
         
     | 
| 
         @@ -618,7 +625,7 @@ ossl_asn1_default_tag(VALUE obj) 
     | 
|
| 
       618 
625 
     | 
    
         
             
                	tmp_class = rb_class_superclass(tmp_class);
         
     | 
| 
       619 
626 
     | 
    
         
             
                }
         
     | 
| 
       620 
627 
     | 
    
         
             
                ossl_raise(eASN1Error, "universal tag for %s not found",
         
     | 
| 
       621 
     | 
    
         
            -
            	        
     | 
| 
      
 628 
     | 
    
         
            +
            	       rb_obj_class(obj));
         
     | 
| 
       622 
629 
     | 
    
         | 
| 
       623 
630 
     | 
    
         
             
                return -1; /* dummy */
         
     | 
| 
       624 
631 
     | 
    
         
             
            }
         
     | 
| 
         @@ -726,7 +733,7 @@ ossl_asn1data_initialize(VALUE self, VALUE value, VALUE tag, VALUE tag_class) 
     | 
|
| 
       726 
733 
     | 
    
         
             
            }
         
     | 
| 
       727 
734 
     | 
    
         | 
| 
       728 
735 
     | 
    
         
             
            static VALUE
         
     | 
| 
       729 
     | 
    
         
            -
            join_der_i( 
     | 
| 
      
 736 
     | 
    
         
            +
            join_der_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, str))
         
     | 
| 
       730 
737 
     | 
    
         
             
            {
         
     | 
| 
       731 
738 
     | 
    
         
             
                i = ossl_to_der_if_possible(i);
         
     | 
| 
       732 
739 
     | 
    
         
             
                StringValue(i);
         
     | 
| 
         @@ -1143,7 +1150,7 @@ ossl_asn1_initialize(int argc, VALUE *argv, VALUE self) 
     | 
|
| 
       1143 
1150 
     | 
    
         
             
            	}
         
     | 
| 
       1144 
1151 
     | 
    
         
             
            	if(!SYMBOL_P(tag_class))
         
     | 
| 
       1145 
1152 
     | 
    
         
             
            	    ossl_raise(eASN1Error, "invalid tag class");
         
     | 
| 
       1146 
     | 
    
         
            -
            	if(SYM2ID(tagging) == sIMPLICIT && NUM2INT(tag) > 31)
         
     | 
| 
      
 1153 
     | 
    
         
            +
            	if(!NIL_P(tagging) && SYM2ID(tagging) == sIMPLICIT && NUM2INT(tag) > 31)
         
     | 
| 
       1147 
1154 
     | 
    
         
             
            	    ossl_raise(eASN1Error, "tag number for Universal too large");
         
     | 
| 
       1148 
1155 
     | 
    
         
             
                }
         
     | 
| 
       1149 
1156 
     | 
    
         
             
                else{
         
     | 
| 
         @@ -1351,6 +1358,17 @@ ossl_asn1cons_each(VALUE self) 
     | 
|
| 
       1351 
1358 
     | 
    
         
             
                return self;
         
     | 
| 
       1352 
1359 
     | 
    
         
             
            }
         
     | 
| 
       1353 
1360 
     | 
    
         | 
| 
      
 1361 
     | 
    
         
            +
            /*
         
     | 
| 
      
 1362 
     | 
    
         
            +
             * call-seq:
         
     | 
| 
      
 1363 
     | 
    
         
            +
             *    ObjectId.register(object_id, short_name, long_name)
         
     | 
| 
      
 1364 
     | 
    
         
            +
             *
         
     | 
| 
      
 1365 
     | 
    
         
            +
             * This adds a new ObjectId to the internal tables. Where +object_id+ is the
         
     | 
| 
      
 1366 
     | 
    
         
            +
             * numerical form, +short_name+ is the short name, and +long_name+ is the long
         
     | 
| 
      
 1367 
     | 
    
         
            +
             * name.
         
     | 
| 
      
 1368 
     | 
    
         
            +
             *
         
     | 
| 
      
 1369 
     | 
    
         
            +
             * Returns +true+ if successful. Raises an ASN1Error otherwise.
         
     | 
| 
      
 1370 
     | 
    
         
            +
             *
         
     | 
| 
      
 1371 
     | 
    
         
            +
             */
         
     | 
| 
       1354 
1372 
     | 
    
         
             
            static VALUE
         
     | 
| 
       1355 
1373 
     | 
    
         
             
            ossl_asn1obj_s_register(VALUE self, VALUE oid, VALUE sn, VALUE ln)
         
     | 
| 
       1356 
1374 
     | 
    
         
             
            {
         
     | 
| 
         @@ -1364,6 +1382,14 @@ ossl_asn1obj_s_register(VALUE self, VALUE oid, VALUE sn, VALUE ln) 
     | 
|
| 
       1364 
1382 
     | 
    
         
             
                return Qtrue;
         
     | 
| 
       1365 
1383 
     | 
    
         
             
            }
         
     | 
| 
       1366 
1384 
     | 
    
         | 
| 
      
 1385 
     | 
    
         
            +
            /* Document-method: OpenSSL::ASN1::ObjectId#sn
         
     | 
| 
      
 1386 
     | 
    
         
            +
             *
         
     | 
| 
      
 1387 
     | 
    
         
            +
             * The short name of the ObjectId, as defined in +openssl/objects.h+.
         
     | 
| 
      
 1388 
     | 
    
         
            +
             */
         
     | 
| 
      
 1389 
     | 
    
         
            +
            /* Document-method: OpenSSL::ASN1::ObjectId#short_name
         
     | 
| 
      
 1390 
     | 
    
         
            +
             *
         
     | 
| 
      
 1391 
     | 
    
         
            +
             * #short_name is an alias to #sn
         
     | 
| 
      
 1392 
     | 
    
         
            +
             */
         
     | 
| 
       1367 
1393 
     | 
    
         
             
            static VALUE
         
     | 
| 
       1368 
1394 
     | 
    
         
             
            ossl_asn1obj_get_sn(VALUE self)
         
     | 
| 
       1369 
1395 
     | 
    
         
             
            {
         
     | 
| 
         @@ -1377,6 +1403,14 @@ ossl_asn1obj_get_sn(VALUE self) 
     | 
|
| 
       1377 
1403 
     | 
    
         
             
                return ret;
         
     | 
| 
       1378 
1404 
     | 
    
         
             
            }
         
     | 
| 
       1379 
1405 
     | 
    
         | 
| 
      
 1406 
     | 
    
         
            +
            /* Document-method: OpenSSL::ASN1::ObjectId#ln
         
     | 
| 
      
 1407 
     | 
    
         
            +
             *
         
     | 
| 
      
 1408 
     | 
    
         
            +
             * The long name of the ObjectId, as defined in +openssl/objects.h+.
         
     | 
| 
      
 1409 
     | 
    
         
            +
             */
         
     | 
| 
      
 1410 
     | 
    
         
            +
            /* Document-method: OpenSSL::ASN1::ObjectId.long_name
         
     | 
| 
      
 1411 
     | 
    
         
            +
             *
         
     | 
| 
      
 1412 
     | 
    
         
            +
             * #long_name is an alias to #ln
         
     | 
| 
      
 1413 
     | 
    
         
            +
             */
         
     | 
| 
       1380 
1414 
     | 
    
         
             
            static VALUE
         
     | 
| 
       1381 
1415 
     | 
    
         
             
            ossl_asn1obj_get_ln(VALUE self)
         
     | 
| 
       1382 
1416 
     | 
    
         
             
            {
         
     | 
| 
         @@ -1390,6 +1424,10 @@ ossl_asn1obj_get_ln(VALUE self) 
     | 
|
| 
       1390 
1424 
     | 
    
         
             
                return ret;
         
     | 
| 
       1391 
1425 
     | 
    
         
             
            }
         
     | 
| 
       1392 
1426 
     | 
    
         | 
| 
      
 1427 
     | 
    
         
            +
            /* Document-method: OpenSSL::ASN1::ObjectId#oid
         
     | 
| 
      
 1428 
     | 
    
         
            +
             *
         
     | 
| 
      
 1429 
     | 
    
         
            +
             * The object identifier as a String.
         
     | 
| 
      
 1430 
     | 
    
         
            +
             */
         
     | 
| 
       1393 
1431 
     | 
    
         
             
            static VALUE
         
     | 
| 
       1394 
1432 
     | 
    
         
             
            ossl_asn1obj_get_oid(VALUE self)
         
     | 
| 
       1395 
1433 
     | 
    
         
             
            {
         
     | 
| 
         @@ -1771,6 +1809,10 @@ Init_ossl_asn1() 
     | 
|
| 
       1771 
1809 
     | 
    
         
             
                 *
         
     | 
| 
       1772 
1810 
     | 
    
         
             
                 * == OpenSSL::ASN1::ObjectId
         
     | 
| 
       1773 
1811 
     | 
    
         
             
                 *
         
     | 
| 
      
 1812 
     | 
    
         
            +
                 * While OpenSSL::ASN1::ObjectId.new will allocate a new ObjectId, it is
         
     | 
| 
      
 1813 
     | 
    
         
            +
                 * not typically allocated this way, but rather that are received from
         
     | 
| 
      
 1814 
     | 
    
         
            +
                 * parsed ASN1 encodings.
         
     | 
| 
      
 1815 
     | 
    
         
            +
                 *
         
     | 
| 
       1774 
1816 
     | 
    
         
             
                 * === Additional attributes
         
     | 
| 
       1775 
1817 
     | 
    
         
             
                 * * +sn+: the short name as defined in <openssl/objects.h>.
         
     | 
| 
       1776 
1818 
     | 
    
         
             
                 * * +ln+: the long name as defined in <openssl/objects.h>.
         
     | 
| 
         @@ -1910,6 +1952,10 @@ do{\ 
     | 
|
| 
       1910 
1952 
     | 
    
         
             
                OSSL_ASN1_DEFINE_CLASS(EndOfContent, Data);
         
     | 
| 
       1911 
1953 
     | 
    
         | 
| 
       1912 
1954 
     | 
    
         | 
| 
      
 1955 
     | 
    
         
            +
                /* Document-class: OpenSSL::ASN1::ObjectId
         
     | 
| 
      
 1956 
     | 
    
         
            +
                 *
         
     | 
| 
      
 1957 
     | 
    
         
            +
                 * Represents the primitive object id for OpenSSL::ASN1
         
     | 
| 
      
 1958 
     | 
    
         
            +
                 */
         
     | 
| 
       1913 
1959 
     | 
    
         
             
            #if 0
         
     | 
| 
       1914 
1960 
     | 
    
         
             
                cASN1ObjectId = rb_define_class_under(mASN1, "ObjectId", cASN1Primitive);  /* let rdoc know */
         
     | 
| 
       1915 
1961 
     | 
    
         
             
            #endif
         
     | 
| 
         @@ -106,6 +106,7 @@ ossl_bn_alloc(VALUE klass) 
     | 
|
| 
       106 
106 
     | 
    
         
             
             * call-seq:
         
     | 
| 
       107 
107 
     | 
    
         
             
             *    BN.new => aBN
         
     | 
| 
       108 
108 
     | 
    
         
             
             *    BN.new(bn) => aBN
         
     | 
| 
      
 109 
     | 
    
         
            +
             *    BN.new(integer) => aBN
         
     | 
| 
       109 
110 
     | 
    
         
             
             *    BN.new(string) => aBN
         
     | 
| 
       110 
111 
     | 
    
         
             
             *    BN.new(string, 0 | 2 | 10 | 16) => aBN
         
     | 
| 
       111 
112 
     | 
    
         
             
             */
         
     | 
| 
         @@ -120,6 +121,40 @@ ossl_bn_initialize(int argc, VALUE *argv, VALUE self) 
     | 
|
| 
       120 
121 
     | 
    
         
             
            	base = NUM2INT(bs);
         
     | 
| 
       121 
122 
     | 
    
         
             
                }
         
     | 
| 
       122 
123 
     | 
    
         | 
| 
      
 124 
     | 
    
         
            +
                if (RB_TYPE_P(str, T_FIXNUM)) {
         
     | 
| 
      
 125 
     | 
    
         
            +
            	long i;
         
     | 
| 
      
 126 
     | 
    
         
            +
            	unsigned char bin[sizeof(long)];
         
     | 
| 
      
 127 
     | 
    
         
            +
            	long n = FIX2LONG(str);
         
     | 
| 
      
 128 
     | 
    
         
            +
            	unsigned long un = labs(n);
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            	for (i = sizeof(long) - 1; 0 <= i; i--) {
         
     | 
| 
      
 131 
     | 
    
         
            +
            	    bin[i] = un&0xff;
         
     | 
| 
      
 132 
     | 
    
         
            +
            	    un >>= 8;
         
     | 
| 
      
 133 
     | 
    
         
            +
            	}
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
            	GetBN(self, bn);
         
     | 
| 
      
 136 
     | 
    
         
            +
            	if (!BN_bin2bn(bin, sizeof(bin), bn)) {
         
     | 
| 
      
 137 
     | 
    
         
            +
            	    ossl_raise(eBNError, NULL);
         
     | 
| 
      
 138 
     | 
    
         
            +
            	}
         
     | 
| 
      
 139 
     | 
    
         
            +
            	if (n < 0) BN_set_negative(bn, 1);
         
     | 
| 
      
 140 
     | 
    
         
            +
            	return self;
         
     | 
| 
      
 141 
     | 
    
         
            +
                }
         
     | 
| 
      
 142 
     | 
    
         
            +
                else if (RB_TYPE_P(str, T_BIGNUM)) {
         
     | 
| 
      
 143 
     | 
    
         
            +
                    int len = rb_big_bytes_used(str);
         
     | 
| 
      
 144 
     | 
    
         
            +
                    unsigned char* bin = (unsigned char*)XMALLOC(len);
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                    rb_big_pack(str, (unsigned long*)bin, len / sizeof(long));
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                    GetBN(self, bn);
         
     | 
| 
      
 149 
     | 
    
         
            +
            	if (!BN_bin2bn(bin, len, bn)) {
         
     | 
| 
      
 150 
     | 
    
         
            +
            	    XFREE(bin);
         
     | 
| 
      
 151 
     | 
    
         
            +
            	    ossl_raise(eBNError, NULL);
         
     | 
| 
      
 152 
     | 
    
         
            +
            	}
         
     | 
| 
      
 153 
     | 
    
         
            +
                    XFREE(bin);
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
            	if (!RBIGNUM_SIGN(str)) BN_set_negative(bn, 1);
         
     | 
| 
      
 156 
     | 
    
         
            +
            	return self;
         
     | 
| 
      
 157 
     | 
    
         
            +
                }
         
     | 
| 
       123 
158 
     | 
    
         
             
                if (RTEST(rb_obj_is_kind_of(str, cBN))) {
         
     | 
| 
       124 
159 
     | 
    
         
             
            	BIGNUM *other;
         
     | 
| 
       125 
160 
     | 
    
         | 
| 
         @@ -226,10 +261,10 @@ ossl_bn_to_i(VALUE self) 
     | 
|
| 
       226 
261 
     | 
    
         | 
| 
       227 
262 
     | 
    
         
             
                GetBN(self, bn);
         
     | 
| 
       228 
263 
     | 
    
         | 
| 
       229 
     | 
    
         
            -
                if (!(txt =  
     | 
| 
      
 264 
     | 
    
         
            +
                if (!(txt = BN_bn2hex(bn))) {
         
     | 
| 
       230 
265 
     | 
    
         
             
            	ossl_raise(eBNError, NULL);
         
     | 
| 
       231 
266 
     | 
    
         
             
                }
         
     | 
| 
       232 
     | 
    
         
            -
                num = rb_cstr_to_inum(txt,  
     | 
| 
      
 267 
     | 
    
         
            +
                num = rb_cstr_to_inum(txt, 16, Qtrue);
         
     | 
| 
       233 
268 
     | 
    
         
             
                OPENSSL_free(txt);
         
     | 
| 
       234 
269 
     | 
    
         | 
| 
       235 
270 
     | 
    
         
             
                return num;
         
     | 
| 
         @@ -213,7 +213,7 @@ ossl_cipher_init(int argc, VALUE *argv, VALUE self, int mode) 
     | 
|
| 
       213 
213 
     | 
    
         
             
            	 * We deprecated the arguments for this method, but we decided
         
     | 
| 
       214 
214 
     | 
    
         
             
            	 * keeping this behaviour for backward compatibility.
         
     | 
| 
       215 
215 
     | 
    
         
             
            	 */
         
     | 
| 
       216 
     | 
    
         
            -
            	 
     | 
| 
      
 216 
     | 
    
         
            +
            	VALUE cname  = rb_class_path(rb_obj_class(self));
         
     | 
| 
       217 
217 
     | 
    
         
             
            	rb_warn("arguments for %s#encrypt and %s#decrypt were deprecated; "
         
     | 
| 
       218 
218 
     | 
    
         
             
                            "use %s#pkcs5_keyivgen to derive key and IV",
         
     | 
| 
       219 
219 
     | 
    
         
             
                            cname, cname, cname);
         
     | 
| 
         @@ -15,6 +15,11 @@ 
     | 
|
| 
       15 
15 
     | 
    
         
             
             * Classes
         
     | 
| 
       16 
16 
     | 
    
         
             
             */
         
     | 
| 
       17 
17 
     | 
    
         
             
            VALUE cConfig;
         
     | 
| 
      
 18 
     | 
    
         
            +
            /* Document-class: OpenSSL::ConfigError
         
     | 
| 
      
 19 
     | 
    
         
            +
             *
         
     | 
| 
      
 20 
     | 
    
         
            +
             * General error for openssl library configuration files. Including formating,
         
     | 
| 
      
 21 
     | 
    
         
            +
             * parsing errors, etc.
         
     | 
| 
      
 22 
     | 
    
         
            +
             */
         
     | 
| 
       18 
23 
     | 
    
         
             
            VALUE eConfigError;
         
     | 
| 
       19 
24 
     | 
    
         | 
| 
       20 
25 
     | 
    
         
             
            /*
         
     | 
| 
         @@ -55,6 +60,10 @@ GetConfigPtr(VALUE obj) 
     | 
|
| 
       55 
60 
     | 
    
         
             
                return conf;
         
     | 
| 
       56 
61 
     | 
    
         
             
            }
         
     | 
| 
       57 
62 
     | 
    
         | 
| 
      
 63 
     | 
    
         
            +
            /* Document-const: DEFAULT_CONFIG_FILE
         
     | 
| 
      
 64 
     | 
    
         
            +
             *
         
     | 
| 
      
 65 
     | 
    
         
            +
             * The default system configuration file for openssl
         
     | 
| 
      
 66 
     | 
    
         
            +
             */
         
     | 
| 
       58 
67 
     | 
    
         | 
| 
       59 
68 
     | 
    
         
             
            /*
         
     | 
| 
       60 
69 
     | 
    
         
             
             * INIT
         
     |