lib/crypto/x86/poly1305-x86_64-cryptogams.pl

Source file repositories/reference/linux-study-clean/lib/crypto/x86/poly1305-x86_64-cryptogams.pl

File Facts

System
Linux kernel
Corpus path
lib/crypto/x86/poly1305-x86_64-cryptogams.pl
Extension
.pl
Size
101787 bytes
Lines
4241
Domain
Kernel Services
Bucket
lib
Inferred role
Kernel Services: lib
Status
atlas-only

Why This File Exists

Shared kernel service surface used by multiple subsystems, including helpers, cryptography, virtualization support, and async I/O infrastructure.

Dependency Surface

Detected Declarations

Annotated Snippet

sub declare_function() {
	my ($name, $align, $nargs) = @_;
	if($kernel) {
		$code .= "SYM_FUNC_START($name)\n";
		$code .= ".L$name:\n";
	} else {
		$code .= ".globl	$name\n";
		$code .= ".type	$name,\@function,$nargs\n";
		$code .= ".align	$align\n";
		$code .= "$name:\n";
	}
}

sub end_function() {
	my ($name) = @_;
	if($kernel) {
		$code .= "SYM_FUNC_END($name)\n";
	} else {
		$code .= ".size   $name,.-$name\n";
	}
}

$code.=<<___ if $kernel;
#include <linux/linkage.h>
___

if ($avx) {
$code.=<<___ if $kernel;
.section .rodata
___
$code.=<<___;
.align	64
.Lconst:
.Lmask24:
.long	0x0ffffff,0,0x0ffffff,0,0x0ffffff,0,0x0ffffff,0
.L129:
.long	`1<<24`,0,`1<<24`,0,`1<<24`,0,`1<<24`,0
.Lmask26:
.long	0x3ffffff,0,0x3ffffff,0,0x3ffffff,0,0x3ffffff,0
.Lpermd_avx2:
.long	2,2,2,3,2,0,2,1
.Lpermd_avx512:
.long	0,0,0,1, 0,2,0,3, 0,4,0,5, 0,6,0,7

.L2_44_inp_permd:
.long	0,1,1,2,2,3,7,7
.L2_44_inp_shift:
.quad	0,12,24,64
.L2_44_mask:
.quad	0xfffffffffff,0xfffffffffff,0x3ffffffffff,0xffffffffffffffff
.L2_44_shift_rgt:
.quad	44,44,42,64
.L2_44_shift_lft:
.quad	8,8,10,64

.align	64
.Lx_mask44:
.quad	0xfffffffffff,0xfffffffffff,0xfffffffffff,0xfffffffffff
.quad	0xfffffffffff,0xfffffffffff,0xfffffffffff,0xfffffffffff
.Lx_mask42:
.quad	0x3ffffffffff,0x3ffffffffff,0x3ffffffffff,0x3ffffffffff
.quad	0x3ffffffffff,0x3ffffffffff,0x3ffffffffff,0x3ffffffffff
___
}
$code.=<<___ if (!$kernel);
.asciz	"Poly1305 for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
.align	16
___

my ($ctx,$inp,$len,$padbit)=("%rdi","%rsi","%rdx","%rcx");

Annotation

Implementation Notes