Module: PQCrypto::Seal::Binary
- Defined in:
- lib/pq_crypto/seal/binary.rb
Class Method Summary collapse
- .ensure_available!(bytes, offset, length) ⇒ Object
- .integer!(value, max) ⇒ Object
- .read_bytes(bytes, offset, length) ⇒ Object
- .read_u16(bytes, offset) ⇒ Object
- .read_u32(bytes, offset) ⇒ Object
- .read_u64(bytes, offset) ⇒ Object
- .read_u8(bytes, offset) ⇒ Object
- .u16(value) ⇒ Object
- .u32(value) ⇒ Object
- .u64(value) ⇒ Object
- .u8(value) ⇒ Object
Class Method Details
.ensure_available!(bytes, offset, length) ⇒ Object
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
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
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 |