ffi-libsodium 0.3.3 → 0.4.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
2
  SHA1:
3
- metadata.gz: 9a6a2df052bb5ae7911a6a64e73ac841dcc3dd4b
4
- data.tar.gz: ffedb95aafff7017b363bad6bc1da3fd7ee5437b
3
+ metadata.gz: 74a7166738e41a800aaf12b433c2f05f32ea032d
4
+ data.tar.gz: 7a0988313333e6174878ef6f9b39584dc4503139
5
5
  SHA512:
6
- metadata.gz: e3d63913ef97e34ed10a3a341ca1da67a54d0fbdc797f1c56495591b10b145811d97c480def4a471c9fba29ec2bca34bf78c4e88363cac0cb89592534074c759
7
- data.tar.gz: d4ce9e3f910a6c1690bff8ce0c9f428824caeb517e90622cbe36847737c2119f73d668af15367ce54a95af6211bc8cbbcde0fd30b2c26b3166a6d97970d2208e
6
+ metadata.gz: e131be5dcf2e7963ca0795773fdb823bab55ba89fc60475dc11637ef7ef1bb86dfaceac5213f0c02c7f317d997f3372c4c734f70cc00c1e213c76b011cd65969
7
+ data.tar.gz: 89a7331b233909cb01f4de635b91c34e253a4efb0958a03821ec3b97dd609cfe8f9a8588e0dca6ada99e79e77260e244f47ccd996cd1de04a8cab02e6e05fdb9
@@ -1,7 +1,6 @@
1
1
  require 'ffi'
2
2
  require_relative '../../sodium/utils'
3
3
  require_relative '../../random_bytes'
4
- require_relative '../../sodium/buffer'
5
4
  require_relative '../../sodium/secret_buffer'
6
5
  require_relative '../../sodium/errors'
7
6
 
@@ -45,7 +44,7 @@ module Crypto
45
44
  check_length(nonce, NPUBBYTES, :Nonce)
46
45
  check_length(key, KEYBYTES, :SecretKey)
47
46
 
48
- ciphertext = Sodium::Buffer.new(:uchar, message_len + ABYTES)
47
+ ciphertext = zeros(message_len + ABYTES)
49
48
  key.readonly if key.is_a?(Sodium::SecretBuffer)
50
49
  crypto_aead_chacha20poly1305_encrypt(ciphertext, nil, message, message_len, additional_data, get_size(additional_data), nil, nonce, key)
51
50
 
@@ -60,7 +59,7 @@ module Crypto
60
59
  check_length(nonce, NPUBBYTES, :Nonce)
61
60
  check_length(key, KEYBYTES, :SecretKey)
62
61
 
63
- decrypted = Sodium::Buffer.new(:uchar, decrypted_len)
62
+ decrypted = zeros(decrypted_len)
64
63
  key.readonly if key.is_a?(Sodium::SecretBuffer)
65
64
  if crypto_aead_chacha20poly1305_decrypt(decrypted, nil, nil, ciphertext, ciphertext_len, additional_data, get_size(additional_data), nonce, key) == 0
66
65
  decrypted
data/lib/crypto/auth.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'ffi'
2
2
  require_relative '../sodium/utils'
3
- require_relative '../sodium/buffer'
4
3
  require_relative '../sodium/secret_buffer'
5
4
 
6
5
  module Crypto
@@ -26,7 +25,7 @@ module Crypto
26
25
  def auth(message, key)
27
26
  check_length(key, KEYBYTES, :SecretKey)
28
27
 
29
- mac = Sodium::Buffer.new(:uchar, BYTES)
28
+ mac = zeros(BYTES)
30
29
  key.readonly if key.is_a?(Sodium::SecretBuffer)
31
30
  crypto_auth(mac, message, get_size(message), key)
32
31
 
data/lib/crypto/box.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'ffi'
2
2
  require_relative '../sodium/utils'
3
3
  require_relative '../random_bytes'
4
- require_relative '../sodium/buffer'
5
4
  require_relative '../sodium/secret_buffer'
6
5
  require_relative '../sodium/errors'
7
6
 
@@ -39,8 +38,8 @@ module Crypto
39
38
  end
40
39
 
41
40
  def keypair
42
- public_key = Sodium::Buffer.new(:uchar, PUBLICKEYBYTES)
43
- secret_key = Sodium::Buffer.new(:uchar, SECRETKEYBYTES)
41
+ public_key = zeros(PUBLICKEYBYTES)
42
+ secret_key = zeros(SECRETKEYBYTES)
44
43
  crypto_box_keypair(public_key, secret_key)
