class SvcbRrPatch::SvcParams::Ech::ECHConfigContents::HpkeKeyConfig
Attributes
cipher_suites[R]
config_id[R]
kem_id[R]
public_key[R]
Public Class Methods
decode(octet)
click to toggle source
:nodoc rubocop:disable Metrics/AbcSize rubocop:disable Metrics/CyclomaticComplexity
# File lib/svcb_rr_patch/svc_params/ech/echconfig_contents/hpke_key_config.rb, line 41 def self.decode(octet) raise ::Resolv::DNS::DecodeError if octet.empty? config_id = octet.slice(0, 1).unpack1('C') i = 1 raise ::Resolv::DNS::DecodeError if i + 2 > octet.length kem_id = HpkeKemId.decode(octet.slice(i, 2)) i += 2 raise ::Resolv::DNS::DecodeError if i + 2 > octet.length pk_len = octet.slice(i, 2).unpack1('n') i += 2 raise ::Resolv::DNS::DecodeError if i + pk_len > octet.length public_key = HpkePublicKey.decode(octet.slice(i, pk_len)) i += pk_len raise ::Resolv::DNS::DecodeError if i + 2 > octet.length cs_len = octet.slice(i, 2).unpack1('n') i += 2 raise ::Resolv::DNS::DecodeError if i + 2 > octet.length cs_bin = octet.slice(i, cs_len) i += cs_len cipher_suites = HpkeSymmetricCipherSuite.decode_vectors(cs_bin) hpke_key_config = new( config_id, kem_id, public_key, cipher_suites ) [hpke_key_config, octet[i..]] end
new(config_id, kem_id, public_key, cipher_suites)
click to toggle source
@param config_id
[Integer] @param kem_id
[HpkeKemId] @param public_key
[HpkePublicKey] @param cipher_suites
[Array of HpkeSymmetricCipherSuite]
# File lib/svcb_rr_patch/svc_params/ech/echconfig_contents/hpke_key_config.rb, line 20 def initialize(config_id, kem_id, public_key, cipher_suites) @config_id = config_id @kem_id = kem_id @public_key = public_key @cipher_suites = cipher_suites end
Public Instance Methods
encode()
click to toggle source
@return [String]
# File lib/svcb_rr_patch/svc_params/ech/echconfig_contents/hpke_key_config.rb, line 31 def encode [@config_id].pack('C') \ + @kem_id.encode \ + @public_key.encode \ + @cipher_suites.map(&:encode).join.then { |s| [s.length].pack('n') + s } end