ffi-libsodium 0.0.7 → 0.0.8

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: 809b5a363af975be25d1bece0bf14d70fffacd36
4
- data.tar.gz: 52789ce07fa6173a7eb8f7602ededd02dc74f720
3
+ metadata.gz: 58327f2bb9c42be2df97ac8335ea4ed62d0cdc09
4
+ data.tar.gz: aaa7cfd98b775901e0c1e8cb767df222b3727d13
5
5
  SHA512:
6
- metadata.gz: 33ac72f615ac5b7eda4407b28588321aa74d2274a1dcac5455986cb68511c8d786451ad01fdbe5160a8ad06a8762d95043646ec87b45a4b809f16efc0e11c6a4
7
- data.tar.gz: bdd464b328937b41f9f2f5f9300fd734758462f96310ae4fa84c906343a277e54ecc76c0835519d8cedecc08184c490182434d93abf4660c9bb1cf746582b3fa
6
+ metadata.gz: 21c89d5597a816816f311aa56bbd47312f10c086c9376b287049a596117a9020cde9401ab3741c10fa6b8747c7cf2825b5e2f2a5c98e7746fa0b1abf914b902d
7
+ data.tar.gz: 00fde23905b545079a29cd981d7e6267a0e02cfa1650155cc4b87bc2b66fd143229c855f893852236d5775a990f16fbbf36fc9cdc8a632f6852339a5e04cf5d4
@@ -1,7 +1,9 @@
1
- require_relative '../../sodium'
1
+ require 'ffi'
2
2
  require_relative '../../sodium/utils'
3
- require_relative '../../sodium/secret_buffer'
4
3
  require_relative '../../random_bytes'
4
+ require_relative '../../sodium/buffer'
5
+ require_relative '../../sodium/secret_buffer'
6
+ require_relative '../../sodium'
5
7
 
6
8
  module Crypto
7
9
  module AEAD
data/lib/crypto/auth.rb CHANGED
@@ -1,4 +1,4 @@
1
- require_relative '../sodium'
1
+ require 'ffi'
2
2
  require_relative '../sodium/utils'
3
3
  require_relative '../sodium/buffer'
4
4
  require_relative '../sodium/secret_buffer'
data/lib/crypto/box.rb CHANGED
@@ -1,8 +1,9 @@
1
- require_relative '../sodium'
1
+ require 'ffi'
2
2
  require_relative '../sodium/utils'
3
+ require_relative '../random_bytes'
3
4
  require_relative '../sodium/buffer'
4
5
  require_relative '../sodium/secret_buffer'
5
- require_relative '../random_bytes'
6
+ require_relative '../sodium'
6
7
 
7
8
  module Crypto
8
9
  module Box
@@ -58,7 +59,7 @@ module Crypto
58
59
  seed.readonly if seed.is_a?(Sodium::SecretBuffer)
59
60
  crypto_box_seed_keypair(public_key, secret_key, seed)
60
61
  seed.noaccess if seed.is_a?(Sodium::SecretBuffer)
61
-
62
+
62
63
  [public_key, secret_key]
63
64
  end
64
65
 
@@ -1,5 +1,6 @@
1
- require_relative '../sodium'
1
+ require 'ffi'
2
2
  require_relative '../sodium/utils'
3
+ require_relative '../sodium'
3
4
  require_relative '../sodium/buffer'
4
5
  require_relative '../sodium/secret_buffer'
5
6
 
@@ -1,4 +1,4 @@
1
- require_relative '../sodium'
1
+ require 'ffi'
2
2
  require_relative '../sodium/utils'
3
3
  require_relative '../sodium/buffer'
4
4
  require_relative '../sodium/secret_buffer'
@@ -1,8 +1,8 @@
1
- require_relative '../../sodium'
1
+ require 'ffi'
2
2
  require_relative '../../sodium/utils'
3
- require_relative '../../sodium/buffer'
4
- require_relative '../../sodium/secret_buffer'
5
3
  require_relative '../../random_bytes'
4
+ require_relative '../../sodium'
5
+ require_relative '../../sodium/secret_buffer'
6
6
 
7
7
  module Crypto
8
8
  module PwHash
@@ -1,8 +1,7 @@
1
- require_relative '../sodium'
1
+ require 'ffi'
2
2
  require_relative '../sodium/utils'
3
3
  require_relative '../sodium/buffer'
4
4
  require_relative '../sodium/secret_buffer'
5
- require_relative '../random_bytes'
6
5
 
7
6
  module Crypto
8
7
  module ScalarMult
@@ -1,8 +1,9 @@
1
- require_relative '../sodium'
1
+ require 'ffi'
2
2
  require_relative '../sodium/utils'
3
+ require_relative '../random_bytes'
3
4
  require_relative '../sodium/buffer'
4
5
  require_relative '../sodium/secret_buffer'
5
- require_relative '../random_bytes'
6
+ require_relative '../sodium'
6
7
 
7
8
  module Crypto
8
9
  module SecretBox
@@ -1,4 +1,4 @@
1
- require_relative '../sodium'
1
+ require 'ffi'
2
2
  require_relative '../sodium/utils'
3
3
  require_relative '../sodium/buffer'
4
4
  require_relative '../sodium/secret_buffer'
