ed25519 1.1.0 → 1.2.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: 2dd01d95fcca1455ac061773818f610621a07f9a
4
- data.tar.gz: 67daf64a3b6f8fc1a8e3e9ea9a8c13e0bef540f1
3
+ metadata.gz: 37c2f958c2f62a1bee8128cf0d5976813d52c7af
4
+ data.tar.gz: 89dcd85d4394c157728c734fcabaa2faa58fc404
5
5
  SHA512:
6
- metadata.gz: 5e4e35563c5f28c6a898f1c0a927b66c263e388e1ea8b37ca0ee931eb35d6e32ac4d62a84b6126b668c089f07573186e7c452a5a5e29b2d94abe58f658162f7e
7
- data.tar.gz: 34c896eba986c2023ddbadb56120608639acc9d7736f6d289679c6abe64e1a4a4590165589c662d2e70304657103e95db9201e790aec0066643900627ef06203
6
+ metadata.gz: 97c97a3102ea908aaa3307214cf6f0f309d3afc1b2e22940291970eae3aeab4c1bdda1bb782ae23072fc24d2f282d2e5c5968f5dbaf8c92e98335fc07adfc861
7
+ data.tar.gz: a951d6f5555edb3d70d726957b6215464d7716df63e4b58e078ce6f665641d3fc86ccd6c4abb3ee2c22f98d480585ab8f759240cb33e6f3bb3deb5593aa05686
data/CHANGES.md CHANGED
@@ -1,3 +1,13 @@
1
+ # [1.2.0] (2017-12-15)
2
+
3
+ [1.2.0]: https://github.com/cryptosphere/x25519/compare/v1.1.0...v1.2.0
4
+
5
+ * [#13](https://github.com/cryptosphere/ed25519/pull/13)
6
+ Add `Ed25519::SigningKey.from_keypair`
7
+
8
+ * [#12](https://github.com/cryptosphere/ed25519/pull/12)
9
+ Add `Ed25519.validate_key_bytes` method
10
+
1
11
  # [1.1.0] (2017-12-13)
2
12
 
3
13
  [1.1.0]: https://github.com/cryptosphere/x25519/compare/v1.0.0...v1.1.0
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [build-image]: https://travis-ci.org/cryptosphere/ed25519.svg?branch=master
6
6
  [build-link]: https://travis-ci.org/cryptosphere/ed25519
7
7
  [docs-image]: https://img.shields.io/badge/yard-docs-blue.svg
8
- [docs-link]: http://www.rubydoc.info/gems/ed25519
8
+ [docs-link]: http://www.rubydoc.info/gems/ed25519/1.2.0
9
9
  [license-image]: https://img.shields.io/badge/license-MIT-blue.svg
10
10
  [license-link]: https://github.com/cryptosphere/ed25519/blob/master/LICENSE
11
11
 
data/lib/ed25519.rb CHANGED
@@ -35,6 +35,13 @@ module Ed25519
35
35
  self.provider = Ed25519::Provider::Ref10
36
36
  end
37
37
 
38
+ # Ensure a serialized key meets the requirements
39
+ def validate_key_bytes(key_bytes)
40
+ raise TypeError, "expected String, got #{key_bytes.class}" unless key_bytes.is_a?(String)
41
+ return true if key_bytes.bytesize == KEY_SIZE
42
+ raise ArgumentError, "expected #{KEY_SIZE}-byte String, got #{key_bytes.bytesize}"
43
+ end
44
+
38
45
  # Perform a self-test to ensure the selected provider is working
39
46
  def self_test
40
47
  signature_key = Ed25519::SigningKey.new("A" * 32)
@@ -12,13 +12,25 @@ module Ed25519
12
12
  new SecureRandom.random_bytes(Ed25519::KEY_SIZE)
13
13
  end
14
14
 
15
+ # Create a SigningKey from a 64-byte Ed25519 keypair (i.e. public + private)
16
+ #
17
+ # @param keypair [String] 64-byte keypair value containing both seed + public key
18
+ def self.from_keypair(keypair)
19
+ raise TypeError, "expected String, got #{keypair.class}" unless keypair.is_a?(String)
20
+ raise ArgumentError, "expected 64-byte String, got #{keypair.bytesize}" unless keypair.bytesize == 64
21
+
22
+ new(keypair[0, KEY_SIZE]).tap do |key|
23
+ raise ArgumentError, "corrupt keypair" unless keypair[KEY_SIZE, KEY_SIZE] == key.verify_key.to_bytes
24
+ end
25
+ end
26
+
15
27
  # Create a new Ed25519::SigningKey from the given seed value
16
28
  #
17
29
  # @param seed [String] 32-byte seed value from which the key should be derived
18
30
  def initialize(seed)
19
- raise ArgumentError, "seed must be #{KEY_SIZE}-bytes long" unless seed.length == KEY_SIZE
20
- @seed = seed
31
+ Ed25519.validate_key_bytes(seed)
21
32
 
33
+ @seed = seed
22
34
  @keypair = Ed25519.provider.create_keypair(seed)
23
35
  @verify_key = VerifyKey.new(@keypair[32, 32])
24
36
  end
@@ -7,7 +7,7 @@ module Ed25519
7
7
  #
8
8
  # @param key [String] 32-byte string representing a serialized public key
9
9
  def initialize(key)
10
- raise ArgumentError, "seed must be 32 bytes long" unless key.length == KEY_SIZE
10
+ Ed25519.validate_key_bytes(key)
11
11
  @key_bytes = key
12
12
  end
13
13
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ed25519
4
- VERSION = "1.1.0"
4
+ VERSION = "1.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ed25519
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Arcieri
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-13 00:00:00.000000000 Z
11
+ date: 2017-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler