s4:heimdal: import lorikeet-heimdal-202201172009 (commit 5a0b45cd723628b3690ea848548b...
[samba.git] / source4 / heimdal / lib / krb5 / crypto-des.c
index f6f1c6881c915dc7accc344b02fdb96ae0c495d5..c5692954c48a1d530a99744e29883870f62430f8 100644 (file)
@@ -65,7 +65,7 @@ krb5_DES_random_to_key(krb5_context context,
     memcpy(k, data, key->keyvalue.length);
     DES_set_odd_parity(k);
     if(DES_is_weak_key(k))
-       _krb5_xor(k, (const unsigned char*)"\0\0\0\0\0\0\0\xf0");
+       _krb5_xor8(*k, (const unsigned char*)"\0\0\0\0\0\0\0\xf0");
 }
 
 static struct _krb5_key_type keytype_des_old = {
@@ -98,16 +98,24 @@ static struct _krb5_key_type keytype_des = {
 
 static krb5_error_code
 CRC32_checksum(krb5_context context,
+              krb5_crypto crypto,
               struct _krb5_key_data *key,
-              const void *data,
-              size_t len,
               unsigned usage,
+              const struct krb5_crypto_iov *iov,
+              int niov,
               Checksum *C)
 {
-    uint32_t crc;
+    uint32_t crc = 0;
     unsigned char *r = C->checksum.data;
+    int i;
+
     _krb5_crc_init_table ();
-    crc = _krb5_crc_update (data, len, 0);
+
+    for (i = 0; i < niov; i++) {
+       if (_krb5_crypto_iov_should_sign(&iov[i]))
+           crc = _krb5_crc_update(iov[i].data.data, iov[i].data.length, crc);
+    }
+
     r[0] = crc & 0xff;
     r[1] = (crc >> 8)  & 0xff;
     r[2] = (crc >> 16) & 0xff;
@@ -117,59 +125,65 @@ CRC32_checksum(krb5_context context,
 
 static krb5_error_code
 RSA_MD4_checksum(krb5_context context,
+                krb5_crypto crypto,
                 struct _krb5_key_data *key,
-                const void *data,
-                size_t len,
                 unsigned usage,
+                const struct krb5_crypto_iov *iov,
+                int niov,
                 Checksum *C)
 {
-    if (EVP_Digest(data, len, C->checksum.data, NULL, EVP_md4(), NULL) != 1)
+    if (_krb5_evp_digest_iov(crypto, iov, niov, C->checksum.data,
+                            NULL, EVP_md4(), NULL) != 1)
        krb5_abortx(context, "md4 checksum failed");
     return 0;
 }
 
 static krb5_error_code
 RSA_MD4_DES_checksum(krb5_context context,
+                    krb5_crypto crypto,
                     struct _krb5_key_data *key,
-                    const void *data,
-                    size_t len,
                     unsigned usage,
+                    const struct krb5_crypto_iov *iov,
+                    int niov,
                     Checksum *cksum)
 {
-    return _krb5_des_checksum(context, EVP_md4(), key, data, len, cksum);
+    return _krb5_des_checksum(context, EVP_md4(), key, iov, niov, cksum);
 }
 
 static krb5_error_code
 RSA_MD4_DES_verify(krb5_context context,
+                  krb5_crypto crypto,
                   struct _krb5_key_data *key,
-                  const void *data,
-                  size_t len,
                   unsigned usage,
+                   const struct krb5_crypto_iov *iov,
+                   int niov,
                   Checksum *C)
 {
-    return _krb5_des_verify(context, EVP_md4(), key, data, len, C);
+    return _krb5_des_verify(context, EVP_md4(), key, iov, niov, C);
 }
 
 static krb5_error_code
 RSA_MD5_DES_checksum(krb5_context context,
+                    krb5_crypto crypto,
                     struct _krb5_key_data *key,
-                    const void *data,
-                    size_t len,
                     unsigned usage,
+                    const struct krb5_crypto_iov *iov,
+                    int niov,
                     Checksum *C)
 {
-    return _krb5_des_checksum(context, EVP_md5(), key, data, len, C);
+    return _krb5_des_checksum(context, EVP_md5(), key, iov, niov, C);
 }
 
 static krb5_error_code
 RSA_MD5_DES_verify(krb5_context context,
+                  krb5_crypto crypto,
                   struct _krb5_key_data *key,
-                  const void *data,
-                  size_t len,
                   unsigned usage,
+                   const struct krb5_crypto_iov *iov,
+                   int niov,
                   Checksum *C)
 {
-    return _krb5_des_verify(context, EVP_md5(), key, data, len, C);
+    return _krb5_des_verify(context, EVP_md5(), key, iov, niov, C);
 }
 
 struct _krb5_checksum_type _krb5_checksum_crc32 = {
@@ -288,14 +302,16 @@ DES_PCBC_encrypt_key_ivec(krb5_context context,
 struct _krb5_encryption_type _krb5_enctype_des_cbc_crc = {
     ETYPE_DES_CBC_CRC,
     "des-cbc-crc",
+    NULL,
     8,
     8,
     8,
     &keytype_des,
     &_krb5_checksum_crc32,
     NULL,
-    F_DISABLED|F_WEAK,
+    F_DISABLED|F_WEAK|F_OLD,
     evp_des_encrypt_key_ivec,
+    NULL,
     0,
     NULL
 };
@@ -303,14 +319,16 @@ struct _krb5_encryption_type _krb5_enctype_des_cbc_crc = {
 struct _krb5_encryption_type _krb5_enctype_des_cbc_md4 = {
     ETYPE_DES_CBC_MD4,
     "des-cbc-md4",
+    NULL,
     8,
     8,
     8,
     &keytype_des,
     &_krb5_checksum_rsa_md4,
     &_krb5_checksum_rsa_md4_des,
-    F_DISABLED|F_WEAK,
+    F_DISABLED|F_WEAK|F_OLD,
     evp_des_encrypt_null_ivec,
+    NULL,
     0,
     NULL
 };
@@ -318,14 +336,16 @@ struct _krb5_encryption_type _krb5_enctype_des_cbc_md4 = {
 struct _krb5_encryption_type _krb5_enctype_des_cbc_md5 = {
     ETYPE_DES_CBC_MD5,
     "des-cbc-md5",
+    NULL,
     8,
     8,
     8,
     &keytype_des,
     &_krb5_checksum_rsa_md5,
     &_krb5_checksum_rsa_md5_des,
-    F_DISABLED|F_WEAK,
+    F_DISABLED|F_WEAK|F_OLD,
     evp_des_encrypt_null_ivec,
+    NULL,
     0,
     NULL
 };
@@ -333,14 +353,16 @@ struct _krb5_encryption_type _krb5_enctype_des_cbc_md5 = {
 struct _krb5_encryption_type _krb5_enctype_des_cbc_none = {
     ETYPE_DES_CBC_NONE,
     "des-cbc-none",
+    NULL,
     8,
     8,
     0,
     &keytype_des,
     &_krb5_checksum_none,
     NULL,
-    F_PSEUDO|F_DISABLED|F_WEAK,
+    F_PSEUDO|F_DISABLED|F_WEAK|F_OLD,
     evp_des_encrypt_null_ivec,
+    NULL,
     0,
     NULL
 };
@@ -348,14 +370,16 @@ struct _krb5_encryption_type _krb5_enctype_des_cbc_none = {
 struct _krb5_encryption_type _krb5_enctype_des_cfb64_none = {
     ETYPE_DES_CFB64_NONE,
     "des-cfb64-none",
+    NULL,
     1,
     1,
     0,
     &keytype_des_old,
     &_krb5_checksum_none,
     NULL,
-    F_PSEUDO|F_DISABLED|F_WEAK,
+    F_PSEUDO|F_DISABLED|F_WEAK|F_OLD,
     DES_CFB64_encrypt_null_ivec,
+    NULL,
     0,
     NULL
 };
@@ -363,14 +387,16 @@ struct _krb5_encryption_type _krb5_enctype_des_cfb64_none = {
 struct _krb5_encryption_type _krb5_enctype_des_pcbc_none = {
     ETYPE_DES_PCBC_NONE,
     "des-pcbc-none",
+    NULL,
     8,
     8,
     0,
     &keytype_des_old,
     &_krb5_checksum_none,
     NULL,
-    F_PSEUDO|F_DISABLED|F_WEAK,
+    F_PSEUDO|F_DISABLED|F_WEAK|F_OLD,
     DES_PCBC_encrypt_key_ivec,
+    NULL,
     0,
     NULL
 };