45
44
 
46
45
  [public_key, secret_key]
@@ -49,8 +48,8 @@ module Crypto
49
48
  def seed_keypair(seed)
50
49
  check_length(seed, SEEDBYTES, :Seed)
51
50
 
52
- public_key = Sodium::Buffer.new(:uchar, PUBLICKEYBYTES)
53
- secret_key = Sodium::Buffer.new(:uchar, SECRETKEYBYTES)
51
+ public_key = zeros(PUBLICKEYBYTES)
52
+ secret_key = zeros(SECRETKEYBYTES)
54
53
  seed.readonly if seed.is_a?(Sodium::SecretBuffer)
55
54
  crypto_box_seed_keypair(public_key, secret_key, seed)
56
55
 
@@ -60,7 +59,7 @@ module Crypto
60
59
  end
61
60
 
62
61
  def memory_locked_keypair
63
- public_key = Sodium::Buffer.new(:uchar, PUBLICKEYBYTES)
62
+ public_key = zeros(PUBLICKEYBYTES)
64
63
  secret_key = Sodium::SecretBuffer.new(SECRETKEYBYTES)
65
64
  crypto_box_keypair(public_key, secret_key)
66
65
  secret_key.noaccess
@@ -71,7 +70,7 @@ module Crypto
71
70
  def memory_locked_seed_keypair(seed)
72
71
  check_length(seed, SEEDBYTES, :Seed)
73
72
 
74
- public_key = Sodium::Buffer.new(:uchar, PUBLICKEYBYTES)
73
+ public_key = zeros(PUBLICKEYBYTES)
75
74
  secret_key = Sodium::SecretBuffer.new(SECRETKEYBYTES)
76
75
  seed.readonly if seed.is_a?(Sodium::SecretBuffer)
77
76
  crypto_box_seed_keypair(public_key, secret_key, seed)
@@ -88,7 +87,7 @@ module Crypto
88
87
  check_length(public_key, PUBLICKEYBYTES, :PublicKey)
89
88
  check_length(secret_key, SECRETKEYBYTES, :SecretKey)
90
89
 
91
- ciphertext = Sodium::Buffer.new(:uchar, message_len + MACBYTES)
90
+ ciphertext = zeros(message_len + MACBYTES)
92
91
  secret_key.readonly if secret_key.is_a?(Sodium::SecretBuffer)
93
92
  crypto_box_easy(ciphertext, message, message_len, nonce, public_key, secret_key)
94
93
 
@@ -103,7 +102,7 @@ module Crypto
103
102
  check_length(public_key, PUBLICKEYBYTES, :PublicKey)
104
103
  check_length(secret_key, SECRETKEYBYTES, :SecretKey)
105
104
 
106
- decrypted = Sodium::Buffer.new(:uchar, ciphertext_len - MACBYTES)
105
+ decrypted = zeros(ciphertext_len - MACBYTES)
107
106
  secret_key.readonly if secret_key.is_a?(Sodium::SecretBuffer)
108
107
  if crypto_box_open_easy(decrypted, ciphertext, ciphertext_len, nonce, public_key, secret_key) == 0
109
108
  decrypted
@@ -1,6 +1,5 @@
1
1
  require 'ffi'
2
2
  require_relative '../sodium/utils'
3
- require_relative '../sodium/buffer'
4
3
  require_relative '../sodium/secret_buffer'
5
4
  require_relative '../sodium/errors'
6
5
 
@@ -52,7 +51,7 @@ module Crypto
52
51
  key_len = 0
53
52
  end
54
53
 
55
- blake2b = Sodium::Buffer.new(:uchar, hash_size)
54
+ blake2b = zeros(hash_size)
56
55
  key.readonly if key.is_a?(Sodium::SecretBuffer)
57
56
  if crypto_generichash(blake2b, hash_size, message, get_size(message), key, key_len) == 0
58
57
  blake2b
@@ -73,7 +72,7 @@ module Crypto
73
72
  state = State.new
74
73
  key.readonly if key.is_a?(Sodium::SecretBuffer)
75
74
  if crypto_generichash_init(state, key, key_len, hash_size) == 0
76
- [state, Sodium::Buffer.new(:uchar, hash_size)]
75
+ [state, zeros(hash_size)]
77
76
  else
