ffi-libsodium 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 613f14c043ff696627ef5d0009113367982a57a7
4
- data.tar.gz: cc4459674fa3bc66f33e1868726ab63699b9f30e
3
+ metadata.gz: ada72fa7e9887b70143e4e2bba21d0b2165d72a9
4
+ data.tar.gz: 5bfac66a243ac4861d782e5c8ba7fcb412f6264f
5
5
  SHA512:
6
- metadata.gz: 0aec4788173e268528120fac6a2504a3fdf2a0a2c721f4b809edb9aaef4da6e59191e851ad829e86573010845a7a45764f0a1fb3884b3945374f1f1e302ee0ac
7
- data.tar.gz: 00ac3a7187a277456a03f2db49f4896ebd952a2d29c9d5014a4a17cad51c222cccb12a78543fc822acd43ca36c8423919e58b8a1c1860a797b8d493c87f3c4d2
6
+ metadata.gz: 7bd7feeb776a528d318bea1ffca5108ee3ea5751acfb3d98e96d0c152c516bc1e601e3c20421ad5d1bc73276fdb616e62102f6fd552d57c881af7ef2f7269c4a
7
+ data.tar.gz: 1e3381716d27b253ba9623b48310bfc5954b23e59904b5e93a27d423764c6f6c73bd3616d10801322eff4db8e9e698528e7ef3c5ccb43d237f5a4b9fa589e39e
@@ -29,8 +29,8 @@ module Crypto
29
29
  NPUBBYTES = npubbytes.freeze
30
30
  ABYTES = abytes.freeze
31
31
 
32
- attach_function :crypto_aead_chacha20poly1305_encrypt, [:buffer_out, :buffer_out, :buffer_in, :ulong_long, :buffer_in, :ulong_long, :pointer, :buffer_in, :buffer_in], :int
33
- attach_function :crypto_aead_chacha20poly1305_decrypt, [:buffer_out, :buffer_out, :pointer, :buffer_in, :ulong_long, :buffer_in, :ulong_long, :buffer_in, :buffer_in], :int
32
+ attach_function :crypto_aead_chacha20poly1305_encrypt, [:buffer_out, :buffer_out, :buffer_in, :ulong_long, :buffer_in, :ulong_long, :pointer, :buffer_in, :buffer_in], :int, blocking: true
33
+ attach_function :crypto_aead_chacha20poly1305_decrypt, [:buffer_out, :buffer_out, :pointer, :buffer_in, :ulong_long, :buffer_in, :ulong_long, :buffer_in, :buffer_in], :int, blocking: true
34
34
 
35
35
  module_function
36
36
 
data/lib/crypto/box.rb CHANGED
@@ -15,6 +15,7 @@ module Crypto
15
15
  attach_function :seedbytes, :crypto_box_seedbytes, [], :size_t
16
16
  attach_function :publickeybytes, :crypto_box_publickeybytes, [], :size_t
17
17
  attach_function :secretkeybytes, :crypto_box_secretkeybytes, [], :size_t
18
+ attach_function :beforenmbytes, :crypto_box_beforenmbytes, [], :size_t
18
19
  attach_function :noncebytes, :crypto_box_noncebytes, [], :size_t
19
20
  attach_function :macbytes, :crypto_box_macbytes, [], :size_t
20
21
 
@@ -22,6 +23,7 @@ module Crypto
22
23
  SEEDBYTES = seedbytes.freeze
23
24
  PUBLICKEYBYTES = publickeybytes.freeze
24
25
  SECRETKEYBYTES = secretkeybytes.freeze
26
+ BEFORENMBYTES = beforenmbytes.freeze
25
27
  NONCEBYTES = noncebytes.freeze
26
28
  MACBYTES = macbytes.freeze
27
29
 
@@ -31,6 +33,11 @@ module Crypto
31
33
  attach_function :crypto_box_easy, [:buffer_out, :buffer_in, :ulong_long, :buffer_in, :buffer_in, :buffer_in], :int, blocking: true
