1 ///////////////////////////////////////////////////////////////////////////////
6 // This code has been put into the public domain.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 ///////////////////////////////////////////////////////////////////////////////
16 // See the .lzma header format specification section 2.2.2.
17 LZMA_API const uint32_t lzma_check_sizes[8] = { 0, 4, 4, 8, 16, 32, 32, 64 };
20 LZMA_API const lzma_bool lzma_available_checks[LZMA_CHECK_ID_MAX + 1] = {
21 true, // LZMA_CHECK_NONE
23 #ifdef HAVE_CHECK_CRC32
31 #ifdef HAVE_CHECK_CRC64
39 #ifdef HAVE_CHECK_SHA256
51 lzma_check_init(lzma_check *check, lzma_check_type type)
53 lzma_ret ret = LZMA_OK;
59 #ifdef HAVE_CHECK_CRC32
60 case LZMA_CHECK_CRC32:
65 #ifdef HAVE_CHECK_CRC64
66 case LZMA_CHECK_CRC64:
71 #ifdef HAVE_CHECK_SHA256
72 case LZMA_CHECK_SHA256:
73 lzma_sha256_init(&check->sha256);
78 if (type <= LZMA_CHECK_ID_MAX)
79 ret = LZMA_UNSUPPORTED_CHECK;
81 ret = LZMA_PROG_ERROR;
90 lzma_check_update(lzma_check *check, lzma_check_type type,
91 const uint8_t *buf, size_t size)
94 #ifdef HAVE_CHECK_CRC32
95 case LZMA_CHECK_CRC32:
96 check->crc32 = lzma_crc32(buf, size, check->crc32);
100 #ifdef HAVE_CHECK_CRC64
101 case LZMA_CHECK_CRC64:
102 check->crc64 = lzma_crc64(buf, size, check->crc64);
106 #ifdef HAVE_CHECK_SHA256
107 case LZMA_CHECK_SHA256:
108 lzma_sha256_update(buf, size, &check->sha256);
121 lzma_check_finish(lzma_check *check, lzma_check_type type)
123 #ifdef HAVE_CHECK_SHA256
124 if (type == LZMA_CHECK_SHA256)
125 lzma_sha256_finish(&check->sha256);
135 lzma_check *check1, lzma_check *check2, lzma_check_type type)
140 case LZMA_CHECK_NONE:
143 case LZMA_CHECK_CRC32:
144 ret = check1->crc32 != check2->crc32;
147 case LZMA_CHECK_CRC64:
148 ret = check1->crc64 != check2->crc64;