78
77
  raise Sodium::CryptoError
79
78
  end
@@ -86,7 +85,7 @@ module Crypto
86
85
  end
87
86
 
88
87
  def final(state, blake2b)
89
- if crypto_generichash_final(state, blake2b, blake2b.size) == 0
88
+ if crypto_generichash_final(state, blake2b, blake2b.bytesize) == 0
90
89
  blake2b
91
90
  else
92
91
  raise Sodium::CryptoError
@@ -1,6 +1,5 @@
1
1
  require 'ffi'
2
2
  require_relative '../sodium/utils'
3
- require_relative '../sodium/buffer'
4
3
  require_relative '../sodium/secret_buffer'
5
4
 
6
5
  module Crypto
@@ -35,7 +34,7 @@ module Crypto
35
34
  def onetimeauth(message, key)
36
35
  check_length(key, KEYBYTES, :SecretKey)
37
36
 
38
- out = Sodium::Buffer.new(:uchar, BYTES)
37
+ out = zeros(BYTES)
39
38
  key.readonly if key.is_a?(Sodium::SecretBuffer)
40
39
  crypto_onetimeauth(out, message, get_size(message), key)
41
40
 
@@ -71,7 +70,7 @@ module Crypto
71
70
  end
72
71
 
73
72
  def final(state)
74
- out = Sodium::Buffer.new(:uchar, BYTES)
73
+ out = zeros(BYTES)
75
74
  crypto_onetimeauth_final(state, out)
76
75
  out
77
76
  end
@@ -61,9 +61,9 @@ module Crypto
61
61
  end
62
62
 
63
63
  def str(passwd, opslimit = OPSLIMIT_INTERACTIVE, memlimit = MEMLIMIT_INTERACTIVE)
64
- hashed_password = FFI::MemoryPointer.new(:char, STRBYTES)
64
+ hashed_password = zeros(STRBYTES - 1)
65
65
  if crypto_pwhash_scryptsalsa208sha256_str(hashed_password, passwd, passwd.bytesize, opslimit, memlimit) == 0
66
- hashed_password.get_string(0)
66
+ hashed_password
67
67
  else
68
68
  raise NoMemoryError, "Failed to allocate memory max size=#{memlimit} bytes", caller
69
69
  end
@@ -1,6 +1,5 @@
1
1
  require 'ffi'
2
2
  require_relative '../sodium/utils'
3
- require_relative '../sodium/buffer'
4
3
  require_relative '../sodium/secret_buffer'
5
4
 
6
5
  module Crypto
@@ -26,7 +25,7 @@ module Crypto
26
25
  def base(secret_key)
27
26
  check_length(secret_key, SCALARBYTES, :SecretKey)
28
27
 
29
- public_key = Sodium::Buffer.new(:uchar, BYTES)
28
+ public_key = zeros(BYTES)
30
29
  secret_key.readonly if secret_key.is_a?(Sodium::SecretBuffer)
31
30
  crypto_scalarmult_base(public_key, secret_key)
32
31
 
@@ -1,7 +1,6 @@
1
1
  require 'ffi'
2
2
  require_relative '../sodium/utils'
3
3
  require_relative '../random_bytes'
4
- require_relative '../sodium/buffer'
5
4
  require_relative '../sodium/secret_buffer'
6
5
  require_relative '../sodium'
7
6
 
@@ -36,7 +35,7 @@ module Crypto
36
35
  check_length(nonce, NONCEBYTES, :Nonce)
37
36
  check_length(key, KEYBYTES, :SecretKey)
38
37
 
39
- ciphertext = Sodium::Buffer.new(:uchar, message_len + MACBYTES)
38
+ ciphertext = zeros(message_len + MACBYTES)
40
39
  key.readonly if key.is_a?(Sodium::SecretBuffer)
41
40
  crypto_secretbox_easy(ciphertext, message, message_len, nonce, key)
42
41
 
@@ -50,7 +49,7 @@ module Crypto
50
49
  check_length(nonce, NONCEBYTES, :Nonce)
51
50
  check_length(key, KEYBYTES, :SecretKey)
52
51
 
53
- decrypted = Sodium::Buffer.new(:uchar, ciphertext_len - MACBYTES)
52
+ decrypted = zeros(ciphertext_len - MACBYTES)
54
53
  key.readonly if key.is_a?(Sodium::SecretBuffer)
55
54
  if crypto_secretbox_open_easy(decrypted, ciphertext, ciphertext_len, nonce, key) == 0
