ruby-tls 1.0.1 → 1.0.2
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 +6 -14
- data/EM-LICENSE +60 -60
- data/README.md +71 -69
- data/Rakefile +19 -19
- data/ext/Rakefile +18 -18
- data/ext/tls/page.cpp +102 -107
- data/ext/tls/page.h +61 -61
- data/ext/tls/ssl.cpp +587 -593
- data/ext/tls/ssl.h +129 -130
- data/lib/ruby-tls.rb +7 -7
- data/lib/ruby-tls/connection.rb +121 -121
- data/lib/ruby-tls/ext.rb +38 -32
- data/lib/ruby-tls/version.rb +3 -3
- data/ruby-tls.gemspec +32 -32
- data/spec/client.crt +31 -31
- data/spec/client.key +51 -51
- data/spec/comms_spec.rb +147 -147
- data/spec/verify_spec.rb +118 -118
- metadata +15 -16
    
        data/lib/ruby-tls/ext.rb
    CHANGED
    
    | @@ -1,32 +1,38 @@ | |
| 1 | 
            -
            require 'ffi'
         | 
| 2 | 
            -
            require 'ffi-compiler/loader'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            module RubyTls
         | 
| 5 | 
            -
                extend FFI::Library
         | 
| 6 | 
            -
                ffi_lib FFI::Compiler::Loader.find('ruby-tls-ext')
         | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
                callback :ssl_close_cb,     [:pointer],                 :void
         | 
| 10 | 
            -
                callback :ssl_verify_cb,    [:pointer, :string],        :int
         | 
| 11 | 
            -
                callback :ssl_dispatch_cb,  [:pointer, :pointer, :int], :void
         | 
| 12 | 
            -
                callback :ssl_transmit_cb,  [:pointer, :pointer, :int], :void
         | 
| 13 | 
            -
                callback :ssl_handshake_cb, [:pointer],                 :void
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                class State < FFI::Struct
         | 
| 16 | 
            -
                    layout  :handshake_sig, :int,
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                            :close_cb,      :ssl_close_cb,
         | 
| 19 | 
            -
                            :verify_cb,     :ssl_verify_cb,     # Optional
         | 
| 20 | 
            -
                            :dispatch_cb,   :ssl_dispatch_cb,
         | 
| 21 | 
            -
                            :transmit_cb,   :ssl_transmit_cb,
         | 
| 22 | 
            -
                            :handshake_cb,  :ssl_handshake_cb,  # Optional unless first to send data
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                            :ssl_box,       :pointer
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
                attach_function :start_tls,     [State.by_ref, :bool, :string, :string, :bool],  :void, :blocking => true
         | 
| 29 | 
            -
                attach_function :decrypt_data,  [State.by_ref, :pointer, :int],                  :void, :blocking => true
         | 
| 30 | 
            -
                attach_function :encrypt_data,  [State.by_ref, :pointer, :int],                  :void, :blocking => true
         | 
| 31 | 
            -
                #attach_function :get_peer_cert, [], :int, :blocking => true
         | 
| 32 | 
            -
             | 
| 1 | 
            +
            require 'ffi'
         | 
| 2 | 
            +
            require 'ffi-compiler/loader'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module RubyTls
         | 
| 5 | 
            +
                extend FFI::Library
         | 
| 6 | 
            +
                ffi_lib FFI::Compiler::Loader.find('ruby-tls-ext')
         | 
| 7 | 
            +
             | 
| 8 | 
            +
             | 
| 9 | 
            +
                callback :ssl_close_cb,     [:pointer],                 :void
         | 
| 10 | 
            +
                callback :ssl_verify_cb,    [:pointer, :string],        :int
         | 
| 11 | 
            +
                callback :ssl_dispatch_cb,  [:pointer, :pointer, :int], :void
         | 
| 12 | 
            +
                callback :ssl_transmit_cb,  [:pointer, :pointer, :int], :void
         | 
| 13 | 
            +
                callback :ssl_handshake_cb, [:pointer],                 :void
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                class State < FFI::Struct
         | 
| 16 | 
            +
                    layout  :handshake_sig, :int,
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                            :close_cb,      :ssl_close_cb,
         | 
| 19 | 
            +
                            :verify_cb,     :ssl_verify_cb,     # Optional
         | 
| 20 | 
            +
                            :dispatch_cb,   :ssl_dispatch_cb,
         | 
| 21 | 
            +
                            :transmit_cb,   :ssl_transmit_cb,
         | 
| 22 | 
            +
                            :handshake_cb,  :ssl_handshake_cb,  # Optional unless first to send data
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                            :ssl_box,       :pointer
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
             | 
| 28 | 
            +
                attach_function :start_tls,     [State.by_ref, :bool, :string, :string, :bool],  :void, :blocking => true
         | 
| 29 | 
            +
                attach_function :decrypt_data,  [State.by_ref, :pointer, :int],                  :void, :blocking => true
         | 
| 30 | 
            +
                attach_function :encrypt_data,  [State.by_ref, :pointer, :int],                  :void, :blocking => true
         | 
| 31 | 
            +
                #attach_function :get_peer_cert, [], :int, :blocking => true
         | 
| 32 | 
            +
             | 
| 33 | 
            +
             | 
| 34 | 
            +
                # This loads the required OpenSSL algorithms and strings
         | 
| 35 | 
            +
                attach_function :init_rubytls,  [],  :void
         | 
| 36 | 
            +
                init_rubytls
         | 
| 37 | 
            +
                private_class_method :init_rubytls
         | 
| 38 | 
            +
            end
         | 
    
        data/lib/ruby-tls/version.rb
    CHANGED
    
    | @@ -1,3 +1,3 @@ | |
| 1 | 
            -
            module RubyTls
         | 
| 2 | 
            -
                VERSION = "1.0. | 
| 3 | 
            -
            end
         | 
| 1 | 
            +
            module RubyTls
         | 
| 2 | 
            +
                VERSION = "1.0.2"
         | 
| 3 | 
            +
            end
         | 
    
        data/ruby-tls.gemspec
    CHANGED
    
    | @@ -1,32 +1,32 @@ | |
| 1 | 
            -
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            -
            $:.push File.expand_path("../lib", __FILE__)
         | 
| 3 | 
            -
            require "ruby-tls/version"
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            Gem::Specification.new do |s|
         | 
| 6 | 
            -
                s.name        = "ruby-tls"
         | 
| 7 | 
            -
                s.version     = RubyTls::VERSION
         | 
| 8 | 
            -
                s.authors     = ["Stephen von Takach"]
         | 
| 9 | 
            -
                s.email       = ["steve@cotag.me"]
         | 
| 10 | 
            -
                s.licenses    = ["Ruby", "GPL"]
         | 
| 11 | 
            -
                s.homepage    = "https://github.com/cotag/ruby-tls"
         | 
| 12 | 
            -
                s.summary     = "Abstract TLS for Ruby"
         | 
| 13 | 
            -
                s.description = <<-EOF
         | 
| 14 | 
            -
                    Allows transport layers outside Ruby TCP be secured.
         | 
