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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93fc6ca0e55ea4d15ae49a88cb2038384901fec0a71a617a447495f63e178729
4
- data.tar.gz: affe4dfe032464e979efe50bac31ee4f09e670b979ae2e11ed12d6ea37043e38
3
+ metadata.gz: 5948eb9d27ac12e520fca97d30f2e94c9a344fc4f8f957e716f34effd37c0a4c
4
+ data.tar.gz: e3bcbabc050fffffdb7e1d337766b5dcc90c58ca5784cf5eb66c2a81aba56da9
5
5
  SHA512:
6
- metadata.gz: 2aab04310f8565ac93f2b805df811fc9410f54605f7d461843c7763321465c169544b88eb7c49f47ddbacc681025a1848b1c0fe4a4a08704be16599407d39ffc
7
- data.tar.gz: 6a9382481ace7d5daeaa59f5cfd3acf131f9745a5bcbeb2d508b38f8f4b2c2edb89fa539356a9d0efdc57e9542d6268f04bd9e100e16cde22d53a4cfa9cfcb3f
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.1.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
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2021 xuxh
3
+ Copyright (c) 2021 UniArts Network
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
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. keypair
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
- keypaire = SR25519.sr25519_keypair_from_seed(seed)
34
+ # example: SR25519.keypair_from_seed("0xfac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e")
35
+ keypair = SR25519.keypair_from_seed(seed)
30
36
 
31
37
  ```
32
38
 
33
- 2. public_key
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
- 3. encode address
49
+ #### 4. Encode address
44
50
  ```ruby
45
51
  address = Address.encode(public_key.to_s)
46
52
  ```
47
53
 
48
- 4. decode address
54
+ #### 5. Decode address
49
55
 
50
56
  ```ruby
51
57
  address = Address.decode(address)
52
58
  ```
53
59
 
54
- 5. sign
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
- 6. verify
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
- SR25519.verify(address, message, signature_result)
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. update to latest image
102
+ 1. Update to latest image
78
103
 
79
- `docker pull uni-arts-chain/sr25519:latest`
104
+ `docker pull uniart/sr25519:latest`
80
105
 
81
106
  2. Run image:
82
107
 
83
- `docker run -it uni-arts-chain/sr25519:latest`
108
+ `docker run -it uniart/sr25519:latest bash`
84
109
 
85
110
  This will enter the container with a linux shell opened.
86
111
 
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sr25519
4
- VERSION = "0.1.0"
4
+ VERSION = "0.6.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
@@ -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 [File.expand_path('lib/libsr25519crust.so')] if RUBY_PLATFORM =~ /linux/
10
- ffi_lib [File.expand_path('lib/libsr25519crust.dylib')] if RUBY_PLATFORM =~ /darwin/
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.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
@@ -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.verify(sig, msg, message.size, pk)
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
+ 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.sr25519_keypair_from_seed(seed)
113
+ key_pair = self.keypair_from_seed(seed)
111
114
  key_pair.public_key
112
115
  end
113
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,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sr25519
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.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-09-28 00:00:00.000000000 Z
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