tweetnacl 0.3.0 → 1.0.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 +5 -5
- checksums.yaml.gz.sig +4 -0
- data.tar.gz.sig +0 -0
- data/.circleci/config.yml +50 -0
- data/CHANGELOG.md +22 -1
- data/README.md +2 -2
- data/Rakefile +50 -0
- data/certs/franckverrot.pem +25 -0
- data/ext/tweetnacl/rbext.c +39 -19
- data/ext/tweetnacl/tweetnacl.c +3 -1
- data/lib/tweet_na_cl.rb +1 -0
- data/test/test_helper.rb +1 -0
- data/test/tweetnacl_constants_test.rb +162 -162
- data/test/tweetnacl_crypto_box_test.rb +16 -1
- data/test/tweetnacl_crypto_secretbox_test.rb +1 -1
- data/tweetnacl.gemspec +21 -1
- metadata +47 -8
- metadata.gz.sig +0 -0
- data/.travis.yml +0 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: df32ba55a66d1f9acd3f40099ffc4e866c56abdb704a7191b2b4c0ffad4089b6
         | 
| 4 | 
            +
              data.tar.gz: 90fa17459095c80c00910b0900a02ac11fe35a142dac323ae4427f3cd0aad7e7
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 986de1548f6a609b464ca5905bf007af6136e0dc33463ccce70598ce92d4317ea713d248bae833936e8f661462287da0b9779583515ec3a37f5edf32da8bf8ff
         | 
| 7 | 
            +
              data.tar.gz: 7b9fb5c8285e391a161feb8774efaf038c3c08adc45cec032b9f9d92d36d335cb6952ee6ca62f3f4bdc1ebf87f9cbe88ab9c8be1b27a6554778f9750ec736ec7
         | 
    
        checksums.yaml.gz.sig
    ADDED
    
    | @@ -0,0 +1,4 @@ | |
| 1 | 
            +
            �)!nR�����Ay%�r���R���K�2W��9�x`��4^#�A�+[C2T��vt?����ogZQ?�Mz���e�K����jT�ݯ��3�n�����A�{5��� n6�>B`�ց��m����%����q���'�
         | 
| 2 | 
            +
            4anV"F17Mv�4�%W�ǭw�$�Ȅ���P[ȫN堃Tk���T�6���X�փH��5�z�Ѽ�j�P���/ړ��-��L�c�8�\��в�e�3���<h��\��
         | 