| 15 | 
            -
                EOF
         | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                s.add_dependency 'ffi-compiler', '>= 0.0.2'
         | 
| 19 | 
            -
                s.add_dependency 'rake'
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                s.add_development_dependency 'rspec'
         | 
| 22 | 
            -
                s.add_development_dependency 'yard'
         | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
                s.files = Dir["{lib}/**/*"] + %w(Rakefile ruby-tls.gemspec README.md EM-LICENSE)
         | 
| 26 | 
            -
                s.files += ["ext/tls/ssl.cpp", "ext/tls/ssl.h", "ext/tls/page.cpp", "ext/tls/page.h"]
         | 
| 27 | 
            -
                s.test_files = Dir["spec/**/*"]
         | 
| 28 | 
            -
                s.extra_rdoc_files = ["README.md"]
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                s.extensions << "ext/Rakefile"
         | 
| 31 | 
            -
                s.require_paths = ["lib"]
         | 
| 32 | 
            -
            end
         | 
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            $:.push File.expand_path("../lib", __FILE__)
         | 
| 3 | 
            +
            require "ruby-tls/version"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Gem::Specification.new do |s|
         | 
| 6 | 
            +
                s.name        = "ruby-tls"
         | 
| 7 | 
            +
                s.version     = RubyTls::VERSION
         | 
| 8 | 
            +
                s.authors     = ["Stephen von Takach"]
         | 
| 9 | 
            +
                s.email       = ["steve@cotag.me"]
         | 
| 10 | 
            +
                s.licenses    = ["Ruby", "GPL"]
         | 
| 11 | 
            +
                s.homepage    = "https://github.com/cotag/ruby-tls"
         | 
| 12 | 
            +
                s.summary     = "Abstract TLS for Ruby"
         | 
| 13 | 
            +
                s.description = <<-EOF
         | 
| 14 | 
            +
                    Allows transport layers outside Ruby TCP be secured.
         | 
| 15 | 
            +
                EOF
         | 
| 16 | 
            +
             | 
| 17 | 
            +
             | 
| 18 | 
            +
                s.add_dependency 'ffi-compiler', '>= 0.0.2'
         | 
| 19 | 
            +
                s.add_dependency 'rake'
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                s.add_development_dependency 'rspec'
         | 
| 22 | 
            +
                s.add_development_dependency 'yard'
         | 
| 23 | 
            +
             | 
| 24 | 
            +
             | 
| 25 | 
            +
                s.files = Dir["{lib}/**/*"] + %w(Rakefile ruby-tls.gemspec README.md EM-LICENSE)
         | 
| 26 | 
            +
                s.files += ["ext/tls/ssl.cpp", "ext/tls/ssl.h", "ext/tls/page.cpp", "ext/tls/page.h"]
         | 
| 27 | 
            +
                s.test_files = Dir["spec/**/*"]
         | 
| 28 | 
            +
                s.extra_rdoc_files = ["README.md"]
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                s.extensions << "ext/Rakefile"
         | 
| 31 | 
            +
                s.require_paths = ["lib"]
         | 
| 32 | 
            +
            end
         | 
    
        data/spec/client.crt
    CHANGED
    
    | @@ -1,31 +1,31 @@ | |
| 1 | 
            -
            -----BEGIN CERTIFICATE-----
         | 
| 2 | 
            -
            MIIFRDCCAywCAQEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCRU0xFTATBgNV
         | 
| 3 | 
            -
            BAgTDEV2ZW50TWFjaGluZTEVMBMGA1UEChMMRXZlbnRNYWNoaW5lMRQwEgYDVQQL
         | 
| 4 | 
            -
            EwtEZXZlbG9wbWVudDEVMBMGA1UEAxMMRXZlbnRNYWNoaW5lMB4XDTA5MDMyOTAy
         | 
| 5 | 
            -
            MzE0NloXDTEwMDMyOTAyMzE0NlowaDELMAkGA1UEBhMCRU0xFTATBgNVBAgTDEV2
         | 
| 6 | 
            -
            ZW50TWFjaGluZTEVMBMGA1UEChMMRXZlbnRNYWNoaW5lMRQwEgYDVQQLEwtEZXZl
         | 
| 7 | 
            -
            bG9wbWVudDEVMBMGA1UEAxMMRXZlbnRNYWNoaW5lMIICIjANBgkqhkiG9w0BAQEF
         | 
| 8 | 
            -
            AAOCAg8AMIICCgKCAgEAv1FSOIX1z7CQtVBFlrB0A3/V29T+22STKKmiRWYkKL5b
         | 
| 9 | 
            -
            +hkrp9IZ5J4phZHgUVM2VDPOO2Oc2PU6dlGGZISg+UPERunTogxQKezCV0vcE9cK
         | 
| 10 | 
            -
            OwzxCFDRvv5rK8aKMscfBLbNKocAXywuRRQmdxPiVRzbyPrl+qCr/EDLXAX3D77l
         | 
| 11 | 
            -
            S8n2AwDg19VyI+IgFUE+Dy5e1eLoY6nV+Mq+vNXdn3ttF3t+ngac5pj5Q9h+pD5p
         | 
| 12 | 
            -
            67baDHSnf/7cy2fa/LKrLolVHQR9G2K6cEfeM99NtcsMbkoPs4iI3FA05OVTQHXg
         | 
| 13 | 
            -
            C8C8cRxrb9APl95I/ep65OIaCJgcdYxJ3QD3qOtQo6/NQsGnjbyiUxaEpjfqyT1N
         | 
| 14 | 
            -
            uzWD81Q8uXGNS8yD6dDynt/lseBjyp2nfC3uQ5fY18VdIcu0MJ9pezBUKrNuhlsy
         | 
| 15 | 
            -
            XXEZ2DXj4sY8QOvIcBqSB/zmS1nGEK55xrtkaiaNrY8fe8wRVpcPLxy+P225NFw+
         | 
| 16 | 
            -
            B69FJRA0Lj6Jt9BM4hV/3MSIEWwTVhuw4E02ywDYTzz1wq3ITf0tsbIPn0hXQMxD
         | 
| 17 | 
            -
            ohhAoKioM6u+yHtqsxD0eYaAWmHTVn5oDvOSGpvCpBfWHyA7FP5UQak0fKABEAgK
         | 
| 18 | 
            -
            iQYEnb294AXwXymJttfGTIV/Ne4tLN5dIpNma8UO8rlThlcr6xnTQDbR3gkTDRsC
         | 
| 19 | 
            -
            AwEAATANBgkqhkiG9w0BAQUFAAOCAgEAj7J8fy1LUWoVWnrXDAC9jwJ1nI/YjoSU
         | 
| 20 | 
            -
            6ywke3o04+nZC5S+dPnuVy+HAwsU940CoNvP6RStI/bH6JL+NIqEFmwM3M8xIEWV
         | 
| 21 | 
            -
            MYVPkfvQUxxGvDnaY7vv93u+6Q77HV3qlhAQBHChyuXyO7TG3+WzsiT9AnBNtAP0
         | 
