eth 0.4.10 → 0.4.11

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
- SHA256:
3
- metadata.gz: c2145cbe87b192081aa7f1ef32e8e92669c089e61e6d9d7221a1f18885c7bbcd
4
- data.tar.gz: c20ed4ac5450ad6cfae066f58e7bb7a193e6c6a4a29ce9a1d2be71f5d2cbaf7b
2
+ SHA1:
3
+ metadata.gz: 6436ecdbcecdf75d62a47c1aadcca3b8056774a3
4
+ data.tar.gz: c60fefe544a070c75cd0a60c80ed6d7df7ddca2f
5
5
  SHA512:
6
- metadata.gz: 492fcfbda0bfebacc44d0b684350d3e73e68a8449461cc8fcd97364b0e4be06909c2eff0bc86da7f127aceb8b0109f4ad86edf716b65e0e00b701d7f29f17c4e
7
- data.tar.gz: 2450ae894c0324ecefd737105cb47275406a816ba998423bd4562539c1c1278062f564b97b725dc050e1e2c192260f19daad2f4e6a67d5aa8505a68332dd51b2
6
+ metadata.gz: 3757924cd14cbe89260b08d88c9aa157a914b8ed7afa6086d8c08335dd77a006ec74f37ba4ab7febc835644f75112a68b5bbf3c91224411753d78211f81ab5e8
7
+ data.tar.gz: 286f9d8b76042b74f1930855cafd34648d3308156eaab17e4a2a8c3ebe3f12692444284c9b797cc555dbaf61fe96b46a515ec0b882a925d524f67f6193736f4a
@@ -1,7 +1,10 @@
1
1
  sudo: false
2
+ dist: xenial
2
3
  language: ruby
3
4
  rvm:
4
5
  - 2.2.0
5
6
  - 2.3.0
6
7
  - 2.4.0
8
+ - 2.5.3
9
+ - 2.6.0
7
10
  before_install: gem install bundler -v 1.12.3
@@ -6,8 +6,17 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
7
  ### Unreleased
8
8
 
9
+ ## [0.4.11]
10
+
11
+ ### Added
12
+ - Support for recovering signatures with a V value below 27 (like from Ledger hardware wallets)
13
+
9
14
  ## [0.4.10]
10
15
 
16
+ ### Changed
17
+ - Use updated sha3 dependency
18
+ - Improved OpenSSL support
19
+
11
20
  ### Changed
12
21
  - Changed Eth::Configuration.default_chain_id back to .chain_id for dependent libraries.
13
22
 
@@ -19,13 +19,12 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency 'digest-sha3', '~> 1.1'
22
+ spec.add_dependency 'digest-sha3-patched', '~> 1.1'
23
23
  spec.add_dependency 'ffi', '~> 1.0'
24
24
  spec.add_dependency 'money-tree', '~> 0.10.0'
25
25
  spec.add_dependency 'rlp', '~> 0.7.3'
26
26
  spec.add_dependency 'scrypt', '~> 3.0.6'
27
27
 
28
- spec.add_development_dependency 'bundler', '~> 1.12'
29
28
  spec.add_development_dependency 'pry', '~> 0.1'
30
29
  spec.add_development_dependency 'rake', '~> 10.0'
31
30
  spec.add_development_dependency 'rspec', '~> 3.0'
@@ -8,18 +8,69 @@ module Eth
8
8
  if FFI::Platform.windows?
9
9
  ffi_lib 'libeay32', 'ssleay32'
10
10
  else
11
- ffi_lib ['libssl.so.1.0.0', 'libssl.so.10', 'ssl']
11
+ ffi_lib [
12
+ 'libssl.so.1.1.0', 'libssl.so.1.1',
13
+ 'libssl.so.1.0.0', 'libssl.so.10',
14
+ 'ssl'
15
+ ]
12
16
  end
13
17
 
14
18
  NID_secp256k1 = 714
15
19
  POINT_CONVERSION_COMPRESSED = 2
16
20
  POINT_CONVERSION_UNCOMPRESSED = 4
17
21
 