| 3 | 
            +
            ������:���H���@I[1Ś/�&��7@ywO1$��E�3�����������<Q��9&�ߞ<����>���ۅgL�؛� ��K"X/G{5]�MB��;3��5I�A8y��Ϝ�,X�
         | 
| 4 | 
            +
            �
         | 
    
        data.tar.gz.sig
    ADDED
    
    | Binary file | 
| @@ -0,0 +1,50 @@ | |
| 1 | 
            +
            version: 2
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            shared: &shared
         | 
| 4 | 
            +
              working_directory: ~/repo
         | 
| 5 | 
            +
              steps:
         | 
| 6 | 
            +
                - checkout
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                # Download and cache dependencies
         | 
| 9 | 
            +
                - restore_cache:
         | 
| 10 | 
            +
                    keys:
         | 
| 11 | 
            +
                      - v1-dependencies-{{ checksum "Gemfile.lock" }}
         | 
| 12 | 
            +
                      # fallback to using the latest cache if no exact match is found
         | 
| 13 | 
            +
                      - v1-dependencies-
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                - run:
         | 
| 16 | 
            +
                    name: install dependencies
         | 
| 17 | 
            +
                    command: |
         | 
| 18 | 
            +
                      bundle install --jobs=4 --retry=3 --path vendor/bundle
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                - save_cache:
         | 
| 21 | 
            +
                    paths:
         | 
| 22 | 
            +
                      - ./vendor/bundle
         | 
| 23 | 
            +
                    key: v1-dependencies-{{ checksum "Gemfile.lock" }}
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                # run tests!
         | 
| 26 | 
            +
                - run:
         | 
| 27 | 
            +
                    name: run tests
         | 
| 28 | 
            +
                    command: bundle exec rake
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            jobs:
         | 
| 31 | 
            +
              "ruby-2.4":
         | 
| 32 | 
            +
                <<: *shared
         | 
| 33 | 
            +
                docker:
         | 
| 34 | 
            +
                  - image: circleci/ruby:2.4
         | 
| 35 | 
            +
              "ruby-2.5":
         | 
| 36 | 
            +
                <<: *shared
         | 
| 37 | 
            +
                docker:
         | 
| 38 | 
            +
                  - image: circleci/ruby:2.5
         | 
| 39 | 
            +
              "ruby-2.6":
         | 
| 40 | 
            +
                <<: *shared
         | 
| 41 | 
            +
                docker:
         | 
| 42 | 
            +
                  - image: circleci/ruby:2.6
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            workflows:
         | 
| 45 | 
            +
              version: 2
         | 
| 46 | 
            +
              build:
         | 
| 47 | 
            +
                jobs:
         | 
| 48 | 
            +
                  - "ruby-2.4"
         | 
| 49 | 
            +
                  - "ruby-2.5"
         | 
| 50 | 
            +
                  - "ruby-2.6"
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,6 +1,27 @@ | |
| 1 1 | 
             
            # Releases
         | 
| 2 2 |  | 
| 3 | 
            -
            ## UNRELEASED | 
| 3 | 
            +
            ## UNRELEASED
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ## 1.0.0 – Apr 30th 2019
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            ### BREAKING CHANGES
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            * Drop leading 0s from encrypted boxes!
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              A breaking change has been introduced to `crypto_box` and `crypto_secretbox`
         | 
| 12 | 
            +
              that makes ciphers differ.  The first 64 bits are always empty and have been
         | 
| 13 | 
            +
              dropped from the cipher output.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              This causes differences like:
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            ```
         | 
| 18 | 
            +
              -    expected_cipher = "0000000000000000FBC937C3F136E09FA8A45C58C15E801394F5BB74CE8D538FE3D726"
         | 
| 19 | 
            +
              +    expected_cipher =                 "FBC937C3F136E09FA8A45C58C15E801394F5BB74CE8D538FE3D726"
         | 
| 20 | 
            +
            ```
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              You might need to go through all persisted ciphers and change these values.
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              If you have more questions, please file a ticket!  Thanks!
         | 
| 4 25 |  | 
| 5 26 | 
             
            ## 0.3.0 - Aug 19th 2014
         | 
| 6 27 |  | 
    
        data/README.md
    CHANGED
    
    | @@ -5,7 +5,7 @@ | |
| 5 5 | 
             
            TweetNaCl is a C-extension for Ruby built on top of the official TweetNacl
         | 
| 6 6 | 
             
            distribution. It exposes the basic functions using Ruby objects.
         | 
| 7 7 |  | 
| 8 | 
            -
            For a detailed explanation of TweetNaCl, [here's the research paper associated with it][paper]
         | 
| 8 | 
            +
            For a detailed explanation of TweetNaCl, [here's the research paper associated with it][paper].
         | 
| 9 9 |  | 
| 10 10 | 
             
            ## INSTALL
         | 
| 11 11 |  | 
| @@ -159,4 +159,4 @@ No. Until proven otherwise. | |
| 159 159 | 
             
            Franck Verrot, Copyright 2014. See LICENSE.txt.
         | 
| 160 160 |  | 
| 161 161 |  | 
| 162 | 
            -
            [paper] | 
| 162 | 
            +
            [paper]: http://tweetnacl.cr.yp.to/tweetnacl-20131229.pdf
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -1,4 +1,10 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'rubygems/specification'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'bundler'
         | 
| 1 5 | 
             
            require 'rake/extensiontask'
         | 
| 6 | 
            +
            Bundler::GemHelper.install_tasks
         | 
| 7 | 
            +
             | 
| 2 8 | 
             
            spec = Gem::Specification.load('tweetnacl.gemspec')
         | 
| 3 9 | 
             
            Rake::ExtensionTask.new('tweetnacl', spec) do |ext|
         | 
| 4 10 | 
             
              ext.source_pattern = "*.{c,h}"
         | 
| @@ -16,3 +22,47 @@ task :default => :full | |
| 16 22 |  | 
| 17 23 | 
             
            desc "Run the full spec suite"
         | 
| 18 24 | 
             
            task :full => ["clean", "compile", "test"]
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            def gemspec
         | 
| 27 | 
            +
              @gemspec ||= begin
         | 
| 28 | 
            +
                             file = File.expand_path('../tweetnacl.gemspec', __FILE__)
         | 
| 29 | 
            +
                             eval(File.read(file), binding, file)
         | 
| 30 | 
            +
                           end
         | 
| 31 | 
            +
            end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            desc "Clean the current directory"
         | 
| 34 | 
            +
            task :clean do
         | 
| 35 | 
            +
              rm_rf 'tmp'
         | 
| 36 | 
            +
              rm_rf 'pkg'
         | 
| 37 | 
            +
            end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            desc "Run the full spec suite"
         | 
| 40 | 
            +
            task :full => ["clean", "test"]
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            desc "install the gem locally"
         | 
| 43 | 
            +
            task :install => :package do
         | 
| 44 | 
            +
              sh %{gem install pkg/#{gemspec.name}-#{gemspec.version}}
         | 
| 45 | 
            +
            end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            desc "validate the gemspec"
         | 
| 48 | 
            +
            task :gemspec do
         | 
| 49 | 
            +
              gemspec.validate
         | 
| 50 | 
            +
            end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            desc "Build the gem"
         | 
| 53 | 
            +
            task :gem => [:gemspec, :build] do
         | 
| 54 | 
            +
              mkdir_p "pkg"
         | 
| 55 | 
            +
              sh "gem build tweetnacl.gemspec"
         | 
| 56 | 
            +
              mv "#{gemspec.full_name}.gem", "pkg"
         | 
| 57 | 
            +
             | 
| 58 | 
            +
              require 'digest/sha2'
         | 
| 59 | 
            +
              built_gem_path = "pkg/#{gemspec.full_name}.gem"
         | 
| 60 | 
            +
              checksum = Digest::SHA512.new.hexdigest(File.read(built_gem_path))
         | 
| 61 | 
            +
              checksum_path = "checksums/#{gemspec.version}.sha512"
         | 
| 62 | 
            +
              File.open(checksum_path, 'w' ) {|f| f.write(checksum) }
         | 
| 63 | 
            +
            end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            desc "Install TweetNaCl"
         | 
| 66 | 
            +
            task :install => :gem do
         | 
| 67 | 
            +
              sh "gem install pkg/#{gemspec.full_name}.gem"
         | 
| 68 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            -----BEGIN CERTIFICATE-----
         | 
| 2 | 
            +
            MIIEMDCCApigAwIBAgIBATANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDDBZmcmFu
         | 
| 3 | 
            +
            Y2svREM9dmVycm90L0RDPWZyMB4XDTE4MTIyMTAxMzgwNVoXDTE5MTIyMTAxMzgw
         | 
| 4 | 
            +
            NVowITEfMB0GA1UEAwwWZnJhbmNrL0RDPXZlcnJvdC9EQz1mcjCCAaIwDQYJKoZI
         | 
| 5 | 
            +
            hvcNAQEBBQADggGPADCCAYoCggGBANjZ/7L2ECEQAVOYvMl0JOwyVXKRCsLnVrmP
         | 
| 6 | 
            +
            mcwpCMFL0ennkpLJcqiDNsm0b/RkJHSLu3FMoYrIU5KoaP7iMIsLGv846aw2wSNI
         | 
| 7 | 
            +
            G5XWGnRY9dWVu7Gz2OZbsDi18WT94Y/s2yf+orPLAiaJb451decYEpHqLTiaJhhJ
         | 
| 8 | 
            +
            xHckJixfDVwZGJpow7rrJAJMbU9ZCJFUFAfNpgkOqhbBU4Ehi1umbC/ZBsVDiRVa
         | 
| 9 | 
            +
            ZjfNhe7kgx6jo3EfPY4izPW2IKkpk7nJKNfZnM2r0cnpPJbhyH1m5fsikBD5tRNe
         | 
| 10 | 
            +
            YxJpxDPf8UBTTXqoeSSQygiHWWZVbH3zj2jWzi5T0do5PbZcCeoIKR4TyOgbOgBW
         | 
| 11 | 
            +
            Ra7bm9uVXo6MQWpp0aeC/X+F2Y/dFjXAP/TPL89ownd3XZUaNDdZfS6aKBMG3a5C
         | 
| 12 | 
            +
            gcRLMt1hOJchslGNtvkq5W4Wq8hw+zNHzTMpRkIsYTbvlJCDxXRKR3jwPDTRvNAl
         | 
| 13 | 
            +
            aemBW1g3yerHeDQr6GtxKEvhmHdw/wIDAQABo3MwcTAJBgNVHRMEAjAAMAsGA1Ud
         | 
| 14 | 
            +
            DwQEAwIEsDAdBgNVHQ4EFgQUgG77cLAMzowManymHX63DbvfR5IwGwYDVR0RBBQw
         | 
| 15 | 
            +
            EoEQZnJhbmNrQHZlcnJvdC5mcjAbBgNVHRIEFDASgRBmcmFuY2tAdmVycm90LmZy
         | 
| 16 | 
            +
            MA0GCSqGSIb3DQEBCwUAA4IBgQAofcg/2kPT9VMBGEuO17F3yH6fiJboQeLL1nlM
         | 
| 17 | 
            +
            ULZv5LyyqV6Yq0cQ+TZMGHd/hbvBFTN9/55WmiN66tYLaunyfr4aUflCQcM/qu2g
         | 
| 18 | 
            +
            Ieoz8QLxfIi24DCDezpODHaud6Qt0VmMpalSOxbCuMeNnXLpnxbP/7fJBJoum5GS
         | 
| 19 | 
            +
            CqGuH81fXy7KAAlgMBcsYb3+vZJhuAeM/zSrE5Hmf1zApTEVZc4Y0dO6eRC6WbXW
         | 
| 20 | 
            +
            pJfyNXyITkkr7pTRYO/wj3lFoeDqfGXb48HvpJ54lqfeIvr9Hek7grcyQGfZ1rFY
         | 
| 21 | 
            +
            Dx3RTjxParzCWk/HCFHQiZmU5lnOl7GShwAZrG6l0UHST3/YNCA52KDrmC/T0A2N
         | 
| 22 | 
            +
            d2MQGgSZerYTx+HRKlradglBDPCs4nxQj5pnoDvGbngeZUua+ZZGFM9SXBT3zAIQ
         | 
| 23 | 
            +
            akLQjJWKHQCzyqDChJHRGhlxyVFKP2JwqFgzE3p1l64JArsb7BEqhpoBPXMwlChE
         | 
| 24 | 
            +
            HgzCBTsCU0syQBb1s6lBz2HrWA4=
         | 
| 25 | 
            +
            -----END CERTIFICATE-----
         | 
    
        data/ext/tweetnacl/rbext.c
    CHANGED
    
    | @@ -12,6 +12,18 @@ void hexdump(char * data, int len) | |
| 12 12 | 
             
              printf("\n");
         | 
| 13 13 | 
             
            }
         | 
| 14 14 |  | 
| 15 | 
            +
            extern int salsa_rounds;
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            VALUE m_crypto_box_salsa_rounds_set(VALUE self, VALUE _n) {
         | 
| 18 | 
            +
              if(_n == Qnil) { rb_raise(rb_eArgError, "`TweetNaCl#salsa_round=` called with nil argument"); }
         | 
| 19 | 
            +
              salsa_rounds = NUM2INT(_n);
         | 
| 20 | 
            +
              return _n;
         | 
| 21 | 
            +
            }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            VALUE m_crypto_box_salsa_rounds_get(VALUE self) {
         | 
| 24 | 
            +
              return INT2NUM(salsa_rounds);
         | 
| 25 | 
            +
            }
         | 
| 26 | 
            +
             | 
| 15 27 | 
             
            VALUE m_crypto_box_keypair(VALUE self) {
         | 
| 16 28 | 
             
              VALUE ary = rb_ary_new2(2);
         | 
| 17 29 | 
             
              unsigned char *pk = calloc(crypto_box_PUBLICKEYBYTES, sizeof(unsigned char));
         | 
| @@ -39,14 +51,14 @@ VALUE m_crypto_box(VALUE self, VALUE _m, VALUE _n, VALUE _pk, VALUE _sk) { | |
| 39 51 | 
             
              char * nonce = RSTRING_PTR(_n);
         | 
| 40 52 | 
             
              char * pk = RSTRING_PTR(_pk);
         | 
| 41 53 | 
             
              char * sk = RSTRING_PTR(_sk);
         | 
| 42 | 
            -
              int len =  | 
| 54 | 
            +
              int len = RSTRING_LEN(_m);
         | 
| 43 55 | 
             
              char * padded_message = (char*)calloc(sizeof(char), len + PADDING_LEN);
         | 
| 44 | 
            -
              memcpy(padded_message + PADDING_LEN, message,  | 
| 45 | 
            -
              char * c = malloc( | 
| 56 | 
            +
              memcpy(padded_message + PADDING_LEN, message, len);
         | 
| 57 | 
            +
              char * c = malloc(len + PADDING_LEN);
         | 
| 46 58 | 
             
              int res = crypto_box(c, padded_message, len + PADDING_LEN, nonce, pk, sk);
         | 
| 47 59 | 
             
              // TODO: use an exception instead of exit()
         | 
| 48 60 | 
             
              if (0 != res) { fprintf(stderr, "Something went wrong\n"); exit(res); }
         | 
| 49 | 
            -
              VALUE ret = rb_str_new(c, len +  | 
| 61 | 
            +
              VALUE ret = rb_str_new(c + 16, len + 16);
         | 
| 50 62 | 
             
              return ret;
         | 
| 51 63 | 
             
            }
         | 
| 52 64 |  | 
| @@ -63,15 +75,16 @@ VALUE m_crypto_box_open(VALUE self, VALUE _c, VALUE _n, VALUE _pk, VALUE _sk) { | |
| 63 75 | 
             
              char * nonce = RSTRING_PTR(_n);
         | 
| 64 76 | 
             
              char * pk = RSTRING_PTR(_pk);
         | 
| 65 77 | 
             
              char * sk = RSTRING_PTR(_sk);
         | 
| 66 | 
            -
              int  | 
| 67 | 
            -
              unsigned char *  | 
| 78 | 
            +
              int len = RSTRING_LEN(_c);
         | 
| 79 | 
            +
              unsigned char * ciphertext = (unsigned char*)calloc(sizeof(unsigned char), len + 16);
         | 
| 80 | 
            +
              memcpy(ciphertext + 16, c, len);
         | 
| 68 81 |  | 
| 69 | 
            -
               | 
| 70 | 
            -
              if (0 != res) { rb_raise(rb_eRuntimeError, "crypto_box_open did not work. error %d", res); }
         | 
| 82 | 
            +
              unsigned char * message = (unsigned char*)calloc(len + PADDING_LEN, sizeof(unsigned char));
         | 
| 71 83 |  | 
| 72 | 
            -
              message | 
| 84 | 
            +
              int res = crypto_box_open(message, ciphertext, len + 16, nonce, pk, sk);
         | 
| 85 | 
            +
              if (0 != res) { rb_raise(rb_eRuntimeError, "crypto_box_open did not work. error %d", res); }
         | 
| 73 86 |  | 
| 74 | 
            -
              VALUE ret =  | 
| 87 | 
            +
              VALUE ret = rb_str_new(message + PADDING_LEN, len - 16);
         | 
| 75 88 | 
             
              return ret;
         | 
| 76 89 | 
             
            }
         | 
| 77 90 |  | 
| @@ -79,19 +92,19 @@ VALUE m_crypto_secretbox(VALUE self, VALUE _m, VALUE _n, VALUE _k) { | |
| 79 92 | 
             
              if(_m == Qnil) { rb_raise(rb_eArgError, "A message should have been given"); }
         | 
| 80 93 | 
             
              if(_k == Qnil) { rb_raise(rb_eArgError, "Secret key should have been given"); }
         | 
| 81 94 | 
             
              if (RSTRING_LEN(_n)  != 24) { rb_raise(rb_eArgError, "nonce should be 24-byte long"); }
         | 
| 82 | 
            -
              if (RSTRING_LEN(_k) != 32) { rb_raise(rb_eArgError, "Secret key should be  | 
| 95 | 
            +
              if (RSTRING_LEN(_k) != 32) { rb_raise(rb_eArgError, "Secret key should be 32-byte long"); }
         | 
| 83 96 |  | 
| 84 97 | 
             
              char * message = RSTRING_PTR(_m);
         | 
| 85 98 | 
             
              char * nonce = RSTRING_PTR(_n);
         | 
| 86 99 | 
             
              char * k = RSTRING_PTR(_k);
         | 
| 87 | 
            -
              int len =  | 
| 100 | 
            +
              int len = RSTRING_LEN(_m);
         | 
| 88 101 | 
             
              char * padded_message = (char*)calloc(sizeof(char), len + PADDING_LEN);
         | 
| 89 | 
            -
              memcpy(padded_message + PADDING_LEN, message,  | 
| 90 | 
            -
              char * c = malloc( | 
| 102 | 
            +
              memcpy(padded_message + PADDING_LEN, message, len);
         | 
| 103 | 
            +
              char * c = malloc(len + PADDING_LEN);
         | 
| 91 104 | 
             
              int res = crypto_secretbox(c, padded_message, len + PADDING_LEN, nonce, k);
         | 
| 92 105 | 
             
              // TODO: use an exception instead of exit()
         | 
| 93 106 | 
             
              if (0 != res) { fprintf(stderr, "Something went wrong\n"); exit(res); }
         | 
| 94 | 
            -
              VALUE ret = rb_str_new(c, len +  | 
| 107 | 
            +
              VALUE ret = rb_str_new(c + 16, len + 16);
         | 
| 95 108 | 
             
              return ret;
         | 
| 96 109 | 
             
            }
         | 
| 97 110 |  | 
| @@ -104,13 +117,17 @@ VALUE m_crypto_secretbox_open(VALUE self, VALUE _c, VALUE _n, VALUE _k) { | |
| 104 117 | 
             
              unsigned char * c = RSTRING_PTR(_c);
         | 
| 105 118 | 
             
              char * nonce = RSTRING_PTR(_n);
         | 
| 106 119 | 
             
              char * k = RSTRING_PTR(_k);
         | 
| 107 | 
            -
              int  | 
| 108 | 
            -
             | 
| 120 | 
            +
              int len = RSTRING_LEN(_c);
         | 
| 121 | 
            +
             | 
| 122 | 
            +
              unsigned char * ciphertext = (unsigned char*)calloc(sizeof(unsigned char), len + 16);
         | 
| 123 | 
            +
              memcpy(ciphertext + 16, c, len);
         | 
| 109 124 |  | 
| 110 | 
            -
               | 
| 125 | 
            +
              char * message = calloc(len + PADDING_LEN, sizeof(char));
         | 
| 126 | 
            +
             | 
| 127 | 
            +
              int res = crypto_secretbox_open(message, ciphertext, len + 16, nonce, k);
         | 
| 111 128 | 
             
              if (0 != res) { rb_raise(rb_eRuntimeError, "crypto_secretbox_open did not work"); }
         | 
| 112 129 |  | 
| 113 | 
            -
              return  | 
| 130 | 
            +
              return rb_str_new(message + PADDING_LEN, len - 16);
         | 
| 114 131 | 
             
            }
         | 
| 115 132 |  | 
| 116 133 | 
             
            VALUE m_crypto_sign_keypair(VALUE self) {
         | 
| @@ -165,6 +182,9 @@ VALUE m_crypto_sign_open(VALUE self, VALUE _c, VALUE _k) { | |
| 165 182 | 
             
            void Init_tweetnacl() {
         | 
| 166 183 | 
             
              VALUE c = rb_define_module("TweetNaCl");
         | 
| 167 184 |  | 
| 185 | 
            +
              rb_define_module_function(c , "salsa_rounds="                              , RUBY_METHOD_FUNC(m_crypto_box_salsa_rounds_set), 1);
         | 
| 186 | 
            +
              rb_define_module_function(c , "salsa_rounds"                               , RUBY_METHOD_FUNC(m_crypto_box_salsa_rounds_get), 0);
         | 
| 187 | 
            +
             | 
| 168 188 | 
             
              rb_define_module_function(c , "crypto_box_keypair"                         , RUBY_METHOD_FUNC(m_crypto_box_keypair)    , 0);
         | 
| 169 189 |  | 
| 170 190 | 
             
              rb_define_module_function(c , "crypto_box"                                 , RUBY_METHOD_FUNC(m_crypto_box)            , 4);
         | 
    
        data/ext/tweetnacl/tweetnacl.c
    CHANGED
    
    | @@ -9,6 +9,8 @@ typedef long long i64; | |
| 9 9 | 
             
            typedef i64 gf[16];
         | 
| 10 10 | 
             
            extern void randombytes(u8 *,u64);
         | 
| 11 11 |  | 
| 12 | 
            +
            int salsa_rounds = 20;
         | 
| 13 | 
            +
             | 
| 12 14 | 
             
            static const u8
         | 
| 13 15 | 
             
              _0[16],
         | 
| 14 16 | 
             
              _9[32] = {9};
         | 
| @@ -82,7 +84,7 @@ sv core(u8 *out,const u8 *in,const u8 *k,const u8 *c,int h) | |
| 82 84 |  | 
| 83 85 | 
             
              FOR(i,16) y[i] = x[i];
         | 
| 84 86 |  | 
| 85 | 
            -
              FOR(i, | 
| 87 | 
            +
              FOR(i,salsa_rounds) {
         | 
| 86 88 | 
             
                FOR(j,4) {
         | 
| 87 89 | 
             
                  FOR(m,4) t[m] = x[(5*j+4*m)%16];
         | 
| 88 90 | 
             
                  t[1] ^= L32(t[0]+t[3], 7);
         | 
    
        data/lib/tweet_na_cl.rb
    CHANGED
    
    
    
        data/test/test_helper.rb
    CHANGED
    
    
| @@ -6,167 +6,167 @@ class TweetNaClConstantsTest < MiniTest::Test | |
| 6 6 | 
             
              end
         | 
| 7 7 |  | 
| 8 8 | 
             
              def test_constants
         | 
| 9 | 
            -
                assert_instance_of String, | 
| 10 | 
            -
                assert_instance_of  | 
| 11 | 
            -
                assert_instance_of  | 
| 12 | 
            -
                assert_instance_of String, | 
| 13 | 
            -
                assert_instance_of String, | 
| 14 | 
            -
                assert_instance_of  | 
| 15 | 
            -
                assert_instance_of  | 
| 16 | 
            -
                assert_instance_of String, | 
| 17 | 
            -
                assert_instance_of  | 
| 18 | 
            -
                assert_instance_of  | 
| 19 | 
            -
                assert_instance_of String, | 
| 20 | 
            -
                assert_instance_of String, | 
| 21 | 
            -
                assert_instance_of String, | 
| 22 | 
            -
                assert_instance_of  | 
| 23 | 
            -
                assert_instance_of  | 
| 24 | 
            -
                assert_instance_of  | 
| 25 | 
            -
                assert_instance_of  | 
| 26 | 
            -
                assert_instance_of  | 
| 27 | 
            -
                assert_instance_of  | 
| 28 | 
            -
                assert_instance_of String, | 
| 29 | 
            -
                assert_instance_of String, | 
| 30 | 
            -
                assert_instance_of  | 
| 31 | 
            -
                assert_instance_of  | 
| 32 | 
            -
                assert_instance_of  | 
| 33 | 
            -
                assert_instance_of  | 
| 34 | 
            -
                assert_instance_of  | 
| 35 | 
            -
                assert_instance_of  | 
| 36 | 
            -
                assert_instance_of String, | 
| 37 | 
            -
                assert_instance_of  | 
| 38 | 
            -
                assert_instance_of  | 
| 39 | 
            -
                assert_instance_of  | 
| 40 | 
            -
                assert_instance_of  | 
| 41 | 
            -
                assert_instance_of  | 
| 42 | 
            -
                assert_instance_of  | 
| 43 | 
            -
                assert_instance_of String, | 
| 44 | 
            -
                assert_instance_of String, | 
| 45 | 
            -
                assert_instance_of String, | 
| 46 | 
            -
                assert_instance_of  | 
| 47 | 
            -
                assert_instance_of  | 
| 48 | 
            -
                assert_instance_of  | 
| 49 | 
            -
                assert_instance_of  | 
| 50 | 
            -
                assert_instance_of String, | 
| 51 | 
            -
                assert_instance_of String, | 
| 52 | 
            -
                assert_instance_of  | 
| 53 | 
            -
                assert_instance_of  | 
| 54 | 
            -
                assert_instance_of  | 
| 55 | 
            -
                assert_instance_of  | 
| 56 | 
            -
                assert_instance_of String, | 
| 57 | 
            -
                assert_instance_of  | 
| 58 | 
            -
                assert_instance_of  | 
| 59 | 
            -
                assert_instance_of  | 
| 60 | 
            -
                assert_instance_of  | 
| 61 | 
            -
                assert_instance_of String, | 
| 62 | 
            -
                assert_instance_of String, | 
| 63 | 
            -
                assert_instance_of  | 
| 64 | 
            -
                assert_instance_of  | 
| 65 | 
            -
                assert_instance_of  | 
| 66 | 
            -
                assert_instance_of  | 
| 67 | 
            -
                assert_instance_of String, | 
| 68 | 
            -
                assert_instance_of  | 
| 69 | 
            -
                assert_instance_of  | 
| 70 | 
            -
                assert_instance_of  | 
| 71 | 
            -
                assert_instance_of  | 
| 72 | 
            -
                assert_instance_of String, | 
| 73 | 
            -
                assert_instance_of String, | 
| 74 | 
            -
                assert_instance_of String, | 
| 75 | 
            -
                assert_instance_of  | 
| 76 | 
            -
                assert_instance_of  | 
| 77 | 
            -
                assert_instance_of String, | 
| 78 | 
            -
                assert_instance_of String, | 
| 79 | 
            -
                assert_instance_of  | 
| 80 | 
            -
                assert_instance_of  | 
| 81 | 
            -
                assert_instance_of String, | 
| 82 | 
            -
                assert_instance_of  | 
| 83 | 
            -
                assert_instance_of  | 
| 84 | 
            -
                assert_instance_of String, | 
| 85 | 
            -
                assert_instance_of String, | 
| 86 | 
            -
                assert_instance_of  | 
| 87 | 
            -
                assert_instance_of  | 
| 88 | 
            -
                assert_instance_of String, | 
| 89 | 
            -
                assert_instance_of  | 
| 90 | 
            -
                assert_instance_of  | 
| 91 | 
            -
                assert_instance_of String, | 
| 92 | 
            -
                assert_instance_of String, | 
| 93 | 
            -
                assert_instance_of String, | 
| 94 | 
            -
                assert_instance_of  | 
| 95 | 
            -
                assert_instance_of String, | 
| 96 | 
            -
                assert_instance_of String, | 
| 97 | 
            -
                assert_instance_of  | 
| 98 | 
            -
                assert_instance_of String, | 
| 99 | 
            -
                assert_instance_of  | 
| 100 | 
            -
                assert_instance_of String, | 
| 101 | 
            -
                assert_instance_of String, | 
| 102 | 
            -
                assert_instance_of  | 
| 103 | 
            -
                assert_instance_of String, | 
| 104 | 
            -
                assert_instance_of  | 
| 105 | 
            -
                assert_instance_of String, | 
| 106 | 
            -
                assert_instance_of String, | 
| 107 | 
            -
                assert_instance_of String, | 
| 108 | 
            -
                assert_instance_of  | 
| 109 | 
            -
                assert_instance_of  | 
| 110 | 
            -
                assert_instance_of String, | 
| 111 | 
            -
                assert_instance_of String, | 
| 112 | 
            -
                assert_instance_of  | 
| 113 | 
            -
                assert_instance_of  | 
| 114 | 
            -
                assert_instance_of String, | 
| 115 | 
            -
                assert_instance_of  | 
| 116 | 
            -
                assert_instance_of  | 
| 117 | 
            -
                assert_instance_of String, | 
| 118 | 
            -
                assert_instance_of String, | 
| 119 | 
            -
                assert_instance_of String, | 
| 120 | 
            -
                assert_instance_of  | 
| 121 | 
            -
                assert_instance_of  | 
| 122 | 
            -
                assert_instance_of String, | 
| 123 | 
            -
                assert_instance_of String, | 
| 124 | 
            -
                assert_instance_of  | 
| 125 | 
            -
                assert_instance_of  | 
| 126 | 
            -
                assert_instance_of String, | 
| 127 | 
            -
                assert_instance_of  | 
| 128 | 
            -
                assert_instance_of  | 
| 129 | 
            -
                assert_instance_of String, | 
| 130 | 
            -
                assert_instance_of String, | 
| 131 | 
            -
                assert_instance_of String, | 
| 132 | 
            -
                assert_instance_of  | 
| 133 | 
            -
                assert_instance_of  | 
| 134 | 
            -
                assert_instance_of  | 
| 135 | 
            -
                assert_instance_of  | 
| 136 | 
            -
                assert_instance_of String, | 
| 137 | 
            -
                assert_instance_of String, | 
| 138 | 
            -
                assert_instance_of  | 
| 139 | 
            -
                assert_instance_of  | 
| 140 | 
            -
                assert_instance_of  | 
| 141 | 
            -
                assert_instance_of  | 
| 142 | 
            -
                assert_instance_of String, | 
| 143 | 
            -
                assert_instance_of  | 
| 144 | 
            -
                assert_instance_of  | 
| 145 | 
            -
                assert_instance_of  | 
| 146 | 
            -
                assert_instance_of  | 
| 147 | 
            -
                assert_instance_of String, | 
| 148 | 
            -
                assert_instance_of String, | 
| 149 | 
            -
                assert_instance_of String, | 
| 150 | 
            -
                assert_instance_of  | 
| 151 | 
            -
                assert_instance_of  | 
| 152 | 
            -
                assert_instance_of  | 
| 153 | 
            -
                assert_instance_of String, | 
| 154 | 
            -
                assert_instance_of String, | 
| 155 | 
            -
                assert_instance_of  | 
| 156 | 
            -
                assert_instance_of  | 
| 157 | 
            -
                assert_instance_of  | 
| 158 | 
            -
                assert_instance_of String, | 
| 159 | 
            -
                assert_instance_of  | 
| 160 | 
            -
                assert_instance_of  | 
| 161 | 
            -
                assert_instance_of  | 
| 162 | 
            -
                assert_instance_of String, | 
| 163 | 
            -
                assert_instance_of String, | 
| 164 | 
            -
                assert_instance_of String, | 
| 165 | 
            -
                assert_instance_of  | 
| 166 | 
            -
                assert_instance_of  | 
| 167 | 
            -
                assert_instance_of String, | 
| 168 | 
            -
                assert_instance_of String, | 
| 169 | 
            -
                assert_instance_of  | 
| 170 | 
            -
                assert_instance_of  | 
| 9 | 
            +
                assert_instance_of String,  _const("CRYPTO_AUTH_PRIMITIVE")
         | 
| 10 | 
            +
                assert_instance_of Integer, _const("CRYPTO_AUTH_BYTES")
         | 
| 11 | 
            +
                assert_instance_of Integer, _const("CRYPTO_AUTH_KEYBYTES")
         | 
| 12 | 
            +
                assert_instance_of String,  _const("CRYPTO_AUTH_IMPLEMENTATION")
         | 
| 13 | 
            +
                assert_instance_of String,  _const("CRYPTO_AUTH_VERSION")
         | 
| 14 | 
            +
                assert_instance_of Integer, _const("CRYPTO_AUTH_HMACSHA512256_TWEET_BYTES")
         | 
| 15 | 
            +
                assert_instance_of Integer, _const("CRYPTO_AUTH_HMACSHA512256_TWEET_KEYBYTES")
         | 
| 16 | 
            +
                assert_instance_of String,  _const("CRYPTO_AUTH_HMACSHA512256_TWEET_VERSION")
         | 
| 17 | 
            +
                assert_instance_of Integer, _const("CRYPTO_AUTH_HMACSHA512256_BYTES")
         | 
| 18 | 
            +
                assert_instance_of Integer, _const("CRYPTO_AUTH_HMACSHA512256_KEYBYTES")
         | 
| 19 | 
            +
                assert_instance_of String,  _const("CRYPTO_AUTH_HMACSHA512256_VERSION")
         | 
| 20 | 
            +
                assert_instance_of String,  _const("CRYPTO_AUTH_HMACSHA512256_IMPLEMENTATION")
         | 
| 21 | 
            +
                assert_instance_of String,  _const("CRYPTO_BOX_PRIMITIVE")
         | 
| 22 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_PUBLICKEYBYTES")
         | 
| 23 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_SECRETKEYBYTES")
         | 
| 24 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_BEFORENMBYTES")
         | 
| 25 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_NONCEBYTES")
         | 
| 26 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_ZEROBYTES")
         | 
| 27 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_BOXZEROBYTES")
         | 
| 28 | 
            +
                assert_instance_of String,  _const("CRYPTO_BOX_IMPLEMENTATION")
         | 
| 29 | 
            +
                assert_instance_of String,  _const("CRYPTO_BOX_VERSION")
         | 
| 30 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_PUBLICKEYBYTES")
         | 
| 31 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_SECRETKEYBYTES")
         | 
| 32 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_BEFORENMBYTES")
         | 
| 33 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_NONCEBYTES")
         | 
| 34 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_ZEROBYTES")
         | 
| 35 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_BOXZEROBYTES")
         | 
| 36 | 
            +
                assert_instance_of String,  _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_VERSION")
         | 
| 37 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_PUBLICKEYBYTES")
         | 
| 38 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SECRETKEYBYTES")
         | 
| 39 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_BEFORENMBYTES")
         | 
| 40 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_NONCEBYTES")
         | 
| 41 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_ZEROBYTES")
         | 
| 42 | 
            +
                assert_instance_of Integer, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_BOXZEROBYTES")
         | 
| 43 | 
            +
                assert_instance_of String,  _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_VERSION")
         | 
| 44 | 
            +
                assert_instance_of String,  _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_IMPLEMENTATION")
         | 
| 45 | 
            +
                assert_instance_of String,  _const("CRYPTO_CORE_PRIMITIVE")
         | 
| 46 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_OUTPUTBYTES")
         | 
| 47 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_INPUTBYTES")
         | 
| 48 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_KEYBYTES")
         | 
| 49 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_CONSTBYTES")
         | 
| 50 | 
            +
                assert_instance_of String,  _const("CRYPTO_CORE_IMPLEMENTATION")
         | 
| 51 | 
            +
                assert_instance_of String,  _const("CRYPTO_CORE_VERSION")
         | 
| 52 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_SALSA20_TWEET_OUTPUTBYTES")
         | 
| 53 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_SALSA20_TWEET_INPUTBYTES")
         | 
| 54 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_SALSA20_TWEET_KEYBYTES")
         | 
| 55 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_SALSA20_TWEET_CONSTBYTES")
         | 
| 56 | 
            +
                assert_instance_of String,  _const("CRYPTO_CORE_SALSA20_TWEET_VERSION")
         | 
| 57 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_SALSA20_OUTPUTBYTES")
         | 
| 58 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_SALSA20_INPUTBYTES")
         | 
| 59 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_SALSA20_KEYBYTES")
         | 
| 60 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_SALSA20_CONSTBYTES")
         | 
| 61 | 
            +
                assert_instance_of String,  _const("CRYPTO_CORE_SALSA20_VERSION")
         | 
| 62 | 
            +
                assert_instance_of String,  _const("CRYPTO_CORE_SALSA20_IMPLEMENTATION")
         | 
| 63 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_HSALSA20_TWEET_OUTPUTBYTES")
         | 
| 64 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_HSALSA20_TWEET_INPUTBYTES")
         | 
| 65 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_HSALSA20_TWEET_KEYBYTES")
         | 
| 66 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_HSALSA20_TWEET_CONSTBYTES")
         | 
| 67 | 
            +
                assert_instance_of String,  _const("CRYPTO_CORE_HSALSA20_TWEET_VERSION")
         | 
| 68 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_HSALSA20_OUTPUTBYTES")
         | 
| 69 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_HSALSA20_INPUTBYTES")
         | 
| 70 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_HSALSA20_KEYBYTES")
         | 
| 71 | 
            +
                assert_instance_of Integer, _const("CRYPTO_CORE_HSALSA20_CONSTBYTES")
         | 
| 72 | 
            +
                assert_instance_of String,  _const("CRYPTO_CORE_HSALSA20_VERSION")
         | 
| 73 | 
            +
                assert_instance_of String,  _const("CRYPTO_CORE_HSALSA20_IMPLEMENTATION")
         | 
| 74 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASHBLOCKS_PRIMITIVE")
         | 
| 75 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASHBLOCKS_STATEBYTES")
         | 
| 76 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASHBLOCKS_BLOCKBYTES")
         | 
| 77 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASHBLOCKS_IMPLEMENTATION")
         | 
| 78 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASHBLOCKS_VERSION")
         | 
| 79 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASHBLOCKS_SHA512_TWEET_STATEBYTES")
         | 
| 80 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASHBLOCKS_SHA512_TWEET_BLOCKBYTES")
         | 
| 81 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASHBLOCKS_SHA512_TWEET_VERSION")
         | 
| 82 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASHBLOCKS_SHA512_STATEBYTES")
         | 
| 83 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASHBLOCKS_SHA512_BLOCKBYTES")
         | 
| 84 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASHBLOCKS_SHA512_VERSION")
         | 
| 85 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASHBLOCKS_SHA512_IMPLEMENTATION")
         | 
| 86 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASHBLOCKS_SHA256_TWEET_STATEBYTES")
         | 
| 87 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASHBLOCKS_SHA256_TWEET_BLOCKBYTES")
         | 
| 88 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASHBLOCKS_SHA256_TWEET_VERSION")
         | 
| 89 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASHBLOCKS_SHA256_STATEBYTES")
         | 
| 90 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASHBLOCKS_SHA256_BLOCKBYTES")
         | 
| 91 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASHBLOCKS_SHA256_VERSION")
         | 
| 92 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASHBLOCKS_SHA256_IMPLEMENTATION")
         | 
| 93 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASH_PRIMITIVE")
         | 
| 94 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASH_BYTES")
         | 
| 95 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASH_IMPLEMENTATION")
         | 
| 96 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASH_VERSION")
         | 
| 97 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASH_SHA512_TWEET_BYTES")
         | 
| 98 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASH_SHA512_TWEET_VERSION")
         | 
| 99 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASH_SHA512_BYTES")
         | 
| 100 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASH_SHA512_VERSION")
         | 
| 101 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASH_SHA512_IMPLEMENTATION")
         | 
| 102 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASH_SHA256_TWEET_BYTES")
         | 
| 103 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASH_SHA256_TWEET_VERSION")
         | 
| 104 | 
            +
                assert_instance_of Integer, _const("CRYPTO_HASH_SHA256_BYTES")
         | 
| 105 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASH_SHA256_VERSION")
         | 
| 106 | 
            +
                assert_instance_of String,  _const("CRYPTO_HASH_SHA256_IMPLEMENTATION")
         | 
| 107 | 
            +
                assert_instance_of String,  _const("CRYPTO_ONETIMEAUTH_PRIMITIVE")
         | 
| 108 | 
            +
                assert_instance_of Integer, _const("CRYPTO_ONETIMEAUTH_BYTES")
         | 
| 109 | 
            +
                assert_instance_of Integer, _const("CRYPTO_ONETIMEAUTH_KEYBYTES")
         | 
| 110 | 
            +
                assert_instance_of String,  _const("CRYPTO_ONETIMEAUTH_IMPLEMENTATION")
         | 
| 111 | 
            +
                assert_instance_of String,  _const("CRYPTO_ONETIMEAUTH_VERSION")
         | 
| 112 | 
            +
                assert_instance_of Integer, _const("CRYPTO_ONETIMEAUTH_POLY1305_TWEET_BYTES")
         | 
| 113 | 
            +
                assert_instance_of Integer, _const("CRYPTO_ONETIMEAUTH_POLY1305_TWEET_KEYBYTES")
         | 
| 114 | 
            +
                assert_instance_of String,  _const("CRYPTO_ONETIMEAUTH_POLY1305_TWEET_VERSION")
         | 
| 115 | 
            +
                assert_instance_of Integer, _const("CRYPTO_ONETIMEAUTH_POLY1305_BYTES")
         | 
| 116 | 
            +
                assert_instance_of Integer, _const("CRYPTO_ONETIMEAUTH_POLY1305_KEYBYTES")
         | 
| 117 | 
            +
                assert_instance_of String,  _const("CRYPTO_ONETIMEAUTH_POLY1305_VERSION")
         | 
| 118 | 
            +
                assert_instance_of String,  _const("CRYPTO_ONETIMEAUTH_POLY1305_IMPLEMENTATION")
         | 
| 119 | 
            +
                assert_instance_of String,  _const("CRYPTO_SCALARMULT_PRIMITIVE")
         | 
| 120 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SCALARMULT_BYTES")
         | 
| 121 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SCALARMULT_SCALARBYTES")
         | 
| 122 | 
            +
                assert_instance_of String,  _const("CRYPTO_SCALARMULT_IMPLEMENTATION")
         | 
| 123 | 
            +
                assert_instance_of String,  _const("CRYPTO_SCALARMULT_VERSION")
         | 
| 124 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SCALARMULT_CURVE25519_TWEET_BYTES")
         | 
| 125 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SCALARMULT_CURVE25519_TWEET_SCALARBYTES")
         | 
| 126 | 
            +
                assert_instance_of String,  _const("CRYPTO_SCALARMULT_CURVE25519_TWEET_VERSION")
         | 
| 127 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SCALARMULT_CURVE25519_BYTES")
         | 
| 128 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SCALARMULT_CURVE25519_SCALARBYTES")
         | 
| 129 | 
            +
                assert_instance_of String,  _const("CRYPTO_SCALARMULT_CURVE25519_VERSION")
         | 
| 130 | 
            +
                assert_instance_of String,  _const("CRYPTO_SCALARMULT_CURVE25519_IMPLEMENTATION")
         | 
| 131 | 
            +
                assert_instance_of String,  _const("CRYPTO_SECRETBOX_PRIMITIVE")
         | 
| 132 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_KEYBYTES")
         | 
| 133 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_NONCEBYTES")
         | 
| 134 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_ZEROBYTES")
         | 
| 135 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_BOXZEROBYTES")
         | 
| 136 | 
            +
                assert_instance_of String,  _const("CRYPTO_SECRETBOX_IMPLEMENTATION")
         | 
| 137 | 
            +
                assert_instance_of String,  _const("CRYPTO_SECRETBOX_VERSION")
         | 
| 138 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_TWEET_KEYBYTES")
         | 
| 139 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_TWEET_NONCEBYTES")
         | 
| 140 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_TWEET_ZEROBYTES")
         | 
| 141 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_TWEET_BOXZEROBYTES")
         | 
| 142 | 
            +
                assert_instance_of String,  _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_TWEET_VERSION")
         | 
| 143 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES")
         | 
| 144 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_NONCEBYTES")
         | 
| 145 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_ZEROBYTES")
         | 
| 146 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_BOXZEROBYTES")
         | 
| 147 | 
            +
                assert_instance_of String,  _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_VERSION")
         | 
| 148 | 
            +
                assert_instance_of String,  _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_IMPLEMENTATION")
         | 
| 149 | 
            +
                assert_instance_of String,  _const("CRYPTO_SIGN_PRIMITIVE")
         | 
| 150 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SIGN_BYTES")
         | 
| 151 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SIGN_PUBLICKEYBYTES")
         | 
| 152 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SIGN_SECRETKEYBYTES")
         | 
| 153 | 
            +
                assert_instance_of String,  _const("CRYPTO_SIGN_IMPLEMENTATION")
         | 
| 154 | 
            +
                assert_instance_of String,  _const("CRYPTO_SIGN_VERSION")
         | 
| 155 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SIGN_ED25519_TWEET_BYTES")
         | 
| 156 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SIGN_ED25519_TWEET_PUBLICKEYBYTES")
         | 
| 157 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SIGN_ED25519_TWEET_SECRETKEYBYTES")
         | 
| 158 | 
            +
                assert_instance_of String,  _const("CRYPTO_SIGN_ED25519_TWEET_VERSION")
         | 
| 159 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SIGN_ED25519_BYTES")
         | 
| 160 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SIGN_ED25519_PUBLICKEYBYTES")
         | 
| 161 | 
            +
                assert_instance_of Integer, _const("CRYPTO_SIGN_ED25519_SECRETKEYBYTES")
         | 
| 162 | 
            +
                assert_instance_of String,  _const("CRYPTO_SIGN_ED25519_VERSION")
         | 
| 163 | 
            +
                assert_instance_of String,  _const("CRYPTO_SIGN_ED25519_IMPLEMENTATION")
         | 
| 164 | 
            +
                assert_instance_of String,  _const("CRYPTO_STREAM_PRIMITIVE")
         | 
| 165 | 
            +
                assert_instance_of Integer, _const("CRYPTO_STREAM_KEYBYTES")
         | 
| 166 | 
            +
                assert_instance_of Integer, _const("CRYPTO_STREAM_NONCEBYTES")
         | 
| 167 | 
            +
                assert_instance_of String,  _const("CRYPTO_STREAM_IMPLEMENTATION")
         | 
| 168 | 
            +
                assert_instance_of String,  _const("CRYPTO_STREAM_VERSION")
         | 
| 169 | 
            +
                assert_instance_of Integer, _const("CRYPTO_STREAM_XSALSA20_TWEET_KEYBYTES")
         | 
| 170 | 
            +
                assert_instance_of Integer, _const("CRYPTO_STREAM_XSALSA20_TWEET_NONCEBYTES")
         | 
| 171 171 | 
             
              end
         | 
| 172 172 | 
             
            end
         | 
| @@ -4,7 +4,7 @@ class TweetNaClCryptoBoxTest < MiniTest::Test | |
| 4 4 | 
             
              def test_crypto_box
         | 
| 5 5 | 
             
                input = "hello world"
         | 
| 6 6 | 
             
                nonce = "*" * 24
         | 
| 7 | 
            -
                expected_cipher = " | 
| 7 | 
            +
                expected_cipher = "FBC937C3F136E09FA8A45C58C15E801394F5BB74CE8D538FE3D726"
         | 
| 8 8 | 
             
                pk = "\x60\xF0\x23\x07\xDF\xB6\x8B\xBB\x15\xE2\x92\x59\x05\x1B\x2D\xF8\xC8\x59\xDB\x5B\xDE\x97\xFA\xE8\x9B\x5F\xE5\x62\x63\x11\xD6\x56"
         | 
| 9 9 | 
             
                sk = "\xBE\x38\x7C\x59\xD1\x81\x0B\xCC\x8E\xD8\x90\xDB\x3D\xF9\x80\x63\x9E\xD2\x54\x44\xFB\x4D\xD1\x92\xB6\xC6\x75\x53\xF9\x76\x9F\xCF"
         | 
| 10 10 |  | 
| @@ -31,4 +31,19 @@ class TweetNaClCryptoBoxTest < MiniTest::Test | |
| 31 31 | 
             
              def test_crypto_box_nonce_not_correct_length
         | 
| 32 32 | 
             
                assert_raises(ArgumentError) { TweetNaCl.crypto_box("foo", "bar", "pk", "sk") }
         | 
| 33 33 | 
             
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              def test_crypto_box_salsa_rounds_set_with_nil_argument
         | 
| 36 | 
            +
                assert_raises(ArgumentError) { TweetNaCl.salsa_rounds = nil }
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              def test_crypto_box_salsa_rounds_get_set
         | 
| 40 | 
            +
                assert_equal(TweetNaCl.salsa_rounds, TweetNaCl::DEFAULT_SALSA_ROUNDS)
         | 
| 41 | 
            +
                TweetNaCl.salsa_rounds = 42
         | 
| 42 | 
            +
                assert_equal(TweetNaCl.salsa_rounds, 42)
         | 
| 43 | 
            +
              ensure
         | 
| 44 | 
            +
                TweetNaCl.salsa_rounds = TweetNaCl::DEFAULT_SALSA_ROUNDS
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              def test_crypto_box_salsa_rounds_get
         | 
| 48 | 
            +
              end
         | 
| 34 49 | 
             
            end
         | 
| @@ -4,7 +4,7 @@ class TweetNaClCryptoSecretTest < MiniTest::Test | |
| 4 4 | 
             
              def test_crypto_secretbox
         | 
| 5 5 | 
             
                input = "hello world"
         | 
| 6 6 | 
             
                nonce = "*" * 24
         | 
| 7 | 
            -
                expected_cipher = " | 
| 7 | 
            +
                expected_cipher = "2A9612E32BCC4E836B3D46463B7C1546EA8BC752A1B6AE6DE"
         | 
| 8 8 | 
             
                k = "\x60\xF0\x23\x07\xDF\xB6\x8B\xBB\x15\xE2\x92\x59\x05\x1B\x2D\xF8\xC8\x59\xDB\x5B\xDE\x97\xFA\xE8\x9B\x5F\xE5\x62\x63\x11\xD6\x56"
         | 
| 9 9 |  | 
| 10 10 | 
             
                cipher = TweetNaCl.crypto_secretbox(input, nonce, k)
         | 
    
        data/tweetnacl.gemspec
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            $:<< 'lib'
         | 
| 3 3 | 
             
            Gem::Specification.new do |spec|
         | 
| 4 4 | 
             
              spec.name     = "tweetnacl"
         | 
| 5 | 
            -
              spec.version  = "0. | 
| 5 | 
            +
              spec.version  = "1.0.0"
         | 
| 6 6 | 
             
              spec.authors  = ["Franck Verrot"]
         | 
| 7 7 | 
             
              spec.email    = ["franck@verrot.fr"]
         | 
| 8 8 | 
             
              spec.homepage = "https://github.com/franckverrot/tweetnacl"
         | 
| @@ -21,4 +21,24 @@ Gem::Specification.new do |spec| | |
| 21 21 | 
             
              spec.add_development_dependency "bundler", "~> 1.5"
         | 
| 22 22 | 
             
              spec.add_development_dependency "rake"
         | 
| 23 23 | 
             
              spec.add_development_dependency "minitest"
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              spec.post_install_message = <<END_OF_MESSAGE
         | 
| 26 | 
            +
            [TweetNaCl] Breaking change in v1.0.0!
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            A breaking change has been introduced to `crypto_box` and `crypto_secretbox`
         | 
| 29 | 
            +
            that makes ciphers differ.  The first 64 bits are always empty and have been
         | 
| 30 | 
            +
            dropped from the cipher output.
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            This causes differences like:
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            -    expected_cipher = "0000000000000000FBC937C3F136E09FA8A45C58C15E801394F5BB74CE8D538FE3D726"
         | 
| 35 | 
            +
            +    expected_cipher =                 "FBC937C3F136E09FA8A45C58C15E801394F5BB74CE8D538FE3D726"
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            You might need to go through all persisted ciphers and change these values.
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            If you have more questions, please file a ticket!  Thanks!
         | 
| 40 | 
            +
            END_OF_MESSAGE
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              spec.cert_chain  = ['certs/franckverrot.pem']
         | 
| 43 | 
            +
              spec.signing_key = File.expand_path(ENV['RUBYGEMS_CERT_PATH']) if $0 =~ /gem\z/
         | 
| 24 44 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,40 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: tweetnacl
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 1.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Franck Verrot
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 | 
            -
            cert_chain: | 
| 11 | 
            -
             | 
| 10 | 
            +
            cert_chain:
         | 
| 11 | 
            +
            - |
         | 
| 12 | 
            +
              -----BEGIN CERTIFICATE-----
         | 
| 13 | 
            +
              MIIEMDCCApigAwIBAgIBATANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDDBZmcmFu
         | 
| 14 | 
            +
              Y2svREM9dmVycm90L0RDPWZyMB4XDTE4MTIyMTAxMzgwNVoXDTE5MTIyMTAxMzgw
         | 
| 15 | 
            +
              NVowITEfMB0GA1UEAwwWZnJhbmNrL0RDPXZlcnJvdC9EQz1mcjCCAaIwDQYJKoZI
         | 
| 16 | 
            +
              hvcNAQEBBQADggGPADCCAYoCggGBANjZ/7L2ECEQAVOYvMl0JOwyVXKRCsLnVrmP
         | 
| 17 | 
            +
              mcwpCMFL0ennkpLJcqiDNsm0b/RkJHSLu3FMoYrIU5KoaP7iMIsLGv846aw2wSNI
         | 
| 18 | 
            +
              G5XWGnRY9dWVu7Gz2OZbsDi18WT94Y/s2yf+orPLAiaJb451decYEpHqLTiaJhhJ
         | 
| 19 | 
            +
              xHckJixfDVwZGJpow7rrJAJMbU9ZCJFUFAfNpgkOqhbBU4Ehi1umbC/ZBsVDiRVa
         | 
| 20 | 
            +
              ZjfNhe7kgx6jo3EfPY4izPW2IKkpk7nJKNfZnM2r0cnpPJbhyH1m5fsikBD5tRNe
         | 
| 21 | 
            +
              YxJpxDPf8UBTTXqoeSSQygiHWWZVbH3zj2jWzi5T0do5PbZcCeoIKR4TyOgbOgBW
         | 
| 22 | 
            +
              Ra7bm9uVXo6MQWpp0aeC/X+F2Y/dFjXAP/TPL89ownd3XZUaNDdZfS6aKBMG3a5C
         | 
| 23 | 
            +
              gcRLMt1hOJchslGNtvkq5W4Wq8hw+zNHzTMpRkIsYTbvlJCDxXRKR3jwPDTRvNAl
         | 
| 24 | 
            +
              aemBW1g3yerHeDQr6GtxKEvhmHdw/wIDAQABo3MwcTAJBgNVHRMEAjAAMAsGA1Ud
         | 
| 25 | 
            +
              DwQEAwIEsDAdBgNVHQ4EFgQUgG77cLAMzowManymHX63DbvfR5IwGwYDVR0RBBQw
         | 
| 26 | 
            +
              EoEQZnJhbmNrQHZlcnJvdC5mcjAbBgNVHRIEFDASgRBmcmFuY2tAdmVycm90LmZy
         | 
| 27 | 
            +
              MA0GCSqGSIb3DQEBCwUAA4IBgQAofcg/2kPT9VMBGEuO17F3yH6fiJboQeLL1nlM
         | 
| 28 | 
            +
              ULZv5LyyqV6Yq0cQ+TZMGHd/hbvBFTN9/55WmiN66tYLaunyfr4aUflCQcM/qu2g
         | 
| 29 | 
            +
              Ieoz8QLxfIi24DCDezpODHaud6Qt0VmMpalSOxbCuMeNnXLpnxbP/7fJBJoum5GS
         | 
| 30 | 
            +
              CqGuH81fXy7KAAlgMBcsYb3+vZJhuAeM/zSrE5Hmf1zApTEVZc4Y0dO6eRC6WbXW
         | 
| 31 | 
            +
              pJfyNXyITkkr7pTRYO/wj3lFoeDqfGXb48HvpJ54lqfeIvr9Hek7grcyQGfZ1rFY
         | 
| 32 | 
            +
              Dx3RTjxParzCWk/HCFHQiZmU5lnOl7GShwAZrG6l0UHST3/YNCA52KDrmC/T0A2N
         | 
| 33 | 
            +
              d2MQGgSZerYTx+HRKlradglBDPCs4nxQj5pnoDvGbngeZUua+ZZGFM9SXBT3zAIQ
         | 
| 34 | 
            +
              akLQjJWKHQCzyqDChJHRGhlxyVFKP2JwqFgzE3p1l64JArsb7BEqhpoBPXMwlChE
         | 
| 35 | 
            +
              HgzCBTsCU0syQBb1s6lBz2HrWA4=
         | 
| 36 | 
            +
              -----END CERTIFICATE-----
         | 
| 37 | 
            +
            date: 2019-05-01 00:00:00.000000000 Z
         | 
| 12 38 | 
             
            dependencies:
         | 
| 13 39 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 40 | 
             
              name: rake-compiler
         | 
| @@ -74,13 +100,14 @@ extensions: | |
| 74 100 | 
             
            - ext/tweetnacl/extconf.rb
         | 
| 75 101 | 
             
            extra_rdoc_files: []
         | 
| 76 102 | 
             
            files:
         | 
| 103 | 
            +
            - ".circleci/config.yml"
         | 
| 77 104 | 
             
            - ".gitignore"
         | 
| 78 | 
            -
            - ".travis.yml"
         | 
| 79 105 | 
             
            - CHANGELOG.md
         | 
| 80 106 | 
             
            - Gemfile
         | 
| 81 107 | 
             
            - LICENSE.txt
         | 
| 82 108 | 
             
            - README.md
         | 
| 83 109 | 
             
            - Rakefile
         | 
| 110 | 
            +
            - certs/franckverrot.pem
         | 
| 84 111 | 
             
            - ext/tweetnacl/extconf.rb
         | 
| 85 112 | 
             
            - ext/tweetnacl/randombytes.c
         | 
| 86 113 | 
             
            - ext/tweetnacl/randombytes.h
         | 
| @@ -110,7 +137,21 @@ homepage: https://github.com/franckverrot/tweetnacl | |
| 110 137 | 
             
            licenses:
         | 
| 111 138 | 
             
            - GPLv3
         | 
| 112 139 | 
             
            metadata: {}
         | 
| 113 | 
            -
            post_install_message: 
         | 
| 140 | 
            +
            post_install_message: |
         | 
| 141 | 
            +
              [TweetNaCl] Breaking change in v1.0.0!
         | 
| 142 | 
            +
             | 
| 143 | 
            +
              A breaking change has been introduced to `crypto_box` and `crypto_secretbox`
         | 
| 144 | 
            +
              that makes ciphers differ.  The first 64 bits are always empty and have been
         | 
| 145 | 
            +
              dropped from the cipher output.
         | 
| 146 | 
            +
             | 
| 147 | 
            +
              This causes differences like:
         | 
| 148 | 
            +
             | 
| 149 | 
            +
              -    expected_cipher = "0000000000000000FBC937C3F136E09FA8A45C58C15E801394F5BB74CE8D538FE3D726"
         | 
| 150 | 
            +
              +    expected_cipher =                 "FBC937C3F136E09FA8A45C58C15E801394F5BB74CE8D538FE3D726"
         | 
| 151 | 
            +
             | 
| 152 | 
            +
              You might need to go through all persisted ciphers and change these values.
         | 
| 153 | 
            +
             | 
| 154 | 
            +
              If you have more questions, please file a ticket!  Thanks!
         | 
| 114 155 | 
             
            rdoc_options: []
         | 
| 115 156 | 
             
            require_paths:
         | 
| 116 157 | 
             
            - lib
         | 
| @@ -125,8 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 125 166 | 
             
                - !ruby/object:Gem::Version
         | 
| 126 167 | 
             
                  version: '0'
         | 
| 127 168 | 
             
            requirements: []
         | 
| 128 | 
            -
             | 
| 129 | 
            -
            rubygems_version: 2.2.0
         | 
| 169 | 
            +
            rubygems_version: 3.0.2
         | 
| 130 170 | 
             
            signing_key: 
         | 
| 131 171 | 
             
            specification_version: 4
         | 
| 132 172 | 
             
            summary: TweetNaCl for Ruby
         | 
| @@ -145,4 +185,3 @@ test_files: | |
| 145 185 | 
             
            - test/tweetnacl_crypto_sign_key_pair_test.rb
         | 
| 146 186 | 
             
            - test/tweetnacl_crypto_sign_open_test.rb
         | 
| 147 187 | 
             
            - test/tweetnacl_crypto_sign_test.rb
         | 
| 148 | 
            -
            has_rdoc: 
         | 
    
        metadata.gz.sig
    ADDED
    
    | Binary file | 
    
        data/.travis.yml
    DELETED