sr25519 0.1.0 → 0.6.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 +4 -4
- data/.github/workflows/ruby.yml +50 -0
- data/Gemfile.lock +3 -1
- data/LICENSE.txt +1 -1
- data/README.md +37 -12
- data/lib/ed25519_lib.rb +38 -0
- data/lib/sr25519/version.rb +1 -1
- data/lib/sr25519.rb +1 -0
- data/lib/sr25519_lib.rb +9 -6
- data/sr25519.gemspec +1 -1
- metadata +24 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5948eb9d27ac12e520fca97d30f2e94c9a344fc4f8f957e716f34effd37c0a4c
|
4
|
+
data.tar.gz: e3bcbabc050fffffdb7e1d337766b5dcc90c58ca5784cf5eb66c2a81aba56da9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23c8de81f3e235f3fc3e0f8a8ce02a6f9ddb14b95722745349c406433fdf5bb13aedb38cdd07200413f396c85766f428f110a49e8f6b014e2c3741cb86ff4146
|
7
|
+
data.tar.gz: e38310955f4aeae6d7d09dddb2961e3c7acd5a01443b72d41f0f57890d3a2bdc91d922c24b084efa9d79b670e9d6c0bc714167122314e59e546018c827ecc74b
|
@@ -0,0 +1,50 @@
|
|
1
|
+
name: Docker
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
|
6
|
+
# Publish `v1.2.3` tags as releases.
|
7
|
+
tags:
|
8
|
+
- v*
|
9
|
+
|
10
|
+
env:
|
11
|
+
# TODO: Change variable to your image's name.
|
12
|
+
IMAGE_NAME: sr25519
|
13
|
+
|
14
|
+
jobs:
|
15
|
+
|
16
|
+
# Push image to GitHub Packages.
|
17
|
+
# See also https://docs.docker.com/docker-hub/builds/
|
18
|
+
push:
|
19
|
+
runs-on: ubuntu-latest
|
20
|
+
if: github.event_name == 'push'
|
21
|
+
|
22
|
+
steps:
|
23
|
+
- uses: actions/checkout@v2
|
24
|
+
|
25
|
+
- name: Build image
|
26
|
+
run: docker build . --file Dockerfile --tag $IMAGE_NAME
|
27
|
+
|
28
|
+
- name: Log into registry
|
29
|
+
uses: docker/login-action@v1
|
30
|
+
with:
|
31
|
+
username: ${{ secrets.DOCKER_USERNAME }}
|
32
|
+
password: ${{ secrets.DOCKER_PASSWORD }}
|
33
|
+
|
34
|
+
- name: Push image
|
35
|
+
run: |
|
36
|
+
IMAGE_ID=uniart/$IMAGE_NAME
|
37
|
+
# Change all uppercase to lowercase
|
38
|
+
IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]')
|
39
|
+
# Strip git ref prefix from version
|
40
|
+
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
|
41
|
+
# Strip "v" prefix from tag name
|
42
|
+
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
|
43
|
+
# Use Docker `latest` tag convention
|
44
|
+
[ "$VERSION" == "master" ] && VERSION=latest
|
45
|
+
echo IMAGE_ID=$IMAGE_ID
|
46
|
+
echo VERSION=$VERSION
|
47
|
+
docker tag $IMAGE_NAME $IMAGE_ID:$VERSION
|
48
|
+
docker push $IMAGE_ID:$VERSION
|
49
|
+
docker tag $IMAGE_NAME $IMAGE_ID:latest
|
50
|
+
docker push $IMAGE_ID:latest
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
sr25519 (0.
|
4
|
+
sr25519 (0.6.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/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Sr25519
|
2
2
|
|
3
|
-
This is a ruby libraray for Sr25519.
|
3
|
+
This is a ruby libraray for Sr25519. Use to sign and verify message.
|
4
4
|
|
5
5
|
More info at: https://github.com/w3f/schnorrkel
|
6
6
|
|
@@ -22,15 +22,21 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
1.
|
25
|
+
#### 1. Require ed25519.rb in your Ruby program:
|
26
|
+
```ruby
|
27
|
+
require "sr25519"
|
28
|
+
```
|
29
|
+
|
30
|
+
#### 2. SR25519 Generate keypair
|
26
31
|
|
27
32
|
```ruby
|
28
33
|
# seed is priviate key, is a hex string.
|
29
|
-
|
34
|
+
# example: SR25519.keypair_from_seed("0xfac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e")
|
35
|
+
keypair = SR25519.keypair_from_seed(seed)
|
30
36
|
|
31
37
|
```
|
32
38
|
|
33
|
-
|
39
|
+
#### 3. SR25519 Generate public_key
|
34
40
|
|
35
41
|
```ruby
|
36
42
|
public_key = SR25519.get_public_key_from_seed(seed)
|
@@ -40,30 +46,49 @@ public_key_str = public_key.to_s
|
|
40
46
|
|
41
47
|
```
|
42
48
|
|
43
|
-
|
49
|
+
#### 4. Encode address
|
44
50
|
```ruby
|
45
51
|
address = Address.encode(public_key.to_s)
|
46
52
|
```
|
47
53
|
|
48
|
-
|
54
|
+
#### 5. Decode address
|
49
55
|
|
50
56
|
```ruby
|
51
57
|
address = Address.decode(address)
|
52
58
|
```
|
53
59
|
|
54
|
-
|
60
|
+
#### 6. SR25519 Sign message
|
55
61
|
|
56
62
|
```ruby
|
57
63
|
signature_result = SR25519.sign(message, keypair)
|
58
64
|
|
59
65
|
```
|
60
66
|
|
61
|
-
|
67
|
+
#### 7. SR25519 Verify message
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
verify_result = SR25519.verify(address, message, signature_result)
|
71
|
+
```
|
72
|
+
|
73
|
+
#### 8. ED25519 Generate keypair
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
keypair = ED25519.keypair_from_seed(seed)
|
77
|
+
```
|
78
|
+
|
79
|
+
#### 9. ED25519 Sign message
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
signature_result = ED25519.sign(message, keypair)
|
83
|
+
```
|
84
|
+
|
85
|
+
#### 10. ED25519 Verify message
|
62
86
|
|
63
87
|
```ruby
|
64
|
-
|
88
|
+
verify_result = ED25519.verify(address, message, signature_result)
|
65
89
|
```
|
66
90
|
|
91
|
+
|
67
92
|
## Running tests
|
68
93
|
1. Run all tests
|
69
94
|
|
@@ -74,13 +99,13 @@ rspec
|
|
74
99
|
|
75
100
|
## Docker
|
76
101
|
|
77
|
-
1.
|
102
|
+
1. Update to latest image
|
78
103
|
|
79
|
-
`docker pull
|
104
|
+
`docker pull uniart/sr25519:latest`
|
80
105
|
|
81
106
|
2. Run image:
|
82
107
|
|
83
|
-
`docker run -it
|
108
|
+
`docker run -it uniart/sr25519:latest bash`
|
84
109
|
|
85
110
|
This will enter the container with a linux shell opened.
|
86
111
|
|
data/lib/ed25519_lib.rb
ADDED
@@ -0,0 +1,38 @@
|
|
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
|
+
begin
|
18
|
+
verify_key.verify(signature, message)
|
19
|
+
rescue
|
20
|
+
return false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.keypair_from_seed(seed)
|
25
|
+
if seed.start_with?("0x")
|
26
|
+
seed = seed.sub(/0x/, "")
|
27
|
+
end
|
28
|
+
seed = "".tap { |binary| seed.scan(/../) { |hn| binary << hn.to_i(16).chr } }
|
29
|
+
signing_key = Ed25519::SigningKey.new(seed)
|
30
|
+
return signing_key
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.get_public_key_from_seed(seed)
|
34
|
+
signing_key = self.keypair_from_seed(seed)
|
35
|
+
return signing_key.verify_key.to_bytes.unpack1('H*')
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
data/lib/sr25519/version.rb
CHANGED
data/lib/sr25519.rb
CHANGED
data/lib/sr25519_lib.rb
CHANGED
@@ -6,8 +6,8 @@ module SR25519Lib
|
|
6
6
|
ffi_lib FFI::Library::LIBC
|
7
7
|
|
8
8
|
# The library is compile from https://github.com/Warchant/sr25519-crust
|
9
|
-
ffi_lib
|
10
|
-
ffi_lib
|
9
|
+
ffi_lib File.dirname(__FILE__) + '/libsr25519crust.so' if RUBY_PLATFORM =~ /linux/
|
10
|
+
ffi_lib File.dirname(__FILE__) + '/libsr25519crust.dylib' if RUBY_PLATFORM =~ /darwin/
|
11
11
|
|
12
12
|
attach_function :sr25519_keypair_from_seed, [:pointer, :pointer], :void
|
13
13
|
attach_function :sr25519_verify, [:pointer, :pointer, :uint, :pointer], :bool
|
@@ -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.
|
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
|
@@ -94,10 +94,13 @@ class SR25519
|
|
94
94
|
end
|
95
95
|
signature_result = [signature_result].pack("H*").unpack("C*")
|
96
96
|
sig[:String].to_ptr.write_array_of_uint8(signature_result)
|
97
|
-
verify = SR25519Lib.
|
97
|
+
verify = SR25519Lib.sr25519_verify(sig, msg, message.size, pk)
|
98
98
|
end
|
99
99
|
|
100
|
-
def self.
|
100
|
+
def self.keypair_from_seed(seed)
|
101
|
+
if seed.start_with?("0x")
|
102
|
+
seed = seed.sub(/0x/, "")
|
103
|
+
end
|
101
104
|
seed_array = [seed].pack("H*").unpack("C*")
|
102
105
|
seed = Seed.new
|
103
106
|
seed[:String].to_ptr.write_array_of_uint8(seed_array)
|
@@ -107,7 +110,7 @@ class SR25519
|
|
107
110
|
end
|
108
111
|
|
109
112
|
def self.get_public_key_from_seed(seed)
|
110
|
-
key_pair = self.
|
113
|
+
key_pair = self.keypair_from_seed(seed)
|
111
114
|
key_pair.public_key
|
112
115
|
end
|
113
116
|
|
data/sr25519.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sr25519
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- xuxh
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -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
|
@@ -87,6 +107,7 @@ executables: []
|
|
87
107
|
extensions: []
|
88
108
|
extra_rdoc_files: []
|
89
109
|
files:
|
110
|
+
- ".github/workflows/ruby.yml"
|
90
111
|
- ".gitignore"
|
91
112
|
- ".rspec"
|
92
113
|
- CODE_OF_CONDUCT.md
|
@@ -99,6 +120,7 @@ files:
|
|
99
120
|
- bin/console
|
100
121
|
- bin/setup
|
101
122
|
- lib/address.rb
|
123
|
+
- lib/ed25519_lib.rb
|
102
124
|
- lib/libsr25519crust.dylib
|
103
125
|
- lib/libsr25519crust.so
|
104
126
|
- lib/sr25519.rb
|