sync with OpenBSD -current

This commit is contained in:
purplerain 2024-03-28 20:44:33 +00:00
parent cc5edceac3
commit 6278c437f5
Signed by: purplerain
GPG Key ID: F42C07F07E2E35B7
76 changed files with 1108 additions and 2495 deletions

View File

@ -2,6 +2,9 @@
#
# This file is for testing purposes only.
export LANG=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8
xset b 0 0 0
if [ -x /usr/local/bin/dbus-launch -a -z "${DBUS_SESSION_BUS_ADDRESS}" ]; then

View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.183 2024/03/28 02:09:28 jsing Exp $
# $OpenBSD: Makefile,v 1.185 2024/03/28 12:52:58 jsing Exp $
LIB= crypto
LIBREBUILD=y
@ -644,7 +644,6 @@ SRCS+= x_all.c
${LCRYPTO_SRC}/engine \
${LCRYPTO_SRC}/err \
${LCRYPTO_SRC}/evp \
${LCRYPTO_SRC}/gost \
${LCRYPTO_SRC}/hkdf \
${LCRYPTO_SRC}/hmac \
${LCRYPTO_SRC}/idea \
@ -790,7 +789,6 @@ obj_dat.h: obj_mac.h ${SSL_OBJECTS}/obj_dat.pl
.else
CFLAGS+=-DOPENSSL_NO_ASM
SRCS+= aes_core.c
SRCS+= aes_cbc.c
SRCS+= camellia.c
SRCS+= cmll_cbc.c
SRCS+= cmll_misc.c

View File

@ -2542,3 +2542,45 @@ _libre_ENGINE_ctrl_cmd
_libre_ENGINE_ctrl_cmd_string
_libre_ENGINE_load_private_key
_libre_ENGINE_load_public_key
_libre_RC4_set_key
_libre_RC4
_libre_RIPEMD160_Init
_libre_RIPEMD160_Update
_libre_RIPEMD160_Final
_libre_RIPEMD160
_libre_RIPEMD160_Transform
_libre_DES_ecb3_encrypt
_libre_DES_cbc_cksum
_libre_DES_cbc_encrypt
_libre_DES_ncbc_encrypt
_libre_DES_xcbc_encrypt
_libre_DES_cfb_encrypt
_libre_DES_ecb_encrypt
_libre_DES_encrypt1
_libre_DES_encrypt2
_libre_DES_encrypt3
_libre_DES_decrypt3
_libre_DES_ede3_cbc_encrypt
_libre_DES_ede3_cbcm_encrypt
_libre_DES_ede3_cfb64_encrypt
_libre_DES_ede3_cfb_encrypt
_libre_DES_ede3_ofb64_encrypt
_libre_DES_enc_read
_libre_DES_enc_write
_libre_DES_fcrypt
_libre_DES_crypt
_libre_DES_ofb_encrypt
_libre_DES_pcbc_encrypt
_libre_DES_quad_cksum
_libre_DES_random_key
_libre_DES_set_odd_parity
_libre_DES_check_key_parity
_libre_DES_is_weak_key
_libre_DES_set_key
_libre_DES_key_sched
_libre_DES_set_key_checked
_libre_DES_set_key_unchecked
_libre_DES_string_to_key
_libre_DES_string_to_2keys
_libre_DES_cfb64_encrypt
_libre_DES_ofb64_encrypt

View File

@ -1,4 +1,4 @@
/* $OpenBSD: aes.c,v 1.1 2024/03/28 00:57:26 jsing Exp $ */
/* $OpenBSD: aes.c,v 1.2 2024/03/28 12:52:58 jsing Exp $ */
/* ====================================================================
* Copyright (c) 2002-2006 The OpenSSL Project. All rights reserved.
*
@ -59,6 +59,31 @@ static const unsigned char aes_wrap_default_iv[] = {
0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
};
#ifdef HAVE_AES_CBC_ENCRYPT_INTERNAL
void aes_cbc_encrypt_internal(const unsigned char *in, unsigned char *out,
size_t len, const AES_KEY *key, unsigned char *ivec, const int enc);
#else
static inline void
aes_cbc_encrypt_internal(const unsigned char *in, unsigned char *out,
size_t len, const AES_KEY *key, unsigned char *ivec, const int enc)
{
if (enc)
CRYPTO_cbc128_encrypt(in, out, len, key, ivec,
(block128_f)AES_encrypt);
else
CRYPTO_cbc128_decrypt(in, out, len, key, ivec,
(block128_f)AES_decrypt);
}
#endif
void
AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
size_t len, const AES_KEY *key, unsigned char *ivec, const int enc)
{
aes_cbc_encrypt_internal(in, out, len, key, ivec, enc);
}
/*
* The input and output encrypted as though 128bit cfb mode is being
* used. The extra state information to record how much of the

View File

@ -2004,9 +2004,8 @@ sub declast()
&mov (&DWP(12,$acc),$s3);
&function_end("AES_decrypt");
# void AES_cbc_encrypt (const void char *inp, unsigned char *out,
# size_t length, const AES_KEY *key,
# unsigned char *ivp,const int enc);
# void aes_cbc_encrypt_internal(const void char *inp, unsigned char *out,
# size_t length, const AES_KEY *key, unsigned char *ivp,const int enc);
{
# stack frame layout
# -4(%esp) # return address 0(%esp)
@ -2029,7 +2028,7 @@ my $ivec=&DWP(60,"esp"); # ivec[16]
my $aes_key=&DWP(76,"esp"); # copy of aes_key
my $mark=&DWP(76+240,"esp"); # copy of aes_key->rounds
&function_begin("AES_cbc_encrypt");
&function_begin("aes_cbc_encrypt_internal");
&mov ($s2 eq "ecx"? $s2 : "",&wparam(2)); # load len
&cmp ($s2,0);
&je (&label("drop_out"));
@ -2617,7 +2616,7 @@ my $mark=&DWP(76+240,"esp"); # copy of aes_key->rounds
&mov ("esp",$_esp);
&popf ();
&function_end("AES_cbc_encrypt");
&function_end("aes_cbc_encrypt_internal");
}
#------------------------------------------------------------------#

View File

@ -1641,9 +1641,8 @@ $code.=<<___;
.size AES_set_decrypt_key,.-AES_set_decrypt_key
___
# void AES_cbc_encrypt (const void char *inp, unsigned char *out,
# size_t length, const AES_KEY *key,
# unsigned char *ivp,const int enc);
# void aes_cbc_encrypt_internal(const void char *inp, unsigned char *out,
# size_t length, const AES_KEY *key, unsigned char *ivp,const int enc);
{
# stack frame layout
# -8(%rsp) return address
@ -1660,15 +1659,15 @@ my $aes_key="80(%rsp)"; # copy of aes_key
my $mark="80+240(%rsp)"; # copy of aes_key->rounds
$code.=<<___;
.globl AES_cbc_encrypt
.type AES_cbc_encrypt,\@function,6
.globl aes_cbc_encrypt_internal
.type aes_cbc_encrypt_internal,\@function,6
.align 16
.extern OPENSSL_ia32cap_P
.hidden OPENSSL_ia32cap_P
.globl asm_AES_cbc_encrypt
.hidden asm_AES_cbc_encrypt
asm_AES_cbc_encrypt:
AES_cbc_encrypt:
aes_cbc_encrypt_internal:
_CET_ENDBR
cmp \$0,%rdx # check length
je .Lcbc_epilogue
@ -2118,7 +2117,7 @@ AES_cbc_encrypt:
popfq
.Lcbc_epilogue:
ret
.size AES_cbc_encrypt,.-AES_cbc_encrypt
.size aes_cbc_encrypt_internal,.-aes_cbc_encrypt_internal
___
}
@ -2799,9 +2798,9 @@ cbc_se_handler:
.rva .LSEH_end_AES_set_decrypt_key
.rva .LSEH_info_AES_set_decrypt_key
.rva .LSEH_begin_AES_cbc_encrypt
.rva .LSEH_end_AES_cbc_encrypt
.rva .LSEH_info_AES_cbc_encrypt
.rva .LSEH_begin_aes_cbc_encrypt_internal
.rva .LSEH_end_aes_cbc_encrypt_internal
.rva .LSEH_info_aes_cbc_encrypt_internal
.section .xdata
.align 8
@ -2821,7 +2820,7 @@ cbc_se_handler:
.byte 9,0,0,0
.rva key_se_handler
.rva .Ldec_key_prologue,.Ldec_key_epilogue # HandlerData[]
.LSEH_info_AES_cbc_encrypt:
.LSEH_info_aes_cbc_encrypt_internal:
.byte 9,0,0,0
.rva cbc_se_handler
___

View File

@ -1,9 +1,9 @@
# $OpenBSD: Makefile.inc,v 1.9 2024/03/28 01:57:00 jsing Exp $
# $OpenBSD: Makefile.inc,v 1.10 2024/03/28 12:52:58 jsing Exp $
# aarch64-specific libcrypto build rules
# aes
SRCS+= aes_core.c aes_cbc.c
SRCS+= aes_core.c
# bn
# camellia
SRCS+= camellia.c cmll_cbc.c cmll_misc.c

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -1,9 +1,9 @@
# $OpenBSD: Makefile.inc,v 1.10 2024/03/28 01:57:00 jsing Exp $
# $OpenBSD: Makefile.inc,v 1.11 2024/03/28 12:52:58 jsing Exp $
# alpha-specific libcrypto build rules
# aes
SRCS+= aes_core.c aes_cbc.c
SRCS+= aes_core.c
# bn
SSLASM+= bn alpha-mont
CFLAGS+= -DOPENSSL_BN_ASM_MONT

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile.inc,v 1.18 2024/03/28 01:57:00 jsing Exp $
# $OpenBSD: Makefile.inc,v 1.21 2024/03/29 01:24:07 jsing Exp $
# amd64-specific libcrypto build rules
@ -13,6 +13,7 @@ SSLASM+= aes bsaes-x86_64
CFLAGS+= -DVPAES_ASM
SSLASM+= aes vpaes-x86_64
SSLASM+= aes aesni-x86_64
CFLAGS+= -DHAVE_AES_CBC_ENCRYPT_INTERNAL
# bn
CFLAGS+= -DOPENSSL_IA32_SSE2
CFLAGS+= -DRSA_ASM
@ -66,8 +67,7 @@ sha512-x86_64.S: ${LCRYPTO_SRC}/sha/asm/sha512-x86_64.pl ${EXTRA_PL}
cd ${LCRYPTO_SRC}/sha/asm ; \
/usr/bin/perl ./sha512-x86_64.pl ${.OBJDIR}/${.TARGET}
# whrlpool
CFLAGS+= -DWHIRLPOOL_ASM
SSLASM+= whrlpool wp-x86_64
SRCS+= wp_block.c
.for dir f in ${SSLASM}
SRCS+= ${f}.S

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -3,7 +3,6 @@
# arm-specific libcrypto build rules
# aes
SRCS+= aes_cbc.c
CFLAGS+= -DAES_ASM
SSLASM+= aes aes-armv4
# bn

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -1,9 +1,9 @@
# $OpenBSD: Makefile.inc,v 1.19 2024/03/28 01:57:00 jsing Exp $
# $OpenBSD: Makefile.inc,v 1.20 2024/03/28 12:52:58 jsing Exp $
# hppa-specific libcrypto build rules
# aes
SRCS+= aes_core.c aes_cbc.c
SRCS+= aes_core.c
CFLAGS+= -DAES_ASM
SSLASM+= aes aes-parisc aes-parisc
# bn

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile.inc,v 1.15 2024/03/28 01:57:00 jsing Exp $
# $OpenBSD: Makefile.inc,v 1.18 2024/03/29 01:24:07 jsing Exp $
# i386-specific libcrypto build rules
@ -11,6 +11,7 @@ SSLASM+= aes aes-586
CFLAGS+= -DVPAES_ASM
SSLASM+= aes vpaes-x86
SSLASM+= aes aesni-x86
CFLAGS+= -DHAVE_AES_CBC_ENCRYPT_INTERNAL
# bn
CFLAGS+= -DOPENSSL_IA32_SSE2
SSLASM+= bn bn-586
@ -38,8 +39,6 @@ CFLAGS+= -DSHA512_ASM
SSLASM+= sha sha512-586
# whrlpool
SRCS+= wp_block.c
CFLAGS+= -DWHIRLPOOL_ASM
SSLASM+= whrlpool wp-mmx
.for dir f in ${SSLASM}
SRCS+= ${f}.S

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -1,9 +1,8 @@
# $OpenBSD: Makefile.inc,v 1.11 2024/03/28 01:57:00 jsing Exp $
# $OpenBSD: Makefile.inc,v 1.12 2024/03/28 12:52:58 jsing Exp $
# mips64-specific libcrypto build rules
# aes
SRCS+= aes_cbc.c
CFLAGS+= -DAES_ASM
SSLASM+= aes aes-mips aes-mips
# bn

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -1,9 +1,9 @@
# $OpenBSD: Makefile.inc,v 1.8 2024/03/28 01:57:00 jsing Exp $
# $OpenBSD: Makefile.inc,v 1.9 2024/03/28 12:52:58 jsing Exp $
# powerpc-specific libcrypto build rules
# aes
SRCS+= aes_core.c aes_cbc.c
SRCS+= aes_core.c
# slower than C code
#CFLAGS+= -DAES_ASM
#SSLASM+= aes aes-ppc aes-ppc

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -1,9 +1,9 @@
# $OpenBSD: Makefile.inc,v 1.10 2024/03/28 01:57:00 jsing Exp $
# $OpenBSD: Makefile.inc,v 1.11 2024/03/28 12:52:58 jsing Exp $
# powerpc-specific libcrypto build rules
# aes
SRCS+= aes_core.c aes_cbc.c
SRCS+= aes_core.c
# slower than C code
#CFLAGS+= -DAES_ASM
#SSLASM+= aes aes-ppc aes-ppc

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -1,10 +1,9 @@
# $OpenBSD: Makefile.inc,v 1.6 2024/03/28 01:57:00 jsing Exp $
# $OpenBSD: Makefile.inc,v 1.7 2024/03/28 12:52:58 jsing Exp $
# riscv64 libcrypto build rules
# aes
SRCS+= aes_core.c
SRCS+= aes_cbc.c
# camellia
SRCS+= camellia.c

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -1,9 +1,9 @@
# $OpenBSD: Makefile.inc,v 1.13 2024/03/28 01:57:00 jsing Exp $
# $OpenBSD: Makefile.inc,v 1.14 2024/03/28 12:52:58 jsing Exp $
# sparc64-specific libcrypto build rules
# aes
SRCS+= aes_core.c aes_cbc.c
SRCS+= aes_core.c
CFLAGS+= -DAES_ASM
SSLASM+= aes aes-sparcv9 aes-sparcv9
# bn

View File

@ -5,9 +5,6 @@
#define OPENSSLDIR "/etc/ssl"
#endif
#undef OPENSSL_UNISTD
#define OPENSSL_UNISTD <unistd.h>
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)

View File

@ -1,4 +1,4 @@
/* $OpenBSD: crypto_internal.h,v 1.8 2024/03/26 04:11:42 jsing Exp $ */
/* $OpenBSD: crypto_internal.h,v 1.9 2024/03/28 08:36:13 jsing Exp $ */
/*
* Copyright (c) 2023 Joel Sing <jsing@openbsd.org>
*
@ -17,6 +17,7 @@
#include <endian.h>
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#ifndef HEADER_CRYPTO_INTERNAL_H

View File

@ -1,4 +1,4 @@
/* $OpenBSD: cbc_cksm.c,v 1.10 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: cbc_cksm.c,v 1.11 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -103,3 +103,4 @@ DES_cbc_cksum(const unsigned char *in, DES_cblock *output,
((tout1 << 24L) & 0xFF000000);
return (tout1);
}
LCRYPTO_ALIAS(DES_cbc_cksum);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: cfb64ede.c,v 1.12 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: cfb64ede.c,v 1.13 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -125,6 +125,7 @@ DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
v0 = v1 = ti[0] = ti[1] = c = cc = 0;
*num = n;
}
LCRYPTO_ALIAS(DES_ede3_cfb64_encrypt);
/* This is compatible with the single key CFB-r for DES, even thought that's
* not what EVP needs.
@ -238,3 +239,4 @@ DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out,
l2c(v1, iv);
v0 = v1 = d0 = d1 = ti[0] = ti[1] = 0;
}
LCRYPTO_ALIAS(DES_ede3_cfb_encrypt);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: cfb64enc.c,v 1.8 2023/07/08 07:11:07 beck Exp $ */
/* $OpenBSD: cfb64enc.c,v 1.9 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -120,3 +120,4 @@ DES_cfb64_encrypt(const unsigned char *in, unsigned char *out,
v0 = v1 = ti[0] = ti[1] = c = cc = 0;
*num = n;
}
LCRYPTO_ALIAS(DES_cfb64_encrypt);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: cfb_enc.c,v 1.16 2023/07/08 07:11:07 beck Exp $ */
/* $OpenBSD: cfb_enc.c,v 1.17 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -187,3 +187,4 @@ DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
l2c(v1, iv);
v0 = v1 = d0 = d1 = ti[0] = ti[1] = 0;
}
LCRYPTO_ALIAS(DES_cfb_encrypt);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: des_enc.c,v 1.15 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: des_enc.c,v 1.16 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -150,6 +150,7 @@ DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc)
data[1] = r;
l = r = t = u = 0;
}
LCRYPTO_ALIAS(DES_encrypt1);
void
DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc)
@ -233,6 +234,7 @@ DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc)
data[1] = ROTATE(r, 3) & 0xffffffffL;
l = r = t = u = 0;
}
LCRYPTO_ALIAS(DES_encrypt2);
#endif /* OPENBSD_DES_ASM */
@ -256,6 +258,7 @@ DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1,
data[0] = l;
data[1] = r;
}
LCRYPTO_ALIAS(DES_encrypt3);
void
DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,
@ -277,6 +280,7 @@ DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,
data[0] = l;
data[1] = r;
}
LCRYPTO_ALIAS(DES_decrypt3);
#ifndef DES_DEFAULT_OPTIONS
@ -388,5 +392,6 @@ DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
tin[0] = tin[1] = 0;
}
LCRYPTO_ALIAS(DES_ede3_cbc_encrypt);
#endif /* DES_DEFAULT_OPTIONS */

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ecb3_enc.c,v 1.9 2023/07/08 07:11:07 beck Exp $ */
/* $OpenBSD: ecb3_enc.c,v 1.10 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -82,3 +82,4 @@ DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
l2c(l0, out);
l2c(l1, out);
}
LCRYPTO_ALIAS(DES_ecb3_encrypt);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ecb_enc.c,v 1.19 2023/07/31 05:04:06 tb Exp $ */
/* $OpenBSD: ecb_enc.c,v 1.20 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -80,3 +80,4 @@ DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output,
l2c(l, out);
l = ll[0] = ll[1] = 0;
}
LCRYPTO_ALIAS(DES_ecb_encrypt);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ede_cbcm_enc.c,v 1.9 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: ede_cbcm_enc.c,v 1.10 2024/03/29 01:47:29 joshua Exp $ */
/* Written by Ben Laurie <ben@algroup.co.uk> for the OpenSSL
* project 13 Feb 1999.
*/
@ -186,4 +186,5 @@ DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
tin[0] = tin[1] = 0;
}
LCRYPTO_ALIAS(DES_ede3_cbcm_encrypt);
#endif

