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);