| 22 | 
            -
            4jClt5kCAQXLO/p0SFEZQ8Ru9SM8d1i73Z0VDVzs8jYWlBhiherSgbw1xK4wBOpJ
         | 
| 23 | 
            -
            43XmjZsBSrDpiAXd07Ak3UL2GjfT7eStgebL3UIe39ThE/s/+l43bh0M6WbOBvyQ
         | 
| 24 | 
            -
            i/rZ50kd1GvN0xnZhtv07hIJWO85FGWi7Oet8AzdUZJ17v1Md/f2vdhPVTFN9q+w
         | 
| 25 | 
            -
            mQ6LxjackqCvaJaQfBEbqsn2Tklxk4tZuDioiQbOElT2e6vljQVJWIfNx38Ny2LM
         | 
| 26 | 
            -
            aiXQPQu+4CI7meAh5gXM5nyJGbZvRPsxj89CqYzyHCYs5HBP3AsviBvn26ziOF+c
         | 
| 27 | 
            -
            544VmHd9HkIv8UTC29hh+R64RlgMQQQdaXFaUrFPTs/do0k8n/c2bPc0iTdfi5Q2
         | 
| 28 | 
            -
            gq6Vi8q6Ay5wGgTtRRbn/mWKuCFjEh94z6pF9Xr06NX0PuEOdf+Ls9vI5vz6G0w6
         | 
| 29 | 
            -
            0Li7devEN7EKBY+7Mcjg918yq9i5tEiMkUgT68788t3fTC+4iUQ5fDtdrHsaOlIR
         | 
| 30 | 
            -
            8bs/XQVNE/s=
         | 
| 31 | 
            -
            -----END CERTIFICATE-----
         | 
| 1 | 
            +
            -----BEGIN CERTIFICATE-----
         | 
| 2 | 
            +
            MIIFRDCCAywCAQEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCRU0xFTATBgNV
         | 
| 3 | 
            +
            BAgTDEV2ZW50TWFjaGluZTEVMBMGA1UEChMMRXZlbnRNYWNoaW5lMRQwEgYDVQQL
         | 
| 4 | 
            +
            EwtEZXZlbG9wbWVudDEVMBMGA1UEAxMMRXZlbnRNYWNoaW5lMB4XDTA5MDMyOTAy
         | 
| 5 | 
            +
            MzE0NloXDTEwMDMyOTAyMzE0NlowaDELMAkGA1UEBhMCRU0xFTATBgNVBAgTDEV2
         | 
| 6 | 
            +
            ZW50TWFjaGluZTEVMBMGA1UEChMMRXZlbnRNYWNoaW5lMRQwEgYDVQQLEwtEZXZl
         | 
| 7 | 
            +
            bG9wbWVudDEVMBMGA1UEAxMMRXZlbnRNYWNoaW5lMIICIjANBgkqhkiG9w0BAQEF
         | 
| 8 | 
            +
            AAOCAg8AMIICCgKCAgEAv1FSOIX1z7CQtVBFlrB0A3/V29T+22STKKmiRWYkKL5b
         | 
| 9 | 
            +
            +hkrp9IZ5J4phZHgUVM2VDPOO2Oc2PU6dlGGZISg+UPERunTogxQKezCV0vcE9cK
         | 
| 10 | 
            +
            OwzxCFDRvv5rK8aKMscfBLbNKocAXywuRRQmdxPiVRzbyPrl+qCr/EDLXAX3D77l
         | 
| 11 | 
            +
            S8n2AwDg19VyI+IgFUE+Dy5e1eLoY6nV+Mq+vNXdn3ttF3t+ngac5pj5Q9h+pD5p
         | 
| 12 | 
            +
            67baDHSnf/7cy2fa/LKrLolVHQR9G2K6cEfeM99NtcsMbkoPs4iI3FA05OVTQHXg
         | 
| 13 | 
            +
            C8C8cRxrb9APl95I/ep65OIaCJgcdYxJ3QD3qOtQo6/NQsGnjbyiUxaEpjfqyT1N
         | 
| 14 | 
            +
            uzWD81Q8uXGNS8yD6dDynt/lseBjyp2nfC3uQ5fY18VdIcu0MJ9pezBUKrNuhlsy
         | 
| 15 | 
            +
            XXEZ2DXj4sY8QOvIcBqSB/zmS1nGEK55xrtkaiaNrY8fe8wRVpcPLxy+P225NFw+
         | 
| 16 | 
            +
            B69FJRA0Lj6Jt9BM4hV/3MSIEWwTVhuw4E02ywDYTzz1wq3ITf0tsbIPn0hXQMxD
         | 
| 17 | 
            +
            ohhAoKioM6u+yHtqsxD0eYaAWmHTVn5oDvOSGpvCpBfWHyA7FP5UQak0fKABEAgK
         | 
| 18 | 
            +
            iQYEnb294AXwXymJttfGTIV/Ne4tLN5dIpNma8UO8rlThlcr6xnTQDbR3gkTDRsC
         | 
| 19 | 
            +
            AwEAATANBgkqhkiG9w0BAQUFAAOCAgEAj7J8fy1LUWoVWnrXDAC9jwJ1nI/YjoSU
         | 
| 20 | 
            +
            6ywke3o04+nZC5S+dPnuVy+HAwsU940CoNvP6RStI/bH6JL+NIqEFmwM3M8xIEWV
         | 
| 21 | 
            +
            MYVPkfvQUxxGvDnaY7vv93u+6Q77HV3qlhAQBHChyuXyO7TG3+WzsiT9AnBNtAP0
         | 
| 22 | 
            +
            4jClt5kCAQXLO/p0SFEZQ8Ru9SM8d1i73Z0VDVzs8jYWlBhiherSgbw1xK4wBOpJ
         | 
| 23 | 
            +
            43XmjZsBSrDpiAXd07Ak3UL2GjfT7eStgebL3UIe39ThE/s/+l43bh0M6WbOBvyQ
         | 
| 24 | 
            +
            i/rZ50kd1GvN0xnZhtv07hIJWO85FGWi7Oet8AzdUZJ17v1Md/f2vdhPVTFN9q+w
         | 
| 25 | 
            +
            mQ6LxjackqCvaJaQfBEbqsn2Tklxk4tZuDioiQbOElT2e6vljQVJWIfNx38Ny2LM
         | 
| 26 | 
            +
            aiXQPQu+4CI7meAh5gXM5nyJGbZvRPsxj89CqYzyHCYs5HBP3AsviBvn26ziOF+c
         | 
| 27 | 
            +
            544VmHd9HkIv8UTC29hh+R64RlgMQQQdaXFaUrFPTs/do0k8n/c2bPc0iTdfi5Q2
         | 
| 28 | 
            +
            gq6Vi8q6Ay5wGgTtRRbn/mWKuCFjEh94z6pF9Xr06NX0PuEOdf+Ls9vI5vz6G0w6
         | 
| 29 | 
            +
            0Li7devEN7EKBY+7Mcjg918yq9i5tEiMkUgT68788t3fTC+4iUQ5fDtdrHsaOlIR
         | 
