sr25519 0.4.0 → 0.5.0

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: 4410fbe296d51933ad70ac7d650dc3f284415679a202bbd31a8b241ecc197aa5
4
- data.tar.gz: 240b6a8ded57e70fb19ff1a9cb827feea667db6b8f94043a1df3e36f3c475f3f
3
+ metadata.gz: 44105512b5755bf3546a091610d99350213160f42b06d29a07953392fa5501a3
4
+ data.tar.gz: ac679e045e419dfb81ffd68350f6a26349b6da1ddc5b5e62a9a1314e27b4bf23
5
5
  SHA512:
6
- metadata.gz: dfb7ca72c9d855583601be1a6dd6aafa49b1ff79bf372dcf52a65d848b4ee708263dd2644570d6fbc14f20dbea98c75721c03c42c40330f51c67972039ce0367
7
- data.tar.gz: ab2ecfcc66ea295b22fd933edaadeae188801ca0d18b856351eead3ae30fa0c511f5cd29184926e79d7ce440e189693fc9928ad049899d1386f040a899d8c6e2
6
+ metadata.gz: c1cc0b885e8699c81d2b98636042e64b5288347df2ba58e9a10e2930ffeb55750f5364ec5e3c3985e33485d14c85742c0aefdc92ab1b58d4ed485de66e53761b
7
+ data.tar.gz: acb8ea5ad8a442d04b67a86ad9f06e44f316198f49caa2b76786e5b479cbf488c09c500bfc074d6adeaf7dee23e2587d8ed2a409a26875cd33bd9a00746178b9
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sr25519 (0.4.0)
4
+ sr25519 (0.5.0)
5
5
  base58
6
6
  blake2b
7
+ ed25519 (~> 1.2, >= 1.2.4)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
@@ -11,6 +12,7 @@ GEM
11
12
  base58 (0.2.3)
12
13
  blake2b (0.10.0)
13
14
  diff-lcs (1.4.4)
15
+ ed25519 (1.2.4)
14
16
  ffi (1.15.4)
15
17
  rake (13.0.6)
16
18
  rspec (3.10.0)
data/README.md CHANGED
@@ -22,21 +22,21 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- 1. Require ed25519.rb in your Ruby program:
25
+ #### 1. Require ed25519.rb in your Ruby program:
26
26
  ```ruby
27
27
  require "sr25519"
28
28
  ```
29
29
 
30
- 2. Generate keypair
30
+ #### 2. Generate keypair
31
31
 
32
32
  ```ruby
33
33
  # seed is priviate key, is a hex string.
34
34
  # example: SR25519.sr25519_keypair_from_seed("0xfac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e")
35
- keypaire = SR25519.sr25519_keypair_from_seed(seed)
35
+ keypair = SR25519.sr25519_keypair_from_seed(seed)
36
36
 
37
37
  ```
38
38
 
39
- 3. Generate public_key
39
+ #### 3. Generate public_key
40
40
 
41
41
  ```ruby
42
42
  public_key = SR25519.get_public_key_from_seed(seed)
@@ -46,25 +46,25 @@ public_key_str = public_key.to_s
46
46
 
47
47
  ```
48
48
 
49
- 4. Encode address
49
+ #### 4. Encode address
50
50
  ```ruby
51
51
  address = Address.encode(public_key.to_s)
52
52
  ```
53
53
 
54
- 5. Decode address
54
+ #### 5. Decode address
55
55
 
56
56
  ```ruby
57
57
  address = Address.decode(address)
58
58
  ```
59
59
 
60
- 6. Sign message
60
+ #### 6. Sign message
61
61
 
62
62
  ```ruby
63
63
  signature_result = SR25519.sign(message, keypair)
64
64
 
65
65
  ```
66
66
 
67
- 7. Verify message
67
+ #### 7. Verify message
68
68
 
69
69
  ```ruby
70
70
  SR25519.verify(address, message, signature_result)
@@ -0,0 +1,34 @@
1
+ require "ed25519"
2
+ class ED25519
3
+
4
+ # Creates a signature for given data
5
+ def self.sign(message, key_pair)
6
+ "0x" + key_pair.sign(message).unpack1("H*")
7
+ end
8
+
9
+ def self.verify(address, message, signature_result)
10
+ if signature_result.start_with?("0x")
11
+ signature_result = signature_result.sub(/0x/, "")
12
+ end
13
+ signature = [signature_result].pack("H*")
14
+ public_key = Address.decode(address)
15
+ verify_key_bytes = [public_key].pack("H*")
16
+ verify_key = Ed25519::VerifyKey.new(verify_key_bytes)
17
+ verify_key.verify(signature, message)
18
+ end
19
+
20
+ def self.keypair_from_seed(seed)
21
+ if seed.start_with?("0x")
22
+ seed = seed.sub(/0x/, "")
23
+ end
24
+ seed = "".tap { |binary| seed.scan(/../) { |hn| binary << hn.to_i(16).chr } }
25
+ signing_key = Ed25519::SigningKey.new(seed)
26
+ return signing_key
27
+ end
28
+
29
+ def self.get_public_key_from_seed(seed)
30
+ signing_key = self.keypair_from_seed(seed)
31
+ return signing_key.verify_key.to_bytes.unpack1('H*')
32
+ end
33
+
34
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sr25519
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
  end
data/lib/sr25519.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require_relative "sr25519/version"
4
4
  require "address"
5
5
  require "sr25519_lib"
6
+ require "ed25519_lib"
6
7
 
7
8
  module Sr25519
8
9
  class Error < StandardError; end
data/lib/sr25519_lib.rb CHANGED
@@ -65,7 +65,7 @@ class SR25519
65
65
  def self.sr25519_sign(message, private_key)
66
66
  sig = SigMessage.new
67
67
  msg = FFI::MemoryPointer.from_string(message)
68
- key_pair = self.sr25519_keypair_from_seed(private_key)
68
+ key_pair = self.keypair_from_seed(private_key)
69
69
  public_key = key_pair.public_key
70
70
  SR25519Lib.sr25519_sign(sig, public_key, key_pair, msg, message.length)
71
71
  sig.to_s
@@ -97,7 +97,7 @@ class SR25519
97
97
  verify = SR25519Lib.sr25519_verify(sig, msg, message.size, pk)
98
98
  end
99
99
 
100
- def self.sr25519_keypair_from_seed(seed)
100
+ def self.keypair_from_seed(seed)
101
101
  if seed.start_with?("0x")
102
102
  seed = seed.sub(/0x/, "")
103
103
  end
@@ -110,7 +110,7 @@ class SR25519
110
110
  end
111
111
 
112
112
  def self.get_public_key_from_seed(seed)
113
- key_pair = self.sr25519_keypair_from_seed(seed)
113
+ key_pair = self.keypair_from_seed(seed)
114
114
  key_pair.public_key
115
115
  end
116
116
 
data/sr25519.gemspec CHANGED
@@ -34,5 +34,5 @@ Gem::Specification.new do |spec|
34
34
  spec.add_dependency "blake2b"
35
35
  spec.add_dependency "base58"
36
36
  spec.add_development_dependency "ffi", "~> 1.15.0"
37
-
37
+ spec.add_dependency "ed25519", '~> 1.2', '>= 1.2.4'
38
38
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sr25519
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - xuxh
@@ -80,6 +80,26 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 1.15.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: ed25519
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.2'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.2.4
93
+ type: :runtime
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '1.2'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.2.4
83
103
  description: Sign and verify message with sr25519
84
104
  email:
85
105
  - xxh2611@gmail.com
@@ -100,6 +120,7 @@ files:
100
120
  - bin/console
101
121
  - bin/setup
102
122
  - lib/address.rb
123
+ - lib/ed25519_lib.rb
103
124
  - lib/libsr25519crust.dylib
104
125
  - lib/libsr25519crust.so
105
126
  - lib/sr25519.rb