32
34
  attach_function :crypto_box_open_easy, [:buffer_out, :buffer_in, :ulong_long, :buffer_in, :buffer_in, :buffer_in], :int, blocking: true
33
35
 
36
+ attach_function :crypto_box_beforenm, [:buffer_out, :buffer_in, :buffer_in], :int, blocking: true
37
+
38
+ attach_function :crypto_box_afternm, [:buffer_out, :buffer_in, :ulong_long, :buffer_in, :buffer_in], :int, blocking: true
39
+ attach_function :crypto_box_open_afternm, [:buffer_out, :buffer_in, :ulong_long, :buffer_in, :buffer_in], :int, blocking: true
40
+
34
41
  module_function
35
42
 
36
43
  def nonce
@@ -89,6 +96,8 @@ module Crypto
89
96
  ciphertext
90
97
  end
91
98
 
99
+ alias_method :box, :easy
100
+
92
101
  def open_easy(ciphertext, nonce, public_key, secret_key)
93
102
  ciphertext_len = get_size(ciphertext)
94
103
  check_length(nonce, NONCEBYTES, :Nonce)
@@ -106,6 +115,8 @@ module Crypto
106
115
  decrypted
107
116
  end
108
117
 
118
+ alias_method :open, :open_easy
119
+
109
120
  def easy_in_place(data, nonce, public_key, secret_key)
110
121
  message = get_string(data)
111
122
  check_length(nonce, NONCEBYTES, :Nonce)
@@ -146,5 +157,43 @@ module Crypto
146
157
 
147
158
  ciphertext
148
159
  end
160
+
161
+ def beforenm(public_key, secret_key)
162
+ check_length(public_key, PUBLICKEYBYTES, :PublicKey)
163
+ check_length(secret_key, SECRETKEYBYTES, :SecretKey)
164
+
165
+ shared_secret = Sodium::SecretBuffer.new(BEFORENMBYTES)
166
+ crypto_box_beforenm(shared_secret, public_key, secret_key)
167
+
168
+ shared_secret
169
+ end
170
+
171
+ def afternm(message, nonce, shared_secret)
172
+ message_len = get_size(message)
173
+ check_length(nonce, NONCEBYTES, :Nonce)
174
+ check_length(shared_secret, BEFORENMBYTES, :SharedSecret)
175
+
176
+ ciphertext = Sodium::Buffer.new(:uchar, MACBYTES + message_len)
177
+ crypto_box_afternm(ciphertext, message, message_len, nonce, shared_secret)
178
+
179
+ ciphertext
180
+ end
181
+
182
+ def open_afternm(ciphertext, nonce, shared_secret)
183
+ ciphertext_len = get_size(ciphertext)
184
+ check_length(nonce, NONCEBYTES, :Nonce)
185
+ check_length(shared_secret, BEFORENMBYTES, :SharedSecret)
186
+
187
+ decrypted = Sodium::Buffer.new(:uchar, ciphertext_len - MACBYTES)
188
+ if crypto_box_open_afternm(decrypted, ciphertext, ciphertext_len, nonce, shared_secret) == -1
189
+ raise Sodium::CryptoError, "Message forged", caller
190
+ end
191
+
192
+ decrypted
193
+ end
194
+ end
195
+
196
+ def box(*args)
197
+ Box.box(*args)
149
198
  end
150
199
  end
@@ -18,17 +18,17 @@ module Crypto
18
18
  BYTES = bytes.freeze
19
19
  KEYBYTES = keybytes.freeze
20
20
 
