main
1// Based on the C implementation from Marc Stevens and Dan Shumow.
2// https://github.com/cr-marcstevens/sha1collisiondetection
3
4package ubc
5
6type DvInfo struct {
7 // DvType, DvK and DvB define the DV: I(K,B) or II(K,B) (see the paper).
8 // https://marc-stevens.nl/research/papers/C13-S.pdf
9 DvType uint32
10 DvK uint32
11 DvB uint32
12
13 // TestT is the step to do the recompression from for collision detection.
14 TestT uint32
15
16 // MaskI and MaskB define the bit to check for each DV in the dvmask returned by ubc_check.
17 MaskI uint32
18 MaskB uint32
19
20 // Dm is the expanded message block XOR-difference defined by the DV.
21 Dm [80]uint32
22}
23
24// CalculateDvMask takes as input an expanded message block and verifies the unavoidable bitconditions
25// for all listed DVs. It returns a dvmask where each bit belonging to a DV is set if all
26// unavoidable bitconditions for that DV have been met.
27// Thus, one needs to do the recompression check for each DV that has its bit set.
28func CalculateDvMaskGeneric(W [80]uint32) uint32 {
29 mask := uint32(0xFFFFFFFF)
30 mask &= (((((W[44] ^ W[45]) >> 29) & 1) - 1) | ^(DV_I_48_0_bit | DV_I_51_0_bit | DV_I_52_0_bit | DV_II_45_0_bit | DV_II_46_0_bit | DV_II_50_0_bit | DV_II_51_0_bit))
31 mask &= (((((W[49] ^ W[50]) >> 29) & 1) - 1) | ^(DV_I_46_0_bit | DV_II_45_0_bit | DV_II_50_0_bit | DV_II_51_0_bit | DV_II_55_0_bit | DV_II_56_0_bit))
32 mask &= (((((W[48] ^ W[49]) >> 29) & 1) - 1) | ^(DV_I_45_0_bit | DV_I_52_0_bit | DV_II_49_0_bit | DV_II_50_0_bit | DV_II_54_0_bit | DV_II_55_0_bit))
33 mask &= ((((W[47] ^ (W[50] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit | DV_II_51_0_bit | DV_II_56_0_bit))
34 mask &= (((((W[47] ^ W[48]) >> 29) & 1) - 1) | ^(DV_I_44_0_bit | DV_I_51_0_bit | DV_II_48_0_bit | DV_II_49_0_bit | DV_II_53_0_bit | DV_II_54_0_bit))
35 mask &= (((((W[46] >> 4) ^ (W[49] >> 29)) & 1) - 1) | ^(DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit | DV_II_50_0_bit | DV_II_55_0_bit))
36 mask &= (((((W[46] ^ W[47]) >> 29) & 1) - 1) | ^(DV_I_43_0_bit | DV_I_50_0_bit | DV_II_47_0_bit | DV_II_48_0_bit | DV_II_52_0_bit | DV_II_53_0_bit))
37 mask &= (((((W[45] >> 4) ^ (W[48] >> 29)) & 1) - 1) | ^(DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit | DV_II_49_0_bit | DV_II_54_0_bit))
38 mask &= (((((W[45] ^ W[46]) >> 29) & 1) - 1) | ^(DV_I_49_0_bit | DV_I_52_0_bit | DV_II_46_0_bit | DV_II_47_0_bit | DV_II_51_0_bit | DV_II_52_0_bit))
39 mask &= (((((W[44] >> 4) ^ (W[47] >> 29)) & 1) - 1) | ^(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit | DV_II_48_0_bit | DV_II_53_0_bit))
40 mask &= (((((W[43] >> 4) ^ (W[46] >> 29)) & 1) - 1) | ^(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit | DV_II_47_0_bit | DV_II_52_0_bit))
41 mask &= (((((W[43] ^ W[44]) >> 29) & 1) - 1) | ^(DV_I_47_0_bit | DV_I_50_0_bit | DV_I_51_0_bit | DV_II_45_0_bit | DV_II_49_0_bit | DV_II_50_0_bit))
42 mask &= (((((W[42] >> 4) ^ (W[45] >> 29)) & 1) - 1) | ^(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit | DV_I_52_0_bit | DV_II_46_0_bit | DV_II_51_0_bit))
43 mask &= (((((W[41] >> 4) ^ (W[44] >> 29)) & 1) - 1) | ^(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit | DV_I_51_0_bit | DV_II_45_0_bit | DV_II_50_0_bit))
44 mask &= (((((W[40] ^ W[41]) >> 29) & 1) - 1) | ^(DV_I_44_0_bit | DV_I_47_0_bit | DV_I_48_0_bit | DV_II_46_0_bit | DV_II_47_0_bit | DV_II_56_0_bit))
45 mask &= (((((W[54] ^ W[55]) >> 29) & 1) - 1) | ^(DV_I_51_0_bit | DV_II_47_0_bit | DV_II_50_0_bit | DV_II_55_0_bit | DV_II_56_0_bit))
46 mask &= (((((W[53] ^ W[54]) >> 29) & 1) - 1) | ^(DV_I_50_0_bit | DV_II_46_0_bit | DV_II_49_0_bit | DV_II_54_0_bit | DV_II_55_0_bit))
47 mask &= (((((W[52] ^ W[53]) >> 29) & 1) - 1) | ^(DV_I_49_0_bit | DV_II_45_0_bit | DV_II_48_0_bit | DV_II_53_0_bit | DV_II_54_0_bit))
48 mask &= ((((W[50] ^ (W[53] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_I_50_0_bit | DV_I_52_0_bit | DV_II_46_0_bit | DV_II_48_0_bit | DV_II_54_0_bit))
49 mask &= (((((W[50] ^ W[51]) >> 29) & 1) - 1) | ^(DV_I_47_0_bit | DV_II_46_0_bit | DV_II_51_0_bit | DV_II_52_0_bit | DV_II_56_0_bit))
50 mask &= ((((W[49] ^ (W[52] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit | DV_II_47_0_bit | DV_II_53_0_bit))
51 mask &= ((((W[48] ^ (W[51] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit | DV_II_46_0_bit | DV_II_52_0_bit))
52 mask &= (((((W[42] ^ W[43]) >> 29) & 1) - 1) | ^(DV_I_46_0_bit | DV_I_49_0_bit | DV_I_50_0_bit | DV_II_48_0_bit | DV_II_49_0_bit))
53 mask &= (((((W[41] ^ W[42]) >> 29) & 1) - 1) | ^(DV_I_45_0_bit | DV_I_48_0_bit | DV_I_49_0_bit | DV_II_47_0_bit | DV_II_48_0_bit))
54 mask &= (((((W[40] >> 4) ^ (W[43] >> 29)) & 1) - 1) | ^(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_50_0_bit | DV_II_49_0_bit | DV_II_56_0_bit))
55 mask &= (((((W[39] >> 4) ^ (W[42] >> 29)) & 1) - 1) | ^(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_49_0_bit | DV_II_48_0_bit | DV_II_55_0_bit))
56
57 if (mask & (DV_I_44_0_bit | DV_I_48_0_bit | DV_II_47_0_bit | DV_II_54_0_bit | DV_II_56_0_bit)) != 0 {
58 mask &= (((((W[38] >> 4) ^ (W[41] >> 29)) & 1) - 1) | ^(DV_I_44_0_bit | DV_I_48_0_bit | DV_II_47_0_bit | DV_II_54_0_bit | DV_II_56_0_bit))
59 }
60 mask &= (((((W[37] >> 4) ^ (W[40] >> 29)) & 1) - 1) | ^(DV_I_43_0_bit | DV_I_47_0_bit | DV_II_46_0_bit | DV_II_53_0_bit | DV_II_55_0_bit))
61 if (mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_51_0_bit | DV_II_56_0_bit)) != 0 {
62 mask &= (((((W[55] ^ W[56]) >> 29) & 1) - 1) | ^(DV_I_52_0_bit | DV_II_48_0_bit | DV_II_51_0_bit | DV_II_56_0_bit))
63 }
64 if (mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_50_0_bit | DV_II_56_0_bit)) != 0 {
65 mask &= ((((W[52] ^ (W[55] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_I_52_0_bit | DV_II_48_0_bit | DV_II_50_0_bit | DV_II_56_0_bit))
66 }
67 if (mask & (DV_I_51_0_bit | DV_II_47_0_bit | DV_II_49_0_bit | DV_II_55_0_bit)) != 0 {
68 mask &= ((((W[51] ^ (W[54] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_I_51_0_bit | DV_II_47_0_bit | DV_II_49_0_bit | DV_II_55_0_bit))
69 }
70 if (mask & (DV_I_48_0_bit | DV_II_47_0_bit | DV_II_52_0_bit | DV_II_53_0_bit)) != 0 {
71 mask &= (((((W[51] ^ W[52]) >> 29) & 1) - 1) | ^(DV_I_48_0_bit | DV_II_47_0_bit | DV_II_52_0_bit | DV_II_53_0_bit))
72 }
73 if (mask & (DV_I_46_0_bit | DV_I_49_0_bit | DV_II_45_0_bit | DV_II_48_0_bit)) != 0 {
74 mask &= (((((W[36] >> 4) ^ (W[40] >> 29)) & 1) - 1) | ^(DV_I_46_0_bit | DV_I_49_0_bit | DV_II_45_0_bit | DV_II_48_0_bit))
75 }
76 if (mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_49_0_bit)) != 0 {
77 mask &= ((0 - (((W[53] ^ W[56]) >> 29) & 1)) | ^(DV_I_52_0_bit | DV_II_48_0_bit | DV_II_49_0_bit))
78 }
79 if (mask & (DV_I_50_0_bit | DV_II_46_0_bit | DV_II_47_0_bit)) != 0 {
80 mask &= ((0 - (((W[51] ^ W[54]) >> 29) & 1)) | ^(DV_I_50_0_bit | DV_II_46_0_bit | DV_II_47_0_bit))
81 }
82 if (mask & (DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit)) != 0 {
83 mask &= ((0 - (((W[50] ^ W[52]) >> 29) & 1)) | ^(DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit))
84 }
85 if (mask & (DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit)) != 0 {
86 mask &= ((0 - (((W[49] ^ W[51]) >> 29) & 1)) | ^(DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit))
87 }
88 if (mask & (DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit)) != 0 {
89 mask &= ((0 - (((W[48] ^ W[50]) >> 29) & 1)) | ^(DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit))
90 }
91 if (mask & (DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit)) != 0 {
92 mask &= ((0 - (((W[47] ^ W[49]) >> 29) & 1)) | ^(DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit))
93 }
94 if (mask & (DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit)) != 0 {
95 mask &= ((0 - (((W[46] ^ W[48]) >> 29) & 1)) | ^(DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit))
96 }
97 mask &= ((((W[45] ^ W[47]) & (1 << 6)) - (1 << 6)) | ^(DV_I_47_2_bit | DV_I_49_2_bit | DV_I_51_2_bit))
98 if (mask & (DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit)) != 0 {
99 mask &= ((0 - (((W[45] ^ W[47]) >> 29) & 1)) | ^(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit))
100 }
101 mask &= (((((W[44] ^ W[46]) >> 6) & 1) - 1) | ^(DV_I_46_2_bit | DV_I_48_2_bit | DV_I_50_2_bit))
102 if (mask & (DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit)) != 0 {
103 mask &= ((0 - (((W[44] ^ W[46]) >> 29) & 1)) | ^(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit))
104 }
105 mask &= ((0 - ((W[41] ^ (W[42] >> 5)) & (1 << 1))) | ^(DV_I_48_2_bit | DV_II_46_2_bit | DV_II_51_2_bit))
106 mask &= ((0 - ((W[40] ^ (W[41] >> 5)) & (1 << 1))) | ^(DV_I_47_2_bit | DV_I_51_2_bit | DV_II_50_2_bit))
107 if (mask & (DV_I_44_0_bit | DV_I_46_0_bit | DV_II_56_0_bit)) != 0 {
108 mask &= ((0 - (((W[40] ^ W[42]) >> 4) & 1)) | ^(DV_I_44_0_bit | DV_I_46_0_bit | DV_II_56_0_bit))
109 }
110 mask &= ((0 - ((W[39] ^ (W[40] >> 5)) & (1 << 1))) | ^(DV_I_46_2_bit | DV_I_50_2_bit | DV_II_49_2_bit))
111 if (mask & (DV_I_43_0_bit | DV_I_45_0_bit | DV_II_55_0_bit)) != 0 {
112 mask &= ((0 - (((W[39] ^ W[41]) >> 4) & 1)) | ^(DV_I_43_0_bit | DV_I_45_0_bit | DV_II_55_0_bit))
113 }
114 if (mask & (DV_I_44_0_bit | DV_II_54_0_bit | DV_II_56_0_bit)) != 0 {
115 mask &= ((0 - (((W[38] ^ W[40]) >> 4) & 1)) | ^(DV_I_44_0_bit | DV_II_54_0_bit | DV_II_56_0_bit))
116 }
117 if (mask & (DV_I_43_0_bit | DV_II_53_0_bit | DV_II_55_0_bit)) != 0 {
118 mask &= ((0 - (((W[37] ^ W[39]) >> 4) & 1)) | ^(DV_I_43_0_bit | DV_II_53_0_bit | DV_II_55_0_bit))
119 }
120 mask &= ((0 - ((W[36] ^ (W[37] >> 5)) & (1 << 1))) | ^(DV_I_47_2_bit | DV_I_50_2_bit | DV_II_46_2_bit))
121 if (mask & (DV_I_45_0_bit | DV_I_48_0_bit | DV_II_47_0_bit)) != 0 {
122 mask &= (((((W[35] >> 4) ^ (W[39] >> 29)) & 1) - 1) | ^(DV_I_45_0_bit | DV_I_48_0_bit | DV_II_47_0_bit))
123 }
124 if (mask & (DV_I_48_0_bit | DV_II_48_0_bit)) != 0 {
125 mask &= ((0 - ((W[63] ^ (W[64] >> 5)) & (1 << 0))) | ^(DV_I_48_0_bit | DV_II_48_0_bit))
126 }
127 if (mask & (DV_I_45_0_bit | DV_II_45_0_bit)) != 0 {
128 mask &= ((0 - ((W[63] ^ (W[64] >> 5)) & (1 << 1))) | ^(DV_I_45_0_bit | DV_II_45_0_bit))
129 }
130 if (mask & (DV_I_47_0_bit | DV_II_47_0_bit)) != 0 {
131 mask &= ((0 - ((W[62] ^ (W[63] >> 5)) & (1 << 0))) | ^(DV_I_47_0_bit | DV_II_47_0_bit))
132 }
133 if (mask & (DV_I_46_0_bit | DV_II_46_0_bit)) != 0 {
134 mask &= ((0 - ((W[61] ^ (W[62] >> 5)) & (1 << 0))) | ^(DV_I_46_0_bit | DV_II_46_0_bit))
135 }
136 mask &= ((0 - ((W[61] ^ (W[62] >> 5)) & (1 << 2))) | ^(DV_I_46_2_bit | DV_II_46_2_bit))
137 if (mask & (DV_I_45_0_bit | DV_II_45_0_bit)) != 0 {
138 mask &= ((0 - ((W[60] ^ (W[61] >> 5)) & (1 << 0))) | ^(DV_I_45_0_bit | DV_II_45_0_bit))
139 }
140 if (mask & (DV_II_51_0_bit | DV_II_54_0_bit)) != 0 {
141 mask &= (((((W[58] ^ W[59]) >> 29) & 1) - 1) | ^(DV_II_51_0_bit | DV_II_54_0_bit))
142 }
143 if (mask & (DV_II_50_0_bit | DV_II_53_0_bit)) != 0 {
144 mask &= (((((W[57] ^ W[58]) >> 29) & 1) - 1) | ^(DV_II_50_0_bit | DV_II_53_0_bit))
145 }
146 if (mask & (DV_II_52_0_bit | DV_II_54_0_bit)) != 0 {
147 mask &= ((((W[56] ^ (W[59] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_II_52_0_bit | DV_II_54_0_bit))
148 }
149 if (mask & (DV_II_51_0_bit | DV_II_52_0_bit)) != 0 {
150 mask &= ((0 - (((W[56] ^ W[59]) >> 29) & 1)) | ^(DV_II_51_0_bit | DV_II_52_0_bit))
151 }
152 if (mask & (DV_II_49_0_bit | DV_II_52_0_bit)) != 0 {
153 mask &= (((((W[56] ^ W[57]) >> 29) & 1) - 1) | ^(DV_II_49_0_bit | DV_II_52_0_bit))
154 }
155 if (mask & (DV_II_51_0_bit | DV_II_53_0_bit)) != 0 {
156 mask &= ((((W[55] ^ (W[58] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_II_51_0_bit | DV_II_53_0_bit))
157 }
158 if (mask & (DV_II_50_0_bit | DV_II_52_0_bit)) != 0 {
159 mask &= ((((W[54] ^ (W[57] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_II_50_0_bit | DV_II_52_0_bit))
160 }
161 if (mask & (DV_II_49_0_bit | DV_II_51_0_bit)) != 0 {
162 mask &= ((((W[53] ^ (W[56] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_II_49_0_bit | DV_II_51_0_bit))
163 }
164 mask &= ((((W[51] ^ (W[50] >> 5)) & (1 << 1)) - (1 << 1)) | ^(DV_I_50_2_bit | DV_II_46_2_bit))
165 mask &= ((((W[48] ^ W[50]) & (1 << 6)) - (1 << 6)) | ^(DV_I_50_2_bit | DV_II_46_2_bit))
166 if (mask & (DV_I_51_0_bit | DV_I_52_0_bit)) != 0 {
167 mask &= ((0 - (((W[48] ^ W[55]) >> 29) & 1)) | ^(DV_I_51_0_bit | DV_I_52_0_bit))
168 }
169 mask &= ((((W[47] ^ W[49]) & (1 << 6)) - (1 << 6)) | ^(DV_I_49_2_bit | DV_I_51_2_bit))
170 mask &= ((((W[48] ^ (W[47] >> 5)) & (1 << 1)) - (1 << 1)) | ^(DV_I_47_2_bit | DV_II_51_2_bit))
171 mask &= ((((W[46] ^ W[48]) & (1 << 6)) - (1 << 6)) | ^(DV_I_48_2_bit | DV_I_50_2_bit))
172 mask &= ((((W[47] ^ (W[46] >> 5)) & (1 << 1)) - (1 << 1)) | ^(DV_I_46_2_bit | DV_II_50_2_bit))
173 mask &= ((0 - ((W[44] ^ (W[45] >> 5)) & (1 << 1))) | ^(DV_I_51_2_bit | DV_II_49_2_bit))
174 mask &= ((((W[43] ^ W[45]) & (1 << 6)) - (1 << 6)) | ^(DV_I_47_2_bit | DV_I_49_2_bit))
175 mask &= (((((W[42] ^ W[44]) >> 6) & 1) - 1) | ^(DV_I_46_2_bit | DV_I_48_2_bit))
176 mask &= ((((W[43] ^ (W[42] >> 5)) & (1 << 1)) - (1 << 1)) | ^(DV_II_46_2_bit | DV_II_51_2_bit))
177 mask &= ((((W[42] ^ (W[41] >> 5)) & (1 << 1)) - (1 << 1)) | ^(DV_I_51_2_bit | DV_II_50_2_bit))
178 mask &= ((((W[41] ^ (W[40] >> 5)) & (1 << 1)) - (1 << 1)) | ^(DV_I_50_2_bit | DV_II_49_2_bit))
179 if (mask & (DV_I_52_0_bit | DV_II_51_0_bit)) != 0 {
180 mask &= ((((W[39] ^ (W[43] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_I_52_0_bit | DV_II_51_0_bit))
181 }
182 if (mask & (DV_I_51_0_bit | DV_II_50_0_bit)) != 0 {
183 mask &= ((((W[38] ^ (W[42] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_I_51_0_bit | DV_II_50_0_bit))
184 }
185 if (mask & (DV_I_48_2_bit | DV_I_51_2_bit)) != 0 {
186 mask &= ((0 - ((W[37] ^ (W[38] >> 5)) & (1 << 1))) | ^(DV_I_48_2_bit | DV_I_51_2_bit))
187 }
188 if (mask & (DV_I_50_0_bit | DV_II_49_0_bit)) != 0 {
189 mask &= ((((W[37] ^ (W[41] >> 25)) & (1 << 4)) - (1 << 4)) | ^(DV_I_50_0_bit | DV_II_49_0_bit))
190 }
191 if (mask & (DV_II_52_0_bit | DV_II_54_0_bit)) != 0 {
192 mask &= ((0 - ((W[36] ^ W[38]) & (1 << 4))) | ^(DV_II_52_0_bit | DV_II_54_0_bit))
193 }
194 mask &= ((0 - ((W[35] ^ (W[36] >> 5)) & (1 << 1))) | ^(DV_I_46_2_bit | DV_I_49_2_bit))
195 if (mask & (DV_I_51_0_bit | DV_II_47_0_bit)) != 0 {
196 mask &= ((((W[35] ^ (W[39] >> 25)) & (1 << 3)) - (1 << 3)) | ^(DV_I_51_0_bit | DV_II_47_0_bit))
197 }
198
199 if mask != 0 {
200 if (mask & DV_I_43_0_bit) != 0 {
201 if not((W[61]^(W[62]>>5))&(1<<1)) != 0 ||
202 not(not((W[59]^(W[63]>>25))&(1<<5))) != 0 ||
203 not((W[58]^(W[63]>>30))&(1<<0)) != 0 {
204 mask &= ^DV_I_43_0_bit
205 }
206 }
207 if (mask & DV_I_44_0_bit) != 0 {
208 if not((W[62]^(W[63]>>5))&(1<<1)) != 0 ||
209 not(not((W[60]^(W[64]>>25))&(1<<5))) != 0 ||
210 not((W[59]^(W[64]>>30))&(1<<0)) != 0 {
211 mask &= ^DV_I_44_0_bit
212 }
213 }
214 if (mask & DV_I_46_2_bit) != 0 {
215 mask &= ((^((W[40] ^ W[42]) >> 2)) | ^DV_I_46_2_bit)
216 }
217 if (mask & DV_I_47_2_bit) != 0 {
218 if not((W[62]^(W[63]>>5))&(1<<2)) != 0 ||
219 not(not((W[41]^W[43])&(1<<6))) != 0 {
220 mask &= ^DV_I_47_2_bit
221 }
222 }
223 if (mask & DV_I_48_2_bit) != 0 {
224 if not((W[63]^(W[64]>>5))&(1<<2)) != 0 ||
225 not(not((W[48]^(W[49]<<5))&(1<<6))) != 0 {
226 mask &= ^DV_I_48_2_bit
227 }
228 }
229 if (mask & DV_I_49_2_bit) != 0 {
230 if not(not((W[49]^(W[50]<<5))&(1<<6))) != 0 ||
231 not((W[42]^W[50])&(1<<1)) != 0 ||
232 not(not((W[39]^(W[40]<<5))&(1<<6))) != 0 ||
233 not((W[38]^W[40])&(1<<1)) != 0 {
234 mask &= ^DV_I_49_2_bit
235 }
236 }
237 if (mask & DV_I_50_0_bit) != 0 {
238 mask &= (((W[36] ^ W[37]) << 7) | ^DV_I_50_0_bit)
239 }
240 if (mask & DV_I_50_2_bit) != 0 {
241 mask &= (((W[43] ^ W[51]) << 11) | ^DV_I_50_2_bit)
242 }
243 if (mask & DV_I_51_0_bit) != 0 {
244 mask &= (((W[37] ^ W[38]) << 9) | ^DV_I_51_0_bit)
245 }
246 if (mask & DV_I_51_2_bit) != 0 {
247 if not(not((W[51]^(W[52]<<5))&(1<<6))) != 0 ||
248 not(not((W[49]^W[51])&(1<<6))) != 0 ||
249 not(not((W[37]^(W[37]>>5))&(1<<1))) != 0 ||
250 not(not((W[35]^(W[39]>>25))&(1<<5))) != 0 {
251 mask &= ^DV_I_51_2_bit
252 }
253 }
254 if (mask & DV_I_52_0_bit) != 0 {
255 mask &= (((W[38] ^ W[39]) << 11) | ^DV_I_52_0_bit)
256 }
257 if (mask & DV_II_46_2_bit) != 0 {
258 mask &= (((W[47] ^ W[51]) << 17) | ^DV_II_46_2_bit)
259 }
260 if (mask & DV_II_48_0_bit) != 0 {
261 if not(not((W[36]^(W[40]>>25))&(1<<3))) != 0 ||
262 not((W[35]^(W[40]<<2))&(1<<30)) != 0 {
263 mask &= ^DV_II_48_0_bit
264 }
265 }
266 if (mask & DV_II_49_0_bit) != 0 {
267 if not(not((W[37]^(W[41]>>25))&(1<<3))) != 0 ||
268 not((W[36]^(W[41]<<2))&(1<<30)) != 0 {
269 mask &= ^DV_II_49_0_bit
270 }
271 }
272 if (mask & DV_II_49_2_bit) != 0 {
273 if not(not((W[53]^(W[54]<<5))&(1<<6))) != 0 ||
274 not(not((W[51]^W[53])&(1<<6))) != 0 ||
275 not((W[50]^W[54])&(1<<1)) != 0 ||
276 not(not((W[45]^(W[46]<<5))&(1<<6))) != 0 ||
277 not(not((W[37]^(W[41]>>25))&(1<<5))) != 0 ||
278 not((W[36]^(W[41]>>30))&(1<<0)) != 0 {
279 mask &= ^DV_II_49_2_bit
280 }
281 }
282 if (mask & DV_II_50_0_bit) != 0 {
283 if not((W[55]^W[58])&(1<<29)) != 0 ||
284 not(not((W[38]^(W[42]>>25))&(1<<3))) != 0 ||
285 not((W[37]^(W[42]<<2))&(1<<30)) != 0 {
286 mask &= ^DV_II_50_0_bit
287 }
288 }
289 if (mask & DV_II_50_2_bit) != 0 {
290 if not(not((W[54]^(W[55]<<5))&(1<<6))) != 0 ||
291 not(not((W[52]^W[54])&(1<<6))) != 0 ||
292 not((W[51]^W[55])&(1<<1)) != 0 ||
293 not((W[45]^W[47])&(1<<1)) != 0 ||
294 not(not((W[38]^(W[42]>>25))&(1<<5))) != 0 ||
295 not((W[37]^(W[42]>>30))&(1<<0)) != 0 {
296 mask &= ^DV_II_50_2_bit
297 }
298 }
299 if (mask & DV_II_51_0_bit) != 0 {
300 if not(not((W[39]^(W[43]>>25))&(1<<3))) != 0 ||
301 not((W[38]^(W[43]<<2))&(1<<30)) != 0 {
302 mask &= ^DV_II_51_0_bit
303 }
304 }
305 if (mask & DV_II_51_2_bit) != 0 {
306 if not(not((W[55]^(W[56]<<5))&(1<<6))) != 0 ||
307 not(not((W[53]^W[55])&(1<<6))) != 0 ||
308 not((W[52]^W[56])&(1<<1)) != 0 ||
309 not((W[46]^W[48])&(1<<1)) != 0 ||
310 not(not((W[39]^(W[43]>>25))&(1<<5))) != 0 ||
311 not((W[38]^(W[43]>>30))&(1<<0)) != 0 {
312 mask &= ^DV_II_51_2_bit
313 }
314 }
315 if (mask & DV_II_52_0_bit) != 0 {
316 if not(not((W[59]^W[60])&(1<<29))) != 0 ||
317 not(not((W[40]^(W[44]>>25))&(1<<3))) != 0 ||
318 not(not((W[40]^(W[44]>>25))&(1<<4))) != 0 ||
319 not((W[39]^(W[44]<<2))&(1<<30)) != 0 {
320 mask &= ^DV_II_52_0_bit
321 }
322 }
323 if (mask & DV_II_53_0_bit) != 0 {
324 if not((W[58]^W[61])&(1<<29)) != 0 ||
325 not(not((W[57]^(W[61]>>25))&(1<<4))) != 0 ||
326 not(not((W[41]^(W[45]>>25))&(1<<3))) != 0 ||
327 not(not((W[41]^(W[45]>>25))&(1<<4))) != 0 {
328 mask &= ^DV_II_53_0_bit
329 }
330 }
331 if (mask & DV_II_54_0_bit) != 0 {
332 if not(not((W[58]^(W[62]>>25))&(1<<4))) != 0 ||
333 not(not((W[42]^(W[46]>>25))&(1<<3))) != 0 ||
334 not(not((W[42]^(W[46]>>25))&(1<<4))) != 0 {
335 mask &= ^DV_II_54_0_bit
336 }
337 }
338 if (mask & DV_II_55_0_bit) != 0 {
339 if not(not((W[59]^(W[63]>>25))&(1<<4))) != 0 ||
340 not(not((W[57]^(W[59]>>25))&(1<<4))) != 0 ||
341 not(not((W[43]^(W[47]>>25))&(1<<3))) != 0 ||
342 not(not((W[43]^(W[47]>>25))&(1<<4))) != 0 {
343 mask &= ^DV_II_55_0_bit
344 }
345 }
346 if (mask & DV_II_56_0_bit) != 0 {
347 if not(not((W[60]^(W[64]>>25))&(1<<4))) != 0 ||
348 not(not((W[44]^(W[48]>>25))&(1<<3))) != 0 ||
349 not(not((W[44]^(W[48]>>25))&(1<<4))) != 0 {
350 mask &= ^DV_II_56_0_bit
351 }
352 }
353 }
354
355 return mask
356}
357
358func not(x uint32) uint32 {
359 if x == 0 {
360 return 1
361 }
362
363 return 0
364}
365
366func SHA1_dvs() []DvInfo {
367 return sha1_dvs
368}