Path: blob/master/Utilities/cmliblzma/liblzma/check/check.c
3153 views
// SPDX-License-Identifier: 0BSD12///////////////////////////////////////////////////////////////////////////////3//4/// \file check.c5/// \brief Single API to access different integrity checks6//7// Author: Lasse Collin8//9///////////////////////////////////////////////////////////////////////////////1011#include "check.h"121314extern LZMA_API(lzma_bool)15lzma_check_is_supported(lzma_check type)16{17if ((unsigned int)(type) > LZMA_CHECK_ID_MAX)18return false;1920static const lzma_bool available_checks[LZMA_CHECK_ID_MAX + 1] = {21true, // LZMA_CHECK_NONE2223#ifdef HAVE_CHECK_CRC3224true,25#else26false,27#endif2829false, // Reserved30false, // Reserved3132#ifdef HAVE_CHECK_CRC6433true,34#else35false,36#endif3738false, // Reserved39false, // Reserved40false, // Reserved41false, // Reserved42false, // Reserved4344#ifdef HAVE_CHECK_SHA25645true,46#else47false,48#endif4950false, // Reserved51false, // Reserved52false, // Reserved53false, // Reserved54false, // Reserved55};5657return available_checks[(unsigned int)(type)];58}596061extern LZMA_API(uint32_t)62lzma_check_size(lzma_check type)63{64if ((unsigned int)(type) > LZMA_CHECK_ID_MAX)65return UINT32_MAX;6667// See file-format.txt section 2.1.1.2.68static const uint8_t check_sizes[LZMA_CHECK_ID_MAX + 1] = {690,704, 4, 4,718, 8, 8,7216, 16, 16,7332, 32, 32,7464, 64, 6475};7677return check_sizes[(unsigned int)(type)];78}798081extern void82lzma_check_init(lzma_check_state *check, lzma_check type)83{84switch (type) {85case LZMA_CHECK_NONE:86break;8788#ifdef HAVE_CHECK_CRC3289case LZMA_CHECK_CRC32:90check->state.crc32 = 0;91break;92#endif9394#ifdef HAVE_CHECK_CRC6495case LZMA_CHECK_CRC64:96check->state.crc64 = 0;97break;98#endif99100#ifdef HAVE_CHECK_SHA256101case LZMA_CHECK_SHA256:102lzma_sha256_init(check);103break;104#endif105106default:107break;108}109110return;111}112113114extern void115lzma_check_update(lzma_check_state *check, lzma_check type,116const uint8_t *buf, size_t size)117{118switch (type) {119#ifdef HAVE_CHECK_CRC32120case LZMA_CHECK_CRC32:121check->state.crc32 = lzma_crc32(buf, size, check->state.crc32);122break;123#endif124125#ifdef HAVE_CHECK_CRC64126case LZMA_CHECK_CRC64:127check->state.crc64 = lzma_crc64(buf, size, check->state.crc64);128break;129#endif130131#ifdef HAVE_CHECK_SHA256132case LZMA_CHECK_SHA256:133lzma_sha256_update(buf, size, check);134break;135#endif136137default:138break;139}140141return;142}143144145extern void146lzma_check_finish(lzma_check_state *check, lzma_check type)147{148switch (type) {149#ifdef HAVE_CHECK_CRC32150case LZMA_CHECK_CRC32:151check->buffer.u32[0] = conv32le(check->state.crc32);152break;153#endif154155#ifdef HAVE_CHECK_CRC64156case LZMA_CHECK_CRC64:157check->buffer.u64[0] = conv64le(check->state.crc64);158break;159#endif160161#ifdef HAVE_CHECK_SHA256162case LZMA_CHECK_SHA256:163lzma_sha256_finish(check);164break;165#endif166167default:168break;169}170171return;172}173174175