From eb8dd9dca1228af0cd132f515509051ecfabf6f6 Mon Sep 17 00:00:00 2001 From: cvs2svn Date: Mon, 14 Apr 2025 17:32:06 +0000 Subject: This commit was manufactured by cvs2git to create tag 'tb_20250414'. --- src/lib/libcrypto/md5/asm/md5-586.pl | 307 ------------------------ src/lib/libcrypto/md5/md5.c | 375 ------------------------------ src/lib/libcrypto/md5/md5.h | 99 -------- src/lib/libcrypto/md5/md5_amd64_generic.S | 237 ------------------- 4 files changed, 1018 deletions(-) delete mode 100644 src/lib/libcrypto/md5/asm/md5-586.pl delete mode 100644 src/lib/libcrypto/md5/md5.c delete mode 100644 src/lib/libcrypto/md5/md5.h delete mode 100644 src/lib/libcrypto/md5/md5_amd64_generic.S (limited to 'src/lib/libcrypto/md5') diff --git a/src/lib/libcrypto/md5/asm/md5-586.pl b/src/lib/libcrypto/md5/asm/md5-586.pl deleted file mode 100644 index a039efd899..0000000000 --- a/src/lib/libcrypto/md5/asm/md5-586.pl +++ /dev/null @@ -1,307 +0,0 @@ -#!/usr/local/bin/perl - -# Normal is the -# md5_block_x86(MD5_CTX *c, ULONG *X); -# version, non-normal is the -# md5_block_x86(MD5_CTX *c, ULONG *X,int blocks); - -$normal=0; - -$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; -push(@INC,"${dir}","${dir}../../perlasm"); -require "x86asm.pl"; - -&asm_init($ARGV[0],$0); - -$A="eax"; -$B="ebx"; -$C="ecx"; -$D="edx"; -$tmp1="edi"; -$tmp2="ebp"; -$X="esi"; - -# What we need to load into $tmp for the next round -%Ltmp1=("R0",&Np($C), "R1",&Np($C), "R2",&Np($C), "R3",&Np($D)); -@xo=( - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, # R0 - 1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, # R1 - 5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2, # R2 - 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9, # R3 - ); - -&md5_block("md5_block_data_order"); -&asm_finish(); - -sub Np - { - local($p)=@_; - local(%n)=($A,$D,$B,$A,$C,$B,$D,$C); - return($n{$p}); - } - -sub R0 - { - local($pos,$a,$b,$c,$d,$K,$ki,$s,$t)=@_; - - &mov($tmp1,$C) if $pos < 0; - &mov($tmp2,&DWP($xo[$ki]*4,$K,"",0)) if $pos < 0; # very first one - - # body proper - - &comment("R0 $ki"); - &xor($tmp1,$d); # F function - part 2 - - &and($tmp1,$b); # F function - part 3 - &lea($a,&DWP($t,$a,$tmp2,1)); - - &xor($tmp1,$d); # F function - part 4 - - &add($a,$tmp1); - &mov($tmp1,&Np($c)) if $pos < 1; # next tmp1 for R0 - &mov($tmp1,&Np($c)) if $pos == 1; # next tmp1 for R1 - - &rotl($a,$s); - - &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)) if ($pos != 2); - - &add($a,$b); - } - -sub R1 - { - local($pos,$a,$b,$c,$d,$K,$ki,$s,$t)=@_; - - &comment("R1 $ki"); - - &lea($a,&DWP($t,$a,$tmp2,1)); - - &xor($tmp1,$b); # G function - part 2 - &and($tmp1,$d); # G function - part 3 - - &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)) if ($pos != 2); - &xor($tmp1,$c); # G function - part 4 - - &add($a,$tmp1); - &mov($tmp1,&Np($c)) if $pos < 1; # G function - part 1 - &mov($tmp1,&Np($c)) if $pos == 1; # G function - part 1 - - &rotl($a,$s); - - &add($a,$b); - } - -sub R2 - { - local($n,$pos,$a,$b,$c,$d,$K,$ki,$s,$t)=@_; - # This one is different, only 3 logical operations - -if (($n & 1) == 0) - { - &comment("R2 $ki"); - # make sure to do 'D' first, not 'B', else we clash with - # the last add from the previous round. - - &xor($tmp1,$d); # H function - part 2 - - &xor($tmp1,$b); # H function - part 3 - &lea($a,&DWP($t,$a,$tmp2,1)); - - &add($a,$tmp1); - - &rotl($a,$s); - - &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)); - &mov($tmp1,&Np($c)); - } -else - { - &comment("R2 $ki"); - # make sure to do 'D' first, not 'B', else we clash with - # the last add from the previous round. - - &lea($a,&DWP($t,$a,$tmp2,1)); - - &add($b,$c); # MOVED FORWARD - &xor($tmp1,$d); # H function - part 2 - - &xor($tmp1,$b); # H function - part 3 - &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)) if ($pos != 2); - - &add($a,$tmp1); - &mov($tmp1,&Np($c)) if $pos < 1; # H function - part 1 - &mov($tmp1,-1) if $pos == 1; # I function - part 1 - - &rotl($a,$s); - - &add($a,$b); - } - } - -sub R3 - { - local($pos,$a,$b,$c,$d,$K,$ki,$s,$t)=@_; - - &comment("R3 $ki"); - - # ¬($tmp1) - &xor($tmp1,$d) if $pos < 0; # I function - part 2 - - &or($tmp1,$b); # I function - part 3 - &lea($a,&DWP($t,$a,$tmp2,1)); - - &xor($tmp1,$c); # I function - part 4 - &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)) if $pos != 2; # load X/k value - &mov($tmp2,&wparam(0)) if $pos == 2; - - &add($a,$tmp1); - &mov($tmp1,-1) if $pos < 1; # H function - part 1 - &add($K,64) if $pos >=1 && !$normal; - - &rotl($a,$s); - - &xor($tmp1,&Np($d)) if $pos <= 0; # I function - part = first time - &mov($tmp1,&DWP( 0,$tmp2,"",0)) if $pos > 0; - &add($a,$b); - } - - -sub md5_block - { - local($name)=@_; - - &function_begin_B($name,"",3); - - # parameter 1 is the MD5_CTX structure. - # A 0 - # B 4 - # C 8 - # D 12 - - &push("esi"); - &push("edi"); - &mov($tmp1, &wparam(0)); # edi - &mov($X, &wparam(1)); # esi - &mov($C, &wparam(2)); - &push("ebp"); - &shl($C, 6); - &push("ebx"); - &add($C, $X); # offset we end at - &sub($C, 64); - &mov($A, &DWP( 0,$tmp1,"",0)); - &push($C); # Put on the TOS - &mov($B, &DWP( 4,$tmp1,"",0)); - &mov($C, &DWP( 8,$tmp1,"",0)); - &mov($D, &DWP(12,$tmp1,"",0)); - - &set_label("start") unless $normal; - &comment(""); - &comment("R0 section"); - - &R0(-2,$A,$B,$C,$D,$X, 0, 7,0xd76aa478); - &R0( 0,$D,$A,$B,$C,$X, 1,12,0xe8c7b756); - &R0( 0,$C,$D,$A,$B,$X, 2,17,0x242070db); - &R0( 0,$B,$C,$D,$A,$X, 3,22,0xc1bdceee); - &R0( 0,$A,$B,$C,$D,$X, 4, 7,0xf57c0faf); - &R0( 0,$D,$A,$B,$C,$X, 5,12,0x4787c62a); - &R0( 0,$C,$D,$A,$B,$X, 6,17,0xa8304613); - &R0( 0,$B,$C,$D,$A,$X, 7,22,0xfd469501); - &R0( 0,$A,$B,$C,$D,$X, 8, 7,0x698098d8); - &R0( 0,$D,$A,$B,$C,$X, 9,12,0x8b44f7af); - &R0( 0,$C,$D,$A,$B,$X,10,17,0xffff5bb1); - &R0( 0,$B,$C,$D,$A,$X,11,22,0x895cd7be); - &R0( 0,$A,$B,$C,$D,$X,12, 7,0x6b901122); - &R0( 0,$D,$A,$B,$C,$X,13,12,0xfd987193); - &R0( 0,$C,$D,$A,$B,$X,14,17,0xa679438e); - &R0( 1,$B,$C,$D,$A,$X,15,22,0x49b40821); - - &comment(""); - &comment("R1 section"); - &R1(-1,$A,$B,$C,$D,$X,16, 5,0xf61e2562); - &R1( 0,$D,$A,$B,$C,$X,17, 9,0xc040b340); - &R1( 0,$C,$D,$A,$B,$X,18,14,0x265e5a51); - &R1( 0,$B,$C,$D,$A,$X,19,20,0xe9b6c7aa); - &R1( 0,$A,$B,$C,$D,$X,20, 5,0xd62f105d); - &R1( 0,$D,$A,$B,$C,$X,21, 9,0x02441453); - &R1( 0,$C,$D,$A,$B,$X,22,14,0xd8a1e681); - &R1( 0,$B,$C,$D,$A,$X,23,20,0xe7d3fbc8); - &R1( 0,$A,$B,$C,$D,$X,24, 5,0x21e1cde6); - &R1( 0,$D,$A,$B,$C,$X,25, 9,0xc33707d6); - &R1( 0,$C,$D,$A,$B,$X,26,14,0xf4d50d87); - &R1( 0,$B,$C,$D,$A,$X,27,20,0x455a14ed); - &R1( 0,$A,$B,$C,$D,$X,28, 5,0xa9e3e905); - &R1( 0,$D,$A,$B,$C,$X,29, 9,0xfcefa3f8); - &R1( 0,$C,$D,$A,$B,$X,30,14,0x676f02d9); - &R1( 1,$B,$C,$D,$A,$X,31,20,0x8d2a4c8a); - - &comment(""); - &comment("R2 section"); - &R2( 0,-1,$A,$B,$C,$D,$X,32, 4,0xfffa3942); - &R2( 1, 0,$D,$A,$B,$C,$X,33,11,0x8771f681); - &R2( 2, 0,$C,$D,$A,$B,$X,34,16,0x6d9d6122); - &R2( 3, 0,$B,$C,$D,$A,$X,35,23,0xfde5380c); - &R2( 4, 0,$A,$B,$C,$D,$X,36, 4,0xa4beea44); - &R2( 5, 0,$D,$A,$B,$C,$X,37,11,0x4bdecfa9); - &R2( 6, 0,$C,$D,$A,$B,$X,38,16,0xf6bb4b60); - &R2( 7, 0,$B,$C,$D,$A,$X,39,23,0xbebfbc70); - &R2( 8, 0,$A,$B,$C,$D,$X,40, 4,0x289b7ec6); - &R2( 9, 0,$D,$A,$B,$C,$X,41,11,0xeaa127fa); - &R2(10, 0,$C,$D,$A,$B,$X,42,16,0xd4ef3085); - &R2(11, 0,$B,$C,$D,$A,$X,43,23,0x04881d05); - &R2(12, 0,$A,$B,$C,$D,$X,44, 4,0xd9d4d039); - &R2(13, 0,$D,$A,$B,$C,$X,45,11,0xe6db99e5); - &R2(14, 0,$C,$D,$A,$B,$X,46,16,0x1fa27cf8); - &R2(15, 1,$B,$C,$D,$A,$X,47,23,0xc4ac5665); - - &comment(""); - &comment("R3 section"); - &R3(-1,$A,$B,$C,$D,$X,48, 6,0xf4292244); - &R3( 0,$D,$A,$B,$C,$X,49,10,0x432aff97); - &R3( 0,$C,$D,$A,$B,$X,50,15,0xab9423a7); - &R3( 0,$B,$C,$D,$A,$X,51,21,0xfc93a039); - &R3( 0,$A,$B,$C,$D,$X,52, 6,0x655b59c3); - &R3( 0,$D,$A,$B,$C,$X,53,10,0x8f0ccc92); - &R3( 0,$C,$D,$A,$B,$X,54,15,0xffeff47d); - &R3( 0,$B,$C,$D,$A,$X,55,21,0x85845dd1); - &R3( 0,$A,$B,$C,$D,$X,56, 6,0x6fa87e4f); - &R3( 0,$D,$A,$B,$C,$X,57,10,0xfe2ce6e0); - &R3( 0,$C,$D,$A,$B,$X,58,15,0xa3014314); - &R3( 0,$B,$C,$D,$A,$X,59,21,0x4e0811a1); - &R3( 0,$A,$B,$C,$D,$X,60, 6,0xf7537e82); - &R3( 0,$D,$A,$B,$C,$X,61,10,0xbd3af235); - &R3( 0,$C,$D,$A,$B,$X,62,15,0x2ad7d2bb); - &R3( 2,$B,$C,$D,$A,$X,63,21,0xeb86d391); - - # &mov($tmp2,&wparam(0)); # done in the last R3 - # &mov($tmp1, &DWP( 0,$tmp2,"",0)); # done is the last R3 - - &add($A,$tmp1); - &mov($tmp1, &DWP( 4,$tmp2,"",0)); - - &add($B,$tmp1); - &mov($tmp1, &DWP( 8,$tmp2,"",0)); - - &add($C,$tmp1); - &mov($tmp1, &DWP(12,$tmp2,"",0)); - - &add($D,$tmp1); - &mov(&DWP( 0,$tmp2,"",0),$A); - - &mov(&DWP( 4,$tmp2,"",0),$B); - &mov($tmp1,&swtmp(0)) unless $normal; - - &mov(&DWP( 8,$tmp2,"",0),$C); - &mov(&DWP(12,$tmp2,"",0),$D); - - &cmp($tmp1,$X) unless $normal; # check count - &jae(&label("start")) unless $normal; - - &pop("eax"); # pop the temp variable off the stack - &pop("ebx"); - &pop("ebp"); - &pop("edi"); - &pop("esi"); - &ret(); - &function_end_B($name); - } - diff --git a/src/lib/libcrypto/md5/md5.c b/src/lib/libcrypto/md5/md5.c deleted file mode 100644 index f1c9223d86..0000000000 --- a/src/lib/libcrypto/md5/md5.c +++ /dev/null @@ -1,375 +0,0 @@ -/* $OpenBSD: md5.c,v 1.25 2025/01/24 13:35:04 jsing Exp $ */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#include -#include -#include -#include - -#include - -#include - -#include "crypto_internal.h" - -/* Ensure that MD5_LONG and uint32_t are equivalent size. */ -CTASSERT(sizeof(MD5_LONG) == sizeof(uint32_t)); - -#ifdef MD5_ASM -void md5_block_data_order(MD5_CTX *c, const void *p, size_t num); -#endif - -#ifndef MD5_ASM -static inline uint32_t -md5_F(uint32_t x, uint32_t y, uint32_t z) -{ - return (x & y) | (~x & z); -} - -static inline uint32_t -md5_G(uint32_t x, uint32_t y, uint32_t z) -{ - return (x & z) | (y & ~z); -} - -static inline uint32_t -md5_H(uint32_t x, uint32_t y, uint32_t z) -{ - return x ^ y ^ z; -} - -static inline uint32_t -md5_I(uint32_t x, uint32_t y, uint32_t z) -{ - return y ^ (x | ~z); -} - -static inline void -md5_round1(uint32_t *a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, - uint32_t t, uint32_t s) -{ - *a = b + crypto_rol_u32(*a + md5_F(b, c, d) + x + t, s); -} - -static inline void -md5_round2(uint32_t *a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, - uint32_t t, uint32_t s) -{ - *a = b + crypto_rol_u32(*a + md5_G(b, c, d) + x + t, s); -} - -static inline void -md5_round3(uint32_t *a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, - uint32_t t, uint32_t s) -{ - *a = b + crypto_rol_u32(*a + md5_H(b, c, d) + x + t, s); -} - -static inline void -md5_round4(uint32_t *a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, - uint32_t t, uint32_t s) -{ - *a = b + crypto_rol_u32(*a + md5_I(b, c, d) + x + t, s); -} - -static void -md5_block_data_order(MD5_CTX *c, const void *_in, size_t num) -{ - const uint8_t *in = _in; - const MD5_LONG *in32; - MD5_LONG A, B, C, D; - MD5_LONG X0, X1, X2, X3, X4, X5, X6, X7, - X8, X9, X10, X11, X12, X13, X14, X15; - - while (num-- > 0) { - A = c->A; - B = c->B; - C = c->C; - D = c->D; - - if ((uintptr_t)in % 4 == 0) { - /* Input is 32 bit aligned. */ - in32 = (const MD5_LONG *)in; - X0 = le32toh(in32[0]); - X1 = le32toh(in32[1]); - X2 = le32toh(in32[2]); - X3 = le32toh(in32[3]); - X4 = le32toh(in32[4]); - X5 = le32toh(in32[5]); - X6 = le32toh(in32[6]); - X7 = le32toh(in32[7]); - X8 = le32toh(in32[8]); - X9 = le32toh(in32[9]); - X10 = le32toh(in32[10]); - X11 = le32toh(in32[11]); - X12 = le32toh(in32[12]); - X13 = le32toh(in32[13]); - X14 = le32toh(in32[14]); - X15 = le32toh(in32[15]); - } else { - /* Input is not 32 bit aligned. */ - X0 = crypto_load_le32toh(&in[0 * 4]); - X1 = crypto_load_le32toh(&in[1 * 4]); - X2 = crypto_load_le32toh(&in[2 * 4]); - X3 = crypto_load_le32toh(&in[3 * 4]); - X4 = crypto_load_le32toh(&in[4 * 4]); - X5 = crypto_load_le32toh(&in[5 * 4]); - X6 = crypto_load_le32toh(&in[6 * 4]); - X7 = crypto_load_le32toh(&in[7 * 4]); - X8 = crypto_load_le32toh(&in[8 * 4]); - X9 = crypto_load_le32toh(&in[9 * 4]); - X10 = crypto_load_le32toh(&in[10 * 4]); - X11 = crypto_load_le32toh(&in[11 * 4]); - X12 = crypto_load_le32toh(&in[12 * 4]); - X13 = crypto_load_le32toh(&in[13 * 4]); - X14 = crypto_load_le32toh(&in[14 * 4]); - X15 = crypto_load_le32toh(&in[15 * 4]); - } - in += MD5_CBLOCK; - - md5_round1(&A, B, C, D, X0, 0xd76aa478L, 7); - md5_round1(&D, A, B, C, X1, 0xe8c7b756L, 12); - md5_round1(&C, D, A, B, X2, 0x242070dbL, 17); - md5_round1(&B, C, D, A, X3, 0xc1bdceeeL, 22); - md5_round1(&A, B, C, D, X4, 0xf57c0fafL, 7); - md5_round1(&D, A, B, C, X5, 0x4787c62aL, 12); - md5_round1(&C, D, A, B, X6, 0xa8304613L, 17); - md5_round1(&B, C, D, A, X7, 0xfd469501L, 22); - md5_round1(&A, B, C, D, X8, 0x698098d8L, 7); - md5_round1(&D, A, B, C, X9, 0x8b44f7afL, 12); - md5_round1(&C, D, A, B, X10, 0xffff5bb1L, 17); - md5_round1(&B, C, D, A, X11, 0x895cd7beL, 22); - md5_round1(&A, B, C, D, X12, 0x6b901122L, 7); - md5_round1(&D, A, B, C, X13, 0xfd987193L, 12); - md5_round1(&C, D, A, B, X14, 0xa679438eL, 17); - md5_round1(&B, C, D, A, X15, 0x49b40821L, 22); - - md5_round2(&A, B, C, D, X1, 0xf61e2562L, 5); - md5_round2(&D, A, B, C, X6, 0xc040b340L, 9); - md5_round2(&C, D, A, B, X11, 0x265e5a51L, 14); - md5_round2(&B, C, D, A, X0, 0xe9b6c7aaL, 20); - md5_round2(&A, B, C, D, X5, 0xd62f105dL, 5); - md5_round2(&D, A, B, C, X10, 0x02441453L, 9); - md5_round2(&C, D, A, B, X15, 0xd8a1e681L, 14); - md5_round2(&B, C, D, A, X4, 0xe7d3fbc8L, 20); - md5_round2(&A, B, C, D, X9, 0x21e1cde6L, 5); - md5_round2(&D, A, B, C, X14, 0xc33707d6L, 9); - md5_round2(&C, D, A, B, X3, 0xf4d50d87L, 14); - md5_round2(&B, C, D, A, X8, 0x455a14edL, 20); - md5_round2(&A, B, C, D, X13, 0xa9e3e905L, 5); - md5_round2(&D, A, B, C, X2, 0xfcefa3f8L, 9); - md5_round2(&C, D, A, B, X7, 0x676f02d9L, 14); - md5_round2(&B, C, D, A, X12, 0x8d2a4c8aL, 20); - - md5_round3(&A, B, C, D, X5, 0xfffa3942L, 4); - md5_round3(&D, A, B, C, X8, 0x8771f681L, 11); - md5_round3(&C, D, A, B, X11, 0x6d9d6122L, 16); - md5_round3(&B, C, D, A, X14, 0xfde5380cL, 23); - md5_round3(&A, B, C, D, X1, 0xa4beea44L, 4); - md5_round3(&D, A, B, C, X4, 0x4bdecfa9L, 11); - md5_round3(&C, D, A, B, X7, 0xf6bb4b60L, 16); - md5_round3(&B, C, D, A, X10, 0xbebfbc70L, 23); - md5_round3(&A, B, C, D, X13, 0x289b7ec6L, 4); - md5_round3(&D, A, B, C, X0, 0xeaa127faL, 11); - md5_round3(&C, D, A, B, X3, 0xd4ef3085L, 16); - md5_round3(&B, C, D, A, X6, 0x04881d05L, 23); - md5_round3(&A, B, C, D, X9, 0xd9d4d039L, 4); - md5_round3(&D, A, B, C, X12, 0xe6db99e5L, 11); - md5_round3(&C, D, A, B, X15, 0x1fa27cf8L, 16); - md5_round3(&B, C, D, A, X2, 0xc4ac5665L, 23); - - md5_round4(&A, B, C, D, X0, 0xf4292244L, 6); - md5_round4(&D, A, B, C, X7, 0x432aff97L, 10); - md5_round4(&C, D, A, B, X14, 0xab9423a7L, 15); - md5_round4(&B, C, D, A, X5, 0xfc93a039L, 21); - md5_round4(&A, B, C, D, X12, 0x655b59c3L, 6); - md5_round4(&D, A, B, C, X3, 0x8f0ccc92L, 10); - md5_round4(&C, D, A, B, X10, 0xffeff47dL, 15); - md5_round4(&B, C, D, A, X1, 0x85845dd1L, 21); - md5_round4(&A, B, C, D, X8, 0x6fa87e4fL, 6); - md5_round4(&D, A, B, C, X15, 0xfe2ce6e0L, 10); - md5_round4(&C, D, A, B, X6, 0xa3014314L, 15); - md5_round4(&B, C, D, A, X13, 0x4e0811a1L, 21); - md5_round4(&A, B, C, D, X4, 0xf7537e82L, 6); - md5_round4(&D, A, B, C, X11, 0xbd3af235L, 10); - md5_round4(&C, D, A, B, X2, 0x2ad7d2bbL, 15); - md5_round4(&B, C, D, A, X9, 0xeb86d391L, 21); - - c->A += A; - c->B += B; - c->C += C; - c->D += D; - } -} -#endif - -int -MD5_Init(MD5_CTX *c) -{ - memset(c, 0, sizeof(*c)); - - c->A = 0x67452301UL; - c->B = 0xefcdab89UL; - c->C = 0x98badcfeUL; - c->D = 0x10325476UL; - - return 1; -} -LCRYPTO_ALIAS(MD5_Init); - -int -MD5_Update(MD5_CTX *c, const void *data_, size_t len) -{ - const unsigned char *data = data_; - unsigned char *p; - size_t n; - - if (len == 0) - return 1; - - /* Update message bit counter. */ - crypto_add_u32dw_u64(&c->Nh, &c->Nl, (uint64_t)len << 3); - - n = c->num; - if (n != 0) { - p = (unsigned char *)c->data; - - if (len >= MD5_CBLOCK || len + n >= MD5_CBLOCK) { - memcpy(p + n, data, MD5_CBLOCK - n); - md5_block_data_order(c, p, 1); - n = MD5_CBLOCK - n; - data += n; - len -= n; - c->num = 0; - memset(p, 0, MD5_CBLOCK); /* keep it zeroed */ - } else { - memcpy(p + n, data, len); - c->num += (unsigned int)len; - return 1; - } - } - - n = len/MD5_CBLOCK; - if (n > 0) { - md5_block_data_order(c, data, n); - n *= MD5_CBLOCK; - data += n; - len -= n; - } - - if (len != 0) { - p = (unsigned char *)c->data; - c->num = (unsigned int)len; - memcpy(p, data, len); - } - return 1; -} -LCRYPTO_ALIAS(MD5_Update); - -void -MD5_Transform(MD5_CTX *c, const unsigned char *data) -{ - md5_block_data_order(c, data, 1); -} -LCRYPTO_ALIAS(MD5_Transform); - -int -MD5_Final(unsigned char *md, MD5_CTX *c) -{ - unsigned char *p = (unsigned char *)c->data; - size_t n = c->num; - - p[n] = 0x80; /* there is always room for one */ - n++; - - if (n > (MD5_CBLOCK - 8)) { - memset(p + n, 0, MD5_CBLOCK - n); - n = 0; - md5_block_data_order(c, p, 1); - } - - memset(p + n, 0, MD5_CBLOCK - 8 - n); - c->data[MD5_LBLOCK - 2] = htole32(c->Nl); - c->data[MD5_LBLOCK - 1] = htole32(c->Nh); - - md5_block_data_order(c, p, 1); - c->num = 0; - memset(p, 0, MD5_CBLOCK); - - crypto_store_htole32(&md[0 * 4], c->A); - crypto_store_htole32(&md[1 * 4], c->B); - crypto_store_htole32(&md[2 * 4], c->C); - crypto_store_htole32(&md[3 * 4], c->D); - - return 1; -} -LCRYPTO_ALIAS(MD5_Final); - -unsigned char * -MD5(const unsigned char *d, size_t n, unsigned char *md) -{ - MD5_CTX c; - - if (!MD5_Init(&c)) - return NULL; - MD5_Update(&c, d, n); - MD5_Final(md, &c); - explicit_bzero(&c, sizeof(c)); - return (md); -} -LCRYPTO_ALIAS(MD5); diff --git a/src/lib/libcrypto/md5/md5.h b/src/lib/libcrypto/md5/md5.h deleted file mode 100644 index 4d94c84ba6..0000000000 --- a/src/lib/libcrypto/md5/md5.h +++ /dev/null @@ -1,99 +0,0 @@ -/* $OpenBSD: md5.h,v 1.25 2025/01/25 17:59:44 tb Exp $ */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#include - -#ifndef HEADER_MD5_H -#define HEADER_MD5_H - -#include - -#if !defined(HAVE_ATTRIBUTE__BOUNDED__) && !defined(__OpenBSD__) -#define __bounded__(x, y, z) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#define MD5_LONG unsigned int - -#define MD5_CBLOCK 64 -#define MD5_LBLOCK (MD5_CBLOCK/4) -#define MD5_DIGEST_LENGTH 16 - -typedef struct MD5state_st { - MD5_LONG A, B,C, D; - MD5_LONG Nl, Nh; - MD5_LONG data[MD5_LBLOCK]; - unsigned int num; -} MD5_CTX; - -int MD5_Init(MD5_CTX *c); -int MD5_Update(MD5_CTX *c, const void *data, size_t len) - __attribute__ ((__bounded__(__buffer__, 2, 3))); -int MD5_Final(unsigned char *md, MD5_CTX *c); -unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md) - __attribute__ ((__bounded__(__buffer__, 1, 2))) - __attribute__ ((__nonnull__(3))); -void MD5_Transform(MD5_CTX *c, const unsigned char *b); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/lib/libcrypto/md5/md5_amd64_generic.S b/src/lib/libcrypto/md5/md5_amd64_generic.S deleted file mode 100644 index e282d56ad8..0000000000 --- a/src/lib/libcrypto/md5/md5_amd64_generic.S +++ /dev/null @@ -1,237 +0,0 @@ -/* $OpenBSD: md5_amd64_generic.S,v 1.1 2025/01/24 13:35:04 jsing Exp $ */ -/* - * Copyright (c) 2025 Joel Sing - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifdef __CET__ -#include -#else -#define _CET_ENDBR -#endif - -#define ctx %rdi -#define in %rsi -#define num %rdx - -#define end %rbp - -#define A %eax -#define B %ebx -#define C %ecx -#define D %edx - -#define AA %r8d -#define BB %r9d -#define CC %r10d -#define DD %r11d - -#define tmp0 %r12d -#define tmp1 %r13d - -/* - * Compute MD5 round 1 as: - * - * a = b + rol(a + F(b, c, d) + x + t, s) - * F(x, y, z) = (x & y) | (~x & z) - * = ((y ^ z) & x) ^ z - */ -#define md5_round1(a, b, c, d, x, t, s) \ - addl (x*4)(in), a; \ - movl c, tmp0; \ - xorl d, tmp0; \ - andl b, tmp0; \ - xorl d, tmp0; \ - leal t(tmp0, a), a; \ - roll $s, a; \ - addl b, a; - -/* - * Compute MD5 round 2 as: - * - * a = b + rol(a + G(b, c, d) + x + t, s) - * G(x, y, z) = (x & z) | (y & ~z) - */ -#define md5_round2(a, b, c, d, x, t, s) \ - addl (x*4)(in), a; \ - movl d, tmp0; \ - xorl $-1, tmp0; \ - andl c, tmp0; \ - addl tmp0, a; \ - movl d, tmp1; \ - andl b, tmp1; \ - leal t(tmp1, a), a; \ - roll $s, a; \ - addl b, a; - -/* - * Compute MD5 round 3 as: - * - * a = b + rol(a + H(b, c, d) + x + t, s) - * H(x, y, z) = x ^ y ^ z; - */ -#define md5_round3(a, b, c, d, x, t, s) \ - addl (x*4)(in), a; \ - movl d, tmp0; \ - xorl c, tmp0; \ - xorl b, tmp0; \ - leal t(tmp0, a), a; \ - roll $s, a; \ - addl b, a; - -/* - * Compute MD5 round 4 as: - * - * a = b + rol(a + I(b, c, d) + x + t, s) - * I(x, y, z) = y ^ (x | ~z) - */ -#define md5_round4(a, b, c, d, x, t, s) \ - addl (x*4)(in), a; \ - movl d, tmp0; \ - xorl $-1, tmp0; \ - orl b, tmp0; \ - xorl c, tmp0; \ - leal t(tmp0, a), a; \ - roll $s, a; \ - addl b, a; - -.text - -/* - * void md5_block_data_order(MD5_CTX *ctx, const void *in, size_t num); - * - * Standard x86-64 ABI: rdi = ctx, rsi = in, rdx = num - */ -.align 16 -.globl md5_block_data_order -.type md5_block_data_order,@function -md5_block_data_order: - _CET_ENDBR - - /* Save callee save registers. */ - pushq %rbx - pushq %rbp - pushq %r12 - pushq %r13 - - /* Compute end of message. */ - shlq $6, num - leaq (in, num, 1), end - - /* Load current hash state from context. */ - movl (0*4)(ctx), AA - movl (1*4)(ctx), BB - movl (2*4)(ctx), CC - movl (3*4)(ctx), DD - - jmp .Lblock_loop - -.align 16 -.Lblock_loop: - movl AA, A - movl BB, B - movl CC, C - movl DD, D - - md5_round1(A, B, C, D, 0, 0xd76aa478L, 7); - md5_round1(D, A, B, C, 1, 0xe8c7b756L, 12); - md5_round1(C, D, A, B, 2, 0x242070dbL, 17); - md5_round1(B, C, D, A, 3, 0xc1bdceeeL, 22); - md5_round1(A, B, C, D, 4, 0xf57c0fafL, 7); - md5_round1(D, A, B, C, 5, 0x4787c62aL, 12); - md5_round1(C, D, A, B, 6, 0xa8304613L, 17); - md5_round1(B, C, D, A, 7, 0xfd469501L, 22); - md5_round1(A, B, C, D, 8, 0x698098d8L, 7); - md5_round1(D, A, B, C, 9, 0x8b44f7afL, 12); - md5_round1(C, D, A, B, 10, 0xffff5bb1L, 17); - md5_round1(B, C, D, A, 11, 0x895cd7beL, 22); - md5_round1(A, B, C, D, 12, 0x6b901122L, 7); - md5_round1(D, A, B, C, 13, 0xfd987193L, 12); - md5_round1(C, D, A, B, 14, 0xa679438eL, 17); - md5_round1(B, C, D, A, 15, 0x49b40821L, 22); - - md5_round2(A, B, C, D, 1, 0xf61e2562L, 5); - md5_round2(D, A, B, C, 6, 0xc040b340L, 9); - md5_round2(C, D, A, B, 11, 0x265e5a51L, 14); - md5_round2(B, C, D, A, 0, 0xe9b6c7aaL, 20); - md5_round2(A, B, C, D, 5, 0xd62f105dL, 5); - md5_round2(D, A, B, C, 10, 0x02441453L, 9); - md5_round2(C, D, A, B, 15, 0xd8a1e681L, 14); - md5_round2(B, C, D, A, 4, 0xe7d3fbc8L, 20); - md5_round2(A, B, C, D, 9, 0x21e1cde6L, 5); - md5_round2(D, A, B, C, 14, 0xc33707d6L, 9); - md5_round2(C, D, A, B, 3, 0xf4d50d87L, 14); - md5_round2(B, C, D, A, 8, 0x455a14edL, 20); - md5_round2(A, B, C, D, 13, 0xa9e3e905L, 5); - md5_round2(D, A, B, C, 2, 0xfcefa3f8L, 9); - md5_round2(C, D, A, B, 7, 0x676f02d9L, 14); - md5_round2(B, C, D, A, 12, 0x8d2a4c8aL, 20); - - md5_round3(A, B, C, D, 5, 0xfffa3942L, 4); - md5_round3(D, A, B, C, 8, 0x8771f681L, 11); - md5_round3(C, D, A, B, 11, 0x6d9d6122L, 16); - md5_round3(B, C, D, A, 14, 0xfde5380cL, 23); - md5_round3(A, B, C, D, 1, 0xa4beea44L, 4); - md5_round3(D, A, B, C, 4, 0x4bdecfa9L, 11); - md5_round3(C, D, A, B, 7, 0xf6bb4b60L, 16); - md5_round3(B, C, D, A, 10, 0xbebfbc70L, 23); - md5_round3(A, B, C, D, 13, 0x289b7ec6L, 4); - md5_round3(D, A, B, C, 0, 0xeaa127faL, 11); - md5_round3(C, D, A, B, 3, 0xd4ef3085L, 16); - md5_round3(B, C, D, A, 6, 0x04881d05L, 23); - md5_round3(A, B, C, D, 9, 0xd9d4d039L, 4); - md5_round3(D, A, B, C, 12, 0xe6db99e5L, 11); - md5_round3(C, D, A, B, 15, 0x1fa27cf8L, 16); - md5_round3(B, C, D, A, 2, 0xc4ac5665L, 23); - - md5_round4(A, B, C, D, 0, 0xf4292244L, 6); - md5_round4(D, A, B, C, 7, 0x432aff97L, 10); - md5_round4(C, D, A, B, 14, 0xab9423a7L, 15); - md5_round4(B, C, D, A, 5, 0xfc93a039L, 21); - md5_round4(A, B, C, D, 12, 0x655b59c3L, 6); - md5_round4(D, A, B, C, 3, 0x8f0ccc92L, 10); - md5_round4(C, D, A, B, 10, 0xffeff47dL, 15); - md5_round4(B, C, D, A, 1, 0x85845dd1L, 21); - md5_round4(A, B, C, D, 8, 0x6fa87e4fL, 6); - md5_round4(D, A, B, C, 15, 0xfe2ce6e0L, 10); - md5_round4(C, D, A, B, 6, 0xa3014314L, 15); - md5_round4(B, C, D, A, 13, 0x4e0811a1L, 21); - md5_round4(A, B, C, D, 4, 0xf7537e82L, 6); - md5_round4(D, A, B, C, 11, 0xbd3af235L, 10); - md5_round4(C, D, A, B, 2, 0x2ad7d2bbL, 15); - md5_round4(B, C, D, A, 9, 0xeb86d391L, 21); - - /* Add intermediate state to hash state. */ - addl A, AA - addl B, BB - addl C, CC - addl D, DD - - addq $64, in - cmpq end, in - jb .Lblock_loop - - /* Store new hash state to context. */ - movl AA, (0*4)(ctx) - movl BB, (1*4)(ctx) - movl CC, (2*4)(ctx) - movl DD, (3*4)(ctx) - - /* Restore callee save registers. */ - popq %r13 - popq %r12 - popq %rbp - popq %rbx - - ret -- cgit v1.2.3-55-g6feb