| 30 | 
            +
            8bs/XQVNE/s=
         | 
| 31 | 
            +
            -----END CERTIFICATE-----
         | 
    
        data/spec/client.key
    CHANGED
    
    | @@ -1,51 +1,51 @@ | |
| 1 | 
            -
            -----BEGIN RSA PRIVATE KEY-----
         | 
| 2 | 
            -
            MIIJKAIBAAKCAgEAv1FSOIX1z7CQtVBFlrB0A3/V29T+22STKKmiRWYkKL5b+hkr
         | 
| 3 | 
            -
            p9IZ5J4phZHgUVM2VDPOO2Oc2PU6dlGGZISg+UPERunTogxQKezCV0vcE9cKOwzx
         | 
| 4 | 
            -
            CFDRvv5rK8aKMscfBLbNKocAXywuRRQmdxPiVRzbyPrl+qCr/EDLXAX3D77lS8n2
         | 
| 5 | 
            -
            AwDg19VyI+IgFUE+Dy5e1eLoY6nV+Mq+vNXdn3ttF3t+ngac5pj5Q9h+pD5p67ba
         | 
| 6 | 
            -
            DHSnf/7cy2fa/LKrLolVHQR9G2K6cEfeM99NtcsMbkoPs4iI3FA05OVTQHXgC8C8
         | 
| 7 | 
            -
            cRxrb9APl95I/ep65OIaCJgcdYxJ3QD3qOtQo6/NQsGnjbyiUxaEpjfqyT1NuzWD
         | 
| 8 | 
            -
            81Q8uXGNS8yD6dDynt/lseBjyp2nfC3uQ5fY18VdIcu0MJ9pezBUKrNuhlsyXXEZ
         | 
| 9 | 
            -
            2DXj4sY8QOvIcBqSB/zmS1nGEK55xrtkaiaNrY8fe8wRVpcPLxy+P225NFw+B69F
         | 
| 10 | 
            -
            JRA0Lj6Jt9BM4hV/3MSIEWwTVhuw4E02ywDYTzz1wq3ITf0tsbIPn0hXQMxDohhA
         | 
| 11 | 
            -
            oKioM6u+yHtqsxD0eYaAWmHTVn5oDvOSGpvCpBfWHyA7FP5UQak0fKABEAgKiQYE
         | 
| 12 | 
            -
            nb294AXwXymJttfGTIV/Ne4tLN5dIpNma8UO8rlThlcr6xnTQDbR3gkTDRsCAwEA
         | 
| 13 | 
            -
            AQKCAgB495RDRQB9x6hX3F+DviI8rDGug+h5FAiwJ0IBG2o1kNdbNVsTC5dvpEmg
         | 
| 14 | 
            -
            uPHaugCaEP+PMZbU34mNklKlb+7QbPbH18UGqz5so9TlmYOXz9oaKD6nAWL9nqRo
         | 
| 15 | 
            -
            02pCXQDR3DuxbhbgFnFTIECJ/jqXkl2toGaVp83W+6kZkHP8srkMyLASihWgosc+
         | 
| 16 | 
            -
            xRWAGvaAZtNz7br+eT5fxuH/SEKPOl1qAZ23kXrXm1XQfizk8MnMTptkUMYv+hfl
         | 
| 17 | 
            -
            TM98BASUsiTs6g+opy43HFn09naOQcqkWZO/8s6Gbvhi2lVfZqi5Ba6g3lVYJ3gU
         | 
| 18 | 
            -
            kGoako4N9qB7WqJz+LYjVR9C4TbkkJ9OD6ArwGAx5IIzC3XKSxCyY/pUn4YumPhY
         | 
| 19 | 
            -
            fjvY/km54TBtx/isS1TAgjSgDUxbzrfbkh7afOXSOniy9bWJMgNqHF61dqxWxmUg
         | 
| 20 | 
            -
            F5Tch9zH3qFFVkXpYzDU/R8ZV+CRouCvhn0eZYDh8IqIAwjH0VjkxjPyQtrdrMd3
         | 
| 21 | 
            -
            gDKMVKoY31EOMLZzv8a0prjpr15A+uw30tT336qb3fofks4pZKUJw8ru9jJVir2p
         | 
| 22 | 
            -
            +RML6iUHCmIeceF7/N1meooSMLPJe0xgKeMb9M4Wtd/et2UNVtP8nCDG622rf2a0
         | 
| 23 | 
            -
            F/EudXuFgc3FB8nXRw9TCkw9xKQff38edG5xPFUEgqObbVl5YQKCAQEA5DDKGOmp
         | 
| 24 | 
            -
            EO5Zuf/kZfG6/AMMYwAuv1HrYTV2w/HnI3tyQ34Xkeqo+I/OqmRk68Ztxw4Kx1So
         | 
| 25 | 
            -
            SRavkotrlWhhDpl2+Yn1BjkHktSoOdf9gJ9z9llkLmbOkBjmupig1NUB7fq/4y2k
         | 
| 26 | 
            -
            MdqJXDy3uVKHJ97gxdIheMTyHiKuMJPnuT5lZtlT210Ig82P7sLQb/sgCfKVFTr0
         | 
| 27 | 
            -
            Z3haQ5/tBNKjq+igT4nMBWupOTD1q2GeZLIZACnmnUIhvu+3/bm0l+wiCB0DqF0T
         | 
| 28 | 
            -
            Wy9tlL3fqQSCqzevL7/k5Lg6tJTaP/XYePB73TsOtAXgIaoltXgRBsBUeE1eaODx
         | 
| 29 | 
            -
            kMT6E1PPtn7EqQKCAQEA1qImmTWGqhKICrwje40awPufFtZ/qXKVCN/V+zYsrJV1
         | 
| 30 | 
            -
            EnZpUDM+zfitlQCugnrQVHSpgfekI6mmVkmogO3fkNjUFTq+neg7IHOUHnqotx+3
         | 
| 31 | 
            -
            NMqIsyFInGstu9mfPd26fzZjUtx5wKF38LDTIJJAEJ83U3UpPBfpwKmiOGDXOa54
         | 
| 32 | 
            -
            2i4em/bb/hrQR6JySruZYLi0fXnGI5ZOfpkHgC/KOFkKNKAg2oh4B9qo7ACyiSNk
         | 
| 33 | 
            -
            yojb2mmn6g1OLPxi7wGUSrkS1HQq4an6RZ+eUO0HXVWag0QStdQ91M9IrIHgSBBG
         | 
| 34 | 
            -
            0e86Ar6jtD579gqsbz4ySpI/FqEI9obTC+E1/b0aIwKCAQAGz334qGCnZLXA22ZR
         | 
| 35 | 
            -
            tJlEFEM2YTcD9snzqMjWqE2hvXl3kjfZ3wsUABbG9yAb+VwlaMHhmSE8rTSoRwj6
         | 
| 36 | 
            -
            +JaM/P+UCw4JFYKoWzh6IXwrbpbjb1+SEvdvTY71WsDSGVlpZOZ9PUt9QWyAGD/T
         | 
