noise-ruby 0.7.3 → 0.7.4

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
  SHA256:
3
- metadata.gz: 9fcf6ecf59b631aacb32b66661719e57a205ccea71a487748d3bb2979fc2ee4b
4
- data.tar.gz: 22bee13bda1fe1a9339777261eccd6d173e32679e969e78b065abe457d06884e
3
+ metadata.gz: ecfac7577c0e2c49956249076aa5351f4c002fc135341f4bb21b9279cf54ba56
4
+ data.tar.gz: d65b64e5ce9df56c2ad0599a75fabb4070b9739ff7313961ec0e6b3ab11b68cd
5
5
  SHA512:
6
- metadata.gz: 2cbd93529da1345b646b9be626591bf81eb1fe53d211d70a75fe6fe1f56d99c7b55bdedc7102aed3d20c27080fcf4f04b0619b7bacd8f664f8301397f3f4e069
7
- data.tar.gz: '0845488f8a48edb3f09fba247a8f7950aefd0c5a6cade1ae114e3b3e683e4f66dbc3d34267b2ee298f066d170ddd84343da3d843a5a89587ce592cac906da849'
6
+ metadata.gz: be99c89230f89d0f286a4dc1da6aadb10ce06ba64206325381cca8032ae71abec0406d1a957fafe0946791f72f346ef23cce019c74868605280e5fa357287e18
7
+ data.tar.gz: b11a5a496096daf4f4abe9dbfb6f2bba693ec4b5be2c680be6b42b450d7be89a7f119535f20e46bba7429c1f5024ebd62896922c7a944c24a76d951e2df8df4c
@@ -3,9 +3,10 @@
3
3
  module Noise
4
4
  module Connection
5
5
  class Base
6
- attr_reader :protocol, :handshake_started, :handshake_finished, :handshake_hash
6
+ attr_reader :protocol, :handshake_started, :handshake_finished, :handshake_hash, :handshake_state
7
7
  attr_reader :cipher_state_encrypt, :cipher_state_decrypt, :cipher_state_handshake
8
8
  attr_accessor :psks, :prologue
9
+ attr_reader :s, :rs
9
10
 
10
11
  def initialize(name, keypairs: { s: nil, e: nil, rs: nil, re: nil })
11
12
  @protocol = Protocol.create(name)
@@ -103,6 +104,8 @@ module Noise
103
104
 
104
105
  def handshake_done(_c1, _c2)
105
106
  @handshake_hash = @symmetric_state.handshake_hash
107
+ @s = @handshake_state.s
108
+ @rs = @handshake_state.rs
106
109
  @handshake_state = nil
107
110
  @symmetric_state = nil
108
111
  @cipher_state_handshake = nil
@@ -4,6 +4,8 @@ module Noise
4
4
  module Functions
5
5
  module Cipher
6
6
  class AesGcm
7
+ MAX_NONCE = 2**64 - 1
8
+
7
9
  def encrypt(k, n, ad, plaintext)
8
10
  cipher = OpenSSL::Cipher::AES.new(256, :GCM).encrypt
9
11
  cipher.key = k
@@ -24,6 +26,16 @@ module Noise
24
26
  def nonce_to_bytes(n)
25
27
  "\x00" * 4 + format('%16x', n).htb
26
28
  end
29
+
30
+ # Returns a new 32-byte cipher key as a pseudorandom function of k.
31
+ # If this function is not specifically defined for some set of cipher
32
+ # functions, then it defaults to returning the first 32 bytes from
33
+ # ENCRYPT(k,maxnonce, zerolen, zeros), where maxnonce equals 264-1,
34
+ # zerolen is a zero-length byte sequence, and zeros is a sequence of
35
+ # 32 bytes filled with zeros.
36
+ def rekey(k)
37
+ encrypt(k, MAX_NONCE, '', "\x00" * 32)[0...32]
38
+ end
27
39
  end
28
40
  end
29
41
  end
@@ -4,16 +4,18 @@ module Noise
4
4
  module Functions
5
5
  module Cipher
6
6
  class ChaChaPoly
7
+ MAX_NONCE = 2**64 - 1
8
+
7
9
  def encrypt(k, n, ad, plaintext)
8
- @cipher = RbNaCl::AEAD::ChaCha20Poly1305IETF.new(String.new(k).force_encoding('ASCII-8BIT'))
9
- @cipher.encrypt(nonce_to_bytes(n), plaintext, ad)
10
+ cipher = RbNaCl::AEAD::ChaCha20Poly1305IETF.new(String.new(k).force_encoding('ASCII-8BIT'))
11
+ cipher.encrypt(nonce_to_bytes(n), plaintext, ad)
10
12
  rescue ::RbNaCl::CryptoError => e
11
13
  raise Noise::Exceptions::EncryptError, e
12
14
  end
13
15
 
14
16
  def decrypt(k, n, ad, ciphertext)
15
- @cipher = RbNaCl::AEAD::ChaCha20Poly1305IETF.new(String.new(k).force_encoding('ASCII-8BIT'))
16
- @cipher.decrypt(nonce_to_bytes(n), ciphertext, ad)
17
+ cipher = RbNaCl::AEAD::ChaCha20Poly1305IETF.new(String.new(k).force_encoding('ASCII-8BIT'))
18
+ cipher.decrypt(nonce_to_bytes(n), ciphertext, ad)
17
19
  rescue ::RbNaCl::CryptoError => e
18
20
  raise Noise::Exceptions::DecryptError, e
19
21
  end
@@ -21,6 +23,16 @@ module Noise
21
23
  def nonce_to_bytes(n)
22
24
  "\x00" * 4 + format('%16x', n).htb.reverse
23
25
  end
26
+
27
+ # Returns a new 32-byte cipher key as a pseudorandom function of k.
28
+ # If this function is not specifically defined for some set of cipher
29
+ # functions, then it defaults to returning the first 32 bytes from
30
+ # ENCRYPT(k,maxnonce, zerolen, zeros), where maxnonce equals 2**64-1,
31
+ # zerolen is a zero-length byte sequence, and zeros is a sequence of
32
+ # 32 bytes filled with zeros.
33
+ def rekey(k)
34
+ encrypt(k, MAX_NONCE, '', "\x00" * 32)[0..32]
35
+ end
24
36
  end
25
37
  end
26
38
  end
@@ -18,6 +18,7 @@ module Noise
18
18
  # Each message pattern is a sequence of tokens from the set ("e", "s", "ee", "es", "se", "ss").
19
19
  class HandshakeState
20
20
  attr_reader :message_patterns, :symmetric_state
21
+ attr_reader :s, :rs
21
22
 
22
23
  def initialize(connection, protocol, initiator, prologue, keypairs)
23
24
  @connection = connection
data/lib/noise/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Noise
4
- VERSION = '0.7.3'
4
+ VERSION = '0.7.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: noise-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hajime Yamaguchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-28 00:00:00.000000000 Z
11
+ date: 2019-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler