sr25519 0.4.0 → 0.5.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
  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