• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.text
2
3.type	__KeccakF1600,@function
4.align	32
5__KeccakF1600:
6	stg	%r14,8*14(%r15)
7	lg	%r0,160(%r2)
8	lg	%r1,168(%r2)
9	lg	%r5,176(%r2)
10	lg	%r6,184(%r2)
11	lg	%r7,192(%r2)
12	larl	%r4,iotas
13	j	.Loop
14
15.align	16
16.Loop:
17	lg	%r8,0(%r2)
18	lg	%r9,48(%r2)
19	lg	%r10,96(%r2)
20	lg	%r11,144(%r2)
21
22	xgr	%r0,%r8
23	xg	%r1,8(%r2)
24	xg	%r5,16(%r2)
25	xg	%r6,24(%r2)
26	lgr	%r12,%r7
27	xg	%r7,32(%r2)
28
29	xg	%r0,40(%r2)
30	xgr	%r1,%r9
31	xg	%r5,56(%r2)
32	xg	%r6,64(%r2)
33	xg	%r7,72(%r2)
34
35	xg	%r0,80(%r2)
36	xg	%r1,88(%r2)
37	xgr	%r5,%r10
38	xg	%r6,104(%r2)
39	xg	%r7,112(%r2)
40
41	xg	%r0,120(%r2)
42	xg	%r1,128(%r2)
43	xg	%r5,136(%r2)
44	xgr	%r6,%r11
45	xg	%r7,152(%r2)
46
47	lgr	%r13,%r5
48	rllg	%r5,%r5,1
49	xgr	%r5,%r0		# D[1] = ROL64(C[2], 1) ^ C[0]
50
51	rllg	%r0,%r0,1
52	xgr	%r0,%r6		# D[4] = ROL64(C[0], 1) ^ C[3]
53
54	rllg	%r6,%r6,1
55	xgr	%r6,%r1		# D[2] = ROL64(C[3], 1) ^ C[1]
56
57	rllg	%r1,%r1,1
58	xgr	%r1,%r7		# D[0] = ROL64(C[1], 1) ^ C[4]
59
60	rllg	%r7,%r7,1
61	xgr	%r7,%r13		# D[3] = ROL64(C[4], 1) ^ C[2]
62	xgr	%r9,%r5
63	xgr	%r10,%r6
64	xgr	%r11,%r7
65	 rllg	%r9,%r9,44
66	xgr	%r12,%r0
67	 rllg	%r10,%r10,43
68	xgr	%r8,%r1
69
70	lgr	%r13,%r9
71	ogr	%r9,%r10
72	 rllg	%r11,%r11,21
73	xgr	%r9,%r8		#	    C[0] ^ ( C[1] | C[2])
74	 rllg	%r12,%r12,14
75	xg	%r9,0(%r4)
76	la	%r4,8(%r4)
77	stg	%r9,0(%r3)	# R[0][0] = C[0] ^ ( C[1] | C[2]) ^ iotas[i]
78
79	lgr	%r14,%r12
80	ngr	%r12,%r11
81	 lghi	%r9,-1		# no 'not' instruction :-(
82	xgr	%r12,%r10		#	    C[2] ^ ( C[4] & C[3])
83	 xgr	%r10,%r9		# not	%r10
84	stg	%r12,16(%r3)	# R[0][2] = C[2] ^ ( C[4] & C[3])
85	 ogr	%r10,%r11
86	 xgr	%r10,%r13		#	    C[1] ^ (~C[2] | C[3])
87
88	ngr	%r13,%r8
89	 stg	%r10,8(%r3)	# R[0][1] = C[1] ^ (~C[2] | C[3])
90	xgr	%r13,%r14		#	    C[4] ^ ( C[1] & C[0])
91	 ogr	%r14,%r8
92	stg	%r13,32(%r3)	# R[0][4] = C[4] ^ ( C[1] & C[0])
93	 xgr	%r14,%r11		#	    C[3] ^ ( C[4] | C[0])
94	 stg	%r14,24(%r3)	# R[0][3] = C[3] ^ ( C[4] | C[0])
95
96
97	lg	%r8,24(%r2)
98	lg	%r12,176(%r2)
99	lg	%r11,128(%r2)
100	lg	%r9,72(%r2)
101	lg	%r10,80(%r2)
102
103	xgr	%r8,%r7
104	xgr	%r12,%r6
105	 rllg	%r8,%r8,28
106	xgr	%r11,%r5
107	 rllg	%r12,%r12,61
108	xgr	%r9,%r0
109	 rllg	%r11,%r11,45
110	xgr	%r10,%r1
111
112	lgr	%r13,%r8
113	ogr	%r8,%r12
114	 rllg	%r9,%r9,20
115	xgr	%r8,%r11		#	    C[3] ^ (C[0] |  C[4])
116	 rllg	%r10,%r10,3
117	stg	%r8,64(%r3)	# R[1][3] = C[3] ^ (C[0] |  C[4])
118
119	lgr	%r14,%r9
120	ngr	%r9,%r13
121	 lghi	%r8,-1		# no 'not' instruction :-(
122	xgr	%r9,%r12		#	    C[4] ^ (C[1] &  C[0])
123	 xgr	%r12,%r8		# not	%r12
124	stg	%r9,72(%r3)	# R[1][4] = C[4] ^ (C[1] &  C[0])
125
126	 ogr	%r12,%r11
127	 xgr	%r12,%r10		#	    C[2] ^ (~C[4] | C[3])
128
129	ngr	%r11,%r10
130	 stg	%r12,56(%r3)	# R[1][2] = C[2] ^ (~C[4] | C[3])
131	xgr	%r11,%r14		#	    C[1] ^ (C[3] &  C[2])
132	 ogr	%r14,%r10
133	stg	%r11,48(%r3)	# R[1][1] = C[1] ^ (C[3] &  C[2])
134	 xgr	%r14,%r13		#	    C[0] ^ (C[1] |  C[2])
135	 stg	%r14,40(%r3)	# R[1][0] = C[0] ^ (C[1] |  C[2])
136
137
138	lg	%r10,104(%r2)
139	lg	%r11,152(%r2)
140	lg	%r9,56(%r2)
141	lg	%r12,160(%r2)
142	lg	%r8,8(%r2)
143
144	xgr	%r10,%r7
145	xgr	%r11,%r0
146	 rllg	%r10,%r10,25
147	xgr	%r9,%r6
148	 rllg	%r11,%r11,8
149	xgr	%r12,%r1
150	 rllg	%r9,%r9,6
151	xgr	%r8,%r5
152
153	lgr	%r13,%r10
154	ngr	%r10,%r11
155	 rllg	%r12,%r12,18
156	xgr	%r10,%r9		#	     C[1] ^ ( C[2] & C[3])
157	lghi	%r14,-1		# no 'not' instruction :-(
158	stg	%r10,88(%r3)	# R[2][1] =  C[1] ^ ( C[2] & C[3])
159
160	xgr	%r11,%r14		# not	%r11
161	lgr	%r14,%r12
162	ngr	%r12,%r11
163	 rllg	%r8,%r8,1
164	xgr	%r12,%r13		#	     C[2] ^ ( C[4] & ~C[3])
165	 ogr	%r13,%r9
166	stg	%r12,96(%r3)	# R[2][2] =  C[2] ^ ( C[4] & ~C[3])
167	 xgr	%r13,%r8		#	     C[0] ^ ( C[2] | C[1])
168
169	ngr	%r9,%r8
170	 stg	%r13,80(%r3)	# R[2][0] =  C[0] ^ ( C[2] | C[1])
171	xgr	%r9,%r14		#	     C[4] ^ ( C[1] & C[0])
172	 ogr	%r8,%r14
173	stg	%r9,112(%r3)	# R[2][4] =  C[4] ^ ( C[1] & C[0])
174	 xgr	%r8,%r11		#	    ~C[3] ^ ( C[0] | C[4])
175	 stg	%r8,104(%r3)	# R[2][3] = ~C[3] ^ ( C[0] | C[4])
176
177
178	lg	%r10,88(%r2)
179	lg	%r11,136(%r2)
180	lg	%r9,40(%r2)
181	lg	%r12,184(%r2)
182	lg	%r8,32(%r2)
183
184	xgr	%r10,%r5
185	xgr	%r11,%r6
186	 rllg	%r10,%r10,10
187	xgr	%r9,%r1
188	 rllg	%r11,%r11,15
189	xgr	%r12,%r7
190	 rllg	%r9,%r9,36
191	xgr	%r8,%r0
192	 rllg	%r12,%r12,56
193
194	lgr	%r13,%r10
195	ogr	%r10,%r11
196	lghi	%r14,-1		# no 'not' instruction :-(
197	xgr	%r10,%r9		#	     C[1] ^ ( C[2] | C[3])
198	xgr	%r11,%r14		# not	%r11
199	stg	%r10,128(%r3)	# R[3][1] =  C[1] ^ ( C[2] | C[3])
200
201	lgr	%r14,%r12
202	ogr	%r12,%r11
203	 rllg	%r8,%r8,27
204	xgr	%r12,%r13		#	     C[2] ^ ( C[4] | ~C[3])
205	 ngr	%r13,%r9
206	stg	%r12,136(%r3)	# R[3][2] =  C[2] ^ ( C[4] | ~C[3])
207	 xgr	%r13,%r8		#	     C[0] ^ ( C[2] & C[1])
208
209	ogr	%r9,%r8
210	 stg	%r13,120(%r3)	# R[3][0] =  C[0] ^ ( C[2] & C[1])
211	xgr	%r9,%r14		#	     C[4] ^ ( C[1] | C[0])
212	 ngr	%r8,%r14
213	stg	%r9,152(%r3)	# R[3][4] =  C[4] ^ ( C[1] | C[0])
214	 xgr	%r8,%r11		#	    ~C[3] ^ ( C[0] & C[4])
215	 stg	%r8,144(%r3)	# R[3][3] = ~C[3] ^ ( C[0] & C[4])
216
217
218	xg	%r6,16(%r2)
219	xg	%r7,64(%r2)
220	xg	%r5,168(%r2)
221	xg	%r0,112(%r2)
222	xgr	%r3,%r2		# xchg	%r3,%r2
223	 rllg	%r6,%r6,62
224	xg	%r1,120(%r2)
225	 rllg	%r7,%r7,55
226	xgr	%r2,%r3
227	 rllg	%r5,%r5,2
228	xgr	%r3,%r2
229	 rllg	%r0,%r0,39
230	lgr	%r13,%r6
231	ngr	%r6,%r7
232	lghi	%r14,-1		# no 'not' instruction :-(
233	xgr	%r6,%r5		#	     C[4] ^ ( C[0] & C[1])
234	xgr	%r7,%r14		# not	%r7
235	stg	%r6,192(%r2)	# R[4][4] =  C[4] ^ ( C[0] & C[1])
236
237	lgr	%r14,%r0
238	ngr	%r0,%r7
239	 rllg	%r1,%r1,41
240	xgr	%r0,%r13		#	     C[0] ^ ( C[2] & ~C[1])
241	 ogr	%r13,%r5
242	stg	%r0,160(%r2)	# R[4][0] =  C[0] ^ ( C[2] & ~C[1])
243	 xgr	%r13,%r1		#	     C[3] ^ ( C[0] | C[4])
244
245	ngr	%r5,%r1
246	 stg	%r13,184(%r2)	# R[4][3] =  C[3] ^ ( C[0] | C[4])
247	xgr	%r5,%r14		#	     C[2] ^ ( C[4] & C[3])
248	 ogr	%r1,%r14
249	stg	%r5,176(%r2)	# R[4][2] =  C[2] ^ ( C[4] & C[3])
250	 xgr	%r1,%r7		#	    ~C[1] ^ ( C[2] | C[3])
251
252	lgr	%r7,%r6		# harmonize with the loop top
253	lgr	%r6,%r13
254	 stg	%r1,168(%r2)	# R[4][1] = ~C[1] ^ ( C[2] | C[3])
255
256	tmll	%r4,255
257	jnz	.Loop
258
259	lg	%r14,8*14(%r15)
260	br	%r14
261.size	__KeccakF1600,.-__KeccakF1600
262.type	KeccakF1600,@function
263.align	32
264KeccakF1600:
265.LKeccakF1600:
266	lghi	%r1,-360
267	stmg	%r6,%r15,8*6(%r15)
268	lgr	%r0,%r15
269	la	%r15,0(%r1,%r15)
270	stg	%r0,0(%r15)
271
272	lghi	%r8,-1		# no 'not' instruction :-(
273	lghi	%r9,-1
274	lghi	%r10,-1
275	lghi	%r11,-1
276	lghi	%r12,-1
277	lghi	%r13,-1
278	xg	%r8,8(%r2)
279	xg	%r9,16(%r2)
280	xg	%r10,64(%r2)
281	xg	%r11,96(%r2)
282	xg	%r12,136(%r2)
283	xg	%r13,160(%r2)
284	stmg	%r8,%r9,8(%r2)
285	stg	%r10,64(%r2)
286	stg	%r11,96(%r2)
287	stg	%r12,136(%r2)
288	stg	%r13,160(%r2)
289
290	la	%r3,160(%r15)
291
292	bras	%r14,__KeccakF1600
293
294	lghi	%r8,-1		# no 'not' instruction :-(
295	lghi	%r9,-1
296	lghi	%r10,-1
297	lghi	%r11,-1
298	lghi	%r12,-1
299	lghi	%r13,-1
300	xg	%r8,8(%r2)
301	xg	%r9,16(%r2)
302	xg	%r10,64(%r2)
303	xg	%r11,96(%r2)
304	xg	%r12,136(%r2)
305	xg	%r13,160(%r2)
306	stmg	%r8,%r9,8(%r2)
307	stg	%r10,64(%r2)
308	stg	%r11,96(%r2)
309	stg	%r12,136(%r2)
310	stg	%r13,160(%r2)
311
312	lmg	%r6,%r15,360+6*8(%r15)
313	br	%r14
314.size	KeccakF1600,.-KeccakF1600
315.globl	SHA3_absorb
316.type	SHA3_absorb,@function
317.align	32
318SHA3_absorb:
319	lghi	%r1,-360
320	stmg	%r5,%r15,8*5(%r15)
321	lgr	%r0,%r15
322	la	%r15,0(%r1,%r15)
323	stg	%r0,0(%r15)
324
325	lghi	%r8,-1		# no 'not' instruction :-(
326	lghi	%r9,-1
327	lghi	%r10,-1
328	lghi	%r11,-1
329	lghi	%r12,-1
330	lghi	%r13,-1
331	xg	%r8,8(%r2)
332	xg	%r9,16(%r2)
333	xg	%r10,64(%r2)
334	xg	%r11,96(%r2)
335	xg	%r12,136(%r2)
336	xg	%r13,160(%r2)
337	stmg	%r8,%r9,8(%r2)
338	stg	%r10,64(%r2)
339	stg	%r11,96(%r2)
340	stg	%r12,136(%r2)
341	stg	%r13,160(%r2)
342
343.Loop_absorb:
344	clgr	%r4,%r5
345	jl	.Ldone_absorb
346
347	srlg	%r5,%r5,3
348	la	%r1,0(%r2)
349
350.Lblock_absorb:
351	lrvg	%r0,0(%r3)
352	la	%r3,8(%r3)
353	xg	%r0,0(%r1)
354	aghi	%r4,-8
355	stg	%r0,0(%r1)
356	la	%r1,8(%r1)
357	brct	%r5,.Lblock_absorb
358
359	stmg	%r3,%r4,360+3*8(%r15)
360	la	%r3,160(%r15)
361	bras	%r14,__KeccakF1600
362	lmg	%r3,%r5,360+3*8(%r15)
363	j	.Loop_absorb
364
365.align	16
366.Ldone_absorb:
367	lghi	%r8,-1		# no 'not' instruction :-(
368	lghi	%r9,-1
369	lghi	%r10,-1
370	lghi	%r11,-1
371	lghi	%r12,-1
372	lghi	%r13,-1
373	xg	%r8,8(%r2)
374	xg	%r9,16(%r2)
375	xg	%r10,64(%r2)
376	xg	%r11,96(%r2)
377	xg	%r12,136(%r2)
378	xg	%r13,160(%r2)
379	stmg	%r8,%r9,8(%r2)
380	stg	%r10,64(%r2)
381	stg	%r11,96(%r2)
382	stg	%r12,136(%r2)
383	stg	%r13,160(%r2)
384
385	lgr	%r2,%r4		# return value
386
387	lmg	%r6,%r15,360+6*8(%r15)
388	br	%r14
389.size	SHA3_absorb,.-SHA3_absorb
390.globl	SHA3_squeeze
391.type	SHA3_squeeze,@function
392.align	32
393SHA3_squeeze:
394	srlg	%r5,%r5,3
395	stg	%r14,2*8(%r15)
396	lghi	%r14,8
397	stg	%r5,5*8(%r15)
398	la	%r1,0(%r2)
399
400	j	.Loop_squeeze
401
402.align	16
403.Loop_squeeze:
404	clgr %r4,%r14
405	jl	.Ltail_squeeze
406
407	lrvg	%r0,0(%r1)
408	la	%r1,8(%r1)
409	stg	%r0,0(%r3)
410	la	%r3,8(%r3)
411	aghi	%r4,-8			# len -= 8
412	jz	.Ldone_squeeze
413
414	brct	%r5,.Loop_squeeze	# bsz--
415
416	stmg	%r3,%r4,3*8(%r15)
417	bras	%r14,.LKeccakF1600
418	lmg	%r3,%r5,3*8(%r15)
419	lghi	%r14,8
420	la	%r1,0(%r2)
421	j	.Loop_squeeze
422
423.Ltail_squeeze:
424	lg	%r0,0(%r1)
425.Loop_tail_squeeze:
426	stc	%r0,0(%r3)
427	la	%r3,1(%r3)
428	srlg	%r0,%r0,8
429	brct	%r4,.Loop_tail_squeeze
430
431.Ldone_squeeze:
432	lg	%r14,2*8(%r15)
433	br	%r14
434.size	SHA3_squeeze,.-SHA3_squeeze
435.align	256
436	.quad	0,0,0,0,0,0,0,0
437.type	iotas,@object
438iotas:
439	.quad	0x0000000000000001
440	.quad	0x0000000000008082
441	.quad	0x800000000000808a
442	.quad	0x8000000080008000
443	.quad	0x000000000000808b
444	.quad	0x0000000080000001
445	.quad	0x8000000080008081
446	.quad	0x8000000000008009
447	.quad	0x000000000000008a
448	.quad	0x0000000000000088
449	.quad	0x0000000080008009
450	.quad	0x000000008000000a
451	.quad	0x000000008000808b
452	.quad	0x800000000000008b
453	.quad	0x8000000000008089
454	.quad	0x8000000000008003
455	.quad	0x8000000000008002
456	.quad	0x8000000000000080
457	.quad	0x000000000000800a
458	.quad	0x800000008000000a
459	.quad	0x8000000080008081
460	.quad	0x8000000000008080
461	.quad	0x0000000080000001
462	.quad	0x8000000080008008
463.size	iotas,.-iotas
464.asciz	"Keccak-1600 absorb and squeeze for s390x, CRYPTOGAMS by <appro@openssl.org>"
465