tweetnacl 0.3.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3c1932fa8b635f8c885f09dc44235ddf4b8a0c82
4
- data.tar.gz: 0b1a0d43b9f60f1885b20bde5b5916246601d872
2
+ SHA256:
3
+ metadata.gz: df32ba55a66d1f9acd3f40099ffc4e866c56abdb704a7191b2b4c0ffad4089b6
4
+ data.tar.gz: 90fa17459095c80c00910b0900a02ac11fe35a142dac323ae4427f3cd0aad7e7
5
5
  SHA512:
6
- metadata.gz: 3d29a42561260b81947f4988443a41233561f38b7169772d9d488ce7376b8f7d93e92601d3903b00df13cb35b65b2e887a4e1b939e893fa55a1af728705b0bb8
7
- data.tar.gz: e3bfb32b5a80d8e3cbe83e9522fb2f37320683ce5b7e30c1c43c38e325465e0debd27323c3c2c03b5e7ce790e76001361543cb3bf5093eef0dd7e704aed6f802
6
+ metadata.gz: 986de1548f6a609b464ca5905bf007af6136e0dc33463ccce70598ce92d4317ea713d248bae833936e8f661462287da0b9779583515ec3a37f5edf32da8bf8ff
7
+ data.tar.gz: 7b9fb5c8285e391a161feb8774efaf038c3c08adc45cec032b9f9d92d36d335cb6952ee6ca62f3f4bdc1ebf87f9cbe88ab9c8be1b27a6554778f9750ec736ec7
@@ -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
+
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"
@@ -1,6 +1,27 @@
1
1
  # Releases
2
2
 
3
- ## UNRELEASED (0.4.0)
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] : http://tweetnacl.cr.yp.to/tweetnacl-20131229.pdf
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-----
@@ -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 = strlen(message);
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, strlen(message));
45
- char * c = malloc(strlen(message) + PADDING_LEN);
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 + PADDING_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 padded_mlen = rb_str_strlen(_c);
67
- unsigned char * message = (unsigned char*)calloc(padded_mlen, sizeof(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
- int res = crypto_box_open(message, c, padded_mlen, nonce, pk, sk);
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[padded_mlen + 1] = 0;
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 = rb_str_new2(message + PADDING_LEN);
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 24-byte long"); }
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 = strlen(message);
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, strlen(message));
90
- char * c = malloc(strlen(message) + PADDING_LEN);
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 + PADDING_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 padded_mlen = rb_str_strlen(_c);
108
- char * message = calloc(padded_mlen, sizeof(char));
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
- int res = crypto_secretbox_open(message, c, padded_mlen, nonce, k);
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 rb_str_new2(message + PADDING_LEN);
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);
@@ -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,20) {
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);
@@ -1,2 +1,3 @@
1
1
  module TweetNaCl
2
+ DEFAULT_SALSA_ROUNDS = 20
2
3
  end
@@ -1,4 +1,5 @@
1
1
  require 'tweetnacl'
2
+ require 'tweet_na_cl'
2
3
  require 'tweetnacl/crypto_sign'
3
4
  require 'tweetnacl/crypto_box'
4
5
  require 'tweetnacl/key_pair'
@@ -6,167 +6,167 @@ class TweetNaClConstantsTest < MiniTest::Test
6
6
  end
7
7
 
8
8
  def test_constants
