Add krb5_allow_weak_crypto API to enable weak enctypes
Add krb5_allow_weak_crypto parallel to the API introduced in MIT Kerberos 1.8. Enables or disables all enctypes marked as weak. Add a new enctype flag marking weak enctypes (all of the ones that are disabled by default). Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
This commit is contained in:

committed by
Love Hornquist Astrand

parent
560fc640bb
commit
8a57d5cb08
@@ -67,6 +67,7 @@ struct krb5_crypto_data {
|
|||||||
#define F_PSEUDO 16 /* not a real protocol type */
|
#define F_PSEUDO 16 /* not a real protocol type */
|
||||||
#define F_SPECIAL 32 /* backwards */
|
#define F_SPECIAL 32 /* backwards */
|
||||||
#define F_DISABLED 64 /* enctype/checksum disabled */
|
#define F_DISABLED 64 /* enctype/checksum disabled */
|
||||||
|
#define F_WEAK 128 /* enctype is considered weak */
|
||||||
|
|
||||||
struct salt_type {
|
struct salt_type {
|
||||||
krb5_salttype type;
|
krb5_salttype type;
|
||||||
@@ -2612,7 +2613,7 @@ static struct encryption_type enctype_des_cbc_crc = {
|
|||||||
&keytype_des,
|
&keytype_des,
|
||||||
&checksum_crc32,
|
&checksum_crc32,
|
||||||
NULL,
|
NULL,
|
||||||
F_DISABLED,
|
F_DISABLED|F_WEAK,
|
||||||
evp_des_encrypt_key_ivec,
|
evp_des_encrypt_key_ivec,
|
||||||
0,
|
0,
|
||||||
NULL
|
NULL
|
||||||
@@ -2626,7 +2627,7 @@ static struct encryption_type enctype_des_cbc_md4 = {
|
|||||||
&keytype_des,
|
&keytype_des,
|
||||||
&checksum_rsa_md4,
|
&checksum_rsa_md4,
|
||||||
&checksum_rsa_md4_des,
|
&checksum_rsa_md4_des,
|
||||||
F_DISABLED,
|
F_DISABLED|F_WEAK,
|
||||||
evp_des_encrypt_null_ivec,
|
evp_des_encrypt_null_ivec,
|
||||||
0,
|
0,
|
||||||
NULL
|
NULL
|
||||||
@@ -2640,7 +2641,7 @@ static struct encryption_type enctype_des_cbc_md5 = {
|
|||||||
&keytype_des,
|
&keytype_des,
|
||||||
&checksum_rsa_md5,
|
&checksum_rsa_md5,
|
||||||
&checksum_rsa_md5_des,
|
&checksum_rsa_md5_des,
|
||||||
F_DISABLED,
|
F_DISABLED|F_WEAK,
|
||||||
evp_des_encrypt_null_ivec,
|
evp_des_encrypt_null_ivec,
|
||||||
0,
|
0,
|
||||||
NULL
|
NULL
|
||||||
@@ -2654,7 +2655,7 @@ static struct encryption_type enctype_des_cbc_none = {
|
|||||||
&keytype_des,
|
&keytype_des,
|
||||||
&checksum_none,
|
&checksum_none,
|
||||||
NULL,
|
NULL,
|
||||||
F_PSEUDO|F_DISABLED,
|
F_PSEUDO|F_DISABLED|F_WEAK,
|
||||||
evp_des_encrypt_null_ivec,
|
evp_des_encrypt_null_ivec,
|
||||||
0,
|
0,
|
||||||
NULL
|
NULL
|
||||||
@@ -2668,7 +2669,7 @@ static struct encryption_type enctype_des_cfb64_none = {
|
|||||||
&keytype_des_old,
|
&keytype_des_old,
|
||||||
&checksum_none,
|
&checksum_none,
|
||||||
NULL,
|
NULL,
|
||||||
F_PSEUDO|F_DISABLED,
|
F_PSEUDO|F_DISABLED|F_WEAK,
|
||||||
DES_CFB64_encrypt_null_ivec,
|
DES_CFB64_encrypt_null_ivec,
|
||||||
0,
|
0,
|
||||||
NULL
|
NULL
|
||||||
@@ -2682,7 +2683,7 @@ static struct encryption_type enctype_des_pcbc_none = {
|
|||||||
&keytype_des_old,
|
&keytype_des_old,
|
||||||
&checksum_none,
|
&checksum_none,
|
||||||
NULL,
|
NULL,
|
||||||
F_PSEUDO|F_DISABLED,
|
F_PSEUDO|F_DISABLED|F_WEAK,
|
||||||
DES_PCBC_encrypt_key_ivec,
|
DES_PCBC_encrypt_key_ivec,
|
||||||
0,
|
0,
|
||||||
NULL
|
NULL
|
||||||
@@ -4402,6 +4403,33 @@ krb5_enctype_enable(krb5_context context,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable or disable all weak encryption types
|
||||||
|
*
|
||||||
|
* @param context Kerberos 5 context
|
||||||
|
* @param enable true to enable, false to disable
|
||||||
|
*
|
||||||
|
* @return Return an error code or 0.
|
||||||
|
*
|
||||||
|
* @ingroup krb5_crypto
|
||||||
|
*/
|
||||||
|
|
||||||
|
KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
|
||||||
|
krb5_allow_weak_crypto(krb5_context context,
|
||||||
|
krb5_boolean enable)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i = 0; i < num_etypes; i++)
|
||||||
|
if(etypes[i]->flags & F_WEAK) {
|
||||||
|
if(enable)
|
||||||
|
etypes[i]->flags &= ~F_DISABLED;
|
||||||
|
else
|
||||||
|
etypes[i]->flags |= F_DISABLED;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
|
KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
|
||||||
krb5_string_to_key_derived(krb5_context context,
|
krb5_string_to_key_derived(krb5_context context,
|
||||||
|
@@ -21,6 +21,7 @@ EXPORTS
|
|||||||
krb5_address_order
|
krb5_address_order
|
||||||
krb5_address_prefixlen_boundary
|
krb5_address_prefixlen_boundary
|
||||||
krb5_address_search
|
krb5_address_search
|
||||||
|
krb5_allow_weak_crypto
|
||||||
krb5_aname_to_localname
|
krb5_aname_to_localname
|
||||||
krb5_anyaddr
|
krb5_anyaddr
|
||||||
krb5_appdefault_boolean
|
krb5_appdefault_boolean
|
||||||
|
@@ -20,6 +20,7 @@ HEIMDAL_KRB5_2.0 {
|
|||||||
krb5_address_order;
|
krb5_address_order;
|
||||||
krb5_address_prefixlen_boundary;
|
krb5_address_prefixlen_boundary;
|
||||||
krb5_address_search;
|
krb5_address_search;
|
||||||
|
krb5_allow_weak_crypto;
|
||||||
krb5_aname_to_localname;
|
krb5_aname_to_localname;
|
||||||
krb5_anyaddr;
|
krb5_anyaddr;
|
||||||
krb5_appdefault_boolean;
|
krb5_appdefault_boolean;
|
||||||
|
Reference in New Issue
Block a user