Sha256: cdd60af681fe72028fc2fc4053589360a459c587a53aa9702e1777588b68832b

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

require 'krb5/mixin/packer'

class KRB5
  class Entry
    include KRB5::Mixin::Packer

    # @return [KRB5::Keytab]
    attr_accessor :keytab

    attr_accessor :principal
    attr_accessor :timestamp
    attr_accessor :kvno8
    attr_accessor :enctype
    attr_accessor :key
    attr_accessor :kvno32

    # Place to store byte array for #to_bytes
    # @return [Sting, nil]
    attr_accessor :bytes

    def initialize(keytab)
      @keytab = keytab
    end

    # The 32-bit key version overrides the 8-bit key version.
    # @return [Integer] key version number
    def kvno
      kvno32 ? kvno32 : kvno8
    end

    # entry ::=
    #     principal
    #     timestamp (32 bits)
    #     key version (8 bits)
    #     enctype (16 bits)
    #     key length (16 bits)
    #     key contents
    #     key version (32 bits) [in release 1.14 and later]
    def to_bytes
      @bytes = []

      pack_bytes(principal.to_bytes)
      pack_int32(timestamp.strftime('%s').to_i)
      pack_int8(kvno8)
      pack_int16(enctype)
      pack_int16(key.length)
      pack_bytes(key)
      pack_int32(kvno32) if kvno32

      @bytes.join
    end

    def ==(other)
      %i[principal timestamp kvno8 enctype key kvno32].each do |state|
        return false unless other.send(state) == self.send(state)
      end

      true
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
krb5-ruby-0.2.3 lib/krb5/entry.rb
krb5-ruby-0.2.2 lib/krb5/entry.rb