2 2017-05-12 : Igor Pavlov : Public domain */
11 const Byte XZ_SIG
[XZ_SIG_SIZE
] = { 0xFD, '7', 'z', 'X', 'Z', 0 };
12 /* const Byte XZ_FOOTER_SIG[XZ_FOOTER_SIG_SIZE] = { 'Y', 'Z' }; */
14 unsigned Xz_WriteVarInt(Byte
*buf
, UInt64 v
)
19 buf
[i
++] = (Byte
)((v
& 0x7F) | 0x80);
23 buf
[(size_t)i
- 1] &= 0x7F;
27 void Xz_Construct(CXzStream
*p
)
34 void Xz_Free(CXzStream
*p
, ISzAllocPtr alloc
)
36 ISzAlloc_Free(alloc
, p
->blocks
);
41 unsigned XzFlags_GetCheckSize(CXzStreamFlags f
)
43 unsigned t
= XzFlags_GetCheckType(f
);
44 return (t
== 0) ? 0 : (4 << ((t
- 1) / 3));
47 void XzCheck_Init(CXzCheck
*p
, unsigned mode
)
52 case XZ_CHECK_CRC32
: p
->crc
= CRC_INIT_VAL
; break;
53 case XZ_CHECK_CRC64
: p
->crc64
= CRC64_INIT_VAL
; break;
54 case XZ_CHECK_SHA256
: Sha256_Init(&p
->sha
); break;
58 void XzCheck_Update(CXzCheck
*p
, const void *data
, size_t size
)
62 case XZ_CHECK_CRC32
: p
->crc
= CrcUpdate(p
->crc
, data
, size
); break;
63 case XZ_CHECK_CRC64
: p
->crc64
= Crc64Update(p
->crc64
, data
, size
); break;
64 case XZ_CHECK_SHA256
: Sha256_Update(&p
->sha
, (const Byte
*)data
, size
); break;
68 int XzCheck_Final(CXzCheck
*p
, Byte
*digest
)
73 SetUi32(digest
, CRC_GET_DIGEST(p
->crc
));
78 UInt64 v
= CRC64_GET_DIGEST(p
->crc64
);
79 for (i
= 0; i
< 8; i
++, v
>>= 8)
80 digest
[i
] = (Byte
)(v
& 0xFF);
84 Sha256_Final(&p
->sha
, digest
);