FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavutil/blowfish.c
Date: 2024-10-04 17:46:48
Exec Total Coverage
Lines: 70 70 100.0%
Functions: 4 4 100.0%
Branches: 32 32 100.0%

Line Branch Exec Source
1 /*
2 * Blowfish algorithm
3 * Copyright (c) 2012 Samuel Pitoiset
4 *
5 * loosely based on Paul Kocher's implementation
6 *
7 * This file is part of FFmpeg.
8 *
9 * FFmpeg is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * FFmpeg is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with FFmpeg; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24 #include <string.h>
25
26 #include "attributes.h"
27 #include "intreadwrite.h"
28 #include "mem.h"
29 #include "blowfish.h"
30
31 static const uint32_t orig_p[AV_BF_ROUNDS + 2] = {
32 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
33 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
34 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
35 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,
36 0x9216D5D9, 0x8979FB1B
37 };
38
39 static const uint32_t orig_s[4][256] = {
40 { 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
41 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
42 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
43 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
44 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
45 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
46 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
47 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
48 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
49 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
50 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
51 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
52 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
53 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
54 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
55 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
56 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
57 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
58 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
59 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
60 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
61 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
62 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
63 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
64 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
65 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
66 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
67 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
68 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
69 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
70 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
71 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
72 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
73 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
74 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
75 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
76 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
77 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
78 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
79 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
80 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
81 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
82 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
83 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
84 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
85 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
86 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
87 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
88 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
89 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
90 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
91 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
92 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
93 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
94 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
95 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
96 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
97 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
98 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
99 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
100 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
101 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
102 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
103 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A },
104 { 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
105 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
106 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
107 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
108 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
109 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
110 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
111 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
112 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
113 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
114 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
115 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
116 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
117 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
118 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
119 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
120 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
121 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
122 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
123 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
124 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
125 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
126 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
127 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
128 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
129 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
130 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
131 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
132 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
133 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
134 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
135 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
136 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
137 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
138 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
139 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
140 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
141 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
142 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
143 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
144 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
145 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
146 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
147 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
148 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
149 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
150 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
151 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
152 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
153 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
154 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
155 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
156 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
157 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
158 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
159 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
160 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
161 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
162 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
163 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
164 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
165 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
166 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
167 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 },
168 { 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
169 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
170 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
171 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
172 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
173 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
174 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
175 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
176 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
177 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
178 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
179 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
180 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
181 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
182 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
183 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
184 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
185 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
186 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
187 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
188 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
189 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
190 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
191 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
192 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
193 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
194 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
195 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
196 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
197 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
198 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
199 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
200 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
201 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
202 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
203 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
204 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
205 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
206 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
207 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
208 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
209 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
210 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
211 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
212 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
213 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
214 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
215 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
216 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
217 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
218 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
219 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
220 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
221 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
222 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
223 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
224 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
225 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
226 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
227 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
228 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
229 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
230 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
231 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 },
232 { 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
233 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
234 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
235 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
236 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
237 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
238 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
239 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
240 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
241 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
242 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
243 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
244 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
245 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
246 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
247 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
248 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
249 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
250 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
251 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
252 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
253 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
254 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
255 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
256 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
257 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
258 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
259 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
260 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
261 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
262 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
263 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
264 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
265 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
266 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
267 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
268 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
269 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
270 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
271 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
272 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
273 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
274 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
275 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
276 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
277 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
278 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
279 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
280 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
281 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
282 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
283 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
284 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
285 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
286 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
287 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
288 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
289 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
290 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
291 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
292 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
293 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
294 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
295 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 }
296 };
297
298 #define F(Xl, Xr, P) \
299 Xr ^=((( ctx->s[0][ Xl >> 24 ] \
300 + ctx->s[1][(Xl >> 16) & 0xFF])\
301 ^ ctx->s[2][(Xl >> 8) & 0xFF])\
302 + ctx->s[3][ Xl & 0xFF])\
303 ^ P;
304
305 1 AVBlowfish *av_blowfish_alloc(void)
306 {
307 1 return av_mallocz(sizeof(struct AVBlowfish));
308 }
309
310 35 av_cold void av_blowfish_init(AVBlowfish *ctx, const uint8_t *key, int key_len)
311 {
312 uint32_t data, data_l, data_r;
313 int i, j, k;
314
315 35 memcpy(ctx->s, orig_s, sizeof(orig_s));
316
317 35 j = 0;
318
2/2
✓ Branch 0 taken 630 times.
✓ Branch 1 taken 35 times.
665 for (i = 0; i < AV_BF_ROUNDS + 2; ++i) {
319 630 data = 0;
320
2/2
✓ Branch 0 taken 2520 times.
✓ Branch 1 taken 630 times.
3150 for (k = 0; k < 4; k++) {
321 2520 data = (data << 8) | key[j];
322
2/2
✓ Branch 0 taken 308 times.
✓ Branch 1 taken 2212 times.
2520 if (++j >= key_len)
323 308 j = 0;
324 }
325 630 ctx->p[i] = orig_p[i] ^ data;
326 }
327
328 35 data_l = data_r = 0;
329
330
2/2
✓ Branch 0 taken 315 times.
✓ Branch 1 taken 35 times.
350 for (i = 0; i < AV_BF_ROUNDS + 2; i += 2) {
331 315 av_blowfish_crypt_ecb(ctx, &data_l, &data_r, 0);
332 315 ctx->p[i] = data_l;
333 315 ctx->p[i + 1] = data_r;
334 }
335
336
2/2
✓ Branch 0 taken 140 times.
✓ Branch 1 taken 35 times.
175 for (i = 0; i < 4; ++i) {
337
2/2
✓ Branch 0 taken 17920 times.
✓ Branch 1 taken 140 times.
18060 for (j = 0; j < 256; j += 2) {
338 17920 av_blowfish_crypt_ecb(ctx, &data_l, &data_r, 0);
339 17920 ctx->s[i][j] = data_l;
340 17920 ctx->s[i][j + 1] = data_r;
341 }
342 }
343 35 }
344
345 18315 void av_blowfish_crypt_ecb(AVBlowfish *ctx, uint32_t *xl, uint32_t *xr,
346 int decrypt)
347 {
348 uint32_t Xl, Xr;
349 int i;
350
351 18315 Xl = *xl;
352 18315 Xr = *xr;
353
354
2/2
✓ Branch 0 taken 40 times.
✓ Branch 1 taken 18275 times.
18315 if (decrypt) {
355 40 Xl ^= ctx->p[AV_BF_ROUNDS + 1];
356
2/2
✓ Branch 0 taken 320 times.
✓ Branch 1 taken 40 times.
360 for (i = AV_BF_ROUNDS; i > 0; i-=2) {
357 320 F(Xl, Xr, ctx->p[i ]);
358 320 F(Xr, Xl, ctx->p[i-1]);
359 }
360
361 40 Xr ^= ctx->p[0];
362 } else {
363 18275 Xl ^= ctx->p[0];
364
2/2
✓ Branch 0 taken 146200 times.
✓ Branch 1 taken 18275 times.
164475 for (i = 1; i < AV_BF_ROUNDS+1; i+=2){
365 146200 F(Xl, Xr, ctx->p[i ]);
366 146200 F(Xr, Xl, ctx->p[i+1]);
367 }
368
369 18275 Xr ^= ctx->p[AV_BF_ROUNDS + 1];
370 }
371
372 18315 *xl = Xr;
373 18315 *xr = Xl;
374 18315 }
375
376 8 void av_blowfish_crypt(AVBlowfish *ctx, uint8_t *dst, const uint8_t *src,
377 int count, uint8_t *iv, int decrypt)
378 {
379 uint32_t v0, v1;
380 int i;
381
382
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
8 if (decrypt) {
383
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 4 times.
10 while (count--) {
384 6 v0 = AV_RB32(src);
385 6 v1 = AV_RB32(src + 4);
386
387 6 av_blowfish_crypt_ecb(ctx, &v0, &v1, decrypt);
388
389
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 2 times.
6 if (iv) {
390 4 v0 ^= AV_RB32(iv);
391 4 v1 ^= AV_RB32(iv + 4);
392 4 memcpy(iv, src, 8);
393 }
394
395 6 AV_WB32(dst, v0);
396 6 AV_WB32(dst + 4, v1);
397
398 6 src += 8;
399 6 dst += 8;
400 }
401 } else {
402
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 4 times.
10 while (count--) {
403
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 2 times.
6 if (iv) {
404
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 4 times.
36 for (i = 0; i < 8; i++)
405 32 dst[i] = src[i] ^ iv[i];
406 4 v0 = AV_RB32(dst);
407 4 v1 = AV_RB32(dst + 4);
408 } else {
409 2 v0 = AV_RB32(src);
410 2 v1 = AV_RB32(src + 4);
411 }
412
413 6 av_blowfish_crypt_ecb(ctx, &v0, &v1, decrypt);
414
415 6 AV_WB32(dst, v0);
416 6 AV_WB32(dst + 4, v1);
417
418
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 2 times.
6 if (iv)
419 4 memcpy(iv, dst, 8);
420
421 6 src += 8;
422 6 dst += 8;
423 }
424 }
425 8 }
426