Module Name: src
Committed By: christos
Date: Thu Jun 1 20:40:19 UTC 2023
Modified Files:
src/crypto/external/bsd/heimdal/dist/include: crypto-headers.h
src/crypto/external/bsd/heimdal/dist/kdc: digest.c
src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5: arcfour.c
get_mic.c unwrap.c verify_mic.c wrap.c
src/crypto/external/bsd/heimdal/dist/lib/hcrypto: example_evp_cipher.c
src/crypto/external/bsd/heimdal/dist/lib/hx509: ks_file.c
src/crypto/external/bsd/heimdal/dist/lib/krb5: crypto-aes-sha1.c
crypto-arcfour.c crypto-des-common.c crypto-des.c crypto-des3.c
crypto-evp.c
src/crypto/external/bsd/heimdal/dist/lib/ntlm: ntlm.c
Log Message:
Add checks to EVP_CipherInit_ex() where they were missing and add a cheesy
define to get the RC4 cipher from the legacy provider, since the legacy
provider is not loaded by default now.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
src/crypto/external/bsd/heimdal/dist/include/crypto-headers.h
cvs rdiff -u -r1.3 -r1.4 src/crypto/external/bsd/heimdal/dist/kdc/digest.c
cvs rdiff -u -r1.4 -r1.5 \
src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/arcfour.c \
src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/get_mic.c
cvs rdiff -u -r1.3 -r1.4 \
src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/unwrap.c \
src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/wrap.c
cvs rdiff -u -r1.5 -r1.6 \
src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/verify_mic.c
cvs rdiff -u -r1.2 -r1.3 \
src/crypto/external/bsd/heimdal/dist/lib/hcrypto/example_evp_cipher.c
cvs rdiff -u -r1.4 -r1.5 \
src/crypto/external/bsd/heimdal/dist/lib/hx509/ks_file.c
cvs rdiff -u -r1.3 -r1.4 \
src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-aes-sha1.c \
src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des.c \
src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-evp.c
cvs rdiff -u -r1.4 -r1.5 \
src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-arcfour.c \
src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des-common.c
cvs rdiff -u -r1.5 -r1.6 \
src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des3.c
cvs rdiff -u -r1.3 -r1.4 src/crypto/external/bsd/heimdal/dist/lib/ntlm/ntlm.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/crypto/external/bsd/heimdal/dist/include/crypto-headers.h
diff -u src/crypto/external/bsd/heimdal/dist/include/crypto-headers.h:1.3 src/crypto/external/bsd/heimdal/dist/include/crypto-headers.h:1.4
--- src/crypto/external/bsd/heimdal/dist/include/crypto-headers.h:1.3 Mon Feb 5 11:00:52 2018
+++ src/crypto/external/bsd/heimdal/dist/include/crypto-headers.h Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: crypto-headers.h,v 1.3 2018/02/05 16:00:52 christos Exp $ */
+/* $NetBSD: crypto-headers.h,v 1.4 2023/06/01 20:40:18 christos Exp $ */
#ifndef __crypto_header__
#define __crypto_header__
@@ -33,6 +33,9 @@
# define BN_set_negative(bn, flag) ((bn)->neg=(flag)?1:0)
# define BN_is_negative(bn) ((bn)->neg != 0)
# endif
+#if OPENSSL_VERSION_NUMBER >= 0x30000000UL
+# define EVP_rc4() EVP_CIPHER_fetch(NULL, "rc4", "provider=legacy")
+#endif
#endif
#else /* !HAVE_HCRYPTO_W_OPENSSL */
Index: src/crypto/external/bsd/heimdal/dist/kdc/digest.c
diff -u src/crypto/external/bsd/heimdal/dist/kdc/digest.c:1.3 src/crypto/external/bsd/heimdal/dist/kdc/digest.c:1.4
--- src/crypto/external/bsd/heimdal/dist/kdc/digest.c:1.3 Mon Feb 5 11:00:52 2018
+++ src/crypto/external/bsd/heimdal/dist/kdc/digest.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: digest.c,v 1.3 2018/02/05 16:00:52 christos Exp $ */
+/* $NetBSD: digest.c,v 1.4 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan
@@ -1368,7 +1368,9 @@ _kdc_do_digest(krb5_context context,
#else
rc4 = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(rc4, EVP_rc4(), NULL, sessionkey, NULL, 1);
+ if (!EVP_CipherInit_ex(rc4, EVP_rc4(), NULL, sessionkey, NULL, 1))
+ krb5_set_error_message(context, EINVAL,
+ "RC4 cipher not supported");
EVP_Cipher(rc4,
masterkey, ireq.u.ntlmRequest.sessionkey->data,
sizeof(masterkey));
Index: src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/arcfour.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/arcfour.c:1.4 src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/arcfour.c:1.5
--- src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/arcfour.c:1.4 Sun Dec 15 17:50:47 2019
+++ src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/arcfour.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: arcfour.c,v 1.4 2019/12/15 22:50:47 christos Exp $ */
+/* $NetBSD: arcfour.c,v 1.5 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 2003 - 2006 Kungliga Tekniska Högskolan
@@ -308,7 +308,11 @@ _gssapi_get_mic_arcfour(OM_uint32 * mino
#else
rc4_key = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1);
+ if (!EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
+
EVP_Cipher(rc4_key, p, p, 8);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(rc4_key);
@@ -393,7 +397,11 @@ _gssapi_verify_mic_arcfour(OM_uint32 * m
rc4_key = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, (void *)k6_data, NULL, 0);
+ if (!EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, (void *)k6_data, NULL,
+ 0)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(rc4_key, SND_SEQ, p, 8);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(rc4_key);
@@ -557,7 +565,10 @@ _gssapi_wrap_arcfour(OM_uint32 * minor_s
#endif
EVP_CIPHER_CTX_init(rc4_key);
- EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1);
+ if (!EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(rc4_key, p0 + 24, p0 + 24, 8 + datalen);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(rc4_key);
@@ -586,7 +597,10 @@ _gssapi_wrap_arcfour(OM_uint32 * minor_s
rc4_key = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1);
+ if (!EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(rc4_key, p0 + 8, p0 + 8 /* SND_SEQ */, 8);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(rc4_key);
@@ -696,7 +710,10 @@ OM_uint32 _gssapi_unwrap_arcfour(OM_uint
rc4_key = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1);
+ if (!EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(rc4_key, SND_SEQ, p0 + 8, 8);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(rc4_key);
@@ -753,7 +770,10 @@ OM_uint32 _gssapi_unwrap_arcfour(OM_uint
#else
rc4_key = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1);
+ if (!EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(rc4_key, Confounder, p0 + 24, 8);
EVP_Cipher(rc4_key, output_message_buffer->value, p0 + GSS_ARCFOUR_WRAP_TOKEN_SIZE, datalen);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
@@ -1147,7 +1167,10 @@ _gssapi_wrap_iov_arcfour(OM_uint32 *mino
#else
rc4_key = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1);
+ if (!EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
/* Confounder */
EVP_Cipher(rc4_key, p0 + 24, p0 + 24, 8);
@@ -1197,7 +1220,10 @@ _gssapi_wrap_iov_arcfour(OM_uint32 *mino
#else
rc4_key = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1);
+ if (!EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(rc4_key, p0 + 8, p0 + 8, 8); /* SND_SEQ */
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(rc4_key);
@@ -1344,7 +1370,10 @@ _gssapi_unwrap_iov_arcfour(OM_uint32 *mi
#endif
EVP_CIPHER_CTX_init(rc4_key);
- EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1);
+ if (!EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(rc4_key, snd_seq, p0 + 8, 8); /* SND_SEQ */
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(rc4_key);
@@ -1407,7 +1436,10 @@ _gssapi_unwrap_iov_arcfour(OM_uint32 *mi
rc4_key = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1);
+ if (!EVP_CipherInit_ex(rc4_key, EVP_rc4(), NULL, k6_data, NULL, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
/* Confounder */
EVP_Cipher(rc4_key, Confounder, p0 + 24, 8);
Index: src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/get_mic.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/get_mic.c:1.4 src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/get_mic.c:1.5
--- src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/get_mic.c:1.4 Sun Dec 15 17:50:47 2019
+++ src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/get_mic.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: get_mic.c,v 1.4 2019/12/15 22:50:47 christos Exp $ */
+/* $NetBSD: get_mic.c,v 1.5 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 1997 - 2003 Kungliga Tekniska Högskolan
@@ -122,7 +122,11 @@ mic_des
des_ctx = EVP_CIPHER_CTX_new();
#endif
EVP_CIPHER_CTX_init(des_ctx);
- EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, key->keyvalue.data, p + 8, 1);
+ if (!EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, key->keyvalue.data,
+ p + 8, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(des_ctx, p, p, 8);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(des_ctx);
Index: src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/unwrap.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/unwrap.c:1.3 src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/unwrap.c:1.4
--- src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/unwrap.c:1.3 Mon Feb 5 11:00:52 2018
+++ src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/unwrap.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: unwrap.c,v 1.3 2018/02/05 16:00:52 christos Exp $ */
+/* $NetBSD: unwrap.c,v 1.4 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 1997 - 2004 Kungliga Tekniska Högskolan
@@ -113,7 +113,10 @@ unwrap_des
#else
des_ctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, deskey, zero, 0);
+ if (!EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, deskey, zero, 0)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(des_ctx, p, p, input_message_buffer->length - len);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(des_ctx);
@@ -163,7 +166,11 @@ unwrap_des
#else
des_ctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, key->keyvalue.data, hash, 0);
+ if (!EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, key->keyvalue.data, hash,
+ 0)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(des_ctx, p, p, 8);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(des_ctx);
Index: src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/wrap.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/wrap.c:1.3 src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/wrap.c:1.4
--- src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/wrap.c:1.3 Mon Feb 5 11:00:52 2018
+++ src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/wrap.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: wrap.c,v 1.3 2018/02/05 16:00:52 christos Exp $ */
+/* $NetBSD: wrap.c,v 1.4 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 1997 - 2003 Kungliga Tekniska Högskolan
@@ -308,7 +308,11 @@ wrap_des
#else
des_ctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, key->keyvalue.data, p + 8, 1);
+ if (!EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, key->keyvalue.data,
+ p + 8, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(des_ctx, p, p, 8);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(des_ctx);
@@ -337,7 +341,10 @@ wrap_des
#else
des_ctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, deskey, zero, 1);
+ if (!EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, deskey, zero, 1)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(des_ctx, p, p, datalen);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(des_ctx);
Index: src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/verify_mic.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/verify_mic.c:1.5 src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/verify_mic.c:1.6
--- src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/verify_mic.c:1.5 Sun Dec 15 17:50:47 2019
+++ src/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/verify_mic.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: verify_mic.c,v 1.5 2019/12/15 22:50:47 christos Exp $ */
+/* $NetBSD: verify_mic.c,v 1.6 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 1997 - 2003 Kungliga Tekniska Högskolan
@@ -109,7 +109,11 @@ verify_mic_des
#else
des_ctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, key->keyvalue.data, hash, 0);
+ if (!EVP_CipherInit_ex(des_ctx, EVP_des_cbc(), NULL, key->keyvalue.data,
+ hash, 0)) {
+ *minor_status = EINVAL;
+ return GSS_S_FAILURE;
+ }
EVP_Cipher(des_ctx, p, p, 8);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(des_ctx);
Index: src/crypto/external/bsd/heimdal/dist/lib/hcrypto/example_evp_cipher.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/hcrypto/example_evp_cipher.c:1.2 src/crypto/external/bsd/heimdal/dist/lib/hcrypto/example_evp_cipher.c:1.3
--- src/crypto/external/bsd/heimdal/dist/lib/hcrypto/example_evp_cipher.c:1.2 Sat Jan 28 16:31:47 2017
+++ src/crypto/external/bsd/heimdal/dist/lib/hcrypto/example_evp_cipher.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: example_evp_cipher.c,v 1.2 2017/01/28 21:31:47 christos Exp $ */
+/* $NetBSD: example_evp_cipher.c,v 1.3 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 2008 Kungliga Tekniska Högskolan
@@ -137,7 +137,8 @@ main(int argc, char **argv)
* ivec.
*/
EVP_CIPHER_CTX_init(&ctx);
- EVP_CipherInit_ex(&ctx, c, NULL, key, ivec, encryptp);
+ if (!EVP_CipherInit_ex(&ctx, c, NULL, key, ivec, encryptp))
+ errx(1, "EVP_CipherInit_ex failed");
/* read in buffer */
while ((ilen = fread(ibuf, 1, block_size, in)) > 0) {
Index: src/crypto/external/bsd/heimdal/dist/lib/hx509/ks_file.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/hx509/ks_file.c:1.4 src/crypto/external/bsd/heimdal/dist/lib/hx509/ks_file.c:1.5
--- src/crypto/external/bsd/heimdal/dist/lib/hx509/ks_file.c:1.4 Sun Dec 15 17:50:50 2019
+++ src/crypto/external/bsd/heimdal/dist/lib/hx509/ks_file.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ks_file.c,v 1.4 2019/12/15 22:50:50 christos Exp $ */
+/* $NetBSD: ks_file.c,v 1.5 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 2005 - 2007 Kungliga Tekniska Högskolan
@@ -122,7 +122,12 @@ try_decrypt(hx509_context context,
#else
ctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(ctx, c, NULL, key, ivdata, 0);
+ if (!EVP_CipherInit_ex(ctx, c, NULL, key, ivdata, 0)) {
+ hx509_set_error_string(context, 0, EINVAL,
+ "Cannot initialize cipher");
+ ret = EINVAL;
+ goto out;
+ }
EVP_Cipher(ctx, clear.data, cipher, len);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(ctx);
Index: src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-aes-sha1.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-aes-sha1.c:1.3 src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-aes-sha1.c:1.4
--- src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-aes-sha1.c:1.3 Mon Feb 5 11:00:53 2018
+++ src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-aes-sha1.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: crypto-aes-sha1.c,v 1.3 2018/02/05 16:00:53 christos Exp $ */
+/* $NetBSD: crypto-aes-sha1.c,v 1.4 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 1997 - 2008 Kungliga Tekniska Högskolan
@@ -134,9 +134,12 @@ AES_SHA1_PRF(krb5_context context,
#else
ctx = EVP_CIPHER_CTX_new(); /* ivec all zero */
#endif
- EVP_CipherInit_ex(ctx, c, NULL, derived->keyvalue.data, NULL, 1);
- EVP_Cipher(ctx, out->data, result.checksum.data,
- crypto->et->blocksize);
+ if (EVP_CipherInit_ex(ctx, c, NULL, derived->keyvalue.data, NULL, 1)) {
+ EVP_Cipher(ctx, out->data, result.checksum.data,
+ crypto->et->blocksize);
+ ret = EINVAL;
+ krb5_set_error_message(context, ret, "Cannot initialize cipher");
+ }
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(ctx);
#else
Index: src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des.c:1.3 src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des.c:1.4
--- src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des.c:1.3 Mon Feb 5 11:00:53 2018
+++ src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: crypto-des.c,v 1.3 2018/02/05 16:00:53 christos Exp $ */
+/* $NetBSD: crypto-des.c,v 1.4 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 1997 - 2008 Kungliga Tekniska Högskolan
@@ -228,7 +228,8 @@ evp_des_encrypt_null_ivec(krb5_context c
DES_cblock ivec;
memset(&ivec, 0, sizeof(ivec));
c = encryptp ? ctx->ectx : ctx->dctx;
- EVP_CipherInit_ex(c, NULL, NULL, NULL, (void *)&ivec, -1);
+ if (!EVP_CipherInit_ex(c, NULL, NULL, NULL, (void *)&ivec, -1))
+ krb5_abortx(context, "can't initialize cipher");
EVP_Cipher(c, data, data, len);
return 0;
}
@@ -247,7 +248,8 @@ evp_des_encrypt_key_ivec(krb5_context co
DES_cblock ivec;
memcpy(&ivec, key->key->keyvalue.data, sizeof(ivec));
c = encryptp ? ctx->ectx : ctx->dctx;
- EVP_CipherInit_ex(c, NULL, NULL, NULL, (void *)&ivec, -1);
+ if (!EVP_CipherInit_ex(c, NULL, NULL, NULL, (void *)&ivec, -1))
+ krb5_abortx(context, "can't initialize cipher");
EVP_Cipher(c, data, data, len);
return 0;
}
Index: src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-evp.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-evp.c:1.3 src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-evp.c:1.4
--- src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-evp.c:1.3 Mon Feb 5 11:00:53 2018
+++ src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-evp.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: crypto-evp.c,v 1.3 2018/02/05 16:00:53 christos Exp $ */
+/* $NetBSD: crypto-evp.c,v 1.4 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 1997 - 2008 Kungliga Tekniska Högskolan
@@ -53,8 +53,10 @@ _krb5_evp_schedule(krb5_context context,
key->dctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(key->ectx, c, NULL, kd->key->keyvalue.data, NULL, 1);
- EVP_CipherInit_ex(key->dctx, c, NULL, kd->key->keyvalue.data, NULL, 0);
+ if (!EVP_CipherInit_ex(key->ectx, c, NULL, kd->key->keyvalue.data, NULL, 1))
+ krb5_abortx(context, "can't initialize cipher");
+ if (!EVP_CipherInit_ex(key->dctx, c, NULL, kd->key->keyvalue.data, NULL, 0))
+ krb5_abortx(context, "can't initialize cipher");
}
void
@@ -91,10 +93,12 @@ _krb5_evp_encrypt(krb5_context context,
if (loiv == NULL)
return krb5_enomem(context);
memset(loiv, 0, len2);
- EVP_CipherInit_ex(c, NULL, NULL, NULL, loiv, -1);
+ if (!EVP_CipherInit_ex(c, NULL, NULL, NULL, loiv, -1))
+ krb5_abortx(context, "can't initialize cipher");
free(loiv);
- } else
- EVP_CipherInit_ex(c, NULL, NULL, NULL, ivec, -1);
+ } else if (!EVP_CipherInit_ex(c, NULL, NULL, NULL, ivec, -1))
+ krb5_abortx(context, "can't initialize cipher");
+
EVP_Cipher(c, data, data, len);
return 0;
}
@@ -111,6 +115,7 @@ _krb5_evp_encrypt_cts(krb5_context conte
void *ivec)
{
size_t i, blocksize;
+ int ret;
struct _krb5_evp_schedule *ctx = key->schedule->data;
unsigned char tmp[EVP_MAX_BLOCK_LENGTH], ivec2[EVP_MAX_BLOCK_LENGTH];
EVP_CIPHER_CTX *c;
@@ -125,15 +130,18 @@ _krb5_evp_encrypt_cts(krb5_context conte
"message block too short");
return EINVAL;
} else if (len == blocksize) {
- EVP_CipherInit_ex(c, NULL, NULL, NULL, zero_ivec, -1);
+ if (!EVP_CipherInit_ex(c, NULL, NULL, NULL, zero_ivec, -1))
+ krb5_abortx(context, "can't initialize cipher");
EVP_Cipher(c, data, data, len);
return 0;
}
if (ivec)
- EVP_CipherInit_ex(c, NULL, NULL, NULL, ivec, -1);
+ ret = EVP_CipherInit_ex(c, NULL, NULL, NULL, ivec, -1);
else
- EVP_CipherInit_ex(c, NULL, NULL, NULL, zero_ivec, -1);
+ ret = EVP_CipherInit_ex(c, NULL, NULL, NULL, zero_ivec, -1);
+ if (!ret)
+ krb5_abortx(context, "can't initialize cipher");
if (encryptp) {
@@ -149,7 +157,8 @@ _krb5_evp_encrypt_cts(krb5_context conte
for (; i < blocksize; i++)
tmp[i] = 0 ^ ivec2[i];
- EVP_CipherInit_ex(c, NULL, NULL, NULL, zero_ivec, -1);
+ if (!EVP_CipherInit_ex(c, NULL, NULL, NULL, zero_ivec, -1))
+ krb5_abortx(context, "can't initialize cipher");
EVP_Cipher(c, p, tmp, blocksize);
memcpy(p + blocksize, ivec2, len);
@@ -175,7 +184,8 @@ _krb5_evp_encrypt_cts(krb5_context conte
}
memcpy(tmp, p, blocksize);
- EVP_CipherInit_ex(c, NULL, NULL, NULL, zero_ivec, -1);
+ if (!EVP_CipherInit_ex(c, NULL, NULL, NULL, zero_ivec, -1))
+ krb5_abortx(context, "can't initialize cipher");
EVP_Cipher(c, tmp2, p, blocksize);
memcpy(tmp3, p + blocksize, len);
@@ -184,7 +194,8 @@ _krb5_evp_encrypt_cts(krb5_context conte
for (i = 0; i < len; i++)
p[i + blocksize] = tmp2[i] ^ tmp3[i];
- EVP_CipherInit_ex(c, NULL, NULL, NULL, zero_ivec, -1);
+ if (!EVP_CipherInit_ex(c, NULL, NULL, NULL, zero_ivec, -1))
+ krb5_abortx(context, "can't initialize cipher");
EVP_Cipher(c, p, tmp3, blocksize);
for (i = 0; i < blocksize; i++)
Index: src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-arcfour.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-arcfour.c:1.4 src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-arcfour.c:1.5
--- src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-arcfour.c:1.4 Sun Dec 15 17:50:50 2019
+++ src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-arcfour.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: crypto-arcfour.c,v 1.4 2019/12/15 22:50:50 christos Exp $ */
+/* $NetBSD: crypto-arcfour.c,v 1.5 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 1997 - 2008 Kungliga Tekniska Högskolan
@@ -184,7 +184,8 @@ ARCFOUR_subencrypt(krb5_context context,
ctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(ctx, EVP_rc4(), NULL, k3_c.checksum.data, NULL, 1);
+ if (!EVP_CipherInit_ex(ctx, EVP_rc4(), NULL, k3_c.checksum.data, NULL, 1))
+ krb5_abortx(context, "rc4 cipher not supported");
EVP_Cipher(ctx, cdata + 16, cdata + 16, len - 16);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(ctx);
@@ -251,7 +252,8 @@ ARCFOUR_subdecrypt(krb5_context context,
#else
ctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(ctx, EVP_rc4(), NULL, k3_c.checksum.data, NULL, 0);
+ if (!EVP_CipherInit_ex(ctx, EVP_rc4(), NULL, k3_c.checksum.data, NULL, 0))
+ krb5_abortx(context, "rc4 cipher not supported");
EVP_Cipher(ctx, cdata + 16, cdata + 16, len - 16);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(ctx);
Index: src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des-common.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des-common.c:1.4 src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des-common.c:1.5
--- src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des-common.c:1.4 Sun Dec 15 17:50:50 2019
+++ src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des-common.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: crypto-des-common.c,v 1.4 2019/12/15 22:50:50 christos Exp $ */
+/* $NetBSD: crypto-des-common.c,v 1.5 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 1997 - 2008 Kungliga Tekniska Högskolan
@@ -88,7 +88,8 @@ _krb5_des_checksum(krb5_context context,
ctx->ectx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(ctx->ectx, NULL, NULL, NULL, (void *)&ivec, -1);
+ if (!EVP_CipherInit_ex(ctx->ectx, NULL, NULL, NULL, (void *)&ivec, -1))
+ krb5_abortx(context, "can't initialize cipher");
EVP_Cipher(ctx->ectx, p, p, 24);
return 0;
@@ -120,7 +121,8 @@ _krb5_des_verify(krb5_context context,
#else
ctx->dctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(ctx->dctx, NULL, NULL, NULL, (void *)&ivec, -1);
+ if (!EVP_CipherInit_ex(ctx->dctx, NULL, NULL, NULL, (void *)&ivec, -1))
+ krb5_abortx(context, "can't initialize cipher");
EVP_Cipher(ctx->dctx, tmp, C->checksum.data, 24);
EVP_DigestInit_ex(m, evp_md, NULL);
Index: src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des3.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des3.c:1.5 src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des3.c:1.6
--- src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des3.c:1.5 Mon Feb 5 11:00:53 2018
+++ src/crypto/external/bsd/heimdal/dist/lib/krb5/crypto-des3.c Thu Jun 1 16:40:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: crypto-des3.c,v 1.5 2018/02/05 16:00:53 christos Exp $ */
+/* $NetBSD: crypto-des3.c,v 1.6 2023/06/01 20:40:18 christos Exp $ */
/*
* Copyright (c) 1997 - 2008 Kungliga Tekniska Högskolan
@@ -101,7 +101,8 @@ DES3_prf(krb5_context context,
#else
ctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(ctx, c, NULL, derived->keyvalue.data, NULL, 1);
+ if (!EVP_CipherInit_ex(ctx, c, NULL, derived->keyvalue.data, NULL, 1))
+ krb5_abortx(context, "can't initialize cipher");
EVP_Cipher(ctx, out->data, result.checksum.data,
crypto->et->prf_length);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
Index: src/crypto/external/bsd/heimdal/dist/lib/ntlm/ntlm.c
diff -u src/crypto/external/bsd/heimdal/dist/lib/ntlm/ntlm.c:1.3 src/crypto/external/bsd/heimdal/dist/lib/ntlm/ntlm.c:1.4
--- src/crypto/external/bsd/heimdal/dist/lib/ntlm/ntlm.c:1.3 Sun Dec 15 17:50:51 2019
+++ src/crypto/external/bsd/heimdal/dist/lib/ntlm/ntlm.c Thu Jun 1 16:40:19 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ntlm.c,v 1.3 2019/12/15 22:50:51 christos Exp $ */
+/* $NetBSD: ntlm.c,v 1.4 2023/06/01 20:40:19 christos Exp $ */
/*
* Copyright (c) 2006 - 2008 Kungliga Tekniska Högskolan
@@ -1197,7 +1197,8 @@ splitandenc(unsigned char *hash,
ctx = EVP_CIPHER_CTX_new();
#endif
- EVP_CipherInit_ex(ctx, EVP_des_cbc(), NULL, key, NULL, 1);
+ if (!EVP_CipherInit_ex(ctx, EVP_des_cbc(), NULL, key, NULL, 1))
+ abort();
EVP_Cipher(ctx, answer, challenge, 8);
#if OPENSSL_VERSION_NUMBER < 0x10100000UL
EVP_CIPHER_CTX_cleanup(ctx);