Blame crypto/des/asm/desboth.pl

Packit c4476c
#! /usr/bin/env perl
Packit c4476c
# Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
#
Packit c4476c
# Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
# this file except in compliance with the License.  You can obtain a copy
Packit c4476c
# in the file LICENSE in the source distribution or at
Packit c4476c
# https://www.openssl.org/source/license.html
Packit c4476c
Packit c4476c
Packit c4476c
$L="edi";
Packit c4476c
$R="esi";
Packit c4476c
Packit c4476c
sub DES_encrypt3
Packit c4476c
	{
Packit c4476c
	local($name,$enc)=@_;
Packit c4476c
Packit c4476c
	&function_begin_B($name,"");
Packit c4476c
	&push("ebx");
Packit c4476c
	&mov("ebx",&wparam(0));
Packit c4476c
Packit c4476c
	&push("ebp");
Packit c4476c
	&push("esi");
Packit c4476c
Packit c4476c
	&push("edi");
Packit c4476c
Packit c4476c
	&comment("");
Packit c4476c
	&comment("Load the data words");
Packit c4476c
	&mov($L,&DWP(0,"ebx","",0));
Packit c4476c
	&mov($R,&DWP(4,"ebx","",0));
Packit c4476c
	&stack_push(3);
Packit c4476c
Packit c4476c
	&comment("");
Packit c4476c
	&comment("IP");
Packit c4476c
	&IP_new($L,$R,"edx",0);
Packit c4476c
Packit c4476c
	# put them back
Packit c4476c
Packit c4476c
	if ($enc)
Packit c4476c
		{
Packit c4476c
		&mov(&DWP(4,"ebx","",0),$R);
Packit c4476c
		 &mov("eax",&wparam(1));
Packit c4476c
		&mov(&DWP(0,"ebx","",0),"edx");
Packit c4476c
		 &mov("edi",&wparam(2));
Packit c4476c
		 &mov("esi",&wparam(3));
Packit c4476c
		}
Packit c4476c
	else
Packit c4476c
		{
Packit c4476c
		&mov(&DWP(4,"ebx","",0),$R);
Packit c4476c
		 &mov("esi",&wparam(1));
Packit c4476c
		&mov(&DWP(0,"ebx","",0),"edx");
Packit c4476c
		 &mov("edi",&wparam(2));
Packit c4476c
		 &mov("eax",&wparam(3));
Packit c4476c
		}
Packit c4476c
	&mov(&swtmp(2),	(DWC(($enc)?"1":"0")));
Packit c4476c
	&mov(&swtmp(1),	"eax");
Packit c4476c
	&mov(&swtmp(0),	"ebx");
Packit c4476c
	&call("DES_encrypt2");
Packit c4476c
	&mov(&swtmp(2),	(DWC(($enc)?"0":"1")));
Packit c4476c
	&mov(&swtmp(1),	"edi");
Packit c4476c
	&mov(&swtmp(0),	"ebx");
Packit c4476c
	&call("DES_encrypt2");
Packit c4476c
	&mov(&swtmp(2),	(DWC(($enc)?"1":"0")));
Packit c4476c
	&mov(&swtmp(1),	"esi");
Packit c4476c
	&mov(&swtmp(0),	"ebx");
Packit c4476c
	&call("DES_encrypt2");
Packit c4476c
Packit c4476c
	&stack_pop(3);
Packit c4476c
	&mov($L,&DWP(0,"ebx","",0));
Packit c4476c
	&mov($R,&DWP(4,"ebx","",0));
Packit c4476c
Packit c4476c
	&comment("");
Packit c4476c
	&comment("FP");
Packit c4476c
	&FP_new($L,$R,"eax",0);
Packit c4476c
Packit c4476c
	&mov(&DWP(0,"ebx","",0),"eax");
Packit c4476c
	&mov(&DWP(4,"ebx","",0),$R);
Packit c4476c
Packit c4476c
	&pop("edi");
Packit c4476c
	&pop("esi");
Packit c4476c
	&pop("ebp");
Packit c4476c
	&pop("ebx");
Packit c4476c
	&ret();
Packit c4476c
	&function_end_B($name);
Packit c4476c
	}
Packit c4476c
Packit c4476c