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