OLD | NEW |
(Empty) | |
| 1 /////////////////////////////////////////////////////////////////////////////// |
| 2 // |
| 3 /// \file check.h |
| 4 /// \brief Internal API to different integrity check functions |
| 5 // |
| 6 // Author: Lasse Collin |
| 7 // |
| 8 // This file has been put into the public domain. |
| 9 // You can do whatever you want with this file. |
| 10 // |
| 11 /////////////////////////////////////////////////////////////////////////////// |
| 12 |
| 13 #ifndef LZMA_CHECK_H |
| 14 #define LZMA_CHECK_H |
| 15 |
| 16 #include "common.h" |
| 17 |
| 18 |
| 19 // Index hashing needs the best possible hash function (preferably |
| 20 // a cryptographic hash) for maximum reliability. |
| 21 #if defined(HAVE_CHECK_SHA256) |
| 22 # define LZMA_CHECK_BEST LZMA_CHECK_SHA256 |
| 23 #elif defined(HAVE_CHECK_CRC64) |
| 24 # define LZMA_CHECK_BEST LZMA_CHECK_CRC64 |
| 25 #else |
| 26 # define LZMA_CHECK_BEST LZMA_CHECK_CRC32 |
| 27 #endif |
| 28 |
| 29 |
| 30 /// \brief Structure to hold internal state of the check being calculated |
| 31 /// |
| 32 /// \note This is not in the public API because this structure may |
| 33 /// change in future if new integrity check algorithms are added. |
| 34 typedef struct { |
| 35 /// Buffer to hold the final result and a temporary buffer for SHA256. |
| 36 union { |
| 37 uint8_t u8[64]; |
| 38 uint32_t u32[16]; |
| 39 uint64_t u64[8]; |
| 40 } buffer; |
| 41 |
| 42 /// Check-specific data |
| 43 union { |
| 44 uint32_t crc32; |
| 45 uint64_t crc64; |
| 46 |
| 47 struct { |
| 48 /// Internal state |
| 49 uint32_t state[8]; |
| 50 |
| 51 /// Size of the message excluding padding |
| 52 uint64_t size; |
| 53 } sha256; |
| 54 } state; |
| 55 |
| 56 } lzma_check_state; |
| 57 |
| 58 |
| 59 /// lzma_crc32_table[0] is needed by LZ encoder so we need to keep |
| 60 /// the array two-dimensional. |
| 61 #ifdef HAVE_SMALL |
| 62 extern uint32_t lzma_crc32_table[1][256]; |
| 63 extern void lzma_crc32_init(void); |
| 64 #else |
| 65 extern const uint32_t lzma_crc32_table[8][256]; |
| 66 extern const uint64_t lzma_crc64_table[4][256]; |
| 67 #endif |
| 68 |
| 69 |
| 70 /// \brief Initialize *check depending on type |
| 71 /// |
| 72 /// \return LZMA_OK on success. LZMA_UNSUPPORTED_CHECK if the type is not |
| 73 /// supported by the current version or build of liblzma. |
| 74 /// LZMA_PROG_ERROR if type > LZMA_CHECK_ID_MAX. |
| 75 extern void lzma_check_init(lzma_check_state *check, lzma_check type); |
| 76 |
| 77 /// Update the check state |
| 78 extern void lzma_check_update(lzma_check_state *check, lzma_check type, |
| 79 const uint8_t *buf, size_t size); |
| 80 |
| 81 /// Finish the check calculation and store the result to check->buffer.u8. |
| 82 extern void lzma_check_finish(lzma_check_state *check, lzma_check type); |
| 83 |
| 84 |
| 85 /// Prepare SHA-256 state for new input. |
| 86 extern void lzma_sha256_init(lzma_check_state *check); |
| 87 |
| 88 /// Update the SHA-256 hash state |
| 89 extern void lzma_sha256_update( |
| 90 const uint8_t *buf, size_t size, lzma_check_state *check); |
| 91 |
| 92 /// Finish the SHA-256 calculation and store the result to check->buffer.u8. |
| 93 extern void lzma_sha256_finish(lzma_check_state *check); |
| 94 |
| 95 #endif |
OLD | NEW |