| 37 | 
            -
            hCcMhZZn0RG2rQoc5CQWxxNPcBFOtIXQMkKizGvTUHUwImqeYWMZsxzASdNH2WoV
         | 
| 38 | 
            -
            jsPbyaGfPhmcv83ZKyDp8IvtrXMZkiaT4vlm3Xi8VeKR9jY9z7/gMob1XcEDg3c9
         | 
| 39 | 
            -
            cCkGOy87WZrXSLhX02mAJzJCycqom66gqNw7pPxjIiY/8VWUEZsTvkL3cymTkhjM
         | 
| 40 | 
            -
            9ZOhAoIBAGUaNqJe01NTrV+ZJgGyAxM6s8LXQYV5IvjuL2bJKxwUvvP2cT9FFGWD
         | 
| 41 | 
            -
            qYiRrKJr5ayS07IUC+58oIzu33/0DSa27JgfduD9HrT3nKMK1mSEfRFSAjiXChQc
         | 
| 42 | 
            -
            bIubRGapBoub/AdxMazqoovvT1R9b84kobQfcVAMV6DYh0CVZWyXYfgsV2DSVOiK
         | 
| 43 | 
            -
            iufjfoDzg5lLCEI+1XW3/LunrB/W4yPN1X/amf8234ublYyt+2ucD4NUGnP05xLa
         | 
| 44 | 
            -
            N6P7M0MwdEEKkvMe0YBBSFH5kWK/dIOjqkgBDes20fVnuuz/tL1dZW7IiIP4dzaV
         | 
| 45 | 
            -
            ZGEOwBEatCfqYetv6b/u3IUxDfS7Wg8CggEBALoOwkn5LGdQg+bpdZAKJspGnJWL
         | 
| 46 | 
            -
            Kyr9Al2tvgc69rxfpZqS5eDLkYYCzWPpspSt0Axm1O7xOUDQDt42luaLNGJzHZ2Q
         | 
| 47 | 
            -
            Hn0ZNMhyHpe8d8mIQngRjD+nuLI/uFUglPzabDOCOln2aycjg1mA6ecXP1XMEVbu
         | 
| 48 | 
            -
            0RB/0IE36XTMfZ+u9+TRjkBLpmUaX1FdIQQWfwUou/LfaXotoQlhSGAcprLrncuJ
         | 
| 49 | 
            -
            T44UATYEgO/q9pMM33bdE3eBYZHoT9mSvqoLCN4s0LuwOYItIxLKUj0GulL0VQOI
         | 
| 50 | 
            -
            SZi+0A1c8cVDXgApkBrWPDQIR9JS4de0gW4hnDoUvHtUc2TYPRnz6N9MtFY=
         | 
| 51 | 
            -
            -----END RSA PRIVATE KEY-----
         | 
| 1 | 
            +
            -----BEGIN RSA PRIVATE KEY-----
         | 
| 2 | 
            +
            MIIJKAIBAAKCAgEAv1FSOIX1z7CQtVBFlrB0A3/V29T+22STKKmiRWYkKL5b+hkr
         | 
| 3 | 
            +
            p9IZ5J4phZHgUVM2VDPOO2Oc2PU6dlGGZISg+UPERunTogxQKezCV0vcE9cKOwzx
         | 
| 4 | 
            +
            CFDRvv5rK8aKMscfBLbNKocAXywuRRQmdxPiVRzbyPrl+qCr/EDLXAX3D77lS8n2
         | 
| 5 | 
            +
            AwDg19VyI+IgFUE+Dy5e1eLoY6nV+Mq+vNXdn3ttF3t+ngac5pj5Q9h+pD5p67ba
         | 
| 6 | 
            +
            DHSnf/7cy2fa/LKrLolVHQR9G2K6cEfeM99NtcsMbkoPs4iI3FA05OVTQHXgC8C8
         | 
| 7 | 
            +
            cRxrb9APl95I/ep65OIaCJgcdYxJ3QD3qOtQo6/NQsGnjbyiUxaEpjfqyT1NuzWD
         | 
| 8 | 
            +
            81Q8uXGNS8yD6dDynt/lseBjyp2nfC3uQ5fY18VdIcu0MJ9pezBUKrNuhlsyXXEZ
         | 
| 9 | 
            +
            2DXj4sY8QOvIcBqSB/zmS1nGEK55xrtkaiaNrY8fe8wRVpcPLxy+P225NFw+B69F
         | 
| 10 | 
            +
            JRA0Lj6Jt9BM4hV/3MSIEWwTVhuw4E02ywDYTzz1wq3ITf0tsbIPn0hXQMxDohhA
         | 
| 11 | 
            +
            oKioM6u+yHtqsxD0eYaAWmHTVn5oDvOSGpvCpBfWHyA7FP5UQak0fKABEAgKiQYE
         | 
| 12 | 
            +
            nb294AXwXymJttfGTIV/Ne4tLN5dIpNma8UO8rlThlcr6xnTQDbR3gkTDRsCAwEA
         | 
| 13 | 
            +
            AQKCAgB495RDRQB9x6hX3F+DviI8rDGug+h5FAiwJ0IBG2o1kNdbNVsTC5dvpEmg
         | 
| 14 | 
            +
            uPHaugCaEP+PMZbU34mNklKlb+7QbPbH18UGqz5so9TlmYOXz9oaKD6nAWL9nqRo
         | 
| 15 | 
            +
            02pCXQDR3DuxbhbgFnFTIECJ/jqXkl2toGaVp83W+6kZkHP8srkMyLASihWgosc+
         | 
| 16 | 
            +
            xRWAGvaAZtNz7br+eT5fxuH/SEKPOl1qAZ23kXrXm1XQfizk8MnMTptkUMYv+hfl
         | 
| 17 | 
            +
            TM98BASUsiTs6g+opy43HFn09naOQcqkWZO/8s6Gbvhi2lVfZqi5Ba6g3lVYJ3gU
         | 
| 18 | 
            +
            kGoako4N9qB7WqJz+LYjVR9C4TbkkJ9OD6ArwGAx5IIzC3XKSxCyY/pUn4YumPhY
         | 
| 19 | 
            +
            fjvY/km54TBtx/isS1TAgjSgDUxbzrfbkh7afOXSOniy9bWJMgNqHF61dqxWxmUg
         | 
| 20 | 
            +
            F5Tch9zH3qFFVkXpYzDU/R8ZV+CRouCvhn0eZYDh8IqIAwjH0VjkxjPyQtrdrMd3
         | 
| 21 | 
            +
            gDKMVKoY31EOMLZzv8a0prjpr15A+uw30tT336qb3fofks4pZKUJw8ru9jJVir2p
         | 
| 22 | 
            +
            +RML6iUHCmIeceF7/N1meooSMLPJe0xgKeMb9M4Wtd/et2UNVtP8nCDG622rf2a0
         | 
| 23 | 
            +
            F/EudXuFgc3FB8nXRw9TCkw9xKQff38edG5xPFUEgqObbVl5YQKCAQEA5DDKGOmp
         | 
