ech_config 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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