Module: PQCrypto::Seal::Binary

Defined in:
lib/pq_crypto/seal/binary.rb

Class Method Summary collapse

Class Method Details

.ensure_available!(bytes, offset, length) ⇒ Object

Raises:



50
51
52
53
# File 'lib/pq_crypto/seal/binary.rb', line 50

def ensure_available!(bytes, offset, length)
  raise FormatError, "invalid offset" if offset.negative? || length.negative?
  raise FormatError, "truncated envelope" if offset > bytes.bytesize || length > bytes.bytesize - offset
end

.integer!(value, max) ⇒ Object

Raises:

  • (RangeError)


55
56
57
58
59
# File 'lib/pq_crypto/seal/binary.rb', line 55

def integer!(value, max)
  number = Integer(value)
  raise RangeError, "integer is out of range" if number.negative? || number > max
  number
end

.read_bytes(bytes, offset, length) ⇒ Object

Raises:



44
45
46
47
48
# File 'lib/pq_crypto/seal/binary.rb', line 44

def read_bytes(bytes, offset, length)
  raise FormatError, "negative length" if length.negative?
  ensure_available!(bytes, offset, length)
  [bytes.byteslice(offset, length).b, offset + length]
end

.read_u16(bytes, offset) ⇒ Object



29
30
31
32
# File 'lib/pq_crypto/seal/binary.rb', line 29

def read_u16(bytes, offset)
  ensure_available!(bytes, offset, 2)
  [bytes.byteslice(offset, 2).unpack1("n"), offset + 2]
end

.read_u32(bytes, offset) ⇒ Object



34
35
36
37
# File 'lib/pq_crypto/seal/binary.rb', line 34

def read_u32(bytes, offset)
  ensure_available!(bytes, offset, 4)
  [bytes.byteslice(offset, 4).unpack1("N"), offset + 4]
end

.read_u64(bytes, offset) ⇒ Object



39
40
41
42
# File 'lib/pq_crypto/seal/binary.rb', line 39

def read_u64(bytes, offset)
  ensure_available!(bytes, offset, 8)
  [bytes.byteslice(offset, 8).unpack1("Q>"), offset + 8]
end

.read_u8(bytes, offset) ⇒ Object



24
25
26
27
# File 'lib/pq_crypto/seal/binary.rb', line 24

def read_u8(bytes, offset)
  ensure_available!(bytes, offset, 1)
  [bytes.getbyte(offset), offset + 1]
end

.u16(value) ⇒ Object



12
13
14
# File 'lib/pq_crypto/seal/binary.rb', line 12

def u16(value)
  [integer!(value, 0xffff)].pack("n")
end

.u32(value) ⇒ Object



16
17
18
# File 'lib/pq_crypto/seal/binary.rb', line 16

def u32(value)
  [integer!(value, 0xffff_ffff)].pack("N")
end

.u64(value) ⇒ Object



20
21
22
# File 'lib/pq_crypto/seal/binary.rb', line 20

def u64(value)
  [integer!(value, 0xffff_ffff_ffff_ffff)].pack("Q>")
end

.u8(value) ⇒ Object



8
9
10
# File 'lib/pq_crypto/seal/binary.rb', line 8

def u8(value)
  [integer!(value, 0xff)].pack("C")
end