| 24 | 
            +
            EO5Zuf/kZfG6/AMMYwAuv1HrYTV2w/HnI3tyQ34Xkeqo+I/OqmRk68Ztxw4Kx1So
         | 
| 25 | 
            +
            SRavkotrlWhhDpl2+Yn1BjkHktSoOdf9gJ9z9llkLmbOkBjmupig1NUB7fq/4y2k
         | 
| 26 | 
            +
            MdqJXDy3uVKHJ97gxdIheMTyHiKuMJPnuT5lZtlT210Ig82P7sLQb/sgCfKVFTr0
         | 
| 27 | 
            +
            Z3haQ5/tBNKjq+igT4nMBWupOTD1q2GeZLIZACnmnUIhvu+3/bm0l+wiCB0DqF0T
         | 
| 28 | 
            +
            Wy9tlL3fqQSCqzevL7/k5Lg6tJTaP/XYePB73TsOtAXgIaoltXgRBsBUeE1eaODx
         | 
| 29 | 
            +
            kMT6E1PPtn7EqQKCAQEA1qImmTWGqhKICrwje40awPufFtZ/qXKVCN/V+zYsrJV1
         | 
| 30 | 
            +
            EnZpUDM+zfitlQCugnrQVHSpgfekI6mmVkmogO3fkNjUFTq+neg7IHOUHnqotx+3
         | 
| 31 | 
            +
            NMqIsyFInGstu9mfPd26fzZjUtx5wKF38LDTIJJAEJ83U3UpPBfpwKmiOGDXOa54
         | 
| 32 | 
            +
            2i4em/bb/hrQR6JySruZYLi0fXnGI5ZOfpkHgC/KOFkKNKAg2oh4B9qo7ACyiSNk
         | 
| 33 | 
            +
            yojb2mmn6g1OLPxi7wGUSrkS1HQq4an6RZ+eUO0HXVWag0QStdQ91M9IrIHgSBBG
         | 
| 34 | 
            +
            0e86Ar6jtD579gqsbz4ySpI/FqEI9obTC+E1/b0aIwKCAQAGz334qGCnZLXA22ZR
         | 
| 35 | 
            +
            tJlEFEM2YTcD9snzqMjWqE2hvXl3kjfZ3wsUABbG9yAb+VwlaMHhmSE8rTSoRwj6
         | 
| 36 | 
            +
            +JaM/P+UCw4JFYKoWzh6IXwrbpbjb1+SEvdvTY71WsDSGVlpZOZ9PUt9QWyAGD/T
         | 
| 37 | 
            +
            hCcMhZZn0RG2rQoc5CQWxxNPcBFOtIXQMkKizGvTUHUwImqeYWMZsxzASdNH2WoV
         | 
| 38 | 
            +
            jsPbyaGfPhmcv83ZKyDp8IvtrXMZkiaT4vlm3Xi8VeKR9jY9z7/gMob1XcEDg3c9
         | 
| 39 | 
            +
            cCkGOy87WZrXSLhX02mAJzJCycqom66gqNw7pPxjIiY/8VWUEZsTvkL3cymTkhjM
         | 
| 40 | 
            +
            9ZOhAoIBAGUaNqJe01NTrV+ZJgGyAxM6s8LXQYV5IvjuL2bJKxwUvvP2cT9FFGWD
         | 
| 41 | 
            +
            qYiRrKJr5ayS07IUC+58oIzu33/0DSa27JgfduD9HrT3nKMK1mSEfRFSAjiXChQc
         | 
| 42 | 
            +
            bIubRGapBoub/AdxMazqoovvT1R9b84kobQfcVAMV6DYh0CVZWyXYfgsV2DSVOiK
         | 
| 43 | 
            +
            iufjfoDzg5lLCEI+1XW3/LunrB/W4yPN1X/amf8234ublYyt+2ucD4NUGnP05xLa
         | 
| 44 | 
            +
            N6P7M0MwdEEKkvMe0YBBSFH5kWK/dIOjqkgBDes20fVnuuz/tL1dZW7IiIP4dzaV
         | 
| 45 | 
            +
            ZGEOwBEatCfqYetv6b/u3IUxDfS7Wg8CggEBALoOwkn5LGdQg+bpdZAKJspGnJWL
         | 
| 46 | 
            +
            Kyr9Al2tvgc69rxfpZqS5eDLkYYCzWPpspSt0Axm1O7xOUDQDt42luaLNGJzHZ2Q
         | 
| 47 | 
            +
            Hn0ZNMhyHpe8d8mIQngRjD+nuLI/uFUglPzabDOCOln2aycjg1mA6ecXP1XMEVbu
         | 
| 48 | 
            +
            0RB/0IE36XTMfZ+u9+TRjkBLpmUaX1FdIQQWfwUou/LfaXotoQlhSGAcprLrncuJ
         | 
| 49 | 
            +
            T44UATYEgO/q9pMM33bdE3eBYZHoT9mSvqoLCN4s0LuwOYItIxLKUj0GulL0VQOI
         | 
| 50 | 
            +
            SZi+0A1c8cVDXgApkBrWPDQIR9JS4de0gW4hnDoUvHtUc2TYPRnz6N9MtFY=
         | 
| 51 | 
            +
            -----END RSA PRIVATE KEY-----
         | 
    
        data/spec/comms_spec.rb
    CHANGED
    
    | @@ -1,147 +1,147 @@ | |
| 1 | 
            -
            require 'ruby-tls'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            describe RubyTls do
         | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
                describe RubyTls::State do
         | 
| 7 | 
            -
                    before :each do
         | 
| 8 | 
            -
                        @client = RubyTls::State.new
         | 
| 9 | 
            -
                        @server = RubyTls::State.new
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                        @server_started  = false
         | 
| 12 | 
            -
                        @server_stop = false
         | 
| 13 | 
            -
                        @client_stop = false
         | 
| 14 | 
            -
                    end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                    
         | 
| 17 | 
            -
                    it "should be able to send and receive encrypted comms" do
         | 
| 18 | 
            -
                        @server_data = []
         | 
| 19 | 
            -
                        @client_data = []
         | 
| 20 | 
            -
                        @interleaved = []
         | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
                        @client[:close_cb] = proc {
         | 
| 24 | 
            -
                            @client_data << 'client stopped'
         | 
| 25 | 
            -
                            @interleaved << 'client stopped'
         | 
| 26 | 
            -
                            @client_stop = true
         | 
| 27 | 
            -
                        }
         | 
| 28 | 
            -
                        @client[:dispatch_cb] = proc { |state, data, len|
         | 
| 29 | 
            -
                            @client_data << data.read_string(len)
         | 
| 30 | 
            -
                            @interleaved << data.read_string(len)
         | 
| 31 | 
            -
                        }
         | 
| 32 | 
            -
                        @client[:transmit_cb] = proc { |state, data, len|
         | 
| 33 | 
            -
                            if not @server_started
         | 
| 34 | 
            -
                                @server_started = true
         | 
| 35 | 
            -
                                RubyTls.start_tls(@server, true, '', '', false)
         | 
| 36 | 
            -
                            end
         | 
| 37 | 
            -
                            data = data.get_bytes(0, len)
         | 
| 38 | 
            -
                            RubyTls.decrypt_data(@server, data, data.length) unless @client_stop
         | 
| 39 | 
            -
                        }
         | 
