Module: Fernet::BitPacking
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
-
#pack_int64_bigendian(value) ⇒ Object
Internal - packs a value as a big endian, 64 bit integer.
-
#unpack_int64_bigendian(bytes) ⇒ Object
Internal - unpacks a string of big endian, 64 bit integers.
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 |