linzer 0.5.1 → 0.5.2

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: 1955734eb1a8115753448b579b0cbe84f7d1ad247677ae20dd49495841b4aef3
4
- data.tar.gz: abf9b2fbc465f10210c77f3d29e10c7e15af26a5badba90516f0b96050e3a548
3
+ metadata.gz: 0befd6a2ae7ba008f6b2a343a24845be1941b6645615d8a029e698c083cd4481
4
+ data.tar.gz: ebd92e2c6b0991067753079c8b1bac87a6dfe644caa6380dedc63f88e74877e4
5
5
  SHA512:
6
- metadata.gz: 5263ec042dd91dc5bc434f4bbccc8f17d0ec52c751b7b9adec613c87efa180175cc7e5b4f47da007e6e61298a2b153f9ca05250ba3d55786c2d5609725233903
7
- data.tar.gz: 45ad9720b910f441bf36f9766ec10eaaab64fb7a36f420b947a5170d9cae0d18d540f380996eba2265b6faa0df0b9537fb1c8b2b2e58c94bab45abcaccb19112
6
+ metadata.gz: c7c5b9d9568402b2b4894ef8180c321281b420a156e7386abf12f069780a6ba7e2bc79d58bd0b7c97372058f974a25a1a138e9306434c28025e39f3267562b81
7
+ data.tar.gz: 7b997d06b2764171d5375baf1b889f4d98231961b86f89bea321155766932ffcd6913462df080f7edf09731d6d78332b474cda381ea4d0d8bdafba3dee76e6b3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.5.2] - 2024-04-02
4
+
5
+ - Make all unit tests pass on Ruby 3.0:
6
+ * Set minimum required version on openssl and uri gems.
7
+ - Small refactor on ECDSA module.
8
+
3
9
  ## [0.5.1] - 2024-04-01
4
10
 
5
11
  - Add support for additional derived components:
data/lib/linzer/ecdsa.rb CHANGED
@@ -18,23 +18,25 @@ module Linzer
18
18
 
19
19
  private
20
20
 
21
+ DIGEST_PARAMS = {
22
+ "SHA256" => {hex_format: "%.64x", hex_length: 64},
23
+ "SHA384" => {hex_format: "%.96x", hex_length: 96}
24
+ }
25
+ private_constant :DIGEST_PARAMS
26
+
21
27
  def der_signature(sig)
22
28
  digest = @params[:digest]
23
29
  msg = "Cannot verify invalid signature."
30
+ raise Linzer::Error.new(msg) unless DIGEST_PARAMS.key?(digest)
31
+ digest_params = DIGEST_PARAMS[digest]
32
+
33
+ l = digest_params[:hex_length]
34
+ raise Linzer::Error.new(msg) if sig.length != l
35
+ h = l / 2
36
+ fmt = "H#{l}"
24
37
 
25
- case digest
26
- when "SHA256"
27
- raise Linzer::Error.new(msg) if sig.length != 64
28
- r_bn = OpenSSL::BN.new(sig[0..31].unpack1("H64").to_i(16))
29
- s_bn = OpenSSL::BN.new(sig[32..63].unpack1("H64").to_i(16))
30
- when "SHA384"
31
- raise Linzer::Error.new(msg) if sig.length != 96
32
- r_bn = OpenSSL::BN.new(sig[0..47].unpack1("H96").to_i(16))
33
- s_bn = OpenSSL::BN.new(sig[48..95].unpack1("H96").to_i(16))
34
- else
35
- msg = "Cannot verify signature, unsupported digest algorithm: '%s'" % digest
36
- raise Linzer::Error.new(msg)
37
- end
38
+ r_bn = OpenSSL::BN.new(sig[0..(h - 1)].unpack1(fmt).to_i(16))
39
+ s_bn = OpenSSL::BN.new(sig[h..(l - 1)].unpack1(fmt).to_i(16))
38
40
 
39
41
  r = OpenSSL::ASN1::Integer(r_bn)
40
42
  s = OpenSSL::ASN1::Integer(s_bn)
@@ -46,17 +48,15 @@ module Linzer
46
48
  def decode_der_signature(der_sig)
47
49
  digest = @params[:digest]
48
50
  msg = "Unsupported digest algorithm: '%s'" % digest
51
+ raise Linzer::Error.new(msg) unless DIGEST_PARAMS.key?(digest)
52
+ digest_params = DIGEST_PARAMS[digest]
53
+ fmt = "H#{digest_params[:hex_length]}"
54
+
49
55
  OpenSSL::ASN1
50
56
  .decode(der_sig)
51
57
  .value
52
- .map do |n|
53
- case digest
54
- when "SHA256" then "%.64x" % n.value
55
- when "SHA384" then "%.96x" % n.value
56
- else raise Linzer::Error.new(msg)
57
- end
58
- end
59
- .map { |s| [s].pack("H#{s.length}") }
58
+ .map { |bn| digest_params[:hex_format] % bn.value }
59
+ .map { |hex| [hex].pack(fmt) }
60
60
  .reduce(:<<)
61
61
  .encode(Encoding::ASCII_8BIT)
62
62
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Linzer
4
- VERSION = "0.5.1"
4
+ VERSION = "0.5.2"
5
5
  end
data/lib/linzer.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require "starry"
4
4
  require "openssl"
5
5
  require "rack"
6
+ require "uri"
6
7
 
7
8
  require_relative "linzer/version"
8
9
  require_relative "linzer/common"
data/linzer.gemspec CHANGED
@@ -29,7 +29,9 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ["lib"]
31
31
 
32
+ spec.add_runtime_dependency "openssl", ">= 3.0.0"
32
33
  spec.add_runtime_dependency "ed25519", "~> 1.3", ">= 1.3.0"
33
34
  spec.add_runtime_dependency "starry", "~> 0.1"
34
35
  spec.add_runtime_dependency "rack", "~> 3.0"
36
+ spec.add_runtime_dependency "uri", ">= 0.12.0"
35
37
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linzer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Landaeta
@@ -10,6 +10,20 @@ bindir: exe
10
10
  cert_chain: []
11
11
  date: 2024-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: openssl
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: ed25519
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,6 +72,20 @@ dependencies:
58
72
  - - "~>"
59
73
  - !ruby/object:Gem::Version
60
74
  version: '3.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: uri
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 0.12.0
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 0.12.0
61
89
  description:
62
90
  email:
63
91
  - miguel@miguel.cc