21
- attach_function :crypto_onetimeauth, [:buffer_out, :buffer_in, :ulong_long, :buffer_in], :int
22
- attach_function :crypto_onetimeauth_verify, [:buffer_in, :buffer_in, :ulong_long, :buffer_in], :int
21
+ attach_function :crypto_onetimeauth, [:buffer_out, :buffer_in, :ulong_long, :buffer_in], :int, blocking: true
22
+ attach_function :crypto_onetimeauth_verify, [:buffer_in, :buffer_in, :ulong_long, :buffer_in], :int, blocking: true
23
23
 
24
24
  class State < FFI::Struct
25
25
  layout :aligner, :ulong_long,
26
26
  :opaque, [:uchar, 136]
27
27
  end
28
28
 
29
- attach_function :crypto_onetimeauth_init, [State.ptr, :buffer_in], :int
30
- attach_function :crypto_onetimeauth_update, [State.ptr, :buffer_in, :ulong_long], :int
31
- attach_function :crypto_onetimeauth_final, [State.ptr, :buffer_out], :int
29
+ attach_function :crypto_onetimeauth_init, [State.ptr, :buffer_in], :int, blocking: true
30
+ attach_function :crypto_onetimeauth_update, [State.ptr, :buffer_in, :ulong_long], :int, blocking: true
31
+ attach_function :crypto_onetimeauth_final, [State.ptr, :buffer_out], :int, blocking: true
32
32
 
33
33
  module_function
34
34
 
@@ -19,8 +19,8 @@ module Crypto
19
19
  BYTES = bytes.freeze
20
20
  SCALARBYTES = scalarbytes.freeze
21
21
 
22
- attach_function :crypto_scalarmult_base, [:buffer_out, :buffer_in], :int
23
- attach_function :crypto_scalarmult, [:buffer_out, :buffer_in, :buffer_in], :int
22
+ attach_function :crypto_scalarmult_base, [:buffer_out, :buffer_in], :int, blocking: true
23
+ attach_function :crypto_scalarmult, [:buffer_out, :buffer_in, :buffer_in], :int, blocking: true
24
24
 
25
25
  module_function
26
26
 
@@ -18,7 +18,7 @@ module Crypto
18
18
  BYTES = bytes.freeze
19
19
  KEYBYTES = keybytes.freeze
20
20
 
21
- attach_function :crypto_shorthash, [:buffer_out, :buffer_in, :ulong_long, :buffer_in], :int
21
+ attach_function :crypto_shorthash, [:buffer_out, :buffer_in, :ulong_long, :buffer_in], :int, blocking: true
22
22
 
23
23
  module_function
24
24
 
data/lib/crypto/sign.rb CHANGED
@@ -23,11 +23,11 @@ module Crypto
23
23
  PUBLICKEYBYTES = publickeybytes.freeze
24
24
  SECRETKEYBYTES = secretkeybytes.freeze
25
25
 
26
- attach_function :crypto_sign_keypair, [:buffer_out, :buffer_out], :int
27
- attach_function :crypto_sign_seed_keypair, [:buffer_out, :buffer_out, :buffer_in], :int
26
+ attach_function :crypto_sign_keypair, [:buffer_out, :buffer_out], :int, blocking: true
27
+ attach_function :crypto_sign_seed_keypair, [:buffer_out, :buffer_out, :buffer_in], :int, blocking: true
28
28
 
29
- attach_function :crypto_sign, [:buffer_out, :buffer_out, :buffer_in, :ulong_long, :buffer_in], :int
30
- attach_function :crypto_sign_open, [:buffer_out, :buffer_out, :buffer_in, :ulong_long, :buffer_in], :int
29
+ attach_function :crypto_sign, [:buffer_out, :buffer_out, :buffer_in, :ulong_long, :buffer_in], :int, blocking: true
30
+ attach_function :crypto_sign_open, [:buffer_out, :buffer_out, :buffer_in, :ulong_long, :buffer_in], :int, blocking: true
31
31
 
32
32
  module_function
33
33
 
@@ -1,3 +1,3 @@
1
1
  module Sodium
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.0.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-libsodium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hendrik Beskow