56
55
  decrypted
@@ -1,6 +1,5 @@
1
1
  require 'ffi'
2
2
  require_relative '../sodium/utils'
3
- require_relative '../sodium/buffer'
4
3
  require_relative '../sodium/secret_buffer'
5
4
 
6
5
  module Crypto
@@ -25,7 +24,7 @@ module Crypto
25
24
  def shorthash(short_data, key)
26
25
  check_length(key, KEYBYTES, :SecretKey)
27
26
 
28
- siphash = Sodium::Buffer.new(:uchar, BYTES)
27
+ siphash = zeros(BYTES)
29
28
  key.readonly if key.is_a?(Sodium::SecretBuffer)
30
29
  crypto_shorthash(siphash, short_data, get_size(short_data), key)
31
30
 
data/lib/crypto/sign.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'ffi'
2
2
  require_relative '../sodium/utils'
3
- require_relative '../sodium/buffer'
4
3
  require_relative '../sodium/secret_buffer'
5
4
  require_relative '../sodium'
6
5
 
@@ -32,8 +31,8 @@ module Crypto
32
31
  module_function
33
32
 
34
33
  def keypair
35
- public_key = Sodium::Buffer.new(:uchar, PUBLICKEYBYTES)
36
- secret_key = Sodium::Buffer.new(:uchar, SECRETKEYBYTES)
34
+ public_key = zeros(PUBLICKEYBYTES)
35
+ secret_key = zeros(SECRETKEYBYTES)
37
36
  crypto_sign_keypair(public_key, secret_key)
38
37
 
39
38
  [public_key, secret_key]
@@ -42,8 +41,8 @@ module Crypto
42
41
  def seed_keypair(seed)
43
42
  check_length(seed, SEEDBYTES, :Seed)
44
43
 
45
- public_key = Sodium::Buffer.new(:uchar, PUBLICKEYBYTES)
46
- secret_key = Sodium::Buffer.new(:uchar, SECRETKEYBYTES)
44
+ public_key = zeros(PUBLICKEYBYTES)
45
+ secret_key = zeros(SECRETKEYBYTES)
47
46
  seed.readonly if seed.is_a?(Sodium::SecretBuffer)
48
47
  crypto_sign_seed_keypair(public_key, secret_key, seed)
49
48
 
@@ -53,7 +52,7 @@ module Crypto
53
52
  end
54
53
 
55
54
  def memory_locked_keypair
56
- public_key = Sodium::Buffer.new(:uchar, PUBLICKEYBYTES)
55
+ public_key = zeros(PUBLICKEYBYTES)
57
56
  secret_key = Sodium::SecretBuffer.new(SECRETKEYBYTES)
58
57
  crypto_sign_keypair(public_key, secret_key)
59
58
  secret_key.noaccess
@@ -64,7 +63,7 @@ module Crypto
64
63
  def memory_locked_seed_keypair(seed)
65
64
  check_length(seed, SEEDBYTES, :Seed)
66
65
 
67
- public_key = Sodium::Buffer.new(:uchar, PUBLICKEYBYTES)
66
+ public_key = zeros(PUBLICKEYBYTES)
68
67
  secret_key = Sodium::SecretBuffer.new(SECRETKEYBYTES)
69
68
  seed.readonly if seed.is_a?(Sodium::SecretBuffer)
70
69
  crypto_sign_seed_keypair(public_key, secret_key, seed)
@@ -79,7 +78,7 @@ module Crypto
79
78
  message_len = get_size(message)
80
79
  check_length(secret_key, SECRETKEYBYTES, :SecretKey)
81
80
 
82
- sealed_message = Sodium::Buffer.new(:uchar, message_len + BYTES)
81
+ sealed_message = zeros(message_len + BYTES)
83
82
  secret_key.readonly if secret_key.is_a?(Sodium::SecretBuffer)
84
83
  crypto_sign(sealed_message, nil, message, message_len, secret_key)
85
84
 
@@ -92,7 +91,7 @@ module Crypto
92
91
  sealed_message_len = get_size(sealed_message)
93
92
  check_length(public_key, PUBLICKEYBYTES, :PublicKey)
94
93
 
95
- unsealed_message = Sodium::Buffer.new(:uchar, sealed_message_len - BYTES)
94
+ unsealed_message = zeros(sealed_message_len - BYTES)
96
95
  unsealed_message_len = FFI::MemoryPointer.new(:ulong_long)