View File

@ -1,4 +1,4 @@
/* $OpenBSD: enc_read.c,v 1.17 2023/07/08 07:11:07 beck Exp $ */
/* $OpenBSD: enc_read.c,v 1.18 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -220,3 +220,4 @@ DES_enc_read(int fd, void *buf, int len, DES_key_schedule *sched,
}
return num;
}
LCRYPTO_ALIAS(DES_enc_read);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: enc_writ.c,v 1.17 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: enc_writ.c,v 1.18 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -165,3 +165,4 @@ DES_enc_write(int fd, const void *_buf, int len,
return (len);
}
LCRYPTO_ALIAS(DES_enc_write);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: fcrypt.c,v 1.15 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: fcrypt.c,v 1.16 2024/03/29 01:47:29 joshua Exp $ */
#include <stdio.h>
@ -58,6 +58,7 @@ DES_crypt(const char *buf, const char *salt)
return (DES_fcrypt(buf, salt, buff));
}
LCRYPTO_ALIAS(DES_crypt);
char *
DES_fcrypt(const char *buf, const char *salt, char *ret)
@ -123,3 +124,4 @@ r=(r+7)/8;
ret[13] = '\0';
return (ret);
}
LCRYPTO_ALIAS(DES_fcrypt);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ncbc_enc.c,v 1.10 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: ncbc_enc.c,v 1.11 2024/03/29 01:47:29 joshua Exp $ */
/*
* #included by:
* cbc_enc.c (DES_cbc_encrypt)
@ -153,3 +153,8 @@ DES_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length,
tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
tin[0] = tin[1] = 0;
}
#ifdef CBC_ENC_C__DONT_UPDATE_IV
LCRYPTO_ALIAS(DES_cbc_encrypt);
#else
LCRYPTO_ALIAS(DES_ncbc_encrypt);
#endif

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ofb64ede.c,v 1.8 2023/07/08 07:11:07 beck Exp $ */
/* $OpenBSD: ofb64ede.c,v 1.9 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -110,3 +110,4 @@ DES_ede3_ofb64_encrypt(const unsigned char *in,
v0 = v1 = ti[0] = ti[1] = 0;
*num = n;
}
LCRYPTO_ALIAS(DES_ede3_ofb64_encrypt);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ofb64enc.c,v 1.8 2023/07/08 07:11:07 beck Exp $ */
/* $OpenBSD: ofb64enc.c,v 1.9 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -107,3 +107,4 @@ DES_ofb64_encrypt(const unsigned char *in,
t = v0 = v1 = ti[0] = ti[1] = 0;
*num = n;
}
LCRYPTO_ALIAS(DES_ofb64_encrypt);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ofb_enc.c,v 1.8 2023/07/08 07:11:07 beck Exp $ */
/* $OpenBSD: ofb_enc.c,v 1.9 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -131,3 +131,4 @@ DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
l2c(v1, iv);
v0 = v1 = d0 = d1 = ti[0] = ti[1] = vv0 = vv1 = 0;
}
LCRYPTO_ALIAS(DES_ofb_encrypt);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: pcbc_enc.c,v 1.9 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: pcbc_enc.c,v 1.10 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -114,3 +114,4 @@ DES_pcbc_encrypt(const unsigned char *input, unsigned char *output,
tin[0] = tin[1] = 0;
sin0 = sin1 = xor0 = xor1 = tout0 = tout1 = 0;
}
LCRYPTO_ALIAS(DES_pcbc_encrypt);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: qud_cksm.c,v 1.10 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: qud_cksm.c,v 1.11 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -123,3 +123,4 @@ DES_quad_cksum(const unsigned char *input, DES_cblock output[],
}
return (z0);
}
LCRYPTO_ALIAS(DES_quad_cksum);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: set_key.c,v 1.26 2023/12/20 06:30:04 tb Exp $ */
/* $OpenBSD: set_key.c,v 1.27 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -91,6 +91,7 @@ DES_set_odd_parity(DES_cblock *key)
for (i = 0; i < DES_KEY_SZ; i++)
(*key)[i] = odd_parity[(*key)[i]];
}
LCRYPTO_ALIAS(DES_set_odd_parity);
int
DES_check_key_parity(const_DES_cblock *key)
@ -103,6 +104,7 @@ DES_check_key_parity(const_DES_cblock *key)
}
return (1);
}
LCRYPTO_ALIAS(DES_check_key_parity);
/* Weak and semi weak keys as taken from
* %A D.W. Davies
@ -145,6 +147,7 @@ DES_is_weak_key(const_DES_cblock *key)
return 1;
return 0;
}
LCRYPTO_ALIAS(DES_is_weak_key);
/* NOW DEFINED IN des_local.h
* See ecb_encrypt.c for a pseudo description of these macros.
@ -314,6 +317,7 @@ DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule)
return 0;
}
}
LCRYPTO_ALIAS(DES_set_key);
/* return 0 if key parity is odd (correct),
* return -1 if key parity error,
@ -329,6 +333,7 @@ DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule)
DES_set_key_unchecked(key, schedule);
return 0;
}
LCRYPTO_ALIAS(DES_set_key_checked);
void
DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule)
@ -388,12 +393,14 @@ DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule)
*(k++) = ROTATE(t2, 26) & 0xffffffffL;
}
}
LCRYPTO_ALIAS(DES_set_key_unchecked);
int
DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule)
{
return (DES_set_key(key, schedule));
}
LCRYPTO_ALIAS(DES_key_sched);
int
DES_random_key(DES_cblock *ret)
@ -404,3 +411,4 @@ DES_random_key(DES_cblock *ret)
} while (DES_is_weak_key(ret));
return (1);
}
LCRYPTO_ALIAS(DES_random_key);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: str2key.c,v 1.13 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: str2key.c,v 1.14 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -97,6 +97,7 @@ DES_string_to_key(const char *str, DES_cblock *key)
explicit_bzero(&ks, sizeof(ks));
DES_set_odd_parity(key);
}
LCRYPTO_ALIAS(DES_string_to_key);
void
DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2)
@ -164,3 +165,4 @@ DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2)
DES_set_odd_parity(key1);
DES_set_odd_parity(key2);
}
LCRYPTO_ALIAS(DES_string_to_2keys);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: xcbc_enc.c,v 1.12 2023/07/08 07:34:34 jsing Exp $ */
/* $OpenBSD: xcbc_enc.c,v 1.13 2024/03/29 01:47:29 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -151,3 +151,4 @@ DES_xcbc_encrypt(const unsigned char *in, unsigned char *out,
inW0 = inW1 = outW0 = outW1 = 0;
tin[0] = tin[1] = 0;
}
LCRYPTO_ALIAS(DES_xcbc_encrypt);

View File

@ -0,0 +1,64 @@
/* $OpenBSD: des.h,v 1.1 2024/03/29 01:47:29 joshua Exp $ */
/*
* Copyright (c) 2024 Joshua Sing <joshua@joshuasing.dev>
*
* 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.
*/
#ifndef _LIBCRYPTO_DES_H
#define _LIBCRYPTO_DES_H
#ifndef _MSC_VER
#include_next <openssl/des.h>
#else
#include "../include/openssl/des.h"
#endif
#include "crypto_namespace.h"
LCRYPTO_USED(DES_ecb3_encrypt);
LCRYPTO_USED(DES_cbc_cksum);
LCRYPTO_USED(DES_cbc_encrypt);
LCRYPTO_USED(DES_ncbc_encrypt);
LCRYPTO_USED(DES_xcbc_encrypt);
LCRYPTO_USED(DES_cfb_encrypt);
LCRYPTO_USED(DES_ecb_encrypt);
LCRYPTO_USED(DES_encrypt1);
LCRYPTO_USED(DES_encrypt2);
LCRYPTO_USED(DES_encrypt3);
LCRYPTO_USED(DES_decrypt3);
LCRYPTO_USED(DES_ede3_cbc_encrypt);
LCRYPTO_USED(DES_ede3_cbcm_encrypt);
LCRYPTO_USED(DES_ede3_cfb64_encrypt);
LCRYPTO_USED(DES_ede3_cfb_encrypt);
LCRYPTO_USED(DES_ede3_ofb64_encrypt);
LCRYPTO_USED(DES_enc_read);
LCRYPTO_USED(DES_enc_write);
LCRYPTO_USED(DES_fcrypt);
LCRYPTO_USED(DES_crypt);
LCRYPTO_USED(DES_ofb_encrypt);
LCRYPTO_USED(DES_pcbc_encrypt);
LCRYPTO_USED(DES_quad_cksum);
LCRYPTO_USED(DES_random_key);
LCRYPTO_USED(DES_set_odd_parity);
LCRYPTO_USED(DES_check_key_parity);
LCRYPTO_USED(DES_is_weak_key);
LCRYPTO_USED(DES_set_key);
LCRYPTO_USED(DES_key_sched);
LCRYPTO_USED(DES_set_key_checked);
LCRYPTO_USED(DES_set_key_unchecked);
LCRYPTO_USED(DES_string_to_key);
LCRYPTO_USED(DES_string_to_2keys);
LCRYPTO_USED(DES_cfb64_encrypt);
LCRYPTO_USED(DES_ofb64_encrypt);
#endif /* _LIBCRYPTO_DES_H */

View File

@ -0,0 +1,31 @@
/* $OpenBSD: rc4.h,v 1.1 2024/03/28 08:18:13 joshua Exp $ */
/*
* Copyright (c) 2024 Joshua Sing <joshua@joshuasing.dev>
*
* 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.
*/
#ifndef _LIBCRYPTO_RC4_H
#define _LIBCRYPTO_RC4_H
#ifndef _MSC_VER
#include_next <openssl/rc4.h>
#else
#include "../include/openssl/rc4.h"
#endif
#include "crypto_namespace.h"
LCRYPTO_USED(RC4_set_key);
LCRYPTO_USED(RC4);
#endif /* _LIBCRYPTO_RC4_H */

View File

