• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.text
2
3
4.globl	RC4
5.type	RC4,@function
6.align	16
7RC4:
8.cfi_startproc
9	orq	%rsi,%rsi
10	jne	.Lentry
11	.byte	0xf3,0xc3
12.Lentry:
13	pushq	%rbx
14.cfi_adjust_cfa_offset	8
15.cfi_offset	%rbx,-16
16	pushq	%r12
17.cfi_adjust_cfa_offset	8
18.cfi_offset	%r12,-24
19	pushq	%r13
20.cfi_adjust_cfa_offset	8
21.cfi_offset	%r13,-32
22.Lprologue:
23	movq	%rsi,%r11
24	movq	%rdx,%r12
25	movq	%rcx,%r13
26	xorq	%r10,%r10
27	xorq	%rcx,%rcx
28
29	leaq	8(%rdi),%rdi
30	movb	-8(%rdi),%r10b
31	movb	-4(%rdi),%cl
32	cmpl	$-1,256(%rdi)
33	je	.LRC4_CHAR
34	movl	OPENSSL_ia32cap_P(%rip),%r8d
35	xorq	%rbx,%rbx
36	incb	%r10b
37	subq	%r10,%rbx
38	subq	%r12,%r13
39	movl	(%rdi,%r10,4),%eax
40	testq	$-16,%r11
41	jz	.Lloop1
42	btl	$30,%r8d
43	jc	.Lintel
44	andq	$7,%rbx
45	leaq	1(%r10),%rsi
46	jz	.Loop8
47	subq	%rbx,%r11
48.Loop8_warmup:
49	addb	%al,%cl
50	movl	(%rdi,%rcx,4),%edx
51	movl	%eax,(%rdi,%rcx,4)
52	movl	%edx,(%rdi,%r10,4)
53	addb	%dl,%al
54	incb	%r10b
55	movl	(%rdi,%rax,4),%edx
56	movl	(%rdi,%r10,4),%eax
57	xorb	(%r12),%dl
58	movb	%dl,(%r12,%r13,1)
59	leaq	1(%r12),%r12
60	decq	%rbx
61	jnz	.Loop8_warmup
62
63	leaq	1(%r10),%rsi
64	jmp	.Loop8
65.align	16
66.Loop8:
67	addb	%al,%cl
68	movl	(%rdi,%rcx,4),%edx
69	movl	%eax,(%rdi,%rcx,4)
70	movl	0(%rdi,%rsi,4),%ebx
71	rorq	$8,%r8
72	movl	%edx,0(%rdi,%r10,4)
73	addb	%al,%dl
74	movb	(%rdi,%rdx,4),%r8b
75	addb	%bl,%cl
76	movl	(%rdi,%rcx,4),%edx
77	movl	%ebx,(%rdi,%rcx,4)
78	movl	4(%rdi,%rsi,4),%eax
79	rorq	$8,%r8
80	movl	%edx,4(%rdi,%r10,4)
81	addb	%bl,%dl
82	movb	(%rdi,%rdx,4),%r8b
83	addb	%al,%cl
84	movl	(%rdi,%rcx,4),%edx
85	movl	%eax,(%rdi,%rcx,4)
86	movl	8(%rdi,%rsi,4),%ebx
87	rorq	$8,%r8
88	movl	%edx,8(%rdi,%r10,4)
89	addb	%al,%dl
90	movb	(%rdi,%rdx,4),%r8b
91	addb	%bl,%cl
92	movl	(%rdi,%rcx,4),%edx
93	movl	%ebx,(%rdi,%rcx,4)
94	movl	12(%rdi,%rsi,4),%eax
95	rorq	$8,%r8
96	movl	%edx,12(%rdi,%r10,4)
97	addb	%bl,%dl
98	movb	(%rdi,%rdx,4),%r8b
99	addb	%al,%cl
100	movl	(%rdi,%rcx,4),%edx
101	movl	%eax,(%rdi,%rcx,4)
102	movl	16(%rdi,%rsi,4),%ebx
103	rorq	$8,%r8
104	movl	%edx,16(%rdi,%r10,4)
105	addb	%al,%dl
106	movb	(%rdi,%rdx,4),%r8b
107	addb	%bl,%cl
108	movl	(%rdi,%rcx,4),%edx
109	movl	%ebx,(%rdi,%rcx,4)
110	movl	20(%rdi,%rsi,4),%eax
111	rorq	$8,%r8
112	movl	%edx,20(%rdi,%r10,4)
113	addb	%bl,%dl
114	movb	(%rdi,%rdx,4),%r8b
115	addb	%al,%cl
116	movl	(%rdi,%rcx,4),%edx
117	movl	%eax,(%rdi,%rcx,4)
118	movl	24(%rdi,%rsi,4),%ebx
119	rorq	$8,%r8
120	movl	%edx,24(%rdi,%r10,4)
121	addb	%al,%dl
122	movb	(%rdi,%rdx,4),%r8b
123	addb	$8,%sil
124	addb	%bl,%cl
125	movl	(%rdi,%rcx,4),%edx
126	movl	%ebx,(%rdi,%rcx,4)
127	movl	-4(%rdi,%rsi,4),%eax
128	rorq	$8,%r8
129	movl	%edx,28(%rdi,%r10,4)
130	addb	%bl,%dl
131	movb	(%rdi,%rdx,4),%r8b
132	addb	$8,%r10b
133	rorq	$8,%r8
134	subq	$8,%r11
135
136	xorq	(%r12),%r8
137	movq	%r8,(%r12,%r13,1)
138	leaq	8(%r12),%r12
139
140	testq	$-8,%r11
141	jnz	.Loop8
142	cmpq	$0,%r11
143	jne	.Lloop1
144	jmp	.Lexit
145
146.align	16
147.Lintel:
148	testq	$-32,%r11
149	jz	.Lloop1
150	andq	$15,%rbx
151	jz	.Loop16_is_hot
152	subq	%rbx,%r11
153.Loop16_warmup:
154	addb	%al,%cl
155	movl	(%rdi,%rcx,4),%edx
156	movl	%eax,(%rdi,%rcx,4)
157	movl	%edx,(%rdi,%r10,4)
158	addb	%dl,%al
159	incb	%r10b
160	movl	(%rdi,%rax,4),%edx
161	movl	(%rdi,%r10,4),%eax
162	xorb	(%r12),%dl
163	movb	%dl,(%r12,%r13,1)
164	leaq	1(%r12),%r12
165	decq	%rbx
166	jnz	.Loop16_warmup
167
168	movq	%rcx,%rbx
169	xorq	%rcx,%rcx
170	movb	%bl,%cl
171
172.Loop16_is_hot:
173	leaq	(%rdi,%r10,4),%rsi
174	addb	%al,%cl
175	movl	(%rdi,%rcx,4),%edx
176	pxor	%xmm0,%xmm0
177	movl	%eax,(%rdi,%rcx,4)
178	addb	%dl,%al
179	movl	4(%rsi),%ebx
180	movzbl	%al,%eax
181	movl	%edx,0(%rsi)
182	addb	%bl,%cl
183	pinsrw	$0,(%rdi,%rax,4),%xmm0
184	jmp	.Loop16_enter
185.align	16
186.Loop16:
187	addb	%al,%cl
188	movl	(%rdi,%rcx,4),%edx
189	pxor	%xmm0,%xmm2
190	psllq	$8,%xmm1
191	pxor	%xmm0,%xmm0
192	movl	%eax,(%rdi,%rcx,4)
193	addb	%dl,%al
194	movl	4(%rsi),%ebx
195	movzbl	%al,%eax
196	movl	%edx,0(%rsi)
197	pxor	%xmm1,%xmm2
198	addb	%bl,%cl
199	pinsrw	$0,(%rdi,%rax,4),%xmm0
200	movdqu	%xmm2,(%r12,%r13,1)
201	leaq	16(%r12),%r12
202.Loop16_enter:
203	movl	(%rdi,%rcx,4),%edx
204	pxor	%xmm1,%xmm1
205	movl	%ebx,(%rdi,%rcx,4)
206	addb	%dl,%bl
207	movl	8(%rsi),%eax
208	movzbl	%bl,%ebx
209	movl	%edx,4(%rsi)
210	addb	%al,%cl
211	pinsrw	$0,(%rdi,%rbx,4),%xmm1
212	movl	(%rdi,%rcx,4),%edx
213	movl	%eax,(%rdi,%rcx,4)
214	addb	%dl,%al
215	movl	12(%rsi),%ebx
216	movzbl	%al,%eax
217	movl	%edx,8(%rsi)
218	addb	%bl,%cl
219	pinsrw	$1,(%rdi,%rax,4),%xmm0
220	movl	(%rdi,%rcx,4),%edx
221	movl	%ebx,(%rdi,%rcx,4)
222	addb	%dl,%bl
223	movl	16(%rsi),%eax
224	movzbl	%bl,%ebx
225	movl	%edx,12(%rsi)
226	addb	%al,%cl
227	pinsrw	$1,(%rdi,%rbx,4),%xmm1
228	movl	(%rdi,%rcx,4),%edx
229	movl	%eax,(%rdi,%rcx,4)
230	addb	%dl,%al
231	movl	20(%rsi),%ebx
232	movzbl	%al,%eax
233	movl	%edx,16(%rsi)
234	addb	%bl,%cl
235	pinsrw	$2,(%rdi,%rax,4),%xmm0
236	movl	(%rdi,%rcx,4),%edx
237	movl	%ebx,(%rdi,%rcx,4)
238	addb	%dl,%bl
239	movl	24(%rsi),%eax
240	movzbl	%bl,%ebx
241	movl	%edx,20(%rsi)
242	addb	%al,%cl
243	pinsrw	$2,(%rdi,%rbx,4),%xmm1
244	movl	(%rdi,%rcx,4),%edx
245	movl	%eax,(%rdi,%rcx,4)
246	addb	%dl,%al
247	movl	28(%rsi),%ebx
248	movzbl	%al,%eax
249	movl	%edx,24(%rsi)
250	addb	%bl,%cl
251	pinsrw	$3,(%rdi,%rax,4),%xmm0
252	movl	(%rdi,%rcx,4),%edx
253	movl	%ebx,(%rdi,%rcx,4)
254	addb	%dl,%bl
255	movl	32(%rsi),%eax
256	movzbl	%bl,%ebx
257	movl	%edx,28(%rsi)
258	addb	%al,%cl
259	pinsrw	$3,(%rdi,%rbx,4),%xmm1
260	movl	(%rdi,%rcx,4),%edx
261	movl	%eax,(%rdi,%rcx,4)
262	addb	%dl,%al
263	movl	36(%rsi),%ebx
264	movzbl	%al,%eax
265	movl	%edx,32(%rsi)
266	addb	%bl,%cl
267	pinsrw	$4,(%rdi,%rax,4),%xmm0
268	movl	(%rdi,%rcx,4),%edx
269	movl	%ebx,(%rdi,%rcx,4)
270	addb	%dl,%bl
271	movl	40(%rsi),%eax
272	movzbl	%bl,%ebx
273	movl	%edx,36(%rsi)
274	addb	%al,%cl
275	pinsrw	$4,(%rdi,%rbx,4),%xmm1
276	movl	(%rdi,%rcx,4),%edx
277	movl	%eax,(%rdi,%rcx,4)
278	addb	%dl,%al
279	movl	44(%rsi),%ebx
280	movzbl	%al,%eax
281	movl	%edx,40(%rsi)
282	addb	%bl,%cl
283	pinsrw	$5,(%rdi,%rax,4),%xmm0
284	movl	(%rdi,%rcx,4),%edx
285	movl	%ebx,(%rdi,%rcx,4)
286	addb	%dl,%bl
287	movl	48(%rsi),%eax
288	movzbl	%bl,%ebx
289	movl	%edx,44(%rsi)
290	addb	%al,%cl
291	pinsrw	$5,(%rdi,%rbx,4),%xmm1
292	movl	(%rdi,%rcx,4),%edx
293	movl	%eax,(%rdi,%rcx,4)
294	addb	%dl,%al
295	movl	52(%rsi),%ebx
296	movzbl	%al,%eax
297	movl	%edx,48(%rsi)
298	addb	%bl,%cl
299	pinsrw	$6,(%rdi,%rax,4),%xmm0
300	movl	(%rdi,%rcx,4),%edx
301	movl	%ebx,(%rdi,%rcx,4)
302	addb	%dl,%bl
303	movl	56(%rsi),%eax
304	movzbl	%bl,%ebx
305	movl	%edx,52(%rsi)
306	addb	%al,%cl
307	pinsrw	$6,(%rdi,%rbx,4),%xmm1
308	movl	(%rdi,%rcx,4),%edx
309	movl	%eax,(%rdi,%rcx,4)
310	addb	%dl,%al
311	movl	60(%rsi),%ebx
312	movzbl	%al,%eax
313	movl	%edx,56(%rsi)
314	addb	%bl,%cl
315	pinsrw	$7,(%rdi,%rax,4),%xmm0
316	addb	$16,%r10b
317	movdqu	(%r12),%xmm2
318	movl	(%rdi,%rcx,4),%edx
319	movl	%ebx,(%rdi,%rcx,4)
320	addb	%dl,%bl
321	movzbl	%bl,%ebx
322	movl	%edx,60(%rsi)
323	leaq	(%rdi,%r10,4),%rsi
324	pinsrw	$7,(%rdi,%rbx,4),%xmm1
325	movl	(%rsi),%eax
326	movq	%rcx,%rbx
327	xorq	%rcx,%rcx
328	subq	$16,%r11
329	movb	%bl,%cl
330	testq	$-16,%r11
331	jnz	.Loop16
332
333	psllq	$8,%xmm1
334	pxor	%xmm0,%xmm2
335	pxor	%xmm1,%xmm2
336	movdqu	%xmm2,(%r12,%r13,1)
337	leaq	16(%r12),%r12
338
339	cmpq	$0,%r11
340	jne	.Lloop1
341	jmp	.Lexit
342
343.align	16
344.Lloop1:
345	addb	%al,%cl
346	movl	(%rdi,%rcx,4),%edx
347	movl	%eax,(%rdi,%rcx,4)
348	movl	%edx,(%rdi,%r10,4)
349	addb	%dl,%al
350	incb	%r10b
351	movl	(%rdi,%rax,4),%edx
352	movl	(%rdi,%r10,4),%eax
353	xorb	(%r12),%dl
354	movb	%dl,(%r12,%r13,1)
355	leaq	1(%r12),%r12
356	decq	%r11
357	jnz	.Lloop1
358	jmp	.Lexit
359
360.align	16
361.LRC4_CHAR:
362	addb	$1,%r10b
363	movzbl	(%rdi,%r10,1),%eax
364	testq	$-8,%r11
365	jz	.Lcloop1
366	jmp	.Lcloop8
367.align	16
368.Lcloop8:
369	movl	(%r12),%r8d
370	movl	4(%r12),%r9d
371	addb	%al,%cl
372	leaq	1(%r10),%rsi
373	movzbl	(%rdi,%rcx,1),%edx
374	movzbl	%sil,%esi
375	movzbl	(%rdi,%rsi,1),%ebx
376	movb	%al,(%rdi,%rcx,1)
377	cmpq	%rsi,%rcx
378	movb	%dl,(%rdi,%r10,1)
379	jne	.Lcmov0
380	movq	%rax,%rbx
381.Lcmov0:
382	addb	%al,%dl
383	xorb	(%rdi,%rdx,1),%r8b
384	rorl	$8,%r8d
385	addb	%bl,%cl
386	leaq	1(%rsi),%r10
387	movzbl	(%rdi,%rcx,1),%edx
388	movzbl	%r10b,%r10d
389	movzbl	(%rdi,%r10,1),%eax
390	movb	%bl,(%rdi,%rcx,1)
391	cmpq	%r10,%rcx
392	movb	%dl,(%rdi,%rsi,1)
393	jne	.Lcmov1
394	movq	%rbx,%rax
395.Lcmov1:
396	addb	%bl,%dl
397	xorb	(%rdi,%rdx,1),%r8b
398	rorl	$8,%r8d
399	addb	%al,%cl
400	leaq	1(%r10),%rsi
401	movzbl	(%rdi,%rcx,1),%edx
402	movzbl	%sil,%esi
403	movzbl	(%rdi,%rsi,1),%ebx
404	movb	%al,(%rdi,%rcx,1)
405	cmpq	%rsi,%rcx
406	movb	%dl,(%rdi,%r10,1)
407	jne	.Lcmov2
408	movq	%rax,%rbx
409.Lcmov2:
410	addb	%al,%dl
411	xorb	(%rdi,%rdx,1),%r8b
412	rorl	$8,%r8d
413	addb	%bl,%cl
414	leaq	1(%rsi),%r10
415	movzbl	(%rdi,%rcx,1),%edx
416	movzbl	%r10b,%r10d
417	movzbl	(%rdi,%r10,1),%eax
418	movb	%bl,(%rdi,%rcx,1)
419	cmpq	%r10,%rcx
420	movb	%dl,(%rdi,%rsi,1)
421	jne	.Lcmov3
422	movq	%rbx,%rax
423.Lcmov3:
424	addb	%bl,%dl
425	xorb	(%rdi,%rdx,1),%r8b
426	rorl	$8,%r8d
427	addb	%al,%cl
428	leaq	1(%r10),%rsi
429	movzbl	(%rdi,%rcx,1),%edx
430	movzbl	%sil,%esi
431	movzbl	(%rdi,%rsi,1),%ebx
432	movb	%al,(%rdi,%rcx,1)
433	cmpq	%rsi,%rcx
434	movb	%dl,(%rdi,%r10,1)
435	jne	.Lcmov4
436	movq	%rax,%rbx
437.Lcmov4:
438	addb	%al,%dl
439	xorb	(%rdi,%rdx,1),%r9b
440	rorl	$8,%r9d
441	addb	%bl,%cl
442	leaq	1(%rsi),%r10
443	movzbl	(%rdi,%rcx,1),%edx
444	movzbl	%r10b,%r10d
445	movzbl	(%rdi,%r10,1),%eax
446	movb	%bl,(%rdi,%rcx,1)
447	cmpq	%r10,%rcx
448	movb	%dl,(%rdi,%rsi,1)
449	jne	.Lcmov5
450	movq	%rbx,%rax
451.Lcmov5:
452	addb	%bl,%dl
453	xorb	(%rdi,%rdx,1),%r9b
454	rorl	$8,%r9d
455	addb	%al,%cl
456	leaq	1(%r10),%rsi
457	movzbl	(%rdi,%rcx,1),%edx
458	movzbl	%sil,%esi
459	movzbl	(%rdi,%rsi,1),%ebx
460	movb	%al,(%rdi,%rcx,1)
461	cmpq	%rsi,%rcx
462	movb	%dl,(%rdi,%r10,1)
463	jne	.Lcmov6
464	movq	%rax,%rbx
465.Lcmov6:
466	addb	%al,%dl
467	xorb	(%rdi,%rdx,1),%r9b
468	rorl	$8,%r9d
469	addb	%bl,%cl
470	leaq	1(%rsi),%r10
471	movzbl	(%rdi,%rcx,1),%edx
472	movzbl	%r10b,%r10d
473	movzbl	(%rdi,%r10,1),%eax
474	movb	%bl,(%rdi,%rcx,1)
475	cmpq	%r10,%rcx
476	movb	%dl,(%rdi,%rsi,1)
477	jne	.Lcmov7
478	movq	%rbx,%rax
479.Lcmov7:
480	addb	%bl,%dl
481	xorb	(%rdi,%rdx,1),%r9b
482	rorl	$8,%r9d
483	leaq	-8(%r11),%r11
484	movl	%r8d,(%r13)
485	leaq	8(%r12),%r12
486	movl	%r9d,4(%r13)
487	leaq	8(%r13),%r13
488
489	testq	$-8,%r11
490	jnz	.Lcloop8
491	cmpq	$0,%r11
492	jne	.Lcloop1
493	jmp	.Lexit
494.align	16
495.Lcloop1:
496	addb	%al,%cl
497	movzbl	%cl,%ecx
498	movzbl	(%rdi,%rcx,1),%edx
499	movb	%al,(%rdi,%rcx,1)
500	movb	%dl,(%rdi,%r10,1)
501	addb	%al,%dl
502	addb	$1,%r10b
503	movzbl	%dl,%edx
504	movzbl	%r10b,%r10d
505	movzbl	(%rdi,%rdx,1),%edx
506	movzbl	(%rdi,%r10,1),%eax
507	xorb	(%r12),%dl
508	leaq	1(%r12),%r12
509	movb	%dl,(%r13)
510	leaq	1(%r13),%r13
511	subq	$1,%r11
512	jnz	.Lcloop1
513	jmp	.Lexit
514
515.align	16
516.Lexit:
517	subb	$1,%r10b
518	movl	%r10d,-8(%rdi)
519	movl	%ecx,-4(%rdi)
520
521	movq	(%rsp),%r13
522.cfi_restore	%r13
523	movq	8(%rsp),%r12
524.cfi_restore	%r12
525	movq	16(%rsp),%rbx
526.cfi_restore	%rbx
527	addq	$24,%rsp
528.cfi_adjust_cfa_offset	-24
529.Lepilogue:
530	.byte	0xf3,0xc3
531.cfi_endproc
532.size	RC4,.-RC4
533.globl	RC4_set_key
534.type	RC4_set_key,@function
535.align	16
536RC4_set_key:
537.cfi_startproc
538	leaq	8(%rdi),%rdi
539	leaq	(%rdx,%rsi,1),%rdx
540	negq	%rsi
541	movq	%rsi,%rcx
542	xorl	%eax,%eax
543	xorq	%r9,%r9
544	xorq	%r10,%r10
545	xorq	%r11,%r11
546
547	movl	OPENSSL_ia32cap_P(%rip),%r8d
548	btl	$20,%r8d
549	jc	.Lc1stloop
550	jmp	.Lw1stloop
551
552.align	16
553.Lw1stloop:
554	movl	%eax,(%rdi,%rax,4)
555	addb	$1,%al
556	jnc	.Lw1stloop
557
558	xorq	%r9,%r9
559	xorq	%r8,%r8
560.align	16
561.Lw2ndloop:
562	movl	(%rdi,%r9,4),%r10d
563	addb	(%rdx,%rsi,1),%r8b
564	addb	%r10b,%r8b
565	addq	$1,%rsi
566	movl	(%rdi,%r8,4),%r11d
567	cmovzq	%rcx,%rsi
568	movl	%r10d,(%rdi,%r8,4)
569	movl	%r11d,(%rdi,%r9,4)
570	addb	$1,%r9b
571	jnc	.Lw2ndloop
572	jmp	.Lexit_key
573
574.align	16
575.Lc1stloop:
576	movb	%al,(%rdi,%rax,1)
577	addb	$1,%al
578	jnc	.Lc1stloop
579
580	xorq	%r9,%r9
581	xorq	%r8,%r8
582.align	16
583.Lc2ndloop:
584	movb	(%rdi,%r9,1),%r10b
585	addb	(%rdx,%rsi,1),%r8b
586	addb	%r10b,%r8b
587	addq	$1,%rsi
588	movb	(%rdi,%r8,1),%r11b
589	jnz	.Lcnowrap
590	movq	%rcx,%rsi
591.Lcnowrap:
592	movb	%r10b,(%rdi,%r8,1)
593	movb	%r11b,(%rdi,%r9,1)
594	addb	$1,%r9b
595	jnc	.Lc2ndloop
596	movl	$-1,256(%rdi)
597
598.align	16
599.Lexit_key:
600	xorl	%eax,%eax
601	movl	%eax,-8(%rdi)
602	movl	%eax,-4(%rdi)
603	.byte	0xf3,0xc3
604.cfi_endproc
605.size	RC4_set_key,.-RC4_set_key
606
607.globl	RC4_options
608.type	RC4_options,@function
609.align	16
610RC4_options:
611.cfi_startproc
612	leaq	.Lopts(%rip),%rax
613	movl	OPENSSL_ia32cap_P(%rip),%edx
614	btl	$20,%edx
615	jc	.L8xchar
616	btl	$30,%edx
617	jnc	.Ldone
618	addq	$25,%rax
619	.byte	0xf3,0xc3
620.L8xchar:
621	addq	$12,%rax
622.Ldone:
623	.byte	0xf3,0xc3
624.cfi_endproc
625.align	64
626.Lopts:
627.byte	114,99,52,40,56,120,44,105,110,116,41,0
628.byte	114,99,52,40,56,120,44,99,104,97,114,41,0
629.byte	114,99,52,40,49,54,120,44,105,110,116,41,0
630.byte	82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
631.align	64
632.size	RC4_options,.-RC4_options
633