9
- assert_instance_of String, _const("CRYPTO_AUTH_PRIMITIVE")
10
- assert_instance_of Fixnum, _const("CRYPTO_AUTH_BYTES")
11
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_AUTH_HMACSHA512256_TWEET_BYTES")
15
- assert_instance_of Fixnum, _const("CRYPTO_AUTH_HMACSHA512256_TWEET_KEYBYTES")
16
- assert_instance_of String, _const("CRYPTO_AUTH_HMACSHA512256_TWEET_VERSION")
17
- assert_instance_of Fixnum, _const("CRYPTO_AUTH_HMACSHA512256_BYTES")
18
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_BOX_PUBLICKEYBYTES")
23
- assert_instance_of Fixnum, _const("CRYPTO_BOX_SECRETKEYBYTES")
24
- assert_instance_of Fixnum, _const("CRYPTO_BOX_BEFORENMBYTES")
25
- assert_instance_of Fixnum, _const("CRYPTO_BOX_NONCEBYTES")
26
- assert_instance_of Fixnum, _const("CRYPTO_BOX_ZEROBYTES")
27
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_PUBLICKEYBYTES")
31
- assert_instance_of Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_SECRETKEYBYTES")
32
- assert_instance_of Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_BEFORENMBYTES")
33
- assert_instance_of Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_NONCEBYTES")
34
- assert_instance_of Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_ZEROBYTES")
35
- assert_instance_of Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_BOXZEROBYTES")
36
- assert_instance_of String, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_TWEET_VERSION")
37
- assert_instance_of Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_PUBLICKEYBYTES")
38
- assert_instance_of Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SECRETKEYBYTES")
39
- assert_instance_of Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_BEFORENMBYTES")
40
- assert_instance_of Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_NONCEBYTES")
41
- assert_instance_of Fixnum, _const("CRYPTO_BOX_CURVE25519XSALSA20POLY1305_ZEROBYTES")
42
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_CORE_OUTPUTBYTES")
47
- assert_instance_of Fixnum, _const("CRYPTO_CORE_INPUTBYTES")
48
- assert_instance_of Fixnum, _const("CRYPTO_CORE_KEYBYTES")
49
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_CORE_SALSA20_TWEET_OUTPUTBYTES")
53
- assert_instance_of Fixnum, _const("CRYPTO_CORE_SALSA20_TWEET_INPUTBYTES")
54
- assert_instance_of Fixnum, _const("CRYPTO_CORE_SALSA20_TWEET_KEYBYTES")
55
- assert_instance_of Fixnum, _const("CRYPTO_CORE_SALSA20_TWEET_CONSTBYTES")
56
- assert_instance_of String, _const("CRYPTO_CORE_SALSA20_TWEET_VERSION")
57
- assert_instance_of Fixnum, _const("CRYPTO_CORE_SALSA20_OUTPUTBYTES")
58
- assert_instance_of Fixnum, _const("CRYPTO_CORE_SALSA20_INPUTBYTES")
59
- assert_instance_of Fixnum, _const("CRYPTO_CORE_SALSA20_KEYBYTES")
60
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_CORE_HSALSA20_TWEET_OUTPUTBYTES")
64
- assert_instance_of Fixnum, _const("CRYPTO_CORE_HSALSA20_TWEET_INPUTBYTES")
65
- assert_instance_of Fixnum, _const("CRYPTO_CORE_HSALSA20_TWEET_KEYBYTES")
66
- assert_instance_of Fixnum, _const("CRYPTO_CORE_HSALSA20_TWEET_CONSTBYTES")
67
- assert_instance_of String, _const("CRYPTO_CORE_HSALSA20_TWEET_VERSION")
68
- assert_instance_of Fixnum, _const("CRYPTO_CORE_HSALSA20_OUTPUTBYTES")
69
- assert_instance_of Fixnum, _const("CRYPTO_CORE_HSALSA20_INPUTBYTES")
70
- assert_instance_of Fixnum, _const("CRYPTO_CORE_HSALSA20_KEYBYTES")
71
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_HASHBLOCKS_STATEBYTES")
76
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_HASHBLOCKS_SHA512_TWEET_STATEBYTES")
80
- assert_instance_of Fixnum, _const("CRYPTO_HASHBLOCKS_SHA512_TWEET_BLOCKBYTES")
81
- assert_instance_of String, _const("CRYPTO_HASHBLOCKS_SHA512_TWEET_VERSION")
82
- assert_instance_of Fixnum, _const("CRYPTO_HASHBLOCKS_SHA512_STATEBYTES")
83
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_HASHBLOCKS_SHA256_TWEET_STATEBYTES")
87
- assert_instance_of Fixnum, _const("CRYPTO_HASHBLOCKS_SHA256_TWEET_BLOCKBYTES")
88
- assert_instance_of String, _const("CRYPTO_HASHBLOCKS_SHA256_TWEET_VERSION")
89
- assert_instance_of Fixnum, _const("CRYPTO_HASHBLOCKS_SHA256_STATEBYTES")
90
- assert_instance_of Fixnum, _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 Fixnum, _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 Fixnum, _const("CRYPTO_HASH_SHA512_TWEET_BYTES")
98
- assert_instance_of String, _const("CRYPTO_HASH_SHA512_TWEET_VERSION")
99
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_HASH_SHA256_TWEET_BYTES")
103
- assert_instance_of String, _const("CRYPTO_HASH_SHA256_TWEET_VERSION")
104
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_ONETIMEAUTH_BYTES")
109
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_ONETIMEAUTH_POLY1305_TWEET_BYTES")
113
- assert_instance_of Fixnum, _const("CRYPTO_ONETIMEAUTH_POLY1305_TWEET_KEYBYTES")
114
- assert_instance_of String, _const("CRYPTO_ONETIMEAUTH_POLY1305_TWEET_VERSION")
115
- assert_instance_of Fixnum, _const("CRYPTO_ONETIMEAUTH_POLY1305_BYTES")
116
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_SCALARMULT_BYTES")
121
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_SCALARMULT_CURVE25519_TWEET_BYTES")
125
- assert_instance_of Fixnum, _const("CRYPTO_SCALARMULT_CURVE25519_TWEET_SCALARBYTES")
126
- assert_instance_of String, _const("CRYPTO_SCALARMULT_CURVE25519_TWEET_VERSION")
127
- assert_instance_of Fixnum, _const("CRYPTO_SCALARMULT_CURVE25519_BYTES")
128
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_SECRETBOX_KEYBYTES")
133
- assert_instance_of Fixnum, _const("CRYPTO_SECRETBOX_NONCEBYTES")
134
- assert_instance_of Fixnum, _const("CRYPTO_SECRETBOX_ZEROBYTES")
135
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_TWEET_KEYBYTES")
139
- assert_instance_of Fixnum, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_TWEET_NONCEBYTES")
140
- assert_instance_of Fixnum, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_TWEET_ZEROBYTES")
141
- assert_instance_of Fixnum, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_TWEET_BOXZEROBYTES")
142
- assert_instance_of String, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_TWEET_VERSION")
143
- assert_instance_of Fixnum, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES")
144
- assert_instance_of Fixnum, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_NONCEBYTES")
145
- assert_instance_of Fixnum, _const("CRYPTO_SECRETBOX_XSALSA20POLY1305_ZEROBYTES")
146
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_SIGN_BYTES")
151
- assert_instance_of Fixnum, _const("CRYPTO_SIGN_PUBLICKEYBYTES")
152
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_SIGN_ED25519_TWEET_BYTES")
156
- assert_instance_of Fixnum, _const("CRYPTO_SIGN_ED25519_TWEET_PUBLICKEYBYTES")
157
- assert_instance_of Fixnum, _const("CRYPTO_SIGN_ED25519_TWEET_SECRETKEYBYTES")
158
- assert_instance_of String, _const("CRYPTO_SIGN_ED25519_TWEET_VERSION")
159
- assert_instance_of Fixnum, _const("CRYPTO_SIGN_ED25519_BYTES")
160
- assert_instance_of Fixnum, _const("CRYPTO_SIGN_ED25519_PUBLICKEYBYTES")
161
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_STREAM_KEYBYTES")
166
- assert_instance_of Fixnum, _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 Fixnum, _const("CRYPTO_STREAM_XSALSA20_TWEET_KEYBYTES")
170
- assert_instance_of Fixnum, _const("CRYPTO_STREAM_XSALSA20_TWEET_NONCEBYTES")
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 = "0000000000000000FBC937C3F136E09FA8A45C58C15E801394F5BB74CE8D538FE3D726"
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 = "00000000000000002A9612E32BCC4E836B3D46463B7C1546EA8BC752A1B6AE6DE"
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)
@@ -2,7 +2,7 @@
2
2
  $:<< 'lib'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "tweetnacl"
5
- spec.version = "0.3.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.3.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
- date: 2014-08-19 00:00:00.000000000 Z
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
- rubyforge_project:
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:
Binary file
@@ -1,4 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.1.0
4
- script: rake