97
96
  if crypto_sign_open(unsealed_message, unsealed_message_len, sealed_message, sealed_message_len, public_key) == 0
98
97
  unsealed_message
@@ -1,7 +1,6 @@
1
1
  require 'ffi'
2
2
  require_relative '../../sodium/utils'
3
3
  require_relative '../scalar_mult'
4
- require_relative '../../sodium/buffer'
5
4
  require_relative '../../sodium/secret_buffer'
6
5
 
7
6
  module Crypto
@@ -35,7 +34,7 @@ module Crypto
35
34
  def pk_to_curve25519(public_key)
36
35
  check_length(public_key, PUBLICKEYBYTES, :PublicKey)
37
36
 
38
- curve25519_pk = Sodium::Buffer.new(:uchar, ScalarMult::BYTES)
37
+ curve25519_pk = zeros(ScalarMult::BYTES)
39
38
  crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, public_key)
40
39
 
41
40
  curve25519_pk
data/lib/libsodium.rb CHANGED
@@ -2,7 +2,6 @@
2
2
  require_relative 'sodium/errors'
3
3
  require_relative 'sodium'
4
4
  require_relative 'sodium/utils'
5
- require_relative 'sodium/buffer'
6
5
  require_relative 'sodium/mprotect'
7
6
  require_relative 'sodium/secret_buffer'
8
7
  Sodium.freeze
data/lib/random_bytes.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  require 'ffi'
2
- require_relative 'sodium/buffer'
2
+ require_relative 'sodium/utils'
3
3
 
4
4
  module RandomBytes
5
5
  extend FFI::Library
6
+ extend Sodium::Utils
6
7
  ffi_lib :libsodium
7
8
 
8
9
  attach_function :randombytes_buf, [:buffer_out, :size_t], :void
@@ -15,7 +16,7 @@ module RandomBytes
15
16
  module_function
16
17
 
17
18
  def buf(size)
18
- buf = Sodium::Buffer.new(:void, size)
19
+ buf = zeros(size)
19
20
  randombytes_buf(buf, size)
20
21
  buf
21
22
  end
data/lib/sodium.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'ffi'
2
2
  require_relative 'sodium/errors'
3
3
  require_relative 'sodium/utils'
4
- require_relative 'sodium/buffer'
5
4
 
6
5
  module Sodium
7
6
  extend FFI::Library
@@ -57,12 +56,12 @@ module Sodium
57
56
 
58
57
  def bin2hex(bin)
59
58
  bin_len = get_size(bin)
60
- hex = FFI::MemoryPointer.new(:char, bin_len * 2 + 1)
61
- sodium_bin2hex(hex, hex.size, bin, bin_len)
59
+ hex = zeros(bin_len * 2)
60
+ sodium_bin2hex(hex, hex.bytesize, bin, bin_len)
62
61
  end
63
62
 
64
63
  def hex2bin(hex, bin_maxlen, ignore = nil)
65
- bin = Sodium::Buffer.new(:uchar, bin_maxlen)
64
+ bin = zeros(bin_maxlen)
66
65
  bin_len = FFI::MemoryPointer.new(:size_t)
67
66
  if sodium_hex2bin(bin, bin_maxlen, hex, hex.bytesize, ignore, bin_len, nil) == 0
68
67
  size = bin_len.size == 8 ? bin_len.get_uint64(0) : bin_len.get_uint32(0)
@@ -1,3 +1,3 @@
1
1
  module Sodium
2
- VERSION = Gem::Version.new('0.3.3')
2
+ VERSION = Gem::Version.new('0.4.0')
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-libsodium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hendrik Beskow
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-21 00:00:00.000000000 Z
11
+ date: 2014-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -60,7 +60,6 @@ files:
60
60
  - lib/libsodium.rb
61
61
  - lib/random_bytes.rb
62
62
  - lib/sodium.rb
63
- - lib/sodium/buffer.rb
64
63
  - lib/sodium/core_ext.rb
65
64
  - lib/sodium/errors.rb
66
65
  - lib/sodium/mprotect.rb
data/lib/sodium/buffer.rb DELETED
@@ -1,11 +0,0 @@
1
- require 'ffi'
2
-
3
- module Sodium
4
- class Buffer < FFI::MemoryPointer
5
- def to_str
6
- read_bytes(size)
7
- end
8
- end
9
-
10
- Buffer.freeze
11
- end