| 40 | 
            -
                        @client[:handshake_cb] = proc { |state|
         | 
| 41 | 
            -
                            @client_data << 'ready'
         | 
| 42 | 
            -
                            @interleaved << 'client ready'
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                            sending = 'client request'
         | 
| 45 | 
            -
                            RubyTls.encrypt_data(@client, sending, sending.length) unless @client_stop
         | 
| 46 | 
            -
                        }
         | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
                        @server[:close_cb] = proc {
         | 
| 50 | 
            -
                            @server_data << 'server stop'
         | 
| 51 | 
            -
                            @interleaved << 'server stop'
         | 
| 52 | 
            -
                            @server_stop = true
         | 
| 53 | 
            -
                        }
         | 
| 54 | 
            -
                        @server[:dispatch_cb] = proc { |state, data, len|
         | 
| 55 | 
            -
                            @server_data << data.read_string(len)
         | 
| 56 | 
            -
                            @interleaved << data.read_string(len)
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                            sending = 'server response'
         | 
| 59 | 
            -
                            RubyTls.encrypt_data(@server, sending, sending.length) unless @server_stop
         | 
| 60 | 
            -
                        }
         | 
| 61 | 
            -
                        @server[:transmit_cb] = proc { |state, data, len|
         | 
| 62 | 
            -
                            data = data.get_bytes(0, len)
         | 
| 63 | 
            -
                            RubyTls.decrypt_data(@client, data, data.length) unless @server_stop
         | 
| 64 | 
            -
                        }
         | 
| 65 | 
            -
                        @server[:handshake_cb] = proc { |state|
         | 
| 66 | 
            -
                            @server_data << 'ready'
         | 
| 67 | 
            -
                            @interleaved << 'server ready'
         | 
| 68 | 
            -
                        }
         | 
| 69 | 
            -
             | 
| 70 | 
            -
                        RubyTls.start_tls(@client, false, '', '', false)
         | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
                        
         | 
| 74 | 
            -
                        @client_data. | 
| 75 | 
            -
                        @server_data. | 
| 76 | 
            -
                        @interleaved. | 
| 77 | 
            -
                    end
         | 
| 78 | 
            -
                end
         | 
| 79 | 
            -
             | 
| 80 | 
            -
                describe RubyTls::Connection do
         | 
| 81 | 
            -
                    before :each do
         | 
| 82 | 
            -
                        @client = RubyTls::Connection.new
         | 
| 83 | 
            -
                        @server = RubyTls::Connection.new
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                        @server_started  = false
         | 
| 86 | 
            -
                        @server_stop = false
         | 
| 87 | 
            -
                        @client_stop = false
         | 
| 88 | 
            -
                    end
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                    it "should be able to send and receive encrypted comms" do
         | 
| 91 | 
            -
                        @server_data = []
         | 
| 92 | 
            -
                        @client_data = []
         | 
| 93 | 
            -
                        @interleaved = []
         | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
                        @client.close_cb do
         | 
| 97 | 
            -
                            @client_data << 'client stopped'
         | 
| 98 | 
            -
                            @interleaved << 'client stopped'
         | 
| 99 | 
            -
                            @client_stop = true
         | 
| 100 | 
            -
                        end
         | 
| 101 | 
            -
                        @client.dispatch_cb do |data|
         | 
| 102 | 
            -
                            @client_data << data
         | 
| 103 | 
            -
                            @interleaved << data
         | 
| 104 | 
            -
                        end
         | 
| 105 | 
            -
                        @client.transmit_cb do |data|
         | 
| 106 | 
            -
                            if not @server_started
         | 
| 107 | 
            -
                                @server_started = true
         | 
| 108 | 
            -
                                @server.start(:server => true)
         | 
| 109 | 
            -
                            end
         | 
| 110 | 
            -
                            @server.decrypt(data) unless @client_stop
         | 
| 111 | 
            -
                        end
         | 
| 112 | 
            -
                        @client.handshake_cb do
         | 
| 113 | 
            -
                            @client_data << 'ready'
         | 
| 114 | 
            -
                            @interleaved << 'client ready'
         | 
| 115 | 
            -
             | 
| 116 | 
            -
                            @client.encrypt('client request') unless @client_stop
         | 
| 117 | 
            -
                        end
         | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
                        @server.close_cb do
         | 
| 121 | 
            -
                            @server_data << 'server stop'
         | 
| 122 | 
            -
                            @interleaved << 'server stop'
         | 
| 123 | 
            -
                            @server_stop = true
         | 
| 124 | 
            -
                        end
         | 
| 125 | 
            -
                        @server.dispatch_cb do |data|
         | 
| 126 | 
            -
                            @server_data << data
         | 
| 127 | 
            -
                            @interleaved << data
         | 
| 128 | 
            -
                            @server.encrypt('server response') unless @server_stop
         | 
| 129 | 
            -
                        end
         | 
| 130 | 
            -
                        @server.transmit_cb do |data|
         | 
| 131 | 
            -
                            @client.decrypt(data) unless @server_stop
         | 
| 132 | 
            -
                        end
         | 
| 133 | 
            -
                        @server.handshake_cb do
         | 
| 134 | 
            -
                            @server_data << 'ready'
         | 
| 135 | 
            -
                            @interleaved << 'server ready'
         | 
| 136 | 
            -
                        end
         | 
| 137 | 
            -
             | 
| 138 | 
            -
                        @client.start
         | 
| 139 | 
            -
             | 
| 140 | 
            -
                        
         | 
| 141 | 
            -
                        @client_data. | 
| 142 | 
            -
                        @server_data. | 
| 143 | 
            -
                        @interleaved. | 
| 144 | 
            -
                    end
         | 
| 145 | 
            -
                end
         | 
| 146 | 
            -
            end
         | 
| 147 | 
            -
             | 
| 1 | 
            +
            require 'ruby-tls'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe RubyTls do
         | 
| 4 | 
            +
             | 
| 5 | 
            +
             | 
| 6 | 
            +
                describe RubyTls::State do
         | 
| 7 | 
            +
                    before :each do
         | 
| 8 | 
            +
                        @client = RubyTls::State.new
         | 
| 9 | 
            +
                        @server = RubyTls::State.new
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                        @server_started  = false
         | 
| 12 | 
            +
                        @server_stop = false
         | 
| 13 | 
            +
                        @client_stop = false
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    
         | 
| 17 | 
            +
                    it "should be able to send and receive encrypted comms" do
         | 
| 18 | 
            +
                        @server_data = []
         | 
| 19 | 
            +
                        @client_data = []
         | 
| 20 | 
            +
                        @interleaved = []
         | 
| 21 | 
            +
             | 
| 22 | 
            +
             | 