@ -0,0 +1,34 @@
/* $OpenBSD: ripemd.h,v 1.1 2024/03/28 23:54:15 joshua Exp $ */
/*
* Copyright (c) 2024 Joshua Sing <joshua@joshuasing.dev>
*
* 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.
*/
#ifndef _LIBCRYPTO_RIPEMD_H
#define _LIBCRYPTO_RIPEMD_H
#ifndef _MSC_VER
#include_next <openssl/ripemd.h>
#else
#include "../include/openssl/ripemd.h"
#endif
#include "crypto_namespace.h"
LCRYPTO_USED(RIPEMD160_Init);
LCRYPTO_USED(RIPEMD160_Update);
LCRYPTO_USED(RIPEMD160_Final);
LCRYPTO_USED(RIPEMD160);
LCRYPTO_USED(RIPEMD160_Transform);
#endif /* _LIBCRYPTO_RIPEMD_H */

View File

@ -1,309 +0,0 @@
/* $OpenBSD: md32_common.h,v 1.26 2023/08/10 07:15:23 jsing Exp $ */
/* ====================================================================
* Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved.
*
* 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 above 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 acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* licensing@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED 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 OpenSSL PROJECT OR
* ITS 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.
* ====================================================================
*
*/
/*
* This is a generic 32 bit "collector" for message digest algorithms.
* Whenever needed it collects input character stream into chunks of
* 32 bit values and invokes a block function that performs actual hash
* calculations.
*
* Porting guide.
*
* Obligatory macros:
*
* DATA_ORDER_IS_BIG_ENDIAN or DATA_ORDER_IS_LITTLE_ENDIAN
* this macro defines byte order of input stream.
* HASH_CBLOCK
* size of a unit chunk HASH_BLOCK operates on.
* HASH_LONG
* has to be at least 32 bit wide.
* HASH_CTX
* context structure that at least contains following
* members:
* typedef struct {
* ...
* HASH_LONG Nl,Nh;
* either {
* HASH_LONG data[HASH_LBLOCK];
* unsigned char data[HASH_CBLOCK];
* };
* unsigned int num;
* ...
* } HASH_CTX;
* data[] vector is expected to be zeroed upon first call to
* HASH_UPDATE.
* HASH_UPDATE
* name of "Update" function, implemented here.
* HASH_TRANSFORM
* name of "Transform" function, implemented here.
* HASH_FINAL
* name of "Final" function, implemented here.
* HASH_BLOCK_DATA_ORDER
* name of "block" function capable of treating *unaligned* input
* message in original (data) byte order, implemented externally.
* HASH_MAKE_STRING
* macro convering context variables to an ASCII hash string.
*
* MD5 example:
*
* #define DATA_ORDER_IS_LITTLE_ENDIAN
*
* #define HASH_LONG MD5_LONG
* #define HASH_CTX MD5_CTX
* #define HASH_CBLOCK MD5_CBLOCK
* #define HASH_UPDATE MD5_Update
* #define HASH_TRANSFORM MD5_Transform
* #define HASH_FINAL MD5_Final
* #define HASH_BLOCK_DATA_ORDER md5_block_data_order
*
* <appro@fy.chalmers.se>
*/
#include <stdint.h>
#include <openssl/opensslconf.h>
#include "crypto_internal.h"
#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN)
#error "DATA_ORDER must be defined!"
#endif
#ifndef HASH_CBLOCK
#error "HASH_CBLOCK must be defined!"
#endif
#ifndef HASH_LONG
#error "HASH_LONG must be defined!"
#endif
#ifndef HASH_CTX
#error "HASH_CTX must be defined!"
#endif
#if !defined(HASH_UPDATE) && !defined(HASH_NO_UPDATE)
#error "HASH_UPDATE must be defined!"
#endif
#if !defined(HASH_TRANSFORM) && !defined(HASH_NO_TRANSFORM)
#error "HASH_TRANSFORM must be defined!"
#endif
#if !defined(HASH_FINAL) && !defined(HASH_NO_FINAL)
#error "HASH_FINAL or HASH_NO_FINAL must be defined!"
#endif
#ifndef HASH_BLOCK_DATA_ORDER
#error "HASH_BLOCK_DATA_ORDER must be defined!"
#endif
#define ROTATE(a, n) crypto_rol_u32(a, n)
#if defined(DATA_ORDER_IS_BIG_ENDIAN)
#if defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
# if (defined(__i386) || defined(__i386__) || \
defined(__x86_64) || defined(__x86_64__))
/*
* This gives ~30-40% performance improvement in SHA-256 compiled
* with gcc [on P4]. Well, first macro to be frank. We can pull
* this trick on x86* platforms only, because these CPUs can fetch
* unaligned data without raising an exception.
*/
# define HOST_c2l(c,l) ({ unsigned int r=*((const unsigned int *)(c)); \
asm ("bswapl %0":"=r"(r):"0"(r)); \
(c)+=4; (l)=r; })
# define HOST_l2c(l,c) ({ unsigned int r=(l); \
asm ("bswapl %0":"=r"(r):"0"(r)); \
*((unsigned int *)(c))=r; (c)+=4; })
# endif
#endif
#ifndef HOST_c2l
#define HOST_c2l(c,l) do {l =(((unsigned long)(*((c)++)))<<24); \
l|=(((unsigned long)(*((c)++)))<<16); \
l|=(((unsigned long)(*((c)++)))<< 8); \
l|=(((unsigned long)(*((c)++))) ); \
} while (0)
#endif
#ifndef HOST_l2c
#define HOST_l2c(l,c) do {*((c)++)=(unsigned char)(((l)>>24)&0xff); \
*((c)++)=(unsigned char)(((l)>>16)&0xff); \
*((c)++)=(unsigned char)(((l)>> 8)&0xff); \
*((c)++)=(unsigned char)(((l) )&0xff); \
} while (0)
#endif
#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
#if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4)
# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4)
#endif
#ifndef HOST_c2l
#define HOST_c2l(c,l) do {l =(((unsigned long)(*((c)++))) ); \
l|=(((unsigned long)(*((c)++)))<< 8); \
l|=(((unsigned long)(*((c)++)))<<16); \
l|=(((unsigned long)(*((c)++)))<<24); \
} while (0)
#endif
#ifndef HOST_l2c
#define HOST_l2c(l,c) do {*((c)++)=(unsigned char)(((l) )&0xff); \
*((c)++)=(unsigned char)(((l)>> 8)&0xff); \
*((c)++)=(unsigned char)(((l)>>16)&0xff); \
*((c)++)=(unsigned char)(((l)>>24)&0xff); \
} while (0)
#endif
#endif
/*
* Time for some action:-)
*/
#ifndef HASH_NO_UPDATE
int
HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len)
{
const unsigned char *data = data_;
unsigned char *p;
HASH_LONG l;
size_t n;
if (len == 0)
return 1;
l = (c->Nl + (((HASH_LONG)len) << 3))&0xffffffffUL;
/* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
* Wei Dai <weidai@eskimo.com> for pointing it out. */
if (l < c->Nl) /* overflow */
c->Nh++;
c->Nh+=(HASH_LONG)(len>>29); /* might cause compiler warning on 16-bit */
c->Nl = l;
n = c->num;
if (n != 0) {
p = (unsigned char *)c->data;
if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) {
memcpy (p + n, data, HASH_CBLOCK - n);
HASH_BLOCK_DATA_ORDER (c, p, 1);
n = HASH_CBLOCK - n;
data += n;
len -= n;
c->num = 0;
memset (p,0,HASH_CBLOCK); /* keep it zeroed */
} else {
memcpy (p + n, data, len);
c->num += (unsigned int)len;
return 1;
}
}
n = len/HASH_CBLOCK;
if (n > 0) {
HASH_BLOCK_DATA_ORDER (c, data, n);
n *= HASH_CBLOCK;
data += n;
len -= n;
}
if (len != 0) {
p = (unsigned char *)c->data;
c->num = (unsigned int)len;
memcpy (p, data, len);
}
return 1;
}
#endif
#ifndef HASH_NO_TRANSFORM
void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data)
{
HASH_BLOCK_DATA_ORDER (c, data, 1);
}
#endif
#ifndef HASH_NO_FINAL
int HASH_FINAL (unsigned char *md, HASH_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 > (HASH_CBLOCK - 8)) {
memset (p + n, 0, HASH_CBLOCK - n);
n = 0;
HASH_BLOCK_DATA_ORDER (c, p, 1);
}
memset (p + n, 0, HASH_CBLOCK - 8 - n);
p += HASH_CBLOCK - 8;
#if defined(DATA_ORDER_IS_BIG_ENDIAN)
HOST_l2c(c->Nh, p);
HOST_l2c(c->Nl, p);
#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
HOST_l2c(c->Nl, p);
HOST_l2c(c->Nh, p);
#endif
p -= HASH_CBLOCK;
HASH_BLOCK_DATA_ORDER (c, p, 1);
c->num = 0;
memset (p, 0, HASH_CBLOCK);
#ifndef HASH_MAKE_STRING
#error "HASH_MAKE_STRING must be defined!"
#else
HASH_MAKE_STRING(c, md);
#endif
return 1;
}
#endif

View File

