ech_config 0.0.1
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 +7 -0
- data/.github/workflows/ci.yml +34 -0
- data/.gitignore +16 -0
- data/.rubocop.yml +34 -0
- data/.ruby-version +1 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +73 -0
- data/LICENSE.txt +21 -0
- data/README.md +22 -0
- data/Rakefile +16 -0
- data/ech_config.gemspec +24 -0
- data/example/README.md +9 -0
- data/example/well_known_url_client.rb +29 -0
- data/lib/ech_config/ech_config_contents/extensions.rb +24 -0
- data/lib/ech_config/ech_config_contents/hpke_key_config/hpke_kem_id.rb +24 -0
- data/lib/ech_config/ech_config_contents/hpke_key_config/hpke_public_key.rb +22 -0
- data/lib/ech_config/ech_config_contents/hpke_key_config/hpke_symmetric_cipher_suite/hpke_aead_id.rb +24 -0
- data/lib/ech_config/ech_config_contents/hpke_key_config/hpke_symmetric_cipher_suite/hpke_kdf_id.rb +24 -0
- data/lib/ech_config/ech_config_contents/hpke_key_config/hpke_symmetric_cipher_suite.rb +41 -0
- data/lib/ech_config/ech_config_contents/hpke_key_config.rb +82 -0
- data/lib/ech_config/ech_config_contents.rb +78 -0
- data/lib/ech_config/error.rb +11 -0
- data/lib/ech_config/version.rb +6 -0
- data/lib/ech_config.rb +62 -0
- data/sorbet/config +3 -0
- data/sorbet/rbi/gems/ast.rbi +49 -0
- data/sorbet/rbi/gems/byebug.rbi +1041 -0
- data/sorbet/rbi/gems/ech_config.rbi +22 -0
- data/sorbet/rbi/gems/parallel.rbi +86 -0
- data/sorbet/rbi/gems/parser.rbi +1477 -0
- data/sorbet/rbi/gems/rainbow.rbi +122 -0
- data/sorbet/rbi/gems/rake.rbi +646 -0
- data/sorbet/rbi/gems/regexp_parser.rbi +984 -0
- data/sorbet/rbi/gems/rexml.rbi +599 -0
- data/sorbet/rbi/gems/rspec-core.rbi +1947 -0
- data/sorbet/rbi/gems/rspec-expectations.rbi +1178 -0
- data/sorbet/rbi/gems/rspec-mocks.rbi +1096 -0
- data/sorbet/rbi/gems/rspec-support.rbi +282 -0
- data/sorbet/rbi/gems/rspec.rbi +15 -0
- data/sorbet/rbi/gems/rubocop-ast.rbi +1399 -0
- data/sorbet/rbi/gems/rubocop-sorbet.rbi +218 -0
- data/sorbet/rbi/gems/rubocop.rbi +9351 -0
- data/sorbet/rbi/gems/ruby-progressbar.rbi +304 -0
- data/sorbet/rbi/gems/unicode-display_width.rbi +23 -0
- data/sorbet/rbi/gems/webrick.rbi +662 -0
- data/sorbet/rbi/hidden-definitions/errors.txt +22890 -0
- data/sorbet/rbi/hidden-definitions/hidden.rbi +12118 -0
- data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +276 -0
- data/sorbet/rbi/sorbet-typed/lib/rake/all/rake.rbi +645 -0
- data/sorbet/rbi/sorbet-typed/lib/rspec-core/all/rspec-core.rbi +24 -0
- data/sorbet/rbi/sorbet-typed/lib/rubocop/>=1.8/rubocop.rbi +12 -0
- data/sorbet/rbi/todo.rbi +6 -0
- data/spec/hpke_key_config_spec.rb +32 -0
- data/spec/spec_helper.rb +6 -0
- metadata +126 -0
data/lib/ech_config.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
# typed: true
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require 'sorbet-runtime'
|
6
|
+
|
7
|
+
class ECHConfig
|
8
|
+
# define class
|
9
|
+
end
|
10
|
+
|
11
|
+
require_relative 'ech_config/error'
|
12
|
+
require_relative 'ech_config/ech_config_contents'
|
13
|
+
require_relative 'ech_config/version'
|
14
|
+
|
15
|
+
class ECHConfig
|
16
|
+
extend T::Sig
|
17
|
+
attr_reader :version, :echconfig_contents
|
18
|
+
|
19
|
+
private_class_method :new
|
20
|
+
|
21
|
+
@version = T.let(nil, T.nilable(String))
|
22
|
+
@echconfig_contents = T.let(nil, T.nilable(ECHConfigContents))
|
23
|
+
|
24
|
+
def initialize(version, echconfig_contents)
|
25
|
+
v = version.unpack1('n')
|
26
|
+
# https://author-tools.ietf.org/iddiff?url2=draft-ietf-tls-esni-11.txt#context-3
|
27
|
+
raise ::ECHConfig::UnsupportedVersion unless v > "\xfe\x0a".unpack1('n') && v <= "\xfe\x0d".unpack1('n')
|
28
|
+
|
29
|
+
@version = version
|
30
|
+
@echconfig_contents = echconfig_contents
|
31
|
+
end
|
32
|
+
|
33
|
+
sig { returns(String) }
|
34
|
+
def encode
|
35
|
+
@version + @echconfig_contents.encode.then { |s| [s.length].pack('n') + s }
|
36
|
+
end
|
37
|
+
|
38
|
+
sig { params(octet: String).returns(T::Array[T.attached_class]) }
|
39
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
40
|
+
def self.decode_vectors(octet)
|
41
|
+
i = 0
|
42
|
+
echconfigs = []
|
43
|
+
while i < octet.length
|
44
|
+
raise ::ECHConfig::DecodeError if i + 4 > octet.length
|
45
|
+
|
46
|
+
version = octet.slice(i, 2)
|
47
|
+
raise ::ECHConfig::DecodeError if version.nil?
|
48
|
+
|
49
|
+
length = octet.slice(i + 2, 2)&.unpack1('n')
|
50
|
+
i += 4
|
51
|
+
raise ::ECHConfig::DecodeError if i + length > octet.length
|
52
|
+
|
53
|
+
echconfig_contents = ECHConfigContents.decode(octet.slice(i, length) || '')
|
54
|
+
i += length
|
55
|
+
echconfigs << new(version, echconfig_contents)
|
56
|
+
end
|
57
|
+
raise ::ECHConfig::DecodeError if i != octet.length
|
58
|
+
|
59
|
+
echconfigs
|
60
|
+
end
|
61
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
62
|
+
end
|
data/sorbet/config
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# This file is autogenerated. Do not edit it by hand. Regenerate it with:
|
2
|
+
# srb rbi gems
|
3
|
+
|
4
|
+
# typed: strict
|
5
|
+
#
|
6
|
+
# If you would like to make changes to this file, great! Please create the gem's shim here:
|
7
|
+
#
|
8
|
+
# https://github.com/sorbet/sorbet-typed/new/master?filename=lib/ast/all/ast.rbi
|
9
|
+
#
|
10
|
+
# ast-2.4.2
|
11
|
+
|
12
|
+
module AST
|
13
|
+
end
|
14
|
+
class AST::Node
|
15
|
+
def +(array); end
|
16
|
+
def <<(element); end
|
17
|
+
def ==(other); end
|
18
|
+
def append(element); end
|
19
|
+
def assign_properties(properties); end
|
20
|
+
def children; end
|
21
|
+
def clone; end
|
22
|
+
def concat(array); end
|
23
|
+
def deconstruct; end
|
24
|
+
def dup; end
|
25
|
+
def eql?(other); end
|
26
|
+
def fancy_type; end
|
27
|
+
def hash; end
|
28
|
+
def initialize(type, children = nil, properties = nil); end
|
29
|
+
def inspect(indent = nil); end
|
30
|
+
def original_dup; end
|
31
|
+
def to_a; end
|
32
|
+
def to_ast; end
|
33
|
+
def to_s(indent = nil); end
|
34
|
+
def to_sexp(indent = nil); end
|
35
|
+
def to_sexp_array; end
|
36
|
+
def type; end
|
37
|
+
def updated(type = nil, children = nil, properties = nil); end
|
38
|
+
end
|
39
|
+
class AST::Processor
|
40
|
+
include AST::Processor::Mixin
|
41
|
+
end
|
42
|
+
module AST::Processor::Mixin
|
43
|
+
def handler_missing(node); end
|
44
|
+
def process(node); end
|
45
|
+
def process_all(nodes); end
|
46
|
+
end
|
47
|
+
module AST::Sexp
|
48
|
+
def s(type, *children); end
|
49
|
+
end
|