18
- attach_function :SSL_library_init, [], :int
19
- attach_function :ERR_load_crypto_strings, [], :void
20
- attach_function :SSL_load_error_strings, [], :void
21
- attach_function :RAND_poll, [], :int
22
+ # OpenSSL 1.1.0 version as a numerical version value as defined in:
23
+ # https://www.openssl.org/docs/man1.1.0/man3/OpenSSL_version.html
24
+ VERSION_1_1_0_NUM = 0x10100000
25
+
26
+ # OpenSSL 1.1.0 engine constants, taken from:
27
+ # https://github.com/openssl/openssl/blob/2be8c56a39b0ec2ec5af6ceaf729df154d784a43/include/openssl/crypto.h
28
+ OPENSSL_INIT_ENGINE_RDRAND = 0x00000200
29
+ OPENSSL_INIT_ENGINE_DYNAMIC = 0x00000400
30
+ OPENSSL_INIT_ENGINE_CRYPTODEV = 0x00001000
31
+ OPENSSL_INIT_ENGINE_CAPI = 0x00002000
32
+ OPENSSL_INIT_ENGINE_PADLOCK = 0x00004000
33
+ OPENSSL_INIT_ENGINE_ALL_BUILTIN = (
34
+ OPENSSL_INIT_ENGINE_RDRAND |
35
+ OPENSSL_INIT_ENGINE_DYNAMIC |
36
+ OPENSSL_INIT_ENGINE_CRYPTODEV |
37
+ OPENSSL_INIT_ENGINE_CAPI |
38
+ OPENSSL_INIT_ENGINE_PADLOCK
39
+ )
40
+
41
+ # OpenSSL 1.1.0 load strings constant, taken from:
42
+ # https://github.com/openssl/openssl/blob/c162c126be342b8cd97996346598ecf7db56130f/include/openssl/ssl.h
43
+ OPENSSL_INIT_LOAD_SSL_STRINGS = 0x00200000
44
+
45
+ # This is the very first function we need to use to determine what version
46
+ # of OpenSSL we are interacting with.
47
+ begin
48
+ attach_function :OpenSSL_version_num, [], :ulong
49
+ rescue FFI::NotFoundError
50
+ attach_function :SSLeay, [], :long
51
+ end
52
+
53
+ # Returns the version of SSL present.
54
+ #
55
+ # @return [Integer] version number as an integer.
56
+ def self.version
57
+ if self.respond_to?(:OpenSSL_version_num)
58
+ OpenSSL_version_num()
59
+ else
60
+ SSLeay()
61
+ end
62
+ end
63
+
64
+ if version >= VERSION_1_1_0_NUM
65
+ # Initialization procedure for the library was changed in OpenSSL 1.1.0
66
+ attach_function :OPENSSL_init_ssl, [:uint64, :pointer], :int
67
+ else
68
+ attach_function :SSL_library_init, [], :int
69
+ attach_function :ERR_load_crypto_strings, [], :void
70
+ attach_function :SSL_load_error_strings, [], :void
71
+ end
22
72
 
73
+ attach_function :RAND_poll, [], :int
23
74
  attach_function :BN_CTX_free, [:pointer], :int
24
75
  attach_function :BN_CTX_new, [], :pointer
25
76
  attach_function :BN_add, [:pointer, :pointer, :pointer], :int
@@ -157,7 +208,15 @@ module Eth
157
208
  return false if signature.bytesize != 65
158
209
 
159
210
  version = signature.unpack('C')[0]
211
+
212
+ # Version of signature should be 27 or 28, but 0 and 1 are also possible versions
213
+ # which can show up in Ledger hardwallet signings
214
+ if version < 27
215
+ version += 27
216
+ end
217
+
160
218
  v_base = Eth.replayable_v?(version) ? Eth.replayable_chain_id : Eth.v_base
219
+
161
220
  return false if version < v_base
162
221
 
163
222
  recover_public_key_from_signature(hash, signature, (version - v_base), false)
@@ -165,9 +224,17 @@ module Eth
165
224
 
166
225
  def init_ffi_ssl
167
226
  return if @ssl_loaded
168
- SSL_library_init()
169
- ERR_load_crypto_strings()
170
- SSL_load_error_strings()
227
+ if version >= VERSION_1_1_0_NUM
228
+ OPENSSL_init_ssl(
229
+ OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_ENGINE_ALL_BUILTIN,
230
+ nil
231
+ )
232
+ else
233
+ SSL_library_init()
234
+ ERR_load_crypto_strings()
235
+ SSL_load_error_strings()
236
+ end
237
+
171
238
  RAND_poll()
172
239
  @ssl_loaded = true
173
240
  end
@@ -1,3 +1,3 @@
1
1
  module Eth
2
- VERSION = "0.4.10"
2
+ VERSION = "0.4.11"
3
3
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.10
4
+ version: 0.4.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Ellis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-10 00:00:00.000000000 Z
11
+ date: 2020-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: digest-sha3
14
+ name: digest-sha3-patched
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 3.0.6
83
- - !ruby/object:Gem::Dependency
84
- name: bundler
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '1.12'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '1.12'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: pry
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -187,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
173
  version: '0'
188
174
  requirements: []
189
175
  rubyforge_project:
190
- rubygems_version: 2.7.6
176
+ rubygems_version: 2.6.8
191
177
  signing_key:
192
178
  specification_version: 4
193
179
  summary: Simple API to sign Ethereum transactions.