123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- ///////////////////////////////////////////////////////////////////////////////
- //
- /// \file check.c
- /// \brief Single API to access different integrity checks
- //
- // Author: Lasse Collin
- //
- // This file has been put into the public domain.
- // You can do whatever you want with this file.
- //
- ///////////////////////////////////////////////////////////////////////////////
- #include "check.h"
- extern LZMA_API(lzma_bool)
- lzma_check_is_supported(lzma_check type)
- {
- if ((unsigned int)(type) > LZMA_CHECK_ID_MAX)
- return false;
- static const lzma_bool available_checks[LZMA_CHECK_ID_MAX + 1] = {
- true, // LZMA_CHECK_NONE
- #ifdef HAVE_CHECK_CRC32
- true,
- #else
- false,
- #endif
- false, // Reserved
- false, // Reserved
- #ifdef HAVE_CHECK_CRC64
- true,
- #else
- false,
- #endif
- false, // Reserved
- false, // Reserved
- false, // Reserved
- false, // Reserved
- false, // Reserved
- #ifdef HAVE_CHECK_SHA256
- true,
- #else
- false,
- #endif
- false, // Reserved
- false, // Reserved
- false, // Reserved
- false, // Reserved
- false, // Reserved
- };
- return available_checks[(unsigned int)(type)];
- }
- extern LZMA_API(uint32_t)
- lzma_check_size(lzma_check type)
- {
- if ((unsigned int)(type) > LZMA_CHECK_ID_MAX)
- return UINT32_MAX;
- // See file-format.txt section 2.1.1.2.
- static const uint8_t check_sizes[LZMA_CHECK_ID_MAX + 1] = {
- 0,
- 4, 4, 4,
- 8, 8, 8,
- 16, 16, 16,
- 32, 32, 32,
- 64, 64, 64
- };
- return check_sizes[(unsigned int)(type)];
- }
- extern void
- lzma_check_init(lzma_check_state *check, lzma_check type)
- {
- switch (type) {
- case LZMA_CHECK_NONE:
- break;
- #ifdef HAVE_CHECK_CRC32
- case LZMA_CHECK_CRC32:
- check->state.crc32 = 0;
- break;
- #endif
- #ifdef HAVE_CHECK_CRC64
- case LZMA_CHECK_CRC64:
- check->state.crc64 = 0;
- break;
- #endif
- #ifdef HAVE_CHECK_SHA256
- case LZMA_CHECK_SHA256:
- lzma_sha256_init(check);
- break;
- #endif
- default:
- break;
- }
- return;
- }
- extern void
- lzma_check_update(lzma_check_state *check, lzma_check type,
- const uint8_t *buf, size_t size)
- {
- switch (type) {
- #ifdef HAVE_CHECK_CRC32
- case LZMA_CHECK_CRC32:
- check->state.crc32 = lzma_crc32(buf, size, check->state.crc32);
- break;
- #endif
- #ifdef HAVE_CHECK_CRC64
- case LZMA_CHECK_CRC64:
- check->state.crc64 = lzma_crc64(buf, size, check->state.crc64);
- break;
- #endif
- #ifdef HAVE_CHECK_SHA256
- case LZMA_CHECK_SHA256:
- lzma_sha256_update(buf, size, check);
- break;
- #endif
- default:
- break;
- }
- return;
- }
- extern void
- lzma_check_finish(lzma_check_state *check, lzma_check type)
- {
- switch (type) {
- #ifdef HAVE_CHECK_CRC32
- case LZMA_CHECK_CRC32:
- check->buffer.u32[0] = conv32le(check->state.crc32);
- break;
- #endif
- #ifdef HAVE_CHECK_CRC64
- case LZMA_CHECK_CRC64:
- check->buffer.u64[0] = conv64le(check->state.crc64);
- break;
- #endif
- #ifdef HAVE_CHECK_SHA256
- case LZMA_CHECK_SHA256:
- lzma_sha256_finish(check);
- break;
- #endif
- default:
- break;
- }
- return;
- }
|