VirtualBox

source: vbox/trunk/src/libs/liblzma-5.8.1/check/check.c@ 109302

Last change on this file since 109302 was 108913, checked in by vboxsync, 6 weeks ago

libs/liblzma: Liblzma ose fix. jiraref:VBP-1635

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.8 KB
Line 
1// SPDX-License-Identifier: 0BSD
2
3///////////////////////////////////////////////////////////////////////////////
4//
5/// \file check.c
6/// \brief Single API to access different integrity checks
7//
8// Author: Lasse Collin
9//
10///////////////////////////////////////////////////////////////////////////////
11
12#include "check.h"
13
14
15extern LZMA_API(lzma_bool)
16lzma_check_is_supported(lzma_check type)
17{
18 if ((unsigned int)(type) > LZMA_CHECK_ID_MAX)
19 return false;
20
21 static const lzma_bool available_checks[LZMA_CHECK_ID_MAX + 1] = {
22 true, // LZMA_CHECK_NONE
23
24#ifdef HAVE_CHECK_CRC32
25 true,
26#else
27 false,
28#endif
29
30 false, // Reserved
31 false, // Reserved
32
33#ifdef HAVE_CHECK_CRC64
34 true,
35#else
36 false,
37#endif
38
39 false, // Reserved
40 false, // Reserved
41 false, // Reserved
42 false, // Reserved
43 false, // Reserved
44
45#ifdef HAVE_CHECK_SHA256
46 true,
47#else
48 false,
49#endif
50
51 false, // Reserved
52 false, // Reserved
53 false, // Reserved
54 false, // Reserved
55 false, // Reserved
56 };
57
58 return available_checks[(unsigned int)(type)];
59}
60
61
62extern LZMA_API(uint32_t)
63lzma_check_size(lzma_check type)
64{
65 if ((unsigned int)(type) > LZMA_CHECK_ID_MAX)
66 return UINT32_MAX;
67
68 // See file-format.txt section 2.1.1.2.
69 static const uint8_t check_sizes[LZMA_CHECK_ID_MAX + 1] = {
70 0,
71 4, 4, 4,
72 8, 8, 8,
73 16, 16, 16,
74 32, 32, 32,
75 64, 64, 64
76 };
77
78 return check_sizes[(unsigned int)(type)];
79}
80
81
82extern void
83lzma_check_init(lzma_check_state *check, lzma_check type)
84{
85 switch (type) {
86 case LZMA_CHECK_NONE:
87 break;
88
89#ifdef HAVE_CHECK_CRC32
90 case LZMA_CHECK_CRC32:
91 check->state.crc32 = 0;
92 break;
93#endif
94
95#ifdef HAVE_CHECK_CRC64
96 case LZMA_CHECK_CRC64:
97 check->state.crc64 = 0;
98 break;
99#endif
100
101#ifdef HAVE_CHECK_SHA256
102 case LZMA_CHECK_SHA256:
103 lzma_sha256_init(check);
104 break;
105#endif
106
107 default:
108 break;
109 }
110
111 return;
112}
113
114
115extern void
116lzma_check_update(lzma_check_state *check, lzma_check type,
117 const uint8_t *buf, size_t size)
118{
119 switch (type) {
120#ifdef HAVE_CHECK_CRC32
121 case LZMA_CHECK_CRC32:
122 check->state.crc32 = lzma_crc32(buf, size, check->state.crc32);
123 break;
124#endif
125
126#ifdef HAVE_CHECK_CRC64
127 case LZMA_CHECK_CRC64:
128 check->state.crc64 = lzma_crc64(buf, size, check->state.crc64);
129 break;
130#endif
131
132#ifdef HAVE_CHECK_SHA256
133 case LZMA_CHECK_SHA256:
134 lzma_sha256_update(buf, size, check);
135 break;
136#endif
137
138 default:
139 break;
140 }
141
142 return;
143}
144
145
146extern void
147lzma_check_finish(lzma_check_state *check, lzma_check type)
148{
149 switch (type) {
150#ifdef HAVE_CHECK_CRC32
151 case LZMA_CHECK_CRC32:
152 check->buffer.u32[0] = conv32le(check->state.crc32);
153 break;
154#endif
155
156#ifdef HAVE_CHECK_CRC64
157 case LZMA_CHECK_CRC64:
158 check->buffer.u64[0] = conv64le(check->state.crc64);
159 break;
160#endif
161
162#ifdef HAVE_CHECK_SHA256
163 case LZMA_CHECK_SHA256:
164 lzma_sha256_finish(check);
165 break;
166#endif
167
168 default:
169 break;
170 }
171
172 return;
173}
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette