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.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +34 -0
  3. data/.gitignore +16 -0
  4. data/.rubocop.yml +34 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +17 -0
  7. data/Gemfile.lock +73 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +22 -0
  10. data/Rakefile +16 -0
  11. data/ech_config.gemspec +24 -0
  12. data/example/README.md +9 -0
  13. data/example/well_known_url_client.rb +29 -0
  14. data/lib/ech_config/ech_config_contents/extensions.rb +24 -0
  15. data/lib/ech_config/ech_config_contents/hpke_key_config/hpke_kem_id.rb +24 -0
  16. data/lib/ech_config/ech_config_contents/hpke_key_config/hpke_public_key.rb +22 -0
  17. data/lib/ech_config/ech_config_contents/hpke_key_config/hpke_symmetric_cipher_suite/hpke_aead_id.rb +24 -0
  18. data/lib/ech_config/ech_config_contents/hpke_key_config/hpke_symmetric_cipher_suite/hpke_kdf_id.rb +24 -0
  19. data/lib/ech_config/ech_config_contents/hpke_key_config/hpke_symmetric_cipher_suite.rb +41 -0
  20. data/lib/ech_config/ech_config_contents/hpke_key_config.rb +82 -0
  21. data/lib/ech_config/ech_config_contents.rb +78 -0
  22. data/lib/ech_config/error.rb +11 -0
  23. data/lib/ech_config/version.rb +6 -0
  24. data/lib/ech_config.rb +62 -0
  25. data/sorbet/config +3 -0
  26. data/sorbet/rbi/gems/ast.rbi +49 -0
  27. data/sorbet/rbi/gems/byebug.rbi +1041 -0
  28. data/sorbet/rbi/gems/ech_config.rbi +22 -0
  29. data/sorbet/rbi/gems/parallel.rbi +86 -0
  30. data/sorbet/rbi/gems/parser.rbi +1477 -0
  31. data/sorbet/rbi/gems/rainbow.rbi +122 -0
  32. data/sorbet/rbi/gems/rake.rbi +646 -0
  33. data/sorbet/rbi/gems/regexp_parser.rbi +984 -0
  34. data/sorbet/rbi/gems/rexml.rbi +599 -0
  35. data/sorbet/rbi/gems/rspec-core.rbi +1947 -0
  36. data/sorbet/rbi/gems/rspec-expectations.rbi +1178 -0
  37. data/sorbet/rbi/gems/rspec-mocks.rbi +1096 -0
  38. data/sorbet/rbi/gems/rspec-support.rbi +282 -0
  39. data/sorbet/rbi/gems/rspec.rbi +15 -0
  40. data/sorbet/rbi/gems/rubocop-ast.rbi +1399 -0
  41. data/sorbet/rbi/gems/rubocop-sorbet.rbi +218 -0
  42. data/sorbet/rbi/gems/rubocop.rbi +9351 -0
  43. data/sorbet/rbi/gems/ruby-progressbar.rbi +304 -0
  44. data/sorbet/rbi/gems/unicode-display_width.rbi +23 -0
  45. data/sorbet/rbi/gems/webrick.rbi +662 -0
  46. data/sorbet/rbi/hidden-definitions/errors.txt +22890 -0
  47. data/sorbet/rbi/hidden-definitions/hidden.rbi +12118 -0
  48. data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +276 -0
  49. data/sorbet/rbi/sorbet-typed/lib/rake/all/rake.rbi +645 -0
  50. data/sorbet/rbi/sorbet-typed/lib/rspec-core/all/rspec-core.rbi +24 -0
  51. data/sorbet/rbi/sorbet-typed/lib/rubocop/>=1.8/rubocop.rbi +12 -0
  52. data/sorbet/rbi/todo.rbi +6 -0
  53. data/spec/hpke_key_config_spec.rb +32 -0
  54. data/spec/spec_helper.rb +6 -0
  55. 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,3 @@
1
+ --dir
2
+ .
3
+ --ignore=/vendor/bundle
@@ -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