| 23 | 
            +
                        @client[:close_cb] = proc {
         | 
| 24 | 
            +
                            @client_data << 'client stopped'
         | 
| 25 | 
            +
                            @interleaved << 'client stopped'
         | 
| 26 | 
            +
                            @client_stop = true
         | 
| 27 | 
            +
                        }
         | 
| 28 | 
            +
                        @client[:dispatch_cb] = proc { |state, data, len|
         | 
| 29 | 
            +
                            @client_data << data.read_string(len)
         | 
| 30 | 
            +
                            @interleaved << data.read_string(len)
         | 
| 31 | 
            +
                        }
         | 
| 32 | 
            +
                        @client[:transmit_cb] = proc { |state, data, len|
         | 
| 33 | 
            +
                            if not @server_started
         | 
| 34 | 
            +
                                @server_started = true
         | 
| 35 | 
            +
                                RubyTls.start_tls(@server, true, '', '', false)
         | 
| 36 | 
            +
                            end
         | 
| 37 | 
            +
                            data = data.get_bytes(0, len)
         | 
| 38 | 
            +
                            RubyTls.decrypt_data(@server, data, data.length) unless @client_stop
         | 
| 39 | 
            +
                        }
         | 
| 40 | 
            +
                        @client[:handshake_cb] = proc { |state|
         | 
| 41 | 
            +
                            @client_data << 'ready'
         | 
| 42 | 
            +
                            @interleaved << 'client ready'
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                            sending = 'client request'
         | 
| 45 | 
            +
                            RubyTls.encrypt_data(@client, sending, sending.length) unless @client_stop
         | 
| 46 | 
            +
                        }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
             | 
| 49 | 
            +
                        @server[:close_cb] = proc {
         | 
| 50 | 
            +
                            @server_data << 'server stop'
         | 
| 51 | 
            +
                            @interleaved << 'server stop'
         | 
| 52 | 
            +
                            @server_stop = true
         | 
| 53 | 
            +
                        }
         | 
| 54 | 
            +
                        @server[:dispatch_cb] = proc { |state, data, len|
         | 
| 55 | 
            +
                            @server_data << data.read_string(len)
         | 
| 56 | 
            +
                            @interleaved << data.read_string(len)
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                            sending = 'server response'
         | 
| 59 | 
            +
                            RubyTls.encrypt_data(@server, sending, sending.length) unless @server_stop
         | 
| 60 | 
            +
                        }
         | 
| 61 | 
            +
                        @server[:transmit_cb] = proc { |state, data, len|
         | 
| 62 | 
            +
                            data = data.get_bytes(0, len)
         | 
| 63 | 
            +
                            RubyTls.decrypt_data(@client, data, data.length) unless @server_stop
         | 
| 64 | 
            +
                        }
         | 
| 65 | 
            +
                        @server[:handshake_cb] = proc { |state|
         | 
| 66 | 
            +
                            @server_data << 'ready'
         | 
| 67 | 
            +
                            @interleaved << 'server ready'
         | 
| 68 | 
            +
                        }
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                        RubyTls.start_tls(@client, false, '', '', false)
         | 
| 71 | 
            +
             | 
| 72 | 
            +
             | 
| 73 | 
            +
                        
         | 
| 74 | 
            +
                        expect(@client_data).to eq(['ready', 'server response'])
         | 
| 75 | 
            +
                        expect(@server_data).to eq(['ready', 'client request'])
         | 
| 76 | 
            +
                        expect(@interleaved).to eq(['server ready', 'client ready', 'client request', 'server response'])
         | 
| 77 | 
            +
                    end
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                describe RubyTls::Connection do
         | 
| 81 | 
            +
                    before :each do
         | 
| 82 | 
            +
                        @client = RubyTls::Connection.new
         | 
| 83 | 
            +
                        @server = RubyTls::Connection.new
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                        @server_started  = false
         | 
| 86 | 
            +
                        @server_stop = false
         | 
| 87 | 
            +
                        @client_stop = false
         | 
| 88 | 
            +
                    end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                    it "should be able to send and receive encrypted comms" do
         | 
| 91 | 
            +
                        @server_data = []
         | 
| 92 | 
            +
                        @client_data = []
         | 
| 93 | 
            +
                        @interleaved = []
         | 
| 94 | 
            +
             | 
| 95 | 
            +
             | 
| 96 | 
            +
                        @client.close_cb do
         | 
| 97 | 
            +
                            @client_data << 'client stopped'
         | 
| 98 | 
            +
                            @interleaved << 'client stopped'
         | 
| 99 | 
            +
                            @client_stop = true
         | 
| 100 | 
            +
                        end
         | 
| 101 | 
            +
                        @client.dispatch_cb do |data|
         | 
| 102 | 
            +
                            @client_data << data
         | 
| 103 | 
            +
                            @interleaved << data
         | 
| 104 | 
            +
                        end
         | 
| 105 | 
            +
                        @client.transmit_cb do |data|
         | 
| 106 | 
            +
                            if not @server_started
         | 
| 107 | 
            +
                                @server_started = true
         | 
| 108 | 
            +
                                @server.start(:server => true)
         | 
| 109 | 
            +
                            end
         | 
| 110 | 
            +
                            @server.decrypt(data) unless @client_stop
         | 
| 111 | 
            +
                        end
         | 
| 112 | 
            +
                        @client.handshake_cb do
         | 
| 113 | 
            +
                            @client_data << 'ready'
         | 
| 114 | 
            +
                            @interleaved << 'client ready'
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                            @client.encrypt('client request') unless @client_stop
         | 
| 117 | 
            +
                        end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
             | 
| 120 | 
            +
                        @server.close_cb do
         | 
| 121 | 
            +
                            @server_data << 'server stop'
         | 
| 122 | 
            +
                            @interleaved << 'server stop'
         | 
| 123 | 
            +
                            @server_stop = true
         | 
| 124 | 
            +
                        end
         | 
| 125 | 
            +
                        @server.dispatch_cb do |data|
         | 
| 126 | 
            +
                            @server_data << data
         | 
| 127 | 
            +
                            @interleaved << data
         | 
| 128 | 
            +
                            @server.encrypt('server response') unless @server_stop
         | 
| 129 | 
            +
                        end
         | 
| 130 | 
            +
                        @server.transmit_cb do |data|
         | 
| 131 | 
            +
                            @client.decrypt(data) unless @server_stop
         | 
| 132 | 
            +
                        end
         | 
| 133 | 
            +
                        @server.handshake_cb do
         | 
| 134 | 
            +
                            @server_data << 'ready'
         | 
| 135 | 
            +
                            @interleaved << 'server ready'
         | 
| 136 | 
            +
                        end
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                        @client.start
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                        
         | 
| 141 | 
            +
                        expect(@client_data).to eq(['ready', 'server response'])
         | 
| 142 | 
            +
                        expect(@server_data).to eq(['ready', 'client request'])
         | 
| 143 | 
            +
                        expect(@interleaved).to eq(['server ready', 'client ready', 'client request', 'server response'])
         | 
| 144 | 
            +
                    end
         | 
| 145 | 
            +
                end
         | 
| 146 | 
            +
            end
         | 
| 147 | 
            +
             |