From 8238898ddfa6cd38d80274ab298aa838b85d501a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Thu, 11 Aug 2022 11:04:20 +0200 Subject: [PATCH] Delete all md5 assembly code. --- ChangeLog | 7 ++ Makefile.in | 2 +- configure.ac | 2 +- md5-compress.c | 174 ------------------------------------- md5.c | 108 +++++++++++++++++++++++ x86/md5-compress.asm | 187 ---------------------------------------- x86_64/md5-compress.asm | 176 ------------------------------------- 7 files changed, 117 insertions(+), 539 deletions(-) delete mode 100644 md5-compress.c delete mode 100644 x86/md5-compress.asm delete mode 100644 x86_64/md5-compress.asm diff --git a/ChangeLog b/ChangeLog index 5b0feac7..268cd48d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2023-12-08 Niels Möller <nisse@lysator.liu.se> + Delete all md5 assembly code. + * md5.c (nettle_md5_compress): Move function and related macros + here, from... + * md5-compress.c: ... deleted file. + * x86/md5-compress.asm: Deleted file. + * x86_64/md5-compress.asm: Deleted file. + * configure.ac: When checking for openssl, use AC_LINK_IFELSE to check if needed functions really are available. Just using AC_CHECK_LIB to check for, e.g., EVP_RSA_gen, doesn't work, since diff --git a/Makefile.in b/Makefile.in index 905ebd6b..bde6cf2a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -129,7 +129,7 @@ nettle_SOURCES = aes-decrypt-internal.c aes-decrypt.c aes-decrypt-table.c \ hmac-sha512-meta.c hmac-streebog-meta.c hmac-sm3-meta.c \ knuth-lfib.c hkdf.c \ md2.c md2-meta.c md4.c md4-meta.c \ - md5.c md5-compress.c md5-compat.c md5-meta.c \ + md5.c md5-compat.c md5-meta.c \ memeql-sec.c memxor.c memxor3.c \ nettle-lookup-hash.c \ nettle-meta-aeads.c nettle-meta-armors.c \ diff --git a/configure.ac b/configure.ac index e820d5c3..fd533664 100644 --- a/configure.ac +++ b/configure.ac @@ -585,7 +585,7 @@ asm_replace_list="aes-encrypt-internal.asm aes-decrypt-internal.asm \ cbc-aes128-encrypt.asm cbc-aes192-encrypt.asm \ cbc-aes256-encrypt.asm \ camellia-crypt-internal.asm \ - md5-compress.asm memxor.asm memxor3.asm \ + memxor.asm memxor3.asm \ ghash-set-key.asm ghash-update.asm \ poly1305-internal.asm \ chacha-core-internal.asm \ diff --git a/md5-compress.c b/md5-compress.c deleted file mode 100644 index 6fe3256e..00000000 --- a/md5-compress.c +++ /dev/null @@ -1,174 +0,0 @@ -/* md5-compress.c - - The compression function for the md5 hash function. - - Copyright (C) 2001, 2005 Niels Möller - - This file is part of GNU Nettle. - - GNU Nettle is free software: you can redistribute it and/or - modify it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or (at your - option) any later version. - - or both in parallel, as here. - - GNU Nettle is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received copies of the GNU General Public License and - the GNU Lesser General Public License along with this program. If - not, see http://www.gnu.org/licenses/. -*/ - -/* Based on public domain code hacked by Colin Plumb, Andrew Kuchling, and - * Niels Möller. */ - - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#ifndef MD5_DEBUG -# define MD5_DEBUG 0 -#endif - -#if MD5_DEBUG -# include <stdio.h> -# define DEBUG(i) \ - fprintf(stderr, "%2d: %8x %8x %8x %8x\n", i, a, b, c, d) -#else -# define DEBUG(i) -#endif - -#include <assert.h> -#include <stdlib.h> -#include <string.h> - -#include "md5.h" - -#include "macros.h" - -/* A block, treated as a sequence of 32-bit words. */ -#define MD5_DATA_LENGTH 16 - -/* MD5 functions */ - -#define F1(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) -#define F2(x, y, z) F1((z), (x), (y)) -#define F3(x, y, z) ((x) ^ (y) ^ (z)) -#define F4(x, y, z) ((y) ^ ((x) | ~(z))) - -#define ROUND(f, w, x, y, z, data, s) \ -( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x ) - -/* Perform the MD5 transformation on one full block of 16 32-bit - * words. - * - * Compresses 20 (_MD5_DIGEST_LENGTH + MD5_DATA_LENGTH) words into 4 - * (_MD5_DIGEST_LENGTH) words. */ - -void -nettle_md5_compress(uint32_t *digest, const uint8_t *input) -{ - uint32_t data[MD5_DATA_LENGTH]; - uint32_t a, b, c, d; - unsigned i; - - for (i = 0; i < MD5_DATA_LENGTH; i++, input += 4) - data[i] = LE_READ_UINT32(input); - - a = digest[0]; - b = digest[1]; - c = digest[2]; - d = digest[3]; - - DEBUG(-1); - ROUND(F1, a, b, c, d, data[ 0] + 0xd76aa478, 7); DEBUG(0); - ROUND(F1, d, a, b, c, data[ 1] + 0xe8c7b756, 12); DEBUG(1); - ROUND(F1, c, d, a, b, data[ 2] + 0x242070db, 17); - ROUND(F1, b, c, d, a, data[ 3] + 0xc1bdceee, 22); - ROUND(F1, a, b, c, d, data[ 4] + 0xf57c0faf, 7); - ROUND(F1, d, a, b, c, data[ 5] + 0x4787c62a, 12); - ROUND(F1, c, d, a, b, data[ 6] + 0xa8304613, 17); - ROUND(F1, b, c, d, a, data[ 7] + 0xfd469501, 22); - ROUND(F1, a, b, c, d, data[ 8] + 0x698098d8, 7); - ROUND(F1, d, a, b, c, data[ 9] + 0x8b44f7af, 12); - ROUND(F1, c, d, a, b, data[10] + 0xffff5bb1, 17); - ROUND(F1, b, c, d, a, data[11] + 0x895cd7be, 22); - ROUND(F1, a, b, c, d, data[12] + 0x6b901122, 7); - ROUND(F1, d, a, b, c, data[13] + 0xfd987193, 12); - ROUND(F1, c, d, a, b, data[14] + 0xa679438e, 17); - ROUND(F1, b, c, d, a, data[15] + 0x49b40821, 22); DEBUG(15); - - ROUND(F2, a, b, c, d, data[ 1] + 0xf61e2562, 5); DEBUG(16); - ROUND(F2, d, a, b, c, data[ 6] + 0xc040b340, 9); DEBUG(17); - ROUND(F2, c, d, a, b, data[11] + 0x265e5a51, 14); - ROUND(F2, b, c, d, a, data[ 0] + 0xe9b6c7aa, 20); - ROUND(F2, a, b, c, d, data[ 5] + 0xd62f105d, 5); - ROUND(F2, d, a, b, c, data[10] + 0x02441453, 9); - ROUND(F2, c, d, a, b, data[15] + 0xd8a1e681, 14); - ROUND(F2, b, c, d, a, data[ 4] + 0xe7d3fbc8, 20); - ROUND(F2, a, b, c, d, data[ 9] + 0x21e1cde6, 5); - ROUND(F2, d, a, b, c, data[14] + 0xc33707d6, 9); - ROUND(F2, c, d, a, b, data[ 3] + 0xf4d50d87, 14); - ROUND(F2, b, c, d, a, data[ 8] + 0x455a14ed, 20); - ROUND(F2, a, b, c, d, data[13] + 0xa9e3e905, 5); - ROUND(F2, d, a, b, c, data[ 2] + 0xfcefa3f8, 9); - ROUND(F2, c, d, a, b, data[ 7] + 0x676f02d9, 14); - ROUND(F2, b, c, d, a, data[12] + 0x8d2a4c8a, 20); DEBUG(31); - - ROUND(F3, a, b, c, d, data[ 5] + 0xfffa3942, 4); DEBUG(32); - ROUND(F3, d, a, b, c, data[ 8] + 0x8771f681, 11); DEBUG(33); - ROUND(F3, c, d, a, b, data[11] + 0x6d9d6122, 16); - ROUND(F3, b, c, d, a, data[14] + 0xfde5380c, 23); - ROUND(F3, a, b, c, d, data[ 1] + 0xa4beea44, 4); - ROUND(F3, d, a, b, c, data[ 4] + 0x4bdecfa9, 11); - ROUND(F3, c, d, a, b, data[ 7] + 0xf6bb4b60, 16); - ROUND(F3, b, c, d, a, data[10] + 0xbebfbc70, 23); - ROUND(F3, a, b, c, d, data[13] + 0x289b7ec6, 4); - ROUND(F3, d, a, b, c, data[ 0] + 0xeaa127fa, 11); - ROUND(F3, c, d, a, b, data[ 3] + 0xd4ef3085, 16); - ROUND(F3, b, c, d, a, data[ 6] + 0x04881d05, 23); - ROUND(F3, a, b, c, d, data[ 9] + 0xd9d4d039, 4); - ROUND(F3, d, a, b, c, data[12] + 0xe6db99e5, 11); - ROUND(F3, c, d, a, b, data[15] + 0x1fa27cf8, 16); - ROUND(F3, b, c, d, a, data[ 2] + 0xc4ac5665, 23); DEBUG(47); - - ROUND(F4, a, b, c, d, data[ 0] + 0xf4292244, 6); DEBUG(48); - ROUND(F4, d, a, b, c, data[ 7] + 0x432aff97, 10); DEBUG(49); - ROUND(F4, c, d, a, b, data[14] + 0xab9423a7, 15); - ROUND(F4, b, c, d, a, data[ 5] + 0xfc93a039, 21); - ROUND(F4, a, b, c, d, data[12] + 0x655b59c3, 6); - ROUND(F4, d, a, b, c, data[ 3] + 0x8f0ccc92, 10); - ROUND(F4, c, d, a, b, data[10] + 0xffeff47d, 15); - ROUND(F4, b, c, d, a, data[ 1] + 0x85845dd1, 21); - ROUND(F4, a, b, c, d, data[ 8] + 0x6fa87e4f, 6); - ROUND(F4, d, a, b, c, data[15] + 0xfe2ce6e0, 10); - ROUND(F4, c, d, a, b, data[ 6] + 0xa3014314, 15); - ROUND(F4, b, c, d, a, data[13] + 0x4e0811a1, 21); - ROUND(F4, a, b, c, d, data[ 4] + 0xf7537e82, 6); - ROUND(F4, d, a, b, c, data[11] + 0xbd3af235, 10); - ROUND(F4, c, d, a, b, data[ 2] + 0x2ad7d2bb, 15); - ROUND(F4, b, c, d, a, data[ 9] + 0xeb86d391, 21); DEBUG(63); - - digest[0] += a; - digest[1] += b; - digest[2] += c; - digest[3] += d; -#if MD5_DEBUG - fprintf(stderr, "99: %8x %8x %8x %8x\n", - digest[0], digest[1], digest[2], digest[3]); -#endif - -} diff --git a/md5.c b/md5.c index cc009b4a..57cca826 100644 --- a/md5.c +++ b/md5.c @@ -91,3 +91,111 @@ md5_digest(struct md5_ctx *ctx, _nettle_write_le32(length, digest, ctx->state); md5_init(ctx); } + +/* A block, treated as a sequence of 32-bit words. */ +#define MD5_DATA_LENGTH 16 + +/* MD5 functions */ + +#define F1(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define F2(x, y, z) F1((z), (x), (y)) +#define F3(x, y, z) ((x) ^ (y) ^ (z)) +#define F4(x, y, z) ((y) ^ ((x) | ~(z))) + +#define ROUND(f, w, x, y, z, data, s) \ +( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x ) + +/* Perform the MD5 transformation on one full block of 16 32-bit + * words. + * + * Compresses 20 (_MD5_DIGEST_LENGTH + MD5_DATA_LENGTH) words into 4 + * (_MD5_DIGEST_LENGTH) words. */ + +void +nettle_md5_compress(uint32_t *digest, const uint8_t *input) +{ + uint32_t data[MD5_DATA_LENGTH]; + uint32_t a, b, c, d; + unsigned i; + + for (i = 0; i < MD5_DATA_LENGTH; i++, input += 4) + data[i] = LE_READ_UINT32(input); + + a = digest[0]; + b = digest[1]; + c = digest[2]; + d = digest[3]; + + ROUND(F1, a, b, c, d, data[ 0] + 0xd76aa478, 7); + ROUND(F1, d, a, b, c, data[ 1] + 0xe8c7b756, 12); + ROUND(F1, c, d, a, b, data[ 2] + 0x242070db, 17); + ROUND(F1, b, c, d, a, data[ 3] + 0xc1bdceee, 22); + ROUND(F1, a, b, c, d, data[ 4] + 0xf57c0faf, 7); + ROUND(F1, d, a, b, c, data[ 5] + 0x4787c62a, 12); + ROUND(F1, c, d, a, b, data[ 6] + 0xa8304613, 17); + ROUND(F1, b, c, d, a, data[ 7] + 0xfd469501, 22); + ROUND(F1, a, b, c, d, data[ 8] + 0x698098d8, 7); + ROUND(F1, d, a, b, c, data[ 9] + 0x8b44f7af, 12); + ROUND(F1, c, d, a, b, data[10] + 0xffff5bb1, 17); + ROUND(F1, b, c, d, a, data[11] + 0x895cd7be, 22); + ROUND(F1, a, b, c, d, data[12] + 0x6b901122, 7); + ROUND(F1, d, a, b, c, data[13] + 0xfd987193, 12); + ROUND(F1, c, d, a, b, data[14] + 0xa679438e, 17); + ROUND(F1, b, c, d, a, data[15] + 0x49b40821, 22); + + ROUND(F2, a, b, c, d, data[ 1] + 0xf61e2562, 5); + ROUND(F2, d, a, b, c, data[ 6] + 0xc040b340, 9); + ROUND(F2, c, d, a, b, data[11] + 0x265e5a51, 14); + ROUND(F2, b, c, d, a, data[ 0] + 0xe9b6c7aa, 20); + ROUND(F2, a, b, c, d, data[ 5] + 0xd62f105d, 5); + ROUND(F2, d, a, b, c, data[10] + 0x02441453, 9); + ROUND(F2, c, d, a, b, data[15] + 0xd8a1e681, 14); + ROUND(F2, b, c, d, a, data[ 4] + 0xe7d3fbc8, 20); + ROUND(F2, a, b, c, d, data[ 9] + 0x21e1cde6, 5); + ROUND(F2, d, a, b, c, data[14] + 0xc33707d6, 9); + ROUND(F2, c, d, a, b, data[ 3] + 0xf4d50d87, 14); + ROUND(F2, b, c, d, a, data[ 8] + 0x455a14ed, 20); + ROUND(F2, a, b, c, d, data[13] + 0xa9e3e905, 5); + ROUND(F2, d, a, b, c, data[ 2] + 0xfcefa3f8, 9); + ROUND(F2, c, d, a, b, data[ 7] + 0x676f02d9, 14); + ROUND(F2, b, c, d, a, data[12] + 0x8d2a4c8a, 20); + + ROUND(F3, a, b, c, d, data[ 5] + 0xfffa3942, 4); + ROUND(F3, d, a, b, c, data[ 8] + 0x8771f681, 11); + ROUND(F3, c, d, a, b, data[11] + 0x6d9d6122, 16); + ROUND(F3, b, c, d, a, data[14] + 0xfde5380c, 23); + ROUND(F3, a, b, c, d, data[ 1] + 0xa4beea44, 4); + ROUND(F3, d, a, b, c, data[ 4] + 0x4bdecfa9, 11); + ROUND(F3, c, d, a, b, data[ 7] + 0xf6bb4b60, 16); + ROUND(F3, b, c, d, a, data[10] + 0xbebfbc70, 23); + ROUND(F3, a, b, c, d, data[13] + 0x289b7ec6, 4); + ROUND(F3, d, a, b, c, data[ 0] + 0xeaa127fa, 11); + ROUND(F3, c, d, a, b, data[ 3] + 0xd4ef3085, 16); + ROUND(F3, b, c, d, a, data[ 6] + 0x04881d05, 23); + ROUND(F3, a, b, c, d, data[ 9] + 0xd9d4d039, 4); + ROUND(F3, d, a, b, c, data[12] + 0xe6db99e5, 11); + ROUND(F3, c, d, a, b, data[15] + 0x1fa27cf8, 16); + ROUND(F3, b, c, d, a, data[ 2] + 0xc4ac5665, 23); + + ROUND(F4, a, b, c, d, data[ 0] + 0xf4292244, 6); + ROUND(F4, d, a, b, c, data[ 7] + 0x432aff97, 10); + ROUND(F4, c, d, a, b, data[14] + 0xab9423a7, 15); + ROUND(F4, b, c, d, a, data[ 5] + 0xfc93a039, 21); + ROUND(F4, a, b, c, d, data[12] + 0x655b59c3, 6); + ROUND(F4, d, a, b, c, data[ 3] + 0x8f0ccc92, 10); + ROUND(F4, c, d, a, b, data[10] + 0xffeff47d, 15); + ROUND(F4, b, c, d, a, data[ 1] + 0x85845dd1, 21); + ROUND(F4, a, b, c, d, data[ 8] + 0x6fa87e4f, 6); + ROUND(F4, d, a, b, c, data[15] + 0xfe2ce6e0, 10); + ROUND(F4, c, d, a, b, data[ 6] + 0xa3014314, 15); + ROUND(F4, b, c, d, a, data[13] + 0x4e0811a1, 21); + ROUND(F4, a, b, c, d, data[ 4] + 0xf7537e82, 6); + ROUND(F4, d, a, b, c, data[11] + 0xbd3af235, 10); + ROUND(F4, c, d, a, b, data[ 2] + 0x2ad7d2bb, 15); + ROUND(F4, b, c, d, a, data[ 9] + 0xeb86d391, 21); + + digest[0] += a; + digest[1] += b; + digest[2] += c; + digest[3] += d; +} diff --git a/x86/md5-compress.asm b/x86/md5-compress.asm deleted file mode 100644 index 7420671d..00000000 --- a/x86/md5-compress.asm +++ /dev/null @@ -1,187 +0,0 @@ -C x86/md5-compress.asm - -ifelse(` - Copyright (C) 2005, Niels Möller - - This file is part of GNU Nettle. - - GNU Nettle is free software: you can redistribute it and/or - modify it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or (at your - option) any later version. - - or both in parallel, as here. - - GNU Nettle is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received copies of the GNU General Public License and - the GNU Lesser General Public License along with this program. If - not, see http://www.gnu.org/licenses/. -') - -C Register usage -define(`SA',`%eax') -define(`SB',`%ebx') -define(`SC',`%ecx') -define(`SD',`%edx') -define(`TMP',`%ebp') -define(`INPUT',`%esi') - -C %edi is unused - -C F1(x,y,z) = (z ^ (x & (y ^ z))) -define(`F1', ` - movl $3, TMP - xorl $2, TMP - andl $1, TMP - xorl $3, TMP') - -define(`F2',`F1($3, $1, $2)') - -C F3(x,y,z) = x ^ y ^ z -define(`F3',` - movl $1, TMP - xorl $2, TMP - xorl $3, TMP') - -C F4(x,y,z) = y ^ (x | ~z) -define(`F4',` - movl $3, TMP - notl TMP - orl $1, TMP - xorl $2, TMP') - -define(`REF',`OFFSET($1)(INPUT)') - -C ROUND(f, w, x, y, z, k, data, s): -C w += f(x,y,z) + data + k -C w <<< s -C w += x -define(`ROUND',` - addl $7, $2 - $1($3, $4, $5) - addl $6, $2 - addl TMP, $2 - roll `$'$8, $2 - addl $3, $2') - - .file "md5-compress.asm" - - C nettle_md5_compress(uint32_t *state, uint8_t *data) - - .text - ALIGN(16) -PROLOGUE(nettle_md5_compress) - C save all registers that need to be saved - - C 24(%esp) input - C 20(%esp) state - C 16(%esp) Return address - pushl %ebx C 12(%esp) - pushl %ebp C 8(%esp) - pushl %esi C 4(%esp) - pushl %edi C (%esp) - - C load the state vector - movl 20(%esp),TMP - movl (TMP), SA - movl 4(TMP), SB - movl 8(TMP), SC - movl 12(TMP), SD - - C Pointer to source data. - C Note that if unaligned, we suffer unaligned accesses - movl 24(%esp), INPUT - - ROUND(`F1', SA, SB, SC, SD, REF( 0), $0xd76aa478, 7) - ROUND(`F1', SD, SA, SB, SC, REF( 1), $0xe8c7b756, 12) - ROUND(`F1', SC, SD, SA, SB, REF( 2), $0x242070db, 17) - ROUND(`F1', SB, SC, SD, SA, REF( 3), $0xc1bdceee, 22) - ROUND(`F1', SA, SB, SC, SD, REF( 4), $0xf57c0faf, 7) - ROUND(`F1', SD, SA, SB, SC, REF( 5), $0x4787c62a, 12) - ROUND(`F1', SC, SD, SA, SB, REF( 6), $0xa8304613, 17) - ROUND(`F1', SB, SC, SD, SA, REF( 7), $0xfd469501, 22) - ROUND(`F1', SA, SB, SC, SD, REF( 8), $0x698098d8, 7) - ROUND(`F1', SD, SA, SB, SC, REF( 9), $0x8b44f7af, 12) - ROUND(`F1', SC, SD, SA, SB, REF(10), $0xffff5bb1, 17) - ROUND(`F1', SB, SC, SD, SA, REF(11), $0x895cd7be, 22) - ROUND(`F1', SA, SB, SC, SD, REF(12), $0x6b901122, 7) - ROUND(`F1', SD, SA, SB, SC, REF(13), $0xfd987193, 12) - ROUND(`F1', SC, SD, SA, SB, REF(14), $0xa679438e, 17) - ROUND(`F1', SB, SC, SD, SA, REF(15), $0x49b40821, 22) - - ROUND(`F2', SA, SB, SC, SD, REF( 1), $0xf61e2562, 5) - ROUND(`F2', SD, SA, SB, SC, REF( 6), $0xc040b340, 9) - ROUND(`F2', SC, SD, SA, SB, REF(11), $0x265e5a51, 14) - ROUND(`F2', SB, SC, SD, SA, REF( 0), $0xe9b6c7aa, 20) - ROUND(`F2', SA, SB, SC, SD, REF( 5), $0xd62f105d, 5) - ROUND(`F2', SD, SA, SB, SC, REF(10), $0x02441453, 9) - ROUND(`F2', SC, SD, SA, SB, REF(15), $0xd8a1e681, 14) - ROUND(`F2', SB, SC, SD, SA, REF( 4), $0xe7d3fbc8, 20) - ROUND(`F2', SA, SB, SC, SD, REF( 9), $0x21e1cde6, 5) - ROUND(`F2', SD, SA, SB, SC, REF(14), $0xc33707d6, 9) - ROUND(`F2', SC, SD, SA, SB, REF( 3), $0xf4d50d87, 14) - ROUND(`F2', SB, SC, SD, SA, REF( 8), $0x455a14ed, 20) - ROUND(`F2', SA, SB, SC, SD, REF(13), $0xa9e3e905, 5) - ROUND(`F2', SD, SA, SB, SC, REF( 2), $0xfcefa3f8, 9) - ROUND(`F2', SC, SD, SA, SB, REF( 7), $0x676f02d9, 14) - ROUND(`F2', SB, SC, SD, SA, REF(12), $0x8d2a4c8a, 20) - - ROUND(`F3', SA, SB, SC, SD, REF( 5), $0xfffa3942, 4) - ROUND(`F3', SD, SA, SB, SC, REF( 8), $0x8771f681, 11) - ROUND(`F3', SC, SD, SA, SB, REF(11), $0x6d9d6122, 16) - ROUND(`F3', SB, SC, SD, SA, REF(14), $0xfde5380c, 23) - ROUND(`F3', SA, SB, SC, SD, REF( 1), $0xa4beea44, 4) - ROUND(`F3', SD, SA, SB, SC, REF( 4), $0x4bdecfa9, 11) - ROUND(`F3', SC, SD, SA, SB, REF( 7), $0xf6bb4b60, 16) - ROUND(`F3', SB, SC, SD, SA, REF(10), $0xbebfbc70, 23) - ROUND(`F3', SA, SB, SC, SD, REF(13), $0x289b7ec6, 4) - ROUND(`F3', SD, SA, SB, SC, REF( 0), $0xeaa127fa, 11) - ROUND(`F3', SC, SD, SA, SB, REF( 3), $0xd4ef3085, 16) - ROUND(`F3', SB, SC, SD, SA, REF( 6), $0x04881d05, 23) - ROUND(`F3', SA, SB, SC, SD, REF( 9), $0xd9d4d039, 4) - ROUND(`F3', SD, SA, SB, SC, REF(12), $0xe6db99e5, 11) - ROUND(`F3', SC, SD, SA, SB, REF(15), $0x1fa27cf8, 16) - ROUND(`F3', SB, SC, SD, SA, REF( 2), $0xc4ac5665, 23) - - ROUND(`F4', SA, SB, SC, SD, REF( 0), $0xf4292244, 6) - ROUND(`F4', SD, SA, SB, SC, REF( 7), $0x432aff97, 10) - ROUND(`F4', SC, SD, SA, SB, REF(14), $0xab9423a7, 15) - ROUND(`F4', SB, SC, SD, SA, REF( 5), $0xfc93a039, 21) - ROUND(`F4', SA, SB, SC, SD, REF(12), $0x655b59c3, 6) - ROUND(`F4', SD, SA, SB, SC, REF( 3), $0x8f0ccc92, 10) - ROUND(`F4', SC, SD, SA, SB, REF(10), $0xffeff47d, 15) - ROUND(`F4', SB, SC, SD, SA, REF( 1), $0x85845dd1, 21) - ROUND(`F4', SA, SB, SC, SD, REF( 8), $0x6fa87e4f, 6) - ROUND(`F4', SD, SA, SB, SC, REF(15), $0xfe2ce6e0, 10) - ROUND(`F4', SC, SD, SA, SB, REF( 6), $0xa3014314, 15) - ROUND(`F4', SB, SC, SD, SA, REF(13), $0x4e0811a1, 21) - ROUND(`F4', SA, SB, SC, SD, REF( 4), $0xf7537e82, 6) - ROUND(`F4', SD, SA, SB, SC, REF(11), $0xbd3af235, 10) - ROUND(`F4', SC, SD, SA, SB, REF( 2), $0x2ad7d2bb, 15) - ROUND(`F4', SB, SC, SD, SA, REF( 9), $0xeb86d391, 21) - - C Update the state vector - movl 20(%esp),TMP - addl SA, (TMP) - addl SB, 4(TMP) - addl SC, 8(TMP) - addl SD, 12(TMP) - - popl %edi - popl %esi - popl %ebp - popl %ebx - ret -EPILOGUE(nettle_md5_compress) diff --git a/x86_64/md5-compress.asm b/x86_64/md5-compress.asm deleted file mode 100644 index defce60f..00000000 --- a/x86_64/md5-compress.asm +++ /dev/null @@ -1,176 +0,0 @@ -C x86_64/md5-compress.asm - -ifelse(` - Copyright (C) 2005, 2013 Niels Möller - - This file is part of GNU Nettle. - - GNU Nettle is free software: you can redistribute it and/or - modify it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or (at your - option) any later version. - - or both in parallel, as here. - - GNU Nettle is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received copies of the GNU General Public License and - the GNU Lesser General Public License along with this program. If - not, see http://www.gnu.org/licenses/. -') - -C Registers: - -define(`STATE', `%rdi') -define(`INPUT', `%rsi') -define(`SA',`%rax') -define(`SB',`%rbx') -define(`SC',`%rcx') -define(`SD',`%rbp') -define(`TMP', `%r8') - -C F1(x,y,z) = (z ^ (x & (y ^ z))) -define(`F1', ` - movl XREG($3), XREG(TMP) - xorl XREG($2), XREG(TMP) - andl XREG($1), XREG(TMP) - xorl XREG($3), XREG(TMP)') - -define(`F2',`F1($3, $1, $2)') - -C F3(x,y,z) = x ^ y ^ z -define(`F3',` - movl XREG($1), XREG(TMP) - xorl XREG($2), XREG(TMP) - xorl XREG($3), XREG(TMP)') - -C F4(x,y,z) = y ^ (x | ~z) -define(`F4',` - movl XREG($3), XREG(TMP) - notl XREG(TMP) - orl XREG($1), XREG(TMP) - xorl XREG($2), XREG(TMP)') - -C Index to 4*i, or to the empty string if zero -define(`REF',`ifelse($1,0,,eval(4*$1))(INPUT)') - -C ROUND(f, w, x, y, z, k, data, s): -C w += f(x,y,z) + data + k -C w <<< s -C w += x -define(`ROUND',` - addl `$'$7, XREG($2) - $1($3, $4, $5) - addl $6, XREG($2) - addl XREG(TMP), XREG($2) - roll `$'$8, XREG($2) - addl XREG($3), XREG($2)') - - .file "md5-compress.asm" - - C nettle_md5_compress(uint32_t *state, uint8_t *input) - .text - ALIGN(16) -PROLOGUE(nettle_md5_compress) - W64_ENTRY(2,0) - C save all registers that need to be saved - push %rbp - push %rbx - - C load the state vector - movl (STATE), XREG(SA) - movl 4(STATE), XREG(SB) - movl 8(STATE), XREG(SC) - movl 12(STATE), XREG(SD) - - ROUND(`F1', SA, SB, SC, SD, REF( 0), 0xd76aa478, 7) - ROUND(`F1', SD, SA, SB, SC, REF( 1), 0xe8c7b756, 12) - ROUND(`F1', SC, SD, SA, SB, REF( 2), 0x242070db, 17) - ROUND(`F1', SB, SC, SD, SA, REF( 3), 0xc1bdceee, 22) - ROUND(`F1', SA, SB, SC, SD, REF( 4), 0xf57c0faf, 7) - ROUND(`F1', SD, SA, SB, SC, REF( 5), 0x4787c62a, 12) - ROUND(`F1', SC, SD, SA, SB, REF( 6), 0xa8304613, 17) - ROUND(`F1', SB, SC, SD, SA, REF( 7), 0xfd469501, 22) - ROUND(`F1', SA, SB, SC, SD, REF( 8), 0x698098d8, 7) - ROUND(`F1', SD, SA, SB, SC, REF( 9), 0x8b44f7af, 12) - ROUND(`F1', SC, SD, SA, SB, REF(10), 0xffff5bb1, 17) - ROUND(`F1', SB, SC, SD, SA, REF(11), 0x895cd7be, 22) - ROUND(`F1', SA, SB, SC, SD, REF(12), 0x6b901122, 7) - ROUND(`F1', SD, SA, SB, SC, REF(13), 0xfd987193, 12) - ROUND(`F1', SC, SD, SA, SB, REF(14), 0xa679438e, 17) - ROUND(`F1', SB, SC, SD, SA, REF(15), 0x49b40821, 22) - - ROUND(`F2', SA, SB, SC, SD, REF( 1), 0xf61e2562, 5) - ROUND(`F2', SD, SA, SB, SC, REF( 6), 0xc040b340, 9) - ROUND(`F2', SC, SD, SA, SB, REF(11), 0x265e5a51, 14) - ROUND(`F2', SB, SC, SD, SA, REF( 0), 0xe9b6c7aa, 20) - ROUND(`F2', SA, SB, SC, SD, REF( 5), 0xd62f105d, 5) - ROUND(`F2', SD, SA, SB, SC, REF(10), 0x02441453, 9) - ROUND(`F2', SC, SD, SA, SB, REF(15), 0xd8a1e681, 14) - ROUND(`F2', SB, SC, SD, SA, REF( 4), 0xe7d3fbc8, 20) - ROUND(`F2', SA, SB, SC, SD, REF( 9), 0x21e1cde6, 5) - ROUND(`F2', SD, SA, SB, SC, REF(14), 0xc33707d6, 9) - ROUND(`F2', SC, SD, SA, SB, REF( 3), 0xf4d50d87, 14) - ROUND(`F2', SB, SC, SD, SA, REF( 8), 0x455a14ed, 20) - ROUND(`F2', SA, SB, SC, SD, REF(13), 0xa9e3e905, 5) - ROUND(`F2', SD, SA, SB, SC, REF( 2), 0xfcefa3f8, 9) - ROUND(`F2', SC, SD, SA, SB, REF( 7), 0x676f02d9, 14) - ROUND(`F2', SB, SC, SD, SA, REF(12), 0x8d2a4c8a, 20) - - ROUND(`F3', SA, SB, SC, SD, REF( 5), 0xfffa3942, 4) - ROUND(`F3', SD, SA, SB, SC, REF( 8), 0x8771f681, 11) - ROUND(`F3', SC, SD, SA, SB, REF(11), 0x6d9d6122, 16) - ROUND(`F3', SB, SC, SD, SA, REF(14), 0xfde5380c, 23) - ROUND(`F3', SA, SB, SC, SD, REF( 1), 0xa4beea44, 4) - ROUND(`F3', SD, SA, SB, SC, REF( 4), 0x4bdecfa9, 11) - ROUND(`F3', SC, SD, SA, SB, REF( 7), 0xf6bb4b60, 16) - ROUND(`F3', SB, SC, SD, SA, REF(10), 0xbebfbc70, 23) - ROUND(`F3', SA, SB, SC, SD, REF(13), 0x289b7ec6, 4) - ROUND(`F3', SD, SA, SB, SC, REF( 0), 0xeaa127fa, 11) - ROUND(`F3', SC, SD, SA, SB, REF( 3), 0xd4ef3085, 16) - ROUND(`F3', SB, SC, SD, SA, REF( 6), 0x04881d05, 23) - ROUND(`F3', SA, SB, SC, SD, REF( 9), 0xd9d4d039, 4) - ROUND(`F3', SD, SA, SB, SC, REF(12), 0xe6db99e5, 11) - ROUND(`F3', SC, SD, SA, SB, REF(15), 0x1fa27cf8, 16) - ROUND(`F3', SB, SC, SD, SA, REF( 2), 0xc4ac5665, 23) - - ROUND(`F4', SA, SB, SC, SD, REF( 0), 0xf4292244, 6) - ROUND(`F4', SD, SA, SB, SC, REF( 7), 0x432aff97, 10) - ROUND(`F4', SC, SD, SA, SB, REF(14), 0xab9423a7, 15) - ROUND(`F4', SB, SC, SD, SA, REF( 5), 0xfc93a039, 21) - ROUND(`F4', SA, SB, SC, SD, REF(12), 0x655b59c3, 6) - ROUND(`F4', SD, SA, SB, SC, REF( 3), 0x8f0ccc92, 10) - ROUND(`F4', SC, SD, SA, SB, REF(10), 0xffeff47d, 15) - ROUND(`F4', SB, SC, SD, SA, REF( 1), 0x85845dd1, 21) - ROUND(`F4', SA, SB, SC, SD, REF( 8), 0x6fa87e4f, 6) - ROUND(`F4', SD, SA, SB, SC, REF(15), 0xfe2ce6e0, 10) - ROUND(`F4', SC, SD, SA, SB, REF( 6), 0xa3014314, 15) - ROUND(`F4', SB, SC, SD, SA, REF(13), 0x4e0811a1, 21) - ROUND(`F4', SA, SB, SC, SD, REF( 4), 0xf7537e82, 6) - ROUND(`F4', SD, SA, SB, SC, REF(11), 0xbd3af235, 10) - ROUND(`F4', SC, SD, SA, SB, REF( 2), 0x2ad7d2bb, 15) - ROUND(`F4', SB, SC, SD, SA, REF( 9), 0xeb86d391, 21) - - C Update the state vector - addl XREG(SA), (STATE) - addl XREG(SB), 4(STATE) - addl XREG(SC), 8(STATE) - addl XREG(SD), 12(STATE) - - pop %rbx - pop %rbp - W64_EXIT(2,0) - - ret -EPILOGUE(nettle_md5_compress) -- GitLab