217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
# File 'lib/pq_crypto/seal/format.rb', line 217
def parse(bytes)
source = String(bytes).b
reader = Binary::Reader.new(source)
raise FormatError, "unsupported inner version" unless reader.u8 == INNER_VERSION
raise FormatError, "unknown inner flags" unless reader.u8 == INNER_FLAGS
content_length = reader.u64
metadata_length = reader.u32
raise FormatError, "private metadata is too large" if metadata_length > MAX_PRIVATE_METADATA_BYTES
metadata = reader.bytes(metadata_length)
content = reader.bytes(content_length)
VerifiedInner.new(
content: content,
metadata: metadata,
padding_bytes: source.bytesize - reader.offset
)
end
|