lib/fernet/bit_packing.rb in fernet-2.0.rc1 vs lib/fernet/bit_packing.rb in fernet-2.0.rc2

- old
+ new

@@ -1,15 +1,26 @@ module Fernet + # Internal: wrappers used for consistent bit packing across rubies + # + # Ruby 1.9.2 and below silently ignore endianness specifiers in + # packing/unpacking format directives module BitPacking extend self - # N.B. Ruby 1.9.2 and below silently ignore endianness specifiers in - # packing/unpacking format directives; we work around it with this - + # Internal - packs a value as a big endian, 64 bit integer + # + # value - a byte sequence as a string + # + # Returns array containing each value def pack_int64_bigendian(value) (0..7).map { |index| (value >> (index * 8)) & 0xFF }.reverse.map(&:chr).join end + # Internal - unpacks a string of big endian, 64 bit integers + # + # bytes - an array of ints + # + # Returns the original byte sequence as a string def unpack_int64_bigendian(bytes) bytes.each_byte.to_a.reverse.each_with_index. reduce(0) { |val, (byte, index)| val | (byte << (index * 8)) } end end