data/lib/crypto/sign.rb CHANGED
@@ -1,8 +1,8 @@
1
- require_relative '../sodium'
1
+ require 'ffi'
2
2
  require_relative '../sodium/utils'
3
3
  require_relative '../sodium/buffer'
4
4
  require_relative '../sodium/secret_buffer'
5
- require_relative '../random_bytes'
5
+ require_relative '../sodium'
6
6
 
7
7
  module Crypto
8
8
  module Sign
@@ -0,0 +1,57 @@
1
+ require 'ffi'
2
+ require_relative '../../sodium/utils'
3
+ require_relative '../scalar_mult'
4
+ require_relative '../../sodium/buffer'
5
+ require_relative '../../sodium/secret_buffer'
6
+
7
+ module Crypto
8
+ module Sign
9
+ module Ed25519
10
+ PRIMITIVE = 'ed25519'.freeze
11
+ extend FFI::Library
12
+ extend Sodium::Utils
13
+
14
+ ffi_lib :libsodium
15
+
16
+ class << self
17
+ def crypto_sign_ed25519_primitive
18
+ PRIMITIVE
19
+ end
20
+
21
+ alias_method :primitive, :crypto_sign_ed25519_primitive
22
+ end
23
+
24
+ attach_function :publickeybytes, :crypto_sign_ed25519_publickeybytes, [], :size_t
25
+ attach_function :secretkeybytes, :crypto_sign_ed25519_secretkeybytes, [], :size_t
26
+
27
+ PUBLICKEYBYTES = publickeybytes.freeze
28
+ SECRETKEYBYTES = secretkeybytes.freeze
29
+
30
+ attach_function :crypto_sign_ed25519_pk_to_curve25519, [:buffer_out, :buffer_in], :int
31
+ attach_function :crypto_sign_ed25519_sk_to_curve25519, [:buffer_out, :buffer_in], :int
32
+
33
+ module_function
34
+
35
+ def pk_to_curve25519(public_key)
36
+ check_length(public_key, PUBLICKEYBYTES, :PublicKey)
37
+
38
+ curve25519_pk = Sodium::Buffer.new(:uchar, ScalarMult::BYTES)
39
+ crypto_sign_ed25519_pk_to_curve25519(curve25519_pk, public_key)
40
+
41
+ curve25519_pk
42
+ end
43
+
44
+ def sk_to_curve25519(secret_key)
45
+ check_length(secret_key, SECRETKEYBYTES, :SecretKey)
46
+
47
+ curve25519_sk = Sodium::SecretBuffer.new(ScalarMult::BYTES)
48
+ secret_key.readonly if secret_key.is_a?(Sodium::SecretBuffer)
49
+ crypto_sign_ed25519_sk_to_curve25519(curve25519_sk, secret_key)
50
+ secret_key.noaccess if secret_key.is_a?(Sodium::SecretBuffer)
51
+ curve25519_sk.noaccess
52
+
53
+ curve25519_sk
54
+ end
55
+ end
56
+ end
57
+ end
data/lib/libsodium.rb CHANGED
@@ -13,6 +13,7 @@ require_relative 'crypto/short_hash'
13
13
  require_relative 'crypto/pw_hash/scrypt_salsa208_sha256'
14
14
  require_relative 'crypto/one_time_auth'
15
15
  require_relative 'crypto/scalar_mult'
16
+ require_relative 'crypto/sign/ed25519'
16
17
 
17
18
  Thread.exclusive do
18
19
  if Sodium.init == -1
data/lib/random_bytes.rb CHANGED
@@ -1,4 +1,5 @@
1
- require_relative 'sodium/buffer'
1
+ require 'ffi'
2
+ require_relative 'sodium/buffer'
2
3
 
3
4
  module RandomBytes
4
5
  extend FFI::Library
@@ -1,4 +1,7 @@
1
- require_relative '../sodium'
1
+ require 'forwardable'
2
+ require_relative 'utils'
3
+ require_relative '../sodium'
4
+ require 'ffi'
2
5
 
3
6
  module Sodium
4
7
  class SecretBuffer
data/lib/sodium/utils.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require_relative '../sodium'
2
+ require 'ffi'
2
3
 
3
4
  module Sodium
4
5
  module Utils
@@ -69,5 +70,15 @@ module Sodium
69
70
  def zeros(n)
70
71
  ZERO * n
71
72
  end
73
+
74
+ HEXY = 'H*'.freeze
75
+
76
+ def bin2hex(bytes)
77
+ bytes.to_str.unpack(HEXY).first
78
+ end
79
+
80
+ def hex2bin(hex)
81
+ [hex].pack(HEXY)
82
+ end
72
83
  end
73
84
  end
@@ -1,3 +1,3 @@
1
1
  module Sodium
2
- VERSION = '0.0.7'.freeze
2
+ VERSION = '0.0.8'.freeze
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.0.7
4
+ version: 0.0.8
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-10-06 00:00:00.000000000 Z
11
+ date: 2014-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -56,6 +56,7 @@ files:
56
56
  - lib/crypto/secret_box.rb
57
57
  - lib/crypto/short_hash.rb
58
58
  - lib/crypto/sign.rb
59
+ - lib/crypto/sign/ed25519.rb
59
60
  - lib/libsodium.rb
60
61
  - lib/random_bytes.rb
61
62
  - lib/sodium.rb