check-part ( header trailer part bytes -- )


Vocabulary
yenc.private

Inputs
headeran object
traileran object
partan object
bytesan object


Outputs
None

Definition


:: check-part ( header trailer part bytes -- )
header "part" metadata-number :> number number 0 >
[ "Invalid part number" invalid-yenc ] unless
number trailer "part" metadata-number check-size
"total" header at [
drop header "total" metadata-number
:> total number total <=
[ "Invalid part count" invalid-yenc ] unless
"total" trailer key?
[ total trailer "total" metadata-number check-size ]
when
] when* part "begin" metadata-number
:> first part "end" metadata-number
:> last header "size" metadata-number :> size first 1 >=
last first >= and last size <= and
[ "Invalid part range" invalid-yenc ] unless last first -
1 + bytes length check-size "pcrc32" trailer key?
[ "Missing part CRC32" invalid-yenc ] unless
bytes trailer "pcrc32" check-crc first 1 = last size = and
[ bytes trailer "crc32" check-crc ] when ;