1 C arm/v6/sha1-compress.asm
4 Copyright (C) 2013 Niels Möller
6 This file is part of GNU Nettle.
8 GNU Nettle is free software: you can redistribute it and/or
9 modify it under the terms of either:
11 * the GNU Lesser General Public License as published by the Free
12 Software Foundation; either version 3 of the License, or (at your
13 option) any later version.
17 * the GNU General Public License as published by the Free
18 Software Foundation; either version 2 of the License, or (at your
19 option) any later version.
21 or both in parallel, as here.
23 GNU Nettle is distributed in the hope that it will be useful,
24 but WITHOUT ANY WARRANTY; without even the implied warranty of
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26 General Public License for more details.
28 You should have received copies of the GNU General Public License and
29 the GNU Lesser General Public License along with this program. If
30 not, see http://www.gnu.org/licenses/.
33 .file "sha1-compress.asm"
45 define(<WPREV>, <r10>)
49 C FIXME: Could avoid a mov with even and odd variants.
56 str W, [SP,#eval(4*$1)]
59 ldr W, [sp, #+eval(4*$1)]
60 ldr T0, [sp, #+eval(4*(($1 + 2) % 16))]
62 ldr T0, [sp, #+eval(4*(($1 + 8) % 16))]
64 ldr T0, [sp, #+eval(4*(($1 + 13) % 16))]
67 str W, [sp, #+eval(4*$1)]
70 C F1(B,C,D) = D^(B&(C^D))
76 add $5, $5, $1, ror #27
87 add $5, $5, $1, ror #27
92 C F3(B,C,D) = (B&C) | (D & (B|C)) = (B & (C ^ D)) + (C & D)
97 add $5, $5, $1, ror #27
104 C void _nettle_sha1_compress(uint32_t *state, const uint8_t *input)
115 PROLOGUE(_nettle_sha1_compress)
116 push {r4,r5,r6,r7,r8,r10,lr}
119 C Sets SHIFT to 8*low bits of input pointer. Sets up GE flags
120 C as follows, corresponding to bytes to be used from WPREV
122 C CPSR.GE 0000 1110 1100 1000
123 ands SHIFT, INPUT, #3
124 and INPUT, INPUT, $-4
126 addne INPUT, INPUT, #4 C Unaligned input
131 uadd8 T0, T0, W C Sets APSR.GE bits
134 ldm STATE, {SA,SB,SC,SD,SE}
136 LOAD( 0) ROUND1(SA, SB, SC, SD, SE)
137 LOAD( 1) ROUND1(SE, SA, SB, SC, SD)
138 LOAD( 2) ROUND1(SD, SE, SA, SB, SC)
139 LOAD( 3) ROUND1(SC, SD, SE, SA, SB)
140 LOAD( 4) ROUND1(SB, SC, SD, SE, SA)
142 LOAD( 5) ROUND1(SA, SB, SC, SD, SE)
143 LOAD( 6) ROUND1(SE, SA, SB, SC, SD)
144 LOAD( 7) ROUND1(SD, SE, SA, SB, SC)
145 LOAD( 8) ROUND1(SC, SD, SE, SA, SB)
146 LOAD( 9) ROUND1(SB, SC, SD, SE, SA)
148 LOAD(10) ROUND1(SA, SB, SC, SD, SE)
149 LOAD(11) ROUND1(SE, SA, SB, SC, SD)
150 LOAD(12) ROUND1(SD, SE, SA, SB, SC)
151 LOAD(13) ROUND1(SC, SD, SE, SA, SB)
152 LOAD(14) ROUND1(SB, SC, SD, SE, SA)
154 LOAD(15) ROUND1(SA, SB, SC, SD, SE)
155 EXPN( 0) ROUND1(SE, SA, SB, SC, SD)
156 EXPN( 1) ROUND1(SD, SE, SA, SB, SC)
157 EXPN( 2) ROUND1(SC, SD, SE, SA, SB)
158 EXPN( 3) ROUND1(SB, SC, SD, SE, SA)
161 EXPN( 4) ROUND2(SA, SB, SC, SD, SE)
162 EXPN( 5) ROUND2(SE, SA, SB, SC, SD)
163 EXPN( 6) ROUND2(SD, SE, SA, SB, SC)
164 EXPN( 7) ROUND2(SC, SD, SE, SA, SB)
165 EXPN( 8) ROUND2(SB, SC, SD, SE, SA)
167 EXPN( 9) ROUND2(SA, SB, SC, SD, SE)
168 EXPN(10) ROUND2(SE, SA, SB, SC, SD)
169 EXPN(11) ROUND2(SD, SE, SA, SB, SC)
170 EXPN(12) ROUND2(SC, SD, SE, SA, SB)
171 EXPN(13) ROUND2(SB, SC, SD, SE, SA)
173 EXPN(14) ROUND2(SA, SB, SC, SD, SE)
174 EXPN(15) ROUND2(SE, SA, SB, SC, SD)
175 EXPN( 0) ROUND2(SD, SE, SA, SB, SC)
176 EXPN( 1) ROUND2(SC, SD, SE, SA, SB)
177 EXPN( 2) ROUND2(SB, SC, SD, SE, SA)
179 EXPN( 3) ROUND2(SA, SB, SC, SD, SE)
180 EXPN( 4) ROUND2(SE, SA, SB, SC, SD)
181 EXPN( 5) ROUND2(SD, SE, SA, SB, SC)
182 EXPN( 6) ROUND2(SC, SD, SE, SA, SB)
183 EXPN( 7) ROUND2(SB, SC, SD, SE, SA)
186 EXPN( 8) ROUND3(SA, SB, SC, SD, SE)
187 EXPN( 9) ROUND3(SE, SA, SB, SC, SD)
188 EXPN(10) ROUND3(SD, SE, SA, SB, SC)
189 EXPN(11) ROUND3(SC, SD, SE, SA, SB)
190 EXPN(12) ROUND3(SB, SC, SD, SE, SA)
192 EXPN(13) ROUND3(SA, SB, SC, SD, SE)
193 EXPN(14) ROUND3(SE, SA, SB, SC, SD)
194 EXPN(15) ROUND3(SD, SE, SA, SB, SC)
195 EXPN( 0) ROUND3(SC, SD, SE, SA, SB)
196 EXPN( 1) ROUND3(SB, SC, SD, SE, SA)
198 EXPN( 2) ROUND3(SA, SB, SC, SD, SE)
199 EXPN( 3) ROUND3(SE, SA, SB, SC, SD)
200 EXPN( 4) ROUND3(SD, SE, SA, SB, SC)
201 EXPN( 5) ROUND3(SC, SD, SE, SA, SB)
202 EXPN( 6) ROUND3(SB, SC, SD, SE, SA)
204 EXPN( 7) ROUND3(SA, SB, SC, SD, SE)
205 EXPN( 8) ROUND3(SE, SA, SB, SC, SD)
206 EXPN( 9) ROUND3(SD, SE, SA, SB, SC)
207 EXPN(10) ROUND3(SC, SD, SE, SA, SB)
208 EXPN(11) ROUND3(SB, SC, SD, SE, SA)
211 EXPN(12) ROUND2(SA, SB, SC, SD, SE)
212 EXPN(13) ROUND2(SE, SA, SB, SC, SD)
213 EXPN(14) ROUND2(SD, SE, SA, SB, SC)
214 EXPN(15) ROUND2(SC, SD, SE, SA, SB)
215 EXPN( 0) ROUND2(SB, SC, SD, SE, SA)
217 EXPN( 1) ROUND2(SA, SB, SC, SD, SE)
218 EXPN( 2) ROUND2(SE, SA, SB, SC, SD)
219 EXPN( 3) ROUND2(SD, SE, SA, SB, SC)
220 EXPN( 4) ROUND2(SC, SD, SE, SA, SB)
221 EXPN( 5) ROUND2(SB, SC, SD, SE, SA)
223 EXPN( 6) ROUND2(SA, SB, SC, SD, SE)
224 EXPN( 7) ROUND2(SE, SA, SB, SC, SD)
225 EXPN( 8) ROUND2(SD, SE, SA, SB, SC)
226 EXPN( 9) ROUND2(SC, SD, SE, SA, SB)
227 EXPN(10) ROUND2(SB, SC, SD, SE, SA)
229 EXPN(11) ROUND2(SA, SB, SC, SD, SE)
230 EXPN(12) ROUND2(SE, SA, SB, SC, SD)
231 EXPN(13) ROUND2(SD, SE, SA, SB, SC)
232 EXPN(14) ROUND2(SC, SD, SE, SA, SB)
233 EXPN(15) ROUND2(SB, SC, SD, SE, SA)
235 C Use registers we no longer need.
236 ldm STATE, {INPUT,T0,SHIFT,W,K}
243 stm STATE, {SA,SB,SC,SD,SE}
244 pop {r4,r5,r6,r7,r8,r10,pc}
245 EPILOGUE(_nettle_sha1_compress)