Module: Fernet::BitPacking

Extended by:
BitPacking
Included in:
BitPacking
Defined in:
lib/fernet/bit_packing.rb

Overview

Internal: wrappers used for consistent bit packing across rubies

Ruby 1.9.2 and below silently ignore endianness specifiers in packing/unpacking format directives

Instance Method Summary collapse

Instance Method Details

#pack_int64_bigendian(value) ⇒ Object

Internal - packs a value as a big endian, 64 bit integer

value - a byte sequence as a string

Returns array containing each value



14
15
16
# File 'lib/fernet/bit_packing.rb', line 14

def pack_int64_bigendian(value)
  (0..7).map { |index| (value >> (index * 8)) & 0xFF }.reverse.map(&:chr).join
end

#unpack_int64_bigendian(bytes) ⇒ Object

Internal - unpacks a string of big endian, 64 bit integers

bytes - an array of ints

Returns the original byte sequence as a string



23
24
25
26
# File 'lib/fernet/bit_packing.rb', line 23

def unpack_int64_bigendian(bytes)
  bytes.each_byte.to_a.reverse.each_with_index.
    reduce(0) { |val, (byte, index)| val | (byte << (index * 8)) }
end