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.1.1.2.
17 LZMA_API const uint32_t lzma_check_sizes[LZMA_CHECK_ID_MAX + 1] = {
27 LZMA_API const lzma_bool lzma_available_checks[LZMA_CHECK_ID_MAX + 1] = {
28 true, // LZMA_CHECK_NONE
30 #ifdef HAVE_CHECK_CRC32
39 #ifdef HAVE_CHECK_CRC64
51 #ifdef HAVE_CHECK_SHA256
66 lzma_check_init(lzma_check *check, lzma_check_type type)
68 lzma_ret ret = LZMA_OK;
74 #ifdef HAVE_CHECK_CRC32
75 case LZMA_CHECK_CRC32:
76 check->state.crc32 = 0;
80 #ifdef HAVE_CHECK_CRC64
81 case LZMA_CHECK_CRC64:
82 check->state.crc64 = 0;
86 #ifdef HAVE_CHECK_SHA256
87 case LZMA_CHECK_SHA256:
88 lzma_sha256_init(check);
93 if ((unsigned)(type) <= LZMA_CHECK_ID_MAX)
94 ret = LZMA_UNSUPPORTED_CHECK;
96 ret = LZMA_PROG_ERROR;
105 lzma_check_update(lzma_check *check, lzma_check_type type,
106 const uint8_t *buf, size_t size)
109 #ifdef HAVE_CHECK_CRC32
110 case LZMA_CHECK_CRC32:
111 check->state.crc32 = lzma_crc32(buf, size, check->state.crc32);
115 #ifdef HAVE_CHECK_CRC64
116 case LZMA_CHECK_CRC64:
117 check->state.crc64 = lzma_crc64(buf, size, check->state.crc64);
121 #ifdef HAVE_CHECK_SHA256
122 case LZMA_CHECK_SHA256:
123 lzma_sha256_update(buf, size, check);
136 lzma_check_finish(lzma_check *check, lzma_check_type type)
139 #ifdef HAVE_CHECK_CRC32
140 case LZMA_CHECK_CRC32:
141 *(uint32_t *)(check->buffer) = check->state.crc32;
145 #ifdef HAVE_CHECK_CRC64
146 case LZMA_CHECK_CRC64:
147 *(uint64_t *)(check->buffer) = check->state.crc64;
151 #ifdef HAVE_CHECK_SHA256
152 case LZMA_CHECK_SHA256:
153 lzma_sha256_finish(check);
168 lzma_check *check1, lzma_check *check2, lzma_check_type type)
173 case LZMA_CHECK_NONE:
176 case LZMA_CHECK_CRC32:
177 ret = check1->crc32 != check2->crc32;
180 case LZMA_CHECK_CRC64:
181 ret = check1->crc64 != check2->crc64;