sr25519 0.1.0 → 0.6.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: 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