@ -1,4 +1,4 @@
/* $OpenBSD: md4.c,v 1.16 2024/03/27 06:15:18 jsing Exp $ */
/* $OpenBSD: md4.c,v 1.17 2024/03/28 08:00:07 jsing Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -118,12 +118,12 @@ md4_block_data_order(MD4_CTX *c, const void *_in, size_t num)
unsigned int X0, X1, X2, X3, X4, X5, X6, X7,
X8, X9, X10, X11, X12, X13, X14, X15;
A = c->A;
B = c->B;
C = c->C;
D = c->D;
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 MD4_LONG *)in;
@ -217,10 +217,10 @@ md4_block_data_order(MD4_CTX *c, const void *_in, size_t num)
md4_round3(&C, D, A, B, X7, 11);
md4_round3(&B, C, D, A, X15, 15);
A = c->A += A;
B = c->B += B;
C = c->C += C;
D = c->D += D;
c->A += A;
c->B += B;
c->C += C;
c->D += D;
}
}

View File

@ -1,4 +1,4 @@
/* $OpenBSD: md5.c,v 1.21 2024/03/26 05:55:15 jsing Exp $ */
/* $OpenBSD: md5.c,v 1.22 2024/03/28 08:00:08 jsing Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -137,12 +137,12 @@ md5_block_data_order(MD5_CTX *c, const void *_in, size_t num)
MD5_LONG X0, X1, X2, X3, X4, X5, X6, X7,
X8, X9, X10, X11, X12, X13, X14, X15;
A = c->A;
B = c->B;
C = c->C;
D = c->D;
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;
@ -251,10 +251,10 @@ md5_block_data_order(MD5_CTX *c, const void *_in, size_t num)
md5_round4(&C, D, A, B, X2, 0x2ad7d2bbL, 15);
md5_round4(&B, C, D, A, X9, 0xeb86d391L, 21);
A = c->A += A;
B = c->B += B;
C = c->C += C;
D = c->D += D;
c->A += A;
c->B += B;
c->C += C;
c->D += D;
}
}
#endif

View File

@ -1,4 +1,4 @@
/* $OpenBSD: rc4.c,v 1.9 2024/03/28 01:49:29 jsing Exp $ */
/* $OpenBSD: rc4.c,v 1.11 2024/03/28 12:11:26 jsing Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -262,7 +262,7 @@ rc4_internal(RC4_KEY *key, size_t len, const unsigned char *indata,
void rc4_set_key_internal(RC4_KEY *key, int len, const unsigned char *data);
#else
static void
static inline void
rc4_set_key_internal(RC4_KEY *key, int len, const unsigned char *data)
{
RC4_INT tmp;
@ -299,9 +299,11 @@ RC4(RC4_KEY *key, size_t len, const unsigned char *indata,
{
rc4_internal(key, len, indata, outdata);
}
LCRYPTO_ALIAS(RC4);
void
RC4_set_key(RC4_KEY *key, int len, const unsigned char *data)
{
rc4_set_key_internal(key, len, data);
}
LCRYPTO_ALIAS(RC4_set_key);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: ripemd.c,v 1.7 2023/08/10 12:27:35 jsing Exp $ */
/* $OpenBSD: ripemd.c,v 1.18 2024/03/28 23:54:15 joshua Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -57,50 +57,18 @@
*/
#include <stdio.h>
#include <openssl/opensslv.h>
#include <openssl/crypto.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/opensslconf.h>
#include <openssl/crypto.h>
#include <openssl/ripemd.h>
/*
* DO EXAMINE COMMENTS IN crypto/md5/md5_locl.h & crypto/md5/md5_dgst.c
* FOR EXPLANATIONS ON FOLLOWING "CODE."
* <appro@fy.chalmers.se>
*/
#ifdef RMD160_ASM
# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || defined(__INTEL__)
# define ripemd160_block_data_order ripemd160_block_asm_data_order
# endif
#endif
#include "crypto_internal.h"
__BEGIN_HIDDEN_DECLS
void ripemd160_block_data_order (RIPEMD160_CTX *c, const void *p, size_t num);
__END_HIDDEN_DECLS
#define DATA_ORDER_IS_LITTLE_ENDIAN
#define HASH_LONG RIPEMD160_LONG
#define HASH_CTX RIPEMD160_CTX
#define HASH_CBLOCK RIPEMD160_CBLOCK
#define HASH_UPDATE RIPEMD160_Update
#define HASH_TRANSFORM RIPEMD160_Transform
#define HASH_FINAL RIPEMD160_Final
#define HASH_MAKE_STRING(c,s) do { \
unsigned long ll; \
ll=(c)->A; HOST_l2c(ll,(s)); \
ll=(c)->B; HOST_l2c(ll,(s)); \
ll=(c)->C; HOST_l2c(ll,(s)); \
ll=(c)->D; HOST_l2c(ll,(s)); \
ll=(c)->E; HOST_l2c(ll,(s)); \
} while (0)
#define HASH_BLOCK_DATA_ORDER ripemd160_block_data_order
#include "md32_common.h"
/* Ensure that SHA_LONG and uint32_t are equivalent sizes. */
CTASSERT(sizeof(RIPEMD160_LONG) == sizeof(uint32_t));
#if 0
#define F1(x,y,z) ((x)^(y)^(z))
@ -119,12 +87,6 @@ __END_HIDDEN_DECLS
#define F5(x,y,z) (((~(z)) | (y)) ^ (x))
#endif
#define RIPEMD160_A 0x67452301L
#define RIPEMD160_B 0xEFCDAB89L
#define RIPEMD160_C 0x98BADCFEL
#define RIPEMD160_D 0x10325476L
#define RIPEMD160_E 0xC3D2E1F0L
#define KL0 0x00000000L
#define KL1 0x5A827999L
#define KL2 0x6ED9EBA1L
@ -139,112 +101,100 @@ __END_HIDDEN_DECLS
#define RIP1(a,b,c,d,e,w,s) { \
a+=F1(b,c,d)+w; \
a=ROTATE(a,s)+e; \
c=ROTATE(c,10); }
a=crypto_rol_u32(a,s)+e; \
c=crypto_rol_u32(c,10); }
#define RIP2(a,b,c,d,e,w,s,K) { \
a+=F2(b,c,d)+w+K; \
a=ROTATE(a,s)+e; \
c=ROTATE(c,10); }
a=crypto_rol_u32(a,s)+e; \
c=crypto_rol_u32(c,10); }
#define RIP3(a,b,c,d,e,w,s,K) { \
a+=F3(b,c,d)+w+K; \
a=ROTATE(a,s)+e; \
c=ROTATE(c,10); }
a=crypto_rol_u32(a,s)+e; \
c=crypto_rol_u32(c,10); }
#define RIP4(a,b,c,d,e,w,s,K) { \
a+=F4(b,c,d)+w+K; \
a=ROTATE(a,s)+e; \
c=ROTATE(c,10); }
a=crypto_rol_u32(a,s)+e; \
c=crypto_rol_u32(c,10); }
#define RIP5(a,b,c,d,e,w,s,K) { \
a+=F5(b,c,d)+w+K; \
a=ROTATE(a,s)+e; \
c=ROTATE(c,10); }
a=crypto_rol_u32(a,s)+e; \
c=crypto_rol_u32(c,10); }
# ifdef RMD160_ASM
void ripemd160_block_x86(RIPEMD160_CTX *c, unsigned long *p, size_t num);
# define ripemd160_block ripemd160_block_x86
# else
void ripemd160_block(RIPEMD160_CTX *c, unsigned long *p, size_t num);
# endif
int
RIPEMD160_Init(RIPEMD160_CTX *c)
static void
ripemd160_block_data_order(RIPEMD160_CTX *ctx, const void *_in, size_t num)
{
memset (c, 0, sizeof(*c));
c->A = RIPEMD160_A;
c->B = RIPEMD160_B;
c->C = RIPEMD160_C;
c->D = RIPEMD160_D;
c->E = RIPEMD160_E;
return 1;
}
#ifndef ripemd160_block_data_order
void
ripemd160_block_data_order(RIPEMD160_CTX *ctx, const void *p, size_t num)
{
const unsigned char *data = p;
const uint8_t *in = _in;
const RIPEMD160_LONG *in32;
unsigned int A, B, C, D, E;
unsigned int a, b, c, d, e, l;
unsigned int a, b, c, d, e;
unsigned int X0, X1, X2, X3, X4, X5, X6, X7,
X8, X9, X10, X11, X12, X13, X14, X15;
for (; num--; ) {
A = ctx->A;
B = ctx->B;
C = ctx->C;
D = ctx->D;
E = ctx->E;
HOST_c2l(data, l);
X0 = l;
HOST_c2l(data, l);
X1 = l;
if ((uintptr_t)in % 4 == 0) {
/* Input is 32 bit aligned. */
in32 = (const RIPEMD160_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 += RIPEMD160_CBLOCK;
RIP1(A, B, C, D, E, X0, 11);
HOST_c2l(data, l);
X2 = l;
RIP1(E, A, B, C, D, X1, 14);
HOST_c2l(data, l);
X3 = l;
RIP1(D, E, A, B, C, X2, 15);
HOST_c2l(data, l);
X4 = l;
RIP1(C, D, E, A, B, X3, 12);
HOST_c2l(data, l);
X5 = l;
RIP1(B, C, D, E, A, X4, 5);
HOST_c2l(data, l);
X6 = l;
RIP1(A, B, C, D, E, X5, 8);
HOST_c2l(data, l);
X7 = l;
RIP1(E, A, B, C, D, X6, 7);
HOST_c2l(data, l);
X8 = l;
RIP1(D, E, A, B, C, X7, 9);
HOST_c2l(data, l);
X9 = l;
RIP1(C, D, E, A, B, X8, 11);
HOST_c2l(data, l);
X10 = l;
RIP1(B, C, D, E, A, X9, 13);
HOST_c2l(data, l);
X11 = l;
RIP1(A, B, C, D, E, X10, 14);
HOST_c2l(data, l);
X12 = l;
RIP1(E, A, B, C, D, X11, 15);
HOST_c2l(data, l);
X13 = l;
RIP1(D, E, A, B, C, X12, 6);
HOST_c2l(data, l);
X14 = l;
RIP1(C, D, E, A, B, X13, 7);
HOST_c2l(data, l);
X15 = l;
RIP1(B, C, D, E, A, X14, 9);
RIP1(A, B, C, D, E, X15, 8);
@ -419,10 +369,118 @@ ripemd160_block_data_order(RIPEMD160_CTX *ctx, const void *p, size_t num)
ctx->D = ctx->E + a + B;
ctx->E = ctx->A + b + C;
ctx->A = D;
}
}
#endif
int
RIPEMD160_Init(RIPEMD160_CTX *c)
{
memset(c, 0, sizeof(*c));
c->A = 0x67452301UL;
c->B = 0xEFCDAB89UL;
c->C = 0x98BADCFEUL;
c->D = 0x10325476UL;
c->E = 0xC3D2E1F0UL;
return 1;
}
LCRYPTO_ALIAS(RIPEMD160_Init);
int
RIPEMD160_Update(RIPEMD160_CTX *c, const void *data_, size_t len)
{
const unsigned char *data = data_;
unsigned char *p;
RIPEMD160_LONG l;
size_t n;
if (len == 0)
return 1;
l = (c->Nl + (((RIPEMD160_LONG)len) << 3))&0xffffffffUL;
/* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
* Wei Dai <weidai@eskimo.com> for pointing it out. */
if (l < c->Nl) /* overflow */
c->Nh++;
c->Nh+=(RIPEMD160_LONG)(len>>29); /* might cause compiler warning on 16-bit */
c->Nl = l;
n = c->num;
if (n != 0) {
p = (unsigned char *)c->data;
if (len >= RIPEMD160_CBLOCK || len + n >= RIPEMD160_CBLOCK) {
memcpy(p + n, data, RIPEMD160_CBLOCK - n);
ripemd160_block_data_order(c, p, 1);
n = RIPEMD160_CBLOCK - n;
data += n;
len -= n;
c->num = 0;
memset(p, 0, RIPEMD160_CBLOCK); /* keep it zeroed */
} else {
memcpy(p + n, data, len);
c->num += (unsigned int)len;
return 1;
}
}
n = len/RIPEMD160_CBLOCK;
if (n > 0) {
ripemd160_block_data_order(c, data, n);
n *= RIPEMD160_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(RIPEMD160_Update);
void
RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *data)
{
ripemd160_block_data_order(c, data, 1);
}
LCRYPTO_ALIAS(RIPEMD160_Transform);
int
RIPEMD160_Final(unsigned char *md, RIPEMD160_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 > (RIPEMD160_CBLOCK - 8)) {
memset(p + n, 0, RIPEMD160_CBLOCK - n);
n = 0;
ripemd160_block_data_order(c, p, 1);
}
memset(p + n, 0, RIPEMD160_CBLOCK - 8 - n);
c->data[RIPEMD160_LBLOCK - 2] = htole32(c->Nl);
c->data[RIPEMD160_LBLOCK - 1] = htole32(c->Nh);
ripemd160_block_data_order(c, p, 1);
c->num = 0;
memset(p, 0, RIPEMD160_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);
crypto_store_htole32(&md[4 * 4], c->E);
return 1;
}
LCRYPTO_ALIAS(RIPEMD160_Final);
unsigned char *
RIPEMD160(const unsigned char *d, size_t n,
@ -440,3 +498,4 @@ RIPEMD160(const unsigned char *d, size_t n,
explicit_bzero(&c, sizeof(c));
return (md);
}
LCRYPTO_ALIAS(RIPEMD160);

View File

@ -1,4 +1,4 @@
/* $OpenBSD: sha1.c,v 1.13 2024/03/26 12:54:22 jsing Exp $ */
/* $OpenBSD: sha1.c,v 1.14 2024/03/28 07:06:12 jsing Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@ -71,92 +71,114 @@
/* Ensure that SHA_LONG and uint32_t are equivalent sizes. */
CTASSERT(sizeof(SHA_LONG) == sizeof(uint32_t));
#define DATA_ORDER_IS_BIG_ENDIAN
#define HASH_LONG SHA_LONG
#define HASH_CTX SHA_CTX
#define HASH_CBLOCK SHA_CBLOCK
#define HASH_BLOCK_DATA_ORDER sha1_block_data_order
#define Xupdate(a, ix, ia, ib, ic, id) ( (a)=(ia^ib^ic^id), \
ix=(a)=ROTATE((a),1) \
)
#ifdef SHA1_ASM
void sha1_block_data_order(SHA_CTX *ctx, const void *p, size_t num);
#endif
#ifndef SHA1_ASM
static
#endif
void sha1_block_data_order(SHA_CTX *c, const void *p, size_t num);
static inline SHA_LONG
Ch(SHA_LONG x, SHA_LONG y, SHA_LONG z)
{
return (x & y) ^ (~x & z);
}
#define HASH_NO_UPDATE
#define HASH_NO_TRANSFORM
#define HASH_NO_FINAL
static inline SHA_LONG
Parity(SHA_LONG x, SHA_LONG y, SHA_LONG z)
{
return x ^ y ^ z;
}
#include "md32_common.h"
static inline SHA_LONG
Maj(SHA_LONG x, SHA_LONG y, SHA_LONG z)
{
return (x & y) ^ (x & z) ^ (y & z);
}
#define K_00_19 0x5a827999UL
#define K_20_39 0x6ed9eba1UL
#define K_40_59 0x8f1bbcdcUL
#define K_60_79 0xca62c1d6UL
static inline void
sha1_msg_schedule_update(SHA_LONG *W0, SHA_LONG W2, SHA_LONG W8, SHA_LONG W13)
{
*W0 = crypto_rol_u32(W13 ^ W8 ^ W2 ^ *W0, 1);
}
/* As pointed out by Wei Dai <weidai@eskimo.com>, F() below can be
* simplified to the code in F_00_19. Wei attributes these optimisations
* to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
* #define F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
* I've just become aware of another tweak to be made, again from Wei Dai,
* in F_40_59, (x&a)|(y&a) -> (x|y)&a
*/
#define F_00_19(b, c, d) ((((c) ^ (d)) & (b)) ^ (d))
#define F_20_39(b, c, d) ((b) ^ (c) ^ (d))
#define F_40_59(b, c, d) (((b) & (c)) | (((b)|(c)) & (d)))
#define F_60_79(b, c, d) F_20_39(b, c, d)
static inline void
sha1_round1(SHA_LONG *a, SHA_LONG *b, SHA_LONG *c, SHA_LONG *d, SHA_LONG *e,
SHA_LONG Wt)
{
SHA_LONG Kt, T;
Kt = 0x5a827999UL;
T = crypto_rol_u32(*a, 5) + Ch(*b, *c, *d) + *e + Kt + Wt;
#define BODY_00_15(i, a, b, c, d, e, f, xi) \
(f)=xi+(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
(b)=ROTATE((b),30);
*e = *d;
*d = *c;
*c = crypto_rol_u32(*b, 30);
*b = *a;
*a = T;
}
#define BODY_16_19(i, a, b, c, d, e, f, xi, xa, xb, xc, xd) \
Xupdate(f, xi, xa, xb, xc, xd); \
(f)+=(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
(b)=ROTATE((b),30);
static inline void
sha1_round2(SHA_LONG *a, SHA_LONG *b, SHA_LONG *c, SHA_LONG *d, SHA_LONG *e,
SHA_LONG Wt)
{
SHA_LONG Kt, T;
#define BODY_20_31(i, a, b, c, d, e, f, xi, xa, xb, xc, xd) \
Xupdate(f, xi, xa, xb, xc, xd); \
(f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
(b)=ROTATE((b),30);
Kt = 0x6ed9eba1UL;
T = crypto_rol_u32(*a, 5) + Parity(*b, *c, *d) + *e + Kt + Wt;
#define BODY_32_39(i, a, b, c, d, e, f, xa, xb, xc, xd) \
Xupdate(f, xa, xa, xb, xc, xd); \
(f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
(b)=ROTATE((b),30);
*e = *d;
*d = *c;
*c = crypto_rol_u32(*b, 30);
*b = *a;
*a = T;
}
#define BODY_40_59(i, a, b, c, d, e, f, xa, xb, xc, xd) \
Xupdate(f, xa, xa, xb, xc, xd); \
(f)+=(e)+K_40_59+ROTATE((a),5)+F_40_59((b),(c),(d)); \
(b)=ROTATE((b),30);
static inline void
sha1_round3(SHA_LONG *a, SHA_LONG *b, SHA_LONG *c, SHA_LONG *d, SHA_LONG *e,
SHA_LONG Wt)
{
SHA_LONG Kt, T;
#define BODY_60_79(i, a, b, c, d, e, f, xa, xb, xc, xd) \
Xupdate(f, xa, xa, xb, xc, xd); \
(f)=xa+(e)+K_60_79+ROTATE((a),5)+F_60_79((b),(c),(d)); \
(b)=ROTATE((b),30);
Kt = 0x8f1bbcdcUL;
T = crypto_rol_u32(*a, 5) + Maj(*b, *c, *d) + *e + Kt + Wt;
*e = *d;
*d = *c;
*c = crypto_rol_u32(*b, 30);
*b = *a;
*a = T;
}
static inline void
sha1_round4(SHA_LONG *a, SHA_LONG *b, SHA_LONG *c, SHA_LONG *d, SHA_LONG *e,
SHA_LONG Wt)
{
SHA_LONG Kt, T;
Kt = 0xca62c1d6UL;
T = crypto_rol_u32(*a, 5) + Parity(*b, *c, *d) + *e + Kt + Wt;
*e = *d;
*d = *c;
*c = crypto_rol_u32(*b, 30);
*b = *a;
*a = T;
}
#if !defined(SHA1_ASM)
#include <endian.h>
static void
sha1_block_data_order(SHA_CTX *c, const void *_in, size_t num)
sha1_block_data_order(SHA_CTX *ctx, const void *_in, size_t num)
{
const uint8_t *in = _in;
const SHA_LONG *in32;
unsigned int A, B, C, D, E, T;
unsigned int a, b, c, d, e;
unsigned int X0, X1, X2, X3, X4, X5, X6, X7,
X8, X9, X10, X11, X12, X13, X14, X15;
while (num--) {
A = c->h0;
B = c->h1;
C = c->h2;
D = c->h3;
E = c->h4;
a = ctx->h0;
b = ctx->h1;
c = ctx->h2;
d = ctx->h3;
e = ctx->h4;
if ((size_t)in % 4 == 0) {
/* Input is 32 bit aligned. */
@ -198,102 +220,168 @@ sha1_block_data_order(SHA_CTX *c, const void *_in, size_t num)
}
in += SHA_CBLOCK;
BODY_00_15( 0, A, B, C, D, E, T, X0);
BODY_00_15( 1, T, A, B, C, D, E, X1);
BODY_00_15( 2, E, T, A, B, C, D, X2);
BODY_00_15( 3, D, E, T, A, B, C, X3);
BODY_00_15( 4, C, D, E, T, A, B, X4);
BODY_00_15( 5, B, C, D, E, T, A, X5);
BODY_00_15( 6, A, B, C, D, E, T, X6);
BODY_00_15( 7, T, A, B, C, D, E, X7);
BODY_00_15( 8, E, T, A, B, C, D, X8);
BODY_00_15( 9, D, E, T, A, B, C, X9);
BODY_00_15(10, C, D, E, T, A, B, X10);
BODY_00_15(11, B, C, D, E, T, A, X11);
BODY_00_15(12, A, B, C, D, E, T, X12);
BODY_00_15(13, T, A, B, C, D, E, X13);
BODY_00_15(14, E, T, A, B, C, D, X14);
BODY_00_15(15, D, E, T, A, B, C, X15);
sha1_round1(&a, &b, &c, &d, &e, X0);
sha1_round1(&a, &b, &c, &d, &e, X1);
sha1_round1(&a, &b, &c, &d, &e, X2);
sha1_round1(&a, &b, &c, &d, &e, X3);
sha1_round1(&a, &b, &c, &d, &e, X4);
sha1_round1(&a, &b, &c, &d, &e, X5);
sha1_round1(&a, &b, &c, &d, &e, X6);
sha1_round1(&a, &b, &c, &d, &e, X7);
sha1_round1(&a, &b, &c, &d, &e, X8);
sha1_round1(&a, &b, &c, &d, &e, X9);
sha1_round1(&a, &b, &c, &d, &e, X10);
sha1_round1(&a, &b, &c, &d, &e, X11);
sha1_round1(&a, &b, &c, &d, &e, X12);
sha1_round1(&a, &b, &c, &d, &e, X13);
sha1_round1(&a, &b, &c, &d, &e, X14);
sha1_round1(&a, &b, &c, &d, &e, X15);
BODY_16_19(16, C, D, E, T, A, B, X0, X0, X2, X8, X13);
BODY_16_19(17, B, C, D, E, T, A, X1, X1, X3, X9, X14);
BODY_16_19(18, A, B, C, D, E, T, X2, X2, X4, X10, X15);
BODY_16_19(19, T, A, B, C, D, E, X3, X3, X5, X11, X0);
sha1_msg_schedule_update(&X0, X2, X8, X13);
sha1_msg_schedule_update(&X1, X3, X9, X14);
sha1_msg_schedule_update(&X2, X4, X10, X15);
sha1_msg_schedule_update(&X3, X5, X11, X0);
sha1_msg_schedule_update(&X4, X6, X12, X1);
sha1_msg_schedule_update(&X5, X7, X13, X2);
sha1_msg_schedule_update(&X6, X8, X14, X3);
sha1_msg_schedule_update(&X7, X9, X15, X4);
sha1_msg_schedule_update(&X8, X10, X0, X5);
sha1_msg_schedule_update(&X9, X11, X1, X6);
sha1_msg_schedule_update(&X10, X12, X2, X7);
sha1_msg_schedule_update(&X11, X13, X3, X8);
sha1_msg_schedule_update(&X12, X14, X4, X9);
sha1_msg_schedule_update(&X13, X15, X5, X10);
sha1_msg_schedule_update(&X14, X0, X6, X11);
sha1_msg_schedule_update(&X15, X1, X7, X12);
BODY_20_31(20, E, T, A, B, C, D, X4, X4, X6, X12, X1);
BODY_20_31(21, D, E, T, A, B, C, X5, X5, X7, X13, X2);
BODY_20_31(22, C, D, E, T, A, B, X6, X6, X8, X14, X3);
BODY_20_31(23, B, C, D, E, T, A, X7, X7, X9, X15, X4);
BODY_20_31(24, A, B, C, D, E, T, X8, X8, X10, X0, X5);
BODY_20_31(25, T, A, B, C, D, E, X9, X9, X11, X1, X6);
BODY_20_31(26, E, T, A, B, C, D, X10, X10, X12, X2, X7);
BODY_20_31(27, D, E, T, A, B, C, X11, X11, X13, X3, X8);
BODY_20_31(28, C, D, E, T, A, B, X12, X12, X14, X4, X9);
BODY_20_31(29, B, C, D, E, T, A, X13, X13, X15, X5, X10);
BODY_20_31(30, A, B, C, D, E, T, X14, X14, X0, X6, X11);
BODY_20_31(31, T, A, B, C, D, E, X15, X15, X1, X7, X12);
sha1_round1(&a, &b, &c, &d, &e, X0);
sha1_round1(&a, &b, &c, &d, &e, X1);
sha1_round1(&a, &b, &c, &d, &e, X2);
sha1_round1(&a, &b, &c, &d, &e, X3);
sha1_round2(&a, &b, &c, &d, &e, X4);
sha1_round2(&a, &b, &c, &d, &e, X5);
sha1_round2(&a, &b, &c, &d, &e, X6);
sha1_round2(&a, &b, &c, &d, &e, X7);
sha1_round2(&a, &b, &c, &d, &e, X8);
sha1_round2(&a, &b, &c, &d, &e, X9);
sha1_round2(&a, &b, &c, &d, &e, X10);
sha1_round2(&a, &b, &c, &d, &e, X11);
sha1_round2(&a, &b, &c, &d, &e, X12);
sha1_round2(&a, &b, &c, &d, &e, X13);
sha1_round2(&a, &b, &c, &d, &e, X14);
sha1_round2(&a, &b, &c, &d, &e, X15);
BODY_32_39(32, E, T, A, B, C, D, X0, X2, X8, X13);
BODY_32_39(33, D, E, T, A, B, C, X1, X3, X9, X14);
BODY_32_39(34, C, D, E, T, A, B, X2, X4, X10, X15);
BODY_32_39(35, B, C, D, E, T, A, X3, X5, X11, X0);
BODY_32_39(36, A, B, C, D, E, T, X4, X6, X12, X1);
BODY_32_39(37, T, A, B, C, D, E, X5, X7, X13, X2);
BODY_32_39(38, E, T, A, B, C, D, X6, X8, X14, X3);
BODY_32_39(39, D, E, T, A, B, C, X7, X9, X15, X4);
sha1_msg_schedule_update(&X0, X2, X8, X13);
sha1_msg_schedule_update(&X1, X3, X9, X14);
sha1_msg_schedule_update(&X2, X4, X10, X15);
sha1_msg_schedule_update(&X3, X5, X11, X0);
sha1_msg_schedule_update(&X4, X6, X12, X1);
sha1_msg_schedule_update(&X5, X7, X13, X2);
sha1_msg_schedule_update(&X6, X8, X14, X3);
sha1_msg_schedule_update(&X7, X9, X15, X4);
sha1_msg_schedule_update(&X8, X10, X0, X5);
sha1_msg_schedule_update(&X9, X11, X1, X6);
sha1_msg_schedule_update(&X10, X12, X2, X7);
sha1_msg_schedule_update(&X11, X13, X3, X8);
sha1_msg_schedule_update(&X12, X14, X4, X9);
sha1_msg_schedule_update(&X13, X15, X5, X10);
sha1_msg_schedule_update(&X14, X0, X6, X11);
sha1_msg_schedule_update(&X15, X1, X7, X12);
BODY_40_59(40, C, D, E, T, A, B, X8, X10, X0, X5);
BODY_40_59(41, B, C, D, E, T, A, X9, X11, X1, X6);
BODY_40_59(42, A, B, C, D, E, T, X10, X12, X2, X7);
BODY_40_59(43, T, A, B, C, D, E, X11, X13, X3, X8);
BODY_40_59(44, E, T, A, B, C, D, X12, X14, X4, X9);
BODY_40_59(45, D, E, T, A, B, C, X13, X15, X5, X10);
BODY_40_59(46, C, D, E, T, A, B, X14, X0, X6, X11);
BODY_40_59(47, B, C, D, E, T, A, X15, X1, X7, X12);
BODY_40_59(48, A, B, C, D, E, T, X0, X2, X8, X13);
BODY_40_59(49, T, A, B, C, D, E, X1, X3, X9, X14);
BODY_40_59(50, E, T, A, B, C, D, X2, X4, X10, X15);
BODY_40_59(51, D, E, T, A, B, C, X3, X5, X11, X0);
BODY_40_59(52, C, D, E, T, A, B, X4, X6, X12, X1);
BODY_40_59(53, B, C, D, E, T, A, X5, X7, X13, X2);
BODY_40_59(54, A, B, C, D, E, T, X6, X8, X14, X3);
BODY_40_59(55, T, A, B, C, D, E, X7, X9, X15, X4);
BODY_40_59(56, E, T, A, B, C, D, X8, X10, X0, X5);
BODY_40_59(57, D, E, T, A, B, C, X9, X11, X1, X6);
BODY_40_59(58, C, D, E, T, A, B, X10, X12, X2, X7);
BODY_40_59(59, B, C, D, E, T, A, X11, X13, X3, X8);
sha1_round2(&a, &b, &c, &d, &e, X0);
sha1_round2(&a, &b, &c, &d, &e, X1);
sha1_round2(&a, &b, &c, &d, &e, X2);
sha1_round2(&a, &b, &c, &d, &e, X3);
sha1_round2(&a, &b, &c, &d, &e, X4);
sha1_round2(&a, &b, &c, &d, &e, X5);
sha1_round2(&a, &b, &c, &d, &e, X6);
sha1_round2(&a, &b, &c, &d, &e, X7);
sha1_round3(&a, &b, &c, &d, &e, X8);
sha1_round3(&a, &b, &c, &d, &e, X9);
sha1_round3(&a, &b, &c, &d, &e, X10);
sha1_round3(&a, &b, &c, &d, &e, X11);
sha1_round3(&a, &b, &c, &d, &e, X12);
sha1_round3(&a, &b, &c, &d, &e, X13);
sha1_round3(&a, &b, &c, &d, &e, X14);
sha1_round3(&a, &b, &c, &d, &e, X15);
BODY_60_79(60, A, B, C, D, E, T, X12, X14, X4, X9);
BODY_60_79(61, T, A, B, C, D, E, X13, X15, X5, X10);
BODY_60_79(62, E, T, A, B, C, D, X14, X0, X6, X11);
BODY_60_79(63, D, E, T, A, B, C, X15, X1, X7, X12);
BODY_60_79(64, C, D, E, T, A, B, X0, X2, X8, X13);
BODY_60_79(65, B, C, D, E, T, A, X1, X3, X9, X14);
BODY_60_79(66, A, B, C, D, E, T, X2, X4, X10, X15);
BODY_60_79(67, T, A, B, C, D, E, X3, X5, X11, X0);
BODY_60_79(68, E, T, A, B, C, D, X4, X6, X12, X1);
BODY_60_79(69, D, E, T, A, B, C, X5, X7, X13, X2);
BODY_60_79(70, C, D, E, T, A, B, X6, X8, X14, X3);
BODY_60_79(71, B, C, D, E, T, A, X7, X9, X15, X4);
BODY_60_79(72, A, B, C, D, E, T, X8, X10, X0, X5);
BODY_60_79(73, T, A, B, C, D, E, X9, X11, X1, X6);
BODY_60_79(74, E, T, A, B, C, D, X10, X12, X2, X7);
BODY_60_79(75, D, E, T, A, B, C, X11, X13, X3, X8);
BODY_60_79(76, C, D, E, T, A, B, X12, X14, X4, X9);
BODY_60_79(77, B, C, D, E, T, A, X13, X15, X5, X10);
BODY_60_79(78, A, B, C, D, E, T, X14, X0, X6, X11);
BODY_60_79(79, T, A, B, C, D, E, X15, X1, X7, X12);
sha1_msg_schedule_update(&X0, X2, X8, X13);
sha1_msg_schedule_update(&X1, X3, X9, X14);
sha1_msg_schedule_update(&X2, X4, X10, X15);
sha1_msg_schedule_update(&X3, X5, X11, X0);
sha1_msg_schedule_update(&X4, X6, X12, X1);
sha1_msg_schedule_update(&X5, X7, X13, X2);
sha1_msg_schedule_update(&X6, X8, X14, X3);
sha1_msg_schedule_update(&X7, X9, X15, X4);
sha1_msg_schedule_update(&X8, X10, X0, X5);
sha1_msg_schedule_update(&X9, X11, X1, X6);
sha1_msg_schedule_update(&X10, X12, X2, X7);
sha1_msg_schedule_update(&X11, X13, X3, X8);
sha1_msg_schedule_update(&X12, X14, X4, X9);
sha1_msg_schedule_update(&X13, X15, X5, X10);
sha1_msg_schedule_update(&X14, X0, X6, X11);
sha1_msg_schedule_update(&X15, X1, X7, X12);
c->h0 = (c->h0 + E)&0xffffffffL;
c->h1 = (c->h1 + T)&0xffffffffL;
c->h2 = (c->h2 + A)&0xffffffffL;
c->h3 = (c->h3 + B)&0xffffffffL;
c->h4 = (c->h4 + C)&0xffffffffL;
sha1_round3(&a, &b, &c, &d, &e, X0);
sha1_round3(&a, &b, &c, &d, &e, X1);
sha1_round3(&a, &b, &c, &d, &e, X2);
sha1_round3(&a, &b, &c, &d, &e, X3);
sha1_round3(&a, &b, &c, &d, &e, X4);
sha1_round3(&a, &b, &c, &d, &e, X5);
sha1_round3(&a, &b, &c, &d, &e, X6);
sha1_round3(&a, &b, &c, &d, &e, X7);
sha1_round3(&a, &b, &c, &d, &e, X8);
sha1_round3(&a, &b, &c, &d, &e, X9);
sha1_round3(&a, &b, &c, &d, &e, X10);
sha1_round3(&a, &b, &c, &d, &e, X11);
sha1_round4(&a, &b, &c, &d, &e, X12);
sha1_round4(&a, &b, &c, &d, &e, X13);
sha1_round4(&a, &b, &c, &d, &e, X14);
sha1_round4(&a, &b, &c, &d, &e, X15);
sha1_msg_schedule_update(&X0, X2, X8, X13);
sha1_msg_schedule_update(&X1, X3, X9, X14);
sha1_msg_schedule_update(&X2, X4, X10, X15);
sha1_msg_schedule_update(&X3, X5, X11, X0);
sha1_msg_schedule_update(&X4, X6, X12, X1);
sha1_msg_schedule_update(&X5, X7, X13, X2);
sha1_msg_schedule_update(&X6, X8, X14, X3);
sha1_msg_schedule_update(&X7, X9, X15, X4);
sha1_msg_schedule_update(&X8, X10, X0, X5);
sha1_msg_schedule_update(&X9, X11, X1, X6);
sha1_msg_schedule_update(&X10, X12, X2, X7);
sha1_msg_schedule_update(&X11, X13, X3, X8);
sha1_msg_schedule_update(&X12, X14, X4, X9);
sha1_msg_schedule_update(&X13, X15, X5, X10);
sha1_msg_schedule_update(&X14, X0, X6, X11);
sha1_msg_schedule_update(&X15, X1, X7, X12);
sha1_round4(&a, &b, &c, &d, &e, X0);
sha1_round4(&a, &b, &c, &d, &e, X1);
sha1_round4(&a, &b, &c, &d, &e, X2);
sha1_round4(&a, &b, &c, &d, &e, X3);
sha1_round4(&a, &b, &c, &d, &e, X4);
sha1_round4(&a, &b, &c, &d, &e, X5);
sha1_round4(&a, &b, &c, &d, &e, X6);
sha1_round4(&a, &b, &c, &d, &e, X7);
sha1_round4(&a, &b, &c, &d, &e, X8);
sha1_round4(&a, &b, &c, &d, &e, X9);
sha1_round4(&a, &b, &c, &d, &e, X10);
sha1_round4(&a, &b, &c, &d, &e, X11);
sha1_round4(&a, &b, &c, &d, &e, X12);
sha1_round4(&a, &b, &c, &d, &e, X13);
sha1_round4(&a, &b, &c, &d, &e, X14);
sha1_round4(&a, &b, &c, &d, &e, X15);
ctx->h0 += a;
ctx->h1 += b;
ctx->h2 += c;
ctx->h3 += d;
ctx->h4 += e;
}
}
#endif
int
SHA1_Init(SHA_CTX *c)
{

View File

@ -1,4 +1,4 @@
/* $OpenBSD: sha256.c,v 1.30 2023/08/11 15:27:28 jsing Exp $ */
/* $OpenBSD: sha256.c,v 1.31 2024/03/28 04:23:02 jsing Exp $ */
/* ====================================================================
* Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
*
@ -131,16 +131,14 @@ Maj(SHA_LONG x, SHA_LONG y, SHA_LONG z)
}
static inline void
sha256_msg_schedule_update(SHA_LONG *W0, SHA_LONG W1,
SHA_LONG W9, SHA_LONG W14)
sha256_msg_schedule_update(SHA_LONG *W0, SHA_LONG W1, SHA_LONG W9, SHA_LONG W14)
{
*W0 = sigma1(W14) + W9 + sigma0(W1) + *W0;
}
static inline void
sha256_round(SHA_LONG *a, SHA_LONG *b, SHA_LONG *c, SHA_LONG *d,
SHA_LONG *e, SHA_LONG *f, SHA_LONG *g, SHA_LONG *h,
SHA_LONG Kt, SHA_LONG Wt)
sha256_round(SHA_LONG *a, SHA_LONG *b, SHA_LONG *c, SHA_LONG *d, SHA_LONG *e,
SHA_LONG *f, SHA_LONG *g, SHA_LONG *h, SHA_LONG Kt, SHA_LONG Wt)
{
SHA_LONG T1, T2;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: sm3.c,v 1.6 2023/07/08 06:36:55 jsing Exp $ */
/* $OpenBSD: sm3.c,v 1.17 2024/03/28 12:09:09 jsing Exp $ */
/*
* Copyright (c) 2018, Ribose Inc
*
@ -15,42 +15,21 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef OPENSSL_NO_SM3
#include <openssl/sm3.h>
#include <string.h>
#include <openssl/opensslconf.h>
#define DATA_ORDER_IS_BIG_ENDIAN
#include <openssl/sm3.h>
#define HASH_LONG SM3_WORD
#define HASH_CTX SM3_CTX
#define HASH_CBLOCK SM3_CBLOCK
#define HASH_UPDATE SM3_Update
#define HASH_TRANSFORM SM3_Transform
#define HASH_FINAL SM3_Final
#define HASH_MAKE_STRING(c, s) do { \
unsigned long ll; \
ll = (c)->A; HOST_l2c(ll, (s)); \
ll = (c)->B; HOST_l2c(ll, (s)); \
ll = (c)->C; HOST_l2c(ll, (s)); \
ll = (c)->D; HOST_l2c(ll, (s)); \
ll = (c)->E; HOST_l2c(ll, (s)); \
ll = (c)->F; HOST_l2c(ll, (s)); \
ll = (c)->G; HOST_l2c(ll, (s)); \
ll = (c)->H; HOST_l2c(ll, (s)); \
} while (0)
#define HASH_BLOCK_DATA_ORDER SM3_block_data_order
#include "crypto_internal.h"
void SM3_block_data_order(SM3_CTX *c, const void *p, size_t num);
void SM3_transform(SM3_CTX *c, const unsigned char *data);
/* Ensure that SM3_WORD and uint32_t are equivalent size. */
CTASSERT(sizeof(SM3_WORD) == sizeof(uint32_t));
#include "md32_common.h"
#ifndef OPENSSL_NO_SM3
#define P0(X) (X ^ ROTATE(X, 9) ^ ROTATE(X, 17))
#define P1(X) (X ^ ROTATE(X, 15) ^ ROTATE(X, 23))
#define P0(X) (X ^ crypto_rol_u32(X, 9) ^ crypto_rol_u32(X, 17))
#define P1(X) (X ^ crypto_rol_u32(X, 15) ^ crypto_rol_u32(X, 23))
#define FF0(X, Y, Z) (X ^ Y ^ Z)
#define GG0(X, Y, Z) (X ^ Y ^ Z)
@ -59,17 +38,17 @@ void SM3_transform(SM3_CTX *c, const unsigned char *data);
#define GG1(X, Y, Z) ((Z ^ (X & (Y ^ Z))))
#define EXPAND(W0, W7, W13, W3, W10) \
(P1(W0 ^ W7 ^ ROTATE(W13, 15)) ^ ROTATE(W3, 7) ^ W10)
(P1(W0 ^ W7 ^ crypto_rol_u32(W13, 15)) ^ crypto_rol_u32(W3, 7) ^ W10)
#define ROUND(A, B, C, D, E, F, G, H, TJ, Wi, Wj, FF, GG) do { \
const SM3_WORD A12 = ROTATE(A, 12); \
const SM3_WORD A12 = crypto_rol_u32(A, 12); \
const SM3_WORD A12_SM = A12 + E + TJ; \
const SM3_WORD SS1 = ROTATE(A12_SM, 7); \
const SM3_WORD SS1 = crypto_rol_u32(A12_SM, 7); \
const SM3_WORD TT1 = FF(A, B, C) + D + (SS1 ^ A12) + (Wj); \
const SM3_WORD TT2 = GG(E, F, G) + H + SS1 + Wi; \
B = ROTATE(B, 9); \
B = crypto_rol_u32(B, 9); \
D = TT1; \
F = ROTATE(F, 19); \
F = crypto_rol_u32(F, 19); \
H = P0(TT2); \
} while(0)
@ -79,38 +58,11 @@ void SM3_transform(SM3_CTX *c, const unsigned char *data);
#define R2(A, B, C, D, E, F, G, H, TJ, Wi, Wj) \
ROUND(A, B, C, D, E, F, G, H, TJ, Wi, Wj, FF1, GG1)
#define SM3_A 0x7380166fUL
#define SM3_B 0x4914b2b9UL
#define SM3_C 0x172442d7UL
#define SM3_D 0xda8a0600UL
#define SM3_E 0xa96f30bcUL
#define SM3_F 0x163138aaUL
#define SM3_G 0xe38dee4dUL
#define SM3_H 0xb0fb0e4eUL
LCRYPTO_ALIAS(SM3_Update);
LCRYPTO_ALIAS(SM3_Final);
int
SM3_Init(SM3_CTX *c)
static void
sm3_block_data_order(SM3_CTX *ctx, const void *_in, size_t num)
{
memset(c, 0, sizeof(*c));
c->A = SM3_A;
c->B = SM3_B;
c->C = SM3_C;
c->D = SM3_D;
c->E = SM3_E;
c->F = SM3_F;
c->G = SM3_G;
c->H = SM3_H;
return 1;
}
LCRYPTO_ALIAS(SM3_Init);
void
SM3_block_data_order(SM3_CTX *ctx, const void *p, size_t num)
{
const unsigned char *data = p;
const uint8_t *in = _in;
const SM3_WORD *in32;
SM3_WORD A, B, C, D, E, F, G, H;
SM3_WORD W00, W01, W02, W03, W04, W05, W06, W07;
SM3_WORD W08, W09, W10, W11, W12, W13, W14, W15;
@ -129,22 +81,45 @@ SM3_block_data_order(SM3_CTX *ctx, const void *p, size_t num)
* We have to load all message bytes immediately since SM3 reads
* them slightly out of order.
*/
HOST_c2l(data, W00);
HOST_c2l(data, W01);
HOST_c2l(data, W02);
HOST_c2l(data, W03);
HOST_c2l(data, W04);
HOST_c2l(data, W05);
HOST_c2l(data, W06);
HOST_c2l(data, W07);
HOST_c2l(data, W08);
HOST_c2l(data, W09);
HOST_c2l(data, W10);
HOST_c2l(data, W11);
HOST_c2l(data, W12);
HOST_c2l(data, W13);
HOST_c2l(data, W14);
HOST_c2l(data, W15);
if ((uintptr_t)in % 4 == 0) {
/* Input is 32 bit aligned. */
in32 = (const SM3_WORD *)in;
W00 = be32toh(in32[0]);
W01 = be32toh(in32[1]);
W02 = be32toh(in32[2]);
W03 = be32toh(in32[3]);
W04 = be32toh(in32[4]);
W05 = be32toh(in32[5]);
W06 = be32toh(in32[6]);
W07 = be32toh(in32[7]);
W08 = be32toh(in32[8]);
W09 = be32toh(in32[9]);
W10 = be32toh(in32[10]);
W11 = be32toh(in32[11]);
W12 = be32toh(in32[12]);
W13 = be32toh(in32[13]);
W14 = be32toh(in32[14]);
W15 = be32toh(in32[15]);
} else {
/* Input is not 32 bit aligned. */
W00 = crypto_load_be32toh(&in[0 * 4]);
W01 = crypto_load_be32toh(&in[1 * 4]);
W02 = crypto_load_be32toh(&in[2 * 4]);
W03 = crypto_load_be32toh(&in[3 * 4]);
W04 = crypto_load_be32toh(&in[4 * 4]);
W05 = crypto_load_be32toh(&in[5 * 4]);
W06 = crypto_load_be32toh(&in[6 * 4]);
W07 = crypto_load_be32toh(&in[7 * 4]);
W08 = crypto_load_be32toh(&in[8 * 4]);
W09 = crypto_load_be32toh(&in[9 * 4]);
W10 = crypto_load_be32toh(&in[10 * 4]);
W11 = crypto_load_be32toh(&in[11 * 4]);
W12 = crypto_load_be32toh(&in[12 * 4]);
W13 = crypto_load_be32toh(&in[13 * 4]);
W14 = crypto_load_be32toh(&in[14 * 4]);
W15 = crypto_load_be32toh(&in[15 * 4]);
}
in += SM3_CBLOCK;
R1(A, B, C, D, E, F, G, H, 0x79cc4519, W00, W00 ^ W04);
W00 = EXPAND(W00, W07, W13, W03, W10);
@ -274,4 +249,113 @@ SM3_block_data_order(SM3_CTX *ctx, const void *p, size_t num)
}
}
int
SM3_Init(SM3_CTX *c)
{
memset(c, 0, sizeof(*c));
c->A = 0x7380166fUL;
c->B = 0x4914b2b9UL;
c->C = 0x172442d7UL;
c->D = 0xda8a0600UL;
c->E = 0xa96f30bcUL;
c->F = 0x163138aaUL;
c->G = 0xe38dee4dUL;
c->H = 0xb0fb0e4eUL;
return 1;
}
LCRYPTO_ALIAS(SM3_Init);
int
SM3_Update(SM3_CTX *c, const void *data_, size_t len)
{
const unsigned char *data = data_;
unsigned char *p;
SM3_WORD l;
size_t n;
if (len == 0)
return 1;
l = (c->Nl + (((SM3_WORD)len) << 3))&0xffffffffUL;
/* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
* Wei Dai <weidai@eskimo.com> for pointing it out. */
if (l < c->Nl) /* overflow */
c->Nh++;
c->Nh+=(SM3_WORD)(len>>29); /* might cause compiler warning on 16-bit */
c->Nl = l;
n = c->num;
if (n != 0) {
p = (unsigned char *)c->data;
if (len >= SM3_CBLOCK || len + n >= SM3_CBLOCK) {
memcpy(p + n, data, SM3_CBLOCK - n);
sm3_block_data_order(c, p, 1);
n = SM3_CBLOCK - n;
data += n;
len -= n;
c->num = 0;
memset(p, 0, SM3_CBLOCK); /* keep it zeroed */
} else {
memcpy(p + n, data, len);
c->num += (unsigned int)len;
return 1;
}
}
n = len / SM3_CBLOCK;
if (n > 0) {
sm3_block_data_order(c, data, n);
n *= SM3_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(SM3_Update);
int
SM3_Final(unsigned char *md, SM3_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 > (SM3_CBLOCK - 8)) {
memset(p + n, 0, SM3_CBLOCK - n);
n = 0;
sm3_block_data_order(c, p, 1);
}
memset(p + n, 0, SM3_CBLOCK - 8 - n);
c->data[SM3_LBLOCK - 2] = htobe32(c->Nh);
c->data[SM3_LBLOCK - 1] = htobe32(c->Nl);
sm3_block_data_order(c, p, 1);
c->num = 0;
memset(p, 0, SM3_CBLOCK);
crypto_store_htobe32(&md[0 * 4], c->A);
crypto_store_htobe32(&md[1 * 4], c->B);
crypto_store_htobe32(&md[2 * 4], c->C);
crypto_store_htobe32(&md[3 * 4], c->D);
crypto_store_htobe32(&md[4 * 4], c->E);
crypto_store_htobe32(&md[5 * 4], c->F);
crypto_store_htobe32(&md[6 * 4], c->G);
crypto_store_htobe32(&md[7 * 4], c->H);
return 1;
}
LCRYPTO_ALIAS(SM3_Final);
#endif /* !OPENSSL_NO_SM3 */

View File

@ -1,4 +1,4 @@
/* $OpenBSD: wp_dgst.c,v 1.7 2023/09/04 08:43:41 tb Exp $ */
/* $OpenBSD: wp_dgst.c,v 1.8 2024/03/29 00:16:22 jsing Exp $ */
/**
* The Whirlpool hashing function.
*
@ -58,92 +58,88 @@
#include "wp_local.h"
int WHIRLPOOL_Init(WHIRLPOOL_CTX *c)
{
memset (c,0,sizeof(*c));
return(1);
}
int
WHIRLPOOL_Init(WHIRLPOOL_CTX *c)
{
memset (c, 0, sizeof(*c));
return (1);
}
int WHIRLPOOL_Update (WHIRLPOOL_CTX *c,const void *_inp,size_t bytes)
{
int
WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *_inp, size_t bytes)
{
/* Well, largest suitable chunk size actually is
* (1<<(sizeof(size_t)*8-3))-64, but below number
* is large enough for not to care about excessive
* calls to WHIRLPOOL_BitUpdate... */
size_t chunk = ((size_t)1)<<(sizeof(size_t)*8-4);
size_t chunk = ((size_t)1) << (sizeof(size_t)*8 - 4);
const unsigned char *inp = _inp;
while (bytes>=chunk)
{
WHIRLPOOL_BitUpdate(c,inp,chunk*8);
while (bytes >= chunk) {
WHIRLPOOL_BitUpdate(c, inp, chunk*8);
bytes -= chunk;
inp += chunk;
}
if (bytes)
WHIRLPOOL_BitUpdate(c,inp,bytes*8);
return(1);
inp += chunk;
}
if (bytes)
WHIRLPOOL_BitUpdate(c, inp, bytes*8);
void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c,const void *_inp,size_t bits)
{
return (1);
}
void
WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *_inp, size_t bits)
{
size_t n;
unsigned int bitoff = c->bitoff,
bitrem = bitoff%8,
inpgap = (8-(unsigned int)bits%8)&7;
const unsigned char *inp=_inp;
bitrem = bitoff % 8,
inpgap = (8 - (unsigned int)bits % 8)&7;
const unsigned char *inp = _inp;
/* This 256-bit increment procedure relies on the size_t
* being natural size of CPU register, so that we don't
* have to mask the value in order to detect overflows. */
c->bitlen[0] += bits;
if (c->bitlen[0] < bits) /* overflow */
{
{
n = 1;
do { c->bitlen[n]++;
} while(c->bitlen[n]==0
&& ++n<(WHIRLPOOL_COUNTER/sizeof(size_t)));
}
do {
c->bitlen[n]++;
} while (c->bitlen[n]==0 &&
++n < (WHIRLPOOL_COUNTER/sizeof(size_t)));
}
#ifndef OPENSSL_SMALL_FOOTPRINT
reconsider:
reconsider:
if (inpgap==0 && bitrem==0) /* byte-oriented loop */
{
while (bits)
{
if (bitoff==0 && (n=bits/WHIRLPOOL_BBLOCK))
{
whirlpool_block(c,inp,n);
inp += n*WHIRLPOOL_BBLOCK/8;
{
while (bits) {
if (bitoff == 0 && (n = bits/WHIRLPOOL_BBLOCK)) {
whirlpool_block(c, inp, n);
inp += n*WHIRLPOOL_BBLOCK/8;
bits %= WHIRLPOOL_BBLOCK;
}
else
{
} else {
unsigned int byteoff = bitoff/8;
bitrem = WHIRLPOOL_BBLOCK - bitoff;/* re-use bitrem */
if (bits >= bitrem)
{
if (bits >= bitrem) {
bits -= bitrem;
bitrem /= 8;
memcpy(c->data+byteoff,inp,bitrem);
inp += bitrem;
whirlpool_block(c,c->data,1);
memcpy(c->data + byteoff, inp, bitrem);
inp += bitrem;
whirlpool_block(c, c->data, 1);
bitoff = 0;
}
else
{
memcpy(c->data+byteoff,inp,bits/8);
} else {
memcpy(c->data + byteoff, inp, bits/8);
bitoff += (unsigned int)bits;
bits = 0;
}
c->bitoff = bitoff;
}
c->bitoff = bitoff;
}
}
}
else /* bit-oriented loop */
#endif
{
{
/*
inp
|
@ -156,113 +152,116 @@ void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c,const void *_inp,size_t bits)
|
c->bitoff/8
*/
while (bits)
{
unsigned int byteoff = bitoff/8;
while (bits) {
unsigned int byteoff = bitoff/8;
unsigned char b;
#ifndef OPENSSL_SMALL_FOOTPRINT
if (bitrem==inpgap)
{
c->data[byteoff++] |= inp[0] & (0xff>>inpgap);
inpgap = 8-inpgap;
if (bitrem == inpgap) {
c->data[byteoff++] |= inp[0] & (0xff >> inpgap);
inpgap = 8 - inpgap;
bitoff += inpgap; bitrem = 0; /* bitoff%8 */
bits -= inpgap; inpgap = 0; /* bits%8 */
inp++;
if (bitoff==WHIRLPOOL_BBLOCK)
{
whirlpool_block(c,c->data,1);
if (bitoff == WHIRLPOOL_BBLOCK) {
whirlpool_block(c, c->data, 1);
bitoff = 0;
}
}
c->bitoff = bitoff;
goto reconsider;
}
else
} else
#endif
if (bits>=8)
{
b = ((inp[0]<<inpgap) | (inp[1]>>(8-inpgap)));
if (bits >= 8) {
b = ((inp[0]<<inpgap) | (inp[1]>>(8 - inpgap)));
b &= 0xff;
if (bitrem) c->data[byteoff++] |= b>>bitrem;
else c->data[byteoff++] = b;
if (bitrem)
c->data[byteoff++] |= b >> bitrem;
else
c->data[byteoff++] = b;
bitoff += 8;
bits -= 8;
bits -= 8;
inp++;
if (bitoff>=WHIRLPOOL_BBLOCK)
{
whirlpool_block(c,c->data,1);
byteoff = 0;
if (bitoff >= WHIRLPOOL_BBLOCK) {
whirlpool_block(c, c->data, 1);
byteoff = 0;
bitoff %= WHIRLPOOL_BBLOCK;
}
if (bitrem) c->data[byteoff] = b<<(8-bitrem);
}
else /* remaining less than 8 bits */
{
b = (inp[0]<<inpgap)&0xff;
if (bitrem) c->data[byteoff++] |= b>>bitrem;
else c->data[byteoff++] = b;
bitoff += (unsigned int)bits;
if (bitoff==WHIRLPOOL_BBLOCK)
{
whirlpool_block(c,c->data,1);
byteoff = 0;
bitoff %= WHIRLPOOL_BBLOCK;
}
if (bitrem) c->data[byteoff] = b<<(8-bitrem);
bits = 0;
}
c->bitoff = bitoff;
if (bitrem)
c->data[byteoff] = b << (8 - bitrem);
}
else /* remaining less than 8 bits */
{
b = (inp[0]<<inpgap)&0xff;
if (bitrem)
c->data[byteoff++] |= b >> bitrem;
else
c->data[byteoff++] = b;
bitoff += (unsigned int)bits;
if (bitoff == WHIRLPOOL_BBLOCK) {
whirlpool_block(c, c->data, 1);
byteoff = 0;
bitoff %= WHIRLPOOL_BBLOCK;
}
if (bitrem)
c->data[byteoff] = b << (8 - bitrem);
bits = 0;
}
c->bitoff = bitoff;
}
}
}
int WHIRLPOOL_Final (unsigned char *md,WHIRLPOOL_CTX *c)
{
unsigned int bitoff = c->bitoff,
byteoff = bitoff/8;
size_t i,j,v;
int
WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c)
{
unsigned int bitoff = c->bitoff,
byteoff = bitoff/8;
size_t i, j, v;
unsigned char *p;
bitoff %= 8;
if (bitoff) c->data[byteoff] |= 0x80>>bitoff;
else c->data[byteoff] = 0x80;
if (bitoff)
c->data[byteoff] |= 0x80 >> bitoff;
else
c->data[byteoff] = 0x80;
byteoff++;
/* pad with zeros */
if (byteoff > (WHIRLPOOL_BBLOCK/8-WHIRLPOOL_COUNTER))
{
if (byteoff<WHIRLPOOL_BBLOCK/8)
memset(&c->data[byteoff],0,WHIRLPOOL_BBLOCK/8-byteoff);
whirlpool_block(c,c->data,1);
if (byteoff > (WHIRLPOOL_BBLOCK/8 - WHIRLPOOL_COUNTER)) {
if (byteoff < WHIRLPOOL_BBLOCK/8)
memset(&c->data[byteoff], 0, WHIRLPOOL_BBLOCK/8 - byteoff);
whirlpool_block(c, c->data, 1);
byteoff = 0;
}
if (byteoff < (WHIRLPOOL_BBLOCK/8-WHIRLPOOL_COUNTER))
memset(&c->data[byteoff],0,
(WHIRLPOOL_BBLOCK/8-WHIRLPOOL_COUNTER)-byteoff);
}
if (byteoff < (WHIRLPOOL_BBLOCK/8 - WHIRLPOOL_COUNTER))
memset(&c->data[byteoff], 0,
(WHIRLPOOL_BBLOCK/8 - WHIRLPOOL_COUNTER) - byteoff);
/* smash 256-bit c->bitlen in big-endian order */
p = &c->data[WHIRLPOOL_BBLOCK/8-1]; /* last byte in c->data */
for(i=0;i<WHIRLPOOL_COUNTER/sizeof(size_t);i++)
for(v=c->bitlen[i],j=0;j<sizeof(size_t);j++,v>>=8)
for (i = 0; i < WHIRLPOOL_COUNTER/sizeof(size_t); i++)
for (v = c->bitlen[i], j = 0; j < sizeof(size_t); j++, v >>= 8)
*p-- = (unsigned char)(v&0xff);
whirlpool_block(c,c->data,1);
whirlpool_block(c, c->data, 1);
if (md) {
memcpy(md,c->H.c,WHIRLPOOL_DIGEST_LENGTH);
memset(c,0,sizeof(*c));
return(1);
}
return(0);
memcpy(md, c->H.c, WHIRLPOOL_DIGEST_LENGTH);
memset(c, 0, sizeof(*c));
return (1);
}
return (0);
}
unsigned char *WHIRLPOOL(const void *inp, size_t bytes,unsigned char *md)
{
unsigned char *
WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md)
{
WHIRLPOOL_CTX ctx;
static unsigned char m[WHIRLPOOL_DIGEST_LENGTH];
if (md == NULL) md=m;
if (md == NULL)
md = m;
WHIRLPOOL_Init(&ctx);
WHIRLPOOL_Update(&ctx,inp,bytes);
WHIRLPOOL_Final(md,&ctx);
return(md);
}
WHIRLPOOL_Update(&ctx, inp, bytes);
WHIRLPOOL_Final(md, &ctx);
return (md);
}

View File

@ -1,4 +1,4 @@
/* $OpenBSD: x509_vpm.c,v 1.42 2024/01/08 09:51:09 tb Exp $ */
/* $OpenBSD: x509_vpm.c,v 1.43 2024/03/29 00:25:32 tb Exp $ */
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
* project 2004.
*/
@ -82,7 +82,7 @@ int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, const unsigned char *ip,
static void
str_free(char *s)
{
free(s);
free(s);
}
static STACK_OF(OPENSSL_STRING) *

View File

@ -15,17 +15,7 @@ open OUT,"| \"$^X\" $xlate $flavour $output";
($arg1,$arg2,$arg3,$arg4)=("%rdi","%rsi","%rdx","%rcx"); # Unix order
print<<___;
.extern OPENSSL_cpuid_setup
.hidden OPENSSL_cpuid_setup
.section .init
_CET_ENDBR
call OPENSSL_cpuid_setup
.extern OPENSSL_ia32cap_P
.hidden OPENSSL_ia32cap_P
.text
.globl OPENSSL_ia32_cpuid
.type OPENSSL_ia32_cpuid,\@abi-omnipotent
.align 16

View File

@ -150,8 +150,4 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
&set_label("nocpuid");
&function_end("OPENSSL_ia32_cpuid");
&external_label("OPENSSL_ia32cap_P");
&initseg("OPENSSL_cpuid_setup");
&asm_finish();

View File

@ -1,4 +1,4 @@
/* $OpenBSD: tls_config.c,v 1.69 2024/03/27 07:35:30 joshua Exp $ */
/* $OpenBSD: tls_config.c,v 1.70 2024/03/28 06:55:02 joshua Exp $ */
/*
* Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
*
@ -301,7 +301,8 @@ tls_config_parse_alpn(struct tls_config *config, const char *alpn,
*alpn_len = 0;
if ((buf_len = strlen(alpn) + 1) > 65535) {
tls_config_set_errorx(config, TLS_ERROR_UNKNOWN, "alpn too large");
tls_config_set_errorx(config, TLS_ERROR_INVALID_ARGUMENT,
"alpn too large");
goto err;
}
@ -865,7 +866,7 @@ tls_config_set_session_id(struct tls_config *config,
const unsigned char *session_id, size_t len)
{
if (len > TLS_MAX_SESSION_ID_LENGTH) {
tls_config_set_errorx(config, TLS_ERROR_UNKNOWN,
tls_config_set_errorx(config, TLS_ERROR_INVALID_ARGUMENT,
"session ID too large");
return (-1);
}
@ -878,12 +879,12 @@ int
tls_config_set_session_lifetime(struct tls_config *config, int lifetime)
{
if (lifetime > TLS_MAX_SESSION_TIMEOUT) {
tls_config_set_errorx(config, TLS_ERROR_UNKNOWN,
tls_config_set_errorx(config, TLS_ERROR_INVALID_ARGUMENT,
"session lifetime too large");
return (-1);
}
if (lifetime != 0 && lifetime < TLS_MIN_SESSION_TIMEOUT) {
tls_config_set_errorx(config, TLS_ERROR_UNKNOWN,
tls_config_set_errorx(config, TLS_ERROR_INVALID_ARGUMENT,
"session lifetime too small");
return (-1);
}

View File

@ -1,4 +1,4 @@
/* $OpenBSD: tls_signer.c,v 1.11 2024/03/28 02:08:24 joshua Exp $ */
/* $OpenBSD: tls_signer.c,v 1.12 2024/03/28 06:55:02 joshua Exp $ */
/*
* Copyright (c) 2021 Eric Faurot <eric@openbsd.org>
*
@ -204,7 +204,7 @@ tls_sign_rsa(struct tls_signer *signer, struct tls_signer_key *skey,
}
if (input_len > INT_MAX) {
tls_error_setx(&signer->error, TLS_ERROR_UNKNOWN,
tls_error_setx(&signer->error, TLS_ERROR_INVALID_ARGUMENT,
"input too large");
return (-1);
}
@ -252,7 +252,7 @@ tls_sign_ecdsa(struct tls_signer *signer, struct tls_signer_key *skey,
}
if (input_len > INT_MAX) {
tls_error_setx(&signer->error, TLS_ERROR_UNKNOWN,
tls_error_setx(&signer->error, TLS_ERROR_INVALID_ARGUMENT,
"digest too large");
return (-1);
}

View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.54 2023/12/27 12:34:32 jsing Exp $
# $OpenBSD: Makefile,v 1.55 2024/03/28 06:45:36 beck Exp $
SUBDIR += aead
SUBDIR += aes
@ -26,7 +26,6 @@ SUBDIR += evp
SUBDIR += exdata
SUBDIR += free
SUBDIR += gcm128
SUBDIR += gost
SUBDIR += hkdf
SUBDIR += hmac
SUBDIR += idea

View File

@ -1,9 +0,0 @@
# $OpenBSD: Makefile,v 1.1 2014/11/09 19:45:26 miod Exp $
PROG= gost2814789t
LDADD= -lcrypto
DPADD= ${LIBCRYPTO}
WARNINGS= Yes
CFLAGS+= -DLIBRESSL_INTERNAL -Werror
.include <bsd.regress.mk>

File diff suppressed because it is too large Load Diff

View File

@ -141,8 +141,6 @@ static u32 guc_ads_blob_size(struct intel_guc *guc)
static void guc_policies_init(struct intel_guc *guc)
{
STUB();
#ifdef notyet
struct intel_gt *gt = guc_to_gt(guc);
struct drm_i915_private *i915 = gt->i915;
u32 global_flags = 0;
@ -157,14 +155,11 @@ static void guc_policies_init(struct intel_guc *guc)
ads_blob_write(guc, policies.global_flags, global_flags);
ads_blob_write(guc, policies.is_valid, 1);
#endif
}
void intel_guc_ads_print_policy_info(struct intel_guc *guc,
struct drm_printer *dp)
{
STUB();
#ifdef notyet
if (unlikely(iosys_map_is_null(&guc->ads_map)))
return;
@ -175,7 +170,6 @@ void intel_guc_ads_print_policy_info(struct intel_guc *guc,
ads_blob_read(guc, policies.max_num_work_items));
drm_printf(dp, " Flags = %u\n",
ads_blob_read(guc, policies.global_flags));
#endif
}
static int guc_action_policies_update(struct intel_guc *guc, u32 policy_offset)
@ -190,9 +184,6 @@ static int guc_action_policies_update(struct intel_guc *guc, u32 policy_offset)
int intel_guc_global_policies_update(struct intel_guc *guc)
{
STUB();
return -ENOSYS;
#ifdef notyet
struct intel_gt *gt = guc_to_gt(guc);
u32 scheduler_policies;
intel_wakeref_t wakeref;
@ -213,14 +204,11 @@ int intel_guc_global_policies_update(struct intel_guc *guc)
ret = guc_action_policies_update(guc, scheduler_policies);
return ret;
#endif
}
static void guc_mapping_table_init(struct intel_gt *gt,
struct iosys_map *info_map)
{
STUB();
#ifdef notyet
unsigned int i, j;
struct intel_engine_cs *engine;
enum intel_engine_id id;
@ -237,7 +225,6 @@ static void guc_mapping_table_init(struct intel_gt *gt,
info_map_write(info_map, mapping_table[guc_class][ilog2(engine->logical_mask)],
engine->instance);
}
#endif
}
/*
@ -267,14 +254,12 @@ static int guc_mmio_reg_cmp(const void *a, const void *b)
static struct guc_mmio_reg * __must_check
__mmio_reg_add(struct temp_regset *regset, struct guc_mmio_reg *reg)
{
STUB();
return ERR_PTR(-ENOSYS);
#ifdef notyet
u32 pos = regset->storage_used;
struct guc_mmio_reg *slot;
if (pos >= regset->storage_max) {
size_t size = ALIGN((pos + 1) * sizeof(*slot), PAGE_SIZE);
#ifdef ___linux__
struct guc_mmio_reg *r = krealloc(regset->storage,
size, GFP_KERNEL);
if (!r) {
@ -282,6 +267,17 @@ __mmio_reg_add(struct temp_regset *regset, struct guc_mmio_reg *reg)
-ENOMEM);
return ERR_PTR(-ENOMEM);
}
#else
struct guc_mmio_reg *r = kmalloc(size, GFP_KERNEL);
if (!r) {
WARN_ONCE(1, "Incomplete regset list: can't add register (%d)\n",
-ENOMEM);
return ERR_PTR(-ENOMEM);
}
memcpy(r, regset->storage,
ALIGN((pos) * sizeof(*slot), PAGE_SIZE));
kfree(regset->storage);
#endif
regset->registers = r + (regset->registers - regset->storage);
regset->storage = r;
@ -293,7 +289,6 @@ __mmio_reg_add(struct temp_regset *regset, struct guc_mmio_reg *reg)
*slot = *reg;
return slot;
#endif
}
static long __must_check guc_mmio_reg_add(struct intel_gt *gt,
@ -457,8 +452,6 @@ fail_regset_init:
static void guc_mmio_reg_state_init(struct intel_guc *guc)
{
STUB();
#ifdef notyet
struct intel_gt *gt = guc_to_gt(guc);
struct intel_engine_cs *engine;
enum intel_engine_id id;
@ -498,14 +491,11 @@ static void guc_mmio_reg_state_init(struct intel_guc *guc)
addr_ggtt += count * sizeof(struct guc_mmio_reg);
}
#endif
}
static void fill_engine_enable_masks(struct intel_gt *gt,
struct iosys_map *info_map)
{
STUB();
#ifdef notyet
info_map_write(info_map, engine_enabled_masks[GUC_RENDER_CLASS], RCS_MASK(gt));
info_map_write(info_map, engine_enabled_masks[GUC_COMPUTE_CLASS], CCS_MASK(gt));
info_map_write(info_map, engine_enabled_masks[GUC_BLITTER_CLASS], BCS_MASK(gt));
@ -516,7 +506,6 @@ static void fill_engine_enable_masks(struct intel_gt *gt,
if (gt->engine[GSC0])
info_map_write(info_map, engine_enabled_masks[GUC_GSC_OTHER_CLASS],
BIT(gt->engine[GSC0]->instance));
#endif
}
#define LR_HW_CONTEXT_SIZE (80 * sizeof(u32))
@ -527,9 +516,6 @@ static void fill_engine_enable_masks(struct intel_gt *gt,
#define LRC_SKIP_SIZE(i915) (LRC_PPHWSP_SZ * PAGE_SIZE + LR_HW_CONTEXT_SZ(i915))
static int guc_prep_golden_context(struct intel_guc *guc)
{
STUB();
return -ENOSYS;
#ifdef notyet
struct intel_gt *gt = guc_to_gt(guc);
u32 addr_ggtt, offset;
u32 total_size = 0, alloc_size, real_size;
@ -597,7 +583,6 @@ static int guc_prep_golden_context(struct intel_guc *guc)
GEM_BUG_ON(guc->ads_golden_ctxt_size != total_size);
return total_size;
#endif
}
static struct intel_engine_cs *find_engine_state(struct intel_gt *gt, u8 engine_class)
@ -629,10 +614,6 @@ static void guc_init_golden_context(struct intel_guc *guc)
if (!intel_uc_uses_guc_submission(&gt->uc))
return;
STUB();
return;
#ifdef notyet
GEM_BUG_ON(iosys_map_is_null(&guc->ads_map));
/*
@ -666,20 +647,16 @@ static void guc_init_golden_context(struct intel_guc *guc)
addr_ggtt += alloc_size;
shmem_read_to_iosys_map(engine->default_state, 0, &guc->ads_map,
uao_read_to_iosys_map(engine->default_state, 0, &guc->ads_map,
offset, real_size);
offset += alloc_size;
}
GEM_BUG_ON(guc->ads_golden_ctxt_size != total_size);
#endif
}
static u32 guc_get_capture_engine_mask(struct iosys_map *info_map, u32 capture_class)
{
STUB();
return 0;
#ifdef notyet
u32 mask;
switch (capture_class) {
@ -709,15 +686,11 @@ static u32 guc_get_capture_engine_mask(struct iosys_map *info_map, u32 capture_c
}
return mask;
#endif
}
static int
guc_capture_prep_lists(struct intel_guc *guc)
{
STUB();
return -ENOSYS;
#ifdef notyet
struct intel_gt *gt = guc_to_gt(guc);
u32 ads_ggtt, capture_offset, null_ggtt, total_size = 0;
struct guc_gt_system_info local_info;
@ -828,13 +801,10 @@ engine_instance_list:
guc->ads_capture_size, PAGE_ALIGN(total_size));
return PAGE_ALIGN(total_size);
#endif
}
static void __guc_ads_init(struct intel_guc *guc)
{
STUB();
#ifdef notyet
struct intel_gt *gt = guc_to_gt(guc);
struct drm_i915_private *i915 = gt->i915;
struct iosys_map info_map = IOSYS_MAP_INIT_OFFSET(&guc->ads_map,
@ -885,7 +855,6 @@ static void __guc_ads_init(struct intel_guc *guc)
guc_ads_private_data_offset(guc));
i915_gem_object_flush_map(guc->ads_vma->obj);
#endif
}
/**
@ -963,8 +932,6 @@ void intel_guc_ads_destroy(struct intel_guc *guc)
static void guc_ads_private_data_reset(struct intel_guc *guc)
{
STUB();
#ifdef notyet
u32 size;
size = guc_ads_private_data_size(guc);
@ -973,7 +940,6 @@ static void guc_ads_private_data_reset(struct intel_guc *guc)
iosys_map_memset(&guc->ads_map, guc_ads_private_data_offset(guc),
0, size);
#endif
}
/**
@ -1002,15 +968,10 @@ u32 intel_guc_engine_usage_offset(struct intel_guc *guc)
struct iosys_map intel_guc_engine_usage_record_map(struct intel_engine_cs *engine)
{
STUB();
struct iosys_map x = {};
return x;
#ifdef notyet
struct intel_guc *guc = &engine->gt->uc.guc;
u8 guc_class = engine_class_to_guc_class(engine->class);
size_t offset = offsetof(struct __guc_ads_blob,
engine_usage.engines[guc_class][ilog2(engine->logical_mask)]);
return IOSYS_MAP_INIT_OFFSET(&guc->ads_map, offset);
#endif
}

View File

@ -1214,8 +1214,6 @@ __extend_last_switch(struct intel_guc *guc, u64 *prev_start, u32 new_start)
static void __get_engine_usage_record(struct intel_engine_cs *engine,
u32 *last_in, u32 *id, u32 *total)
{
STUB();
#ifdef notyet
struct iosys_map rec_map = intel_guc_engine_usage_record_map(engine);
int i = 0;
@ -1229,7 +1227,6 @@ static void __get_engine_usage_record(struct intel_engine_cs *engine,
record_read(&rec_map, total_runtime) == *total)
break;
} while (++i < 6);
#endif
}
static void guc_update_engine_gt_clks(struct intel_engine_cs *engine)
@ -2068,9 +2065,6 @@ static void guc_submit_request(struct i915_request *rq)
static int new_guc_id(struct intel_guc *guc, struct intel_context *ce)
{
STUB();
return -ENOSYS;
#ifdef notyet
int ret;
GEM_BUG_ON(intel_context_is_child(ce));
@ -2094,13 +2088,10 @@ static int new_guc_id(struct intel_guc *guc, struct intel_context *ce)
ce->guc_id.id = ret;
return 0;
#endif
}
static void __release_guc_id(struct intel_guc *guc, struct intel_context *ce)
{
STUB();
#ifdef notyet
GEM_BUG_ON(intel_context_is_child(ce));
if (!context_guc_id_invalid(ce)) {
@ -2119,7 +2110,6 @@ static void __release_guc_id(struct intel_guc *guc, struct intel_context *ce)
}
if (!list_empty(&ce->guc_id.link))
list_del_init(&ce->guc_id.link);
#endif
}
static void release_guc_id(struct intel_guc *guc, struct intel_context *ce)

View File

@ -35,6 +35,15 @@ iosys_map_memcpy_to(struct iosys_map *ism, size_t off, const void *src,
memcpy(ism->vaddr + off, src, len);
}
static inline void
iosys_map_memset(struct iosys_map *ism, size_t off, int c, size_t len)
{
if (ism->is_iomem)
memset_io(ism->vaddr_iomem + off, c, len);
else
memset(ism->vaddr + off, c, len);
}
static inline bool
iosys_map_is_null(const struct iosys_map *ism)
{
@ -78,4 +87,53 @@ iosys_map_set_vaddr(struct iosys_map *ism, void *addr)
ism->is_iomem = false;
}
static inline struct iosys_map
IOSYS_MAP_INIT_OFFSET(struct iosys_map *ism, size_t off)
{
struct iosys_map nism = *ism;
iosys_map_incr(&nism, off);
return nism;
}
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112
#define iosys_map_rd(_ism, _o, _t) ({ \
_t v; \
if ((_ism)->is_iomem) { \
void *addr = (_ism)->vaddr_iomem + (_o); \
v = _Generic(v, \
uint8_t : ioread8(addr), \
uint16_t: ioread16(addr), \
uint32_t: ioread32(addr), \
uint64_t: ioread64(addr)); \
} else \
v = READ_ONCE(*(_t *)((_ism)->vaddr + (_o))); \
v; \
})
#define iosys_map_wr(_ism, _o, _t, _v) ({ \
_t v = (_v); \
if ((_ism)->is_iomem) { \
void *addr = (_ism)->vaddr_iomem + (_o); \
_Generic(v, \
uint8_t : iowrite8(v, addr), \
uint16_t: iowrite16(v, addr), \
uint32_t: iowrite32(v, addr), \
uint64_t: iowrite64(v, addr)); \
} else \
WRITE_ONCE(*(_t *)((_ism)->vaddr + (_o)), v); \
})
#define iosys_map_rd_field(_ism, _o, _t, _f) ({ \
_t *t; \
iosys_map_rd(_ism, _o + offsetof(_t, _f), __typeof(t->_f)); \
})
#define iosys_map_wr_field(_ism, _o, _t, _f, _v) ({ \
_t *t; \
iosys_map_wr(_ism, _o + offsetof(_t, _f), __typeof(t->_f), _v); \
})
#endif /* C11 */
#endif

View File

@ -1,4 +1,4 @@
/* $OpenBSD: sdhc_pci.c,v 1.24 2022/03/11 18:00:51 mpi Exp $ */
/* $OpenBSD: sdhc_pci.c,v 1.25 2024/03/28 23:38:54 jsg Exp $ */
/*
* Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
@ -131,7 +131,8 @@ sdhc_pci_attach(struct device *parent, struct device *self, void *aux)
(PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_100SERIES_LP_EMMC ||
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_APOLLOLAKE_EMMC ||
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_GLK_EMMC ||
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_JSL_EMMC))
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_JSL_EMMC ||
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_ADL_N_EMMC))
sc->sc.sc_flags |= SDHC_F_NOPWR0;
/* Some RICOH controllers need to be bumped into the right mode. */

View File

@ -1,4 +1,4 @@
/* $OpenBSD: main.c,v 1.263 2023/09/04 13:08:11 schwarze Exp $ */
/* $OpenBSD: main.c,v 1.265 2024/03/29 01:16:30 millert Exp $ */
/*
* Copyright (c) 2010-2012, 2014-2021 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>