linzer 0.6.1 → 0.6.3

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: d2ec6a2a846f2bb066bdd658c2e50a869ceff52f65f3e5f8670cc5509af6069c
4
- data.tar.gz: 5401df5ea61c39290b61a21cf19c4eaddc537abe908067a47688c1f209c982e3
3
+ metadata.gz: f2a241d8621efa2c0ed148bfcf9f4973296f1dd342d1ddddea7840a55f6f6385
4
+ data.tar.gz: 74b4b845ec51e87b1a616be0d2757a6e123ffb9d1ec2b5c4234edc7644522662
5
5
  SHA512:
6
- metadata.gz: 53c504c5c0f886d3e73332d7d8bf7072137519a218ca6a005824f8ad073fb589dd91f2e7980aa02b232c17dd80a87923141e57b094087fb4f412dddbf5588a9f
7
- data.tar.gz: 0a99fc9611e6b26ae820fecfe09e10a6c610be20bdf8f9c3fd7c6fab031f82f6f7fa109359470a2a65b7d7cd9817c21259e59fe6f99e50a1c6326d965b0df944
6
+ metadata.gz: '067900eddd392626dcc1a0bdec5f8c7b0b00fd67dbe938376231f4c9c1262245e6ed2dcb1b4ea8af37a10c50cd47747b553b315869104342c5b94e2b45810132'
7
+ data.tar.gz: 7f1293c1feff0c225bda479422d77dc3ac1489c6c8d2233cfdd6ef3bc7a689345f091987ce9f3600a34f74ffd9688eeebdbd048a5e54ec992df1fbc1a1e65355
data/CHANGELOG.md CHANGED
@@ -1,12 +1,28 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.6.3] - 2025-03-29
4
+
5
+ - Parse signature structured fields values as ASCII string.
6
+
7
+ ## [0.6.2] - 2024-12-10
8
+
9
+ - Remove dependency on ed25519 gem. Pull request
10
+ [#5](https://github.com/nomadium/linzer/pull/5) by
11
+ [oneiros](https://github.com/oneiros).
12
+
13
+ - Run unit tests against Ruby 3.4.
14
+
3
15
  ## [0.6.1] - 2024-12-02
4
16
 
5
17
  - Add more validation checks on HTTP field component identifiers and parameters.
6
18
 
7
- - Relax rack version requirements.
19
+ - Relax rack version requirements. Pull request
20
+ [#4](https://github.com/nomadium/linzer/pull/4) by
21
+ [oneiros](https://github.com/oneiros).
8
22
 
9
- - Update uri dependency to the latest version.
23
+ - Update uri dependency to the latest version. Pull request
24
+ [#3](https://github.com/nomadium/linzer/pull/3) by
25
+ [oneiros](https://github.com/oneiros).
10
26
 
11
27
  ## [0.6.0] - 2024-04-06
12
28
 
data/README.md CHANGED
@@ -97,13 +97,10 @@ response = http.post("/some_uri", "data", headers.merge(signature.to_h))
97
97
  ### To verify a valid signature:
98
98
 
99
99
  ```ruby
100
- test_ed25519_key_pub = Base64.strict_encode64(key.material.verify_key.to_bytes)
101
- # => "EUra7KsJ8B/lSZJVhDaopMycmZ6T7KtJqKVNJTHKIw0="
100
+ test_ed25519_key_pub = key.material.public_to_pem
101
+ # => "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAK1ZrC4JqC356pRsUiLVJdFZ3dAjo909VfWs1li33MCQ=\n-----END PUBLIC KEY-----\n"
102
102
 
103
- raw_pubkey = Base64.strict_decode64(test_ed25519_key_pub)
104
- # => "\xB1rM\xFFR\x1F\xDDw\x00\x89\..."
105
-
106
- pubkey = Linzer.new_ed25519_public_key(raw_pubkey, "some-key-ed25519")
103
+ pubkey = Linzer.new_ed25519_public_key(test_ed25519_key_pub, "some-key-ed25519")
107
104
  # => #<Linzer::Ed25519::Key:0x00000fe19b9384b0
108
105
 
109
106
  # if you have to, there is a helper method to build a request object on the server side
@@ -1,19 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "ed25519"
4
-
5
3
  module Linzer
6
4
  module Ed25519
7
5
  class Key < Linzer::Key
8
6
  def sign(data)
9
- material.sign(data)
7
+ material.sign(nil, data)
10
8
  end
11
9
 
12
10
  def verify(signature, data)
13
- verify_key = material.is_a?(::Ed25519::SigningKey) ? material.verify_key : material
14
- verify_key.verify(signature, data)
15
- rescue ::Ed25519::VerifyError
16
- false
11
+ material.verify(nil, signature, data)
17
12
  end
18
13
  end
19
14
  end
@@ -33,18 +33,17 @@ module Linzer
33
33
  end
34
34
 
35
35
  def generate_ed25519_key(key_id = nil)
36
- material = ::Ed25519::SigningKey.generate
36
+ material = OpenSSL::PKey.generate_key("ed25519")
37
37
  Linzer::Ed25519::Key.new(material, id: key_id)
38
38
  end
39
39
 
40
40
  def new_ed25519_key(material, key_id = nil)
41
- key = ::Ed25519::SigningKey.new(material)
41
+ key = OpenSSL::PKey.read(material)
42
42
  Linzer::Ed25519::Key.new(key, id: key_id)
43
43
  end
44
44
 
45
45
  def new_ed25519_public_key(material, key_id = nil)
46
- key = ::Ed25519::VerifyKey.new(material)
47
- Linzer::Ed25519::Key.new(key, id: key_id)
46
+ new_ed25519_key(material, key_id)
48
47
  end
49
48
 
50
49
  # https://www.rfc-editor.org/rfc/rfc4492.html#appendix-A
@@ -31,11 +31,11 @@ module Linzer
31
31
  headers.transform_keys!(&:downcase)
32
32
  validate headers
33
33
 
34
- input = parse_field(headers, "signature-input")
34
+ input = parse_structured_field(headers, "signature-input")
35
35
  reject_multiple_signatures if input.size > 1 && options[:label].nil?
36
36
  label = options[:label] || input.keys.first
37
37
 
38
- signature = parse_field(headers, "signature")
38
+ signature = parse_structured_field(headers, "signature")
39
39
  fail_with_signature_not_found label unless signature.key?(label)
40
40
 
41
41
  raw_signature =
@@ -44,8 +44,7 @@ module Linzer
44
44
 
45
45
  fail_due_invalid_components unless input[label].value.respond_to?(:each)
46
46
 
47
- ascii = Encoding::US_ASCII
48
- components = input[label].value.map { |c| c.value.encode(ascii) }
47
+ components = input[label].value.map(&:value)
49
48
  parameters = input[label].parameters
50
49
 
51
50
  new(components, raw_signature, label, parameters)
@@ -75,8 +74,11 @@ module Linzer
75
74
  raise Error.new "Unexpected value for covered components."
76
75
  end
77
76
 
78
- def parse_field(hsh, field_name)
79
- Message.parse_structured_dictionary(hsh[field_name], field_name)
77
+ def parse_structured_field(hsh, field_name)
78
+ # Serialized Structured Field values for HTTP are ASCII strings.
79
+ # See: RFC 8941 (https://datatracker.ietf.org/doc/html/rfc8941)
80
+ value = hsh[field_name].encode(Encoding::US_ASCII)
81
+ Message.parse_structured_dictionary(value, field_name)
80
82
  end
81
83
  end
82
84
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Linzer
4
- VERSION = "0.6.1"
4
+ VERSION = "0.6.3"
5
5
  end
data/lib/linzer.rb CHANGED
@@ -4,6 +4,7 @@ require "starry"
4
4
  require "openssl"
5
5
  require "rack"
6
6
  require "uri"
7
+ require "stringio"
7
8
 
8
9
  require_relative "linzer/version"
9
10
  require_relative "linzer/common"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linzer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Landaeta
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-12-02 00:00:00.000000000 Z
11
+ date: 2025-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: openssl
@@ -30,26 +30,6 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 3.0.0
33
- - !ruby/object:Gem::Dependency
34
- name: ed25519
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '1.3'
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 1.3.0
43
- type: :runtime
44
- prerelease: false
45
- version_requirements: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '1.3'
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 1.3.0
53
33
  - !ruby/object:Gem::Dependency
54
34
  name: starry
55
35
  requirement: !ruby/object:Gem::Requirement
@@ -104,6 +84,26 @@ dependencies:
104
84
  - - ">="
105
85
  - !ruby/object:Gem::Version
106
86
  version: 1.0.2
87
+ - !ruby/object:Gem::Dependency
88
+ name: stringio
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '3.1'
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 3.1.2
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.1'
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: 3.1.2
107
107
  description:
108
108
  email:
109
109
  - miguel@miguel.cc