You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6206 lines
245 KiB
6206 lines
245 KiB
From 1f992f9a857346b8837fd12d8c90f7b2cafb9613 Mon Sep 17 00:00:00 2001
|
|
From: Robbie Harwood <rharwood@redhat.com>
|
|
Date: Tue, 26 Mar 2019 18:51:10 -0400
|
|
Subject: [PATCH] [downstream] Remove 3des support
|
|
|
|
Completely remove support for all DES3 enctypes (des3-cbc-raw,
|
|
des3-hmac-sha1, des3-cbc-sha1-kd). Update all tests and documentation
|
|
to user other enctypes. Mark the 3DES enctypes UNSUPPORTED and retain
|
|
their constants.
|
|
|
|
Last-updated: 1.21.1-final
|
|
[antorres@redhat.com: remove diffs for:
|
|
- src/kdamin/testing/proto/kdc.conf.proto
|
|
- src/lib/kadm5/unit-test/api.current/chpass-principal-v2.exp
|
|
- src/lib/kadm5/unit-test/api.current/get-principal-v2.exp
|
|
- src/lib/kadm5/unit-test/api.current/randkey-principal-v2.exp
|
|
since they were removed by Remove-TCL-based-libkadm5-API-tests.patch]
|
|
[jrische@redhat.com: restore supportedCMSTypes (not using 3DES any more):
|
|
- src/plugins/preauth/pkinit/pkinit_crypto.h
|
|
- src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
|
|
- src/plugins/preauth/pkinit/pkinit_clnt.c]
|
|
---
|
|
doc/admin/advanced/retiring-des.rst | 11 +
|
|
doc/admin/conf_files/kdc_conf.rst | 7 +-
|
|
doc/admin/enctypes.rst | 10 +-
|
|
doc/admin/troubleshoot.rst | 9 +-
|
|
doc/appdev/refs/macros/index.rst | 1 -
|
|
doc/conf.py | 2 +-
|
|
doc/mitK5features.rst | 2 +-
|
|
src/Makefile.in | 4 +-
|
|
src/configure.ac | 4 +-
|
|
src/include/krb5/krb5.hin | 10 +-
|
|
src/kdc/kdc_util.c | 4 -
|
|
src/lib/crypto/Makefile.in | 8 +-
|
|
src/lib/crypto/builtin/Makefile.in | 4 +-
|
|
src/lib/crypto/builtin/des/ISSUES | 13 -
|
|
src/lib/crypto/builtin/des/Makefile.in | 82 ----
|
|
src/lib/crypto/builtin/des/d3_aead.c | 137 ------
|
|
src/lib/crypto/builtin/des/d3_kysched.c | 55 ---
|
|
src/lib/crypto/builtin/des/deps | 146 -------
|
|
src/lib/crypto/builtin/des/des_int.h | 285 -------------
|
|
src/lib/crypto/builtin/des/des_keys.c | 38 --
|
|
src/lib/crypto/builtin/des/destest.c | 240 -----------
|
|
src/lib/crypto/builtin/des/doc/libdes.doc | 208 ---------
|
|
src/lib/crypto/builtin/des/f_aead.c | 177 --------
|
|
src/lib/crypto/builtin/des/f_cbc.c | 256 ------------
|
|
src/lib/crypto/builtin/des/f_cksum.c | 141 -------
|
|
src/lib/crypto/builtin/des/f_parity.c | 64 ---
|
|
src/lib/crypto/builtin/des/f_sched.c | 363 ----------------
|
|
src/lib/crypto/builtin/des/f_tables.c | 375 -----------------
|
|
src/lib/crypto/builtin/des/f_tables.h | 285 -------------
|
|
src/lib/crypto/builtin/des/key_sched.c | 66 ---
|
|
src/lib/crypto/builtin/des/keytest.data | 171 --------
|
|
src/lib/crypto/builtin/des/t_verify.c | 395 ------------------
|
|
src/lib/crypto/builtin/des/weak_key.c | 90 ----
|
|
.../crypto/builtin/enc_provider/Makefile.in | 5 +-
|
|
src/lib/crypto/builtin/enc_provider/deps | 11 -
|
|
src/lib/crypto/builtin/enc_provider/des3.c | 109 -----
|
|
src/lib/crypto/crypto_tests/t_cf2.expected | 1 -
|
|
src/lib/crypto/crypto_tests/t_cf2.in | 5 -
|
|
src/lib/crypto/crypto_tests/t_cksums.c | 10 -
|
|
src/lib/crypto/crypto_tests/t_decrypt.c | 57 ---
|
|
src/lib/crypto/crypto_tests/t_derive.c | 36 --
|
|
src/lib/crypto/crypto_tests/t_encrypt.c | 1 -
|
|
src/lib/crypto/crypto_tests/t_short.c | 1 -
|
|
src/lib/crypto/crypto_tests/t_str2key.c | 52 ---
|
|
src/lib/crypto/crypto_tests/vectors.c | 4 -
|
|
src/lib/crypto/krb/Makefile.in | 3 -
|
|
src/lib/crypto/krb/cksumtypes.c | 6 -
|
|
src/lib/crypto/krb/crypto_int.h | 11 -
|
|
src/lib/crypto/krb/default_state.c | 10 -
|
|
src/lib/crypto/krb/enctype_util.c | 3 +
|
|
src/lib/crypto/krb/etypes.c | 21 -
|
|
src/lib/crypto/krb/prf_des.c | 47 ---
|
|
src/lib/crypto/krb/random_to_key.c | 28 --
|
|
src/lib/crypto/libk5crypto.exports | 1 -
|
|
src/lib/crypto/openssl/Makefile.in | 4 +-
|
|
src/lib/crypto/openssl/des/Makefile.in | 20 -
|
|
src/lib/crypto/openssl/des/deps | 14 -
|
|
src/lib/crypto/openssl/des/des_keys.c | 39 --
|
|
.../crypto/openssl/enc_provider/Makefile.in | 3 -
|
|
src/lib/crypto/openssl/enc_provider/deps | 11 -
|
|
src/lib/crypto/openssl/enc_provider/des3.c | 188 ---------
|
|
src/lib/crypto/openssl/kdf.c | 2 -
|
|
src/lib/gssapi/krb5/accept_sec_context.c | 1 -
|
|
src/lib/gssapi/krb5/gssapiP_krb5.h | 6 +-
|
|
src/lib/gssapi/krb5/k5seal.c | 35 +-
|
|
src/lib/gssapi/krb5/k5sealiov.c | 27 +-
|
|
src/lib/gssapi/krb5/k5unseal.c | 88 ++--
|
|
src/lib/gssapi/krb5/k5unsealiov.c | 38 +-
|
|
src/lib/gssapi/krb5/util_crypt.c | 11 -
|
|
src/lib/krb5/krb/init_ctx.c | 3 -
|
|
src/lib/krb5/krb/s4u_creds.c | 2 -
|
|
src/lib/krb5/krb/t_etypes.c | 48 +--
|
|
src/lib/krb5/os/t_trace.c | 4 +-
|
|
src/lib/krb5/os/t_trace.ref | 2 +-
|
|
src/plugins/preauth/pkinit/pkcs11.h | 6 +-
|
|
src/plugins/preauth/pkinit/pkinit_crypto.h | 10 +-
|
|
src/plugins/preauth/pkinit/pkinit_kdf_test.c | 30 --
|
|
src/plugins/preauth/spake/t_vectors.c | 25 --
|
|
src/tests/gssapi/t_enctypes.py | 33 +-
|
|
src/tests/gssapi/t_invalid.c | 12 -
|
|
src/tests/gssapi/t_pcontok.c | 16 +-
|
|
src/tests/gssapi/t_prf.c | 7 -
|
|
src/tests/t_authdata.py | 2 +-
|
|
src/tests/t_etype_info.py | 21 +-
|
|
src/tests/t_keyrollover.py | 8 +-
|
|
src/tests/t_mkey.py | 35 --
|
|
src/tests/t_salt.py | 5 +-
|
|
src/util/k5test.py | 7 -
|
|
.../leash/htmlhelp/html/Encryption_Types.htm | 13 -
|
|
89 files changed, 149 insertions(+), 4712 deletions(-)
|
|
delete mode 100644 src/lib/crypto/builtin/des/ISSUES
|
|
delete mode 100644 src/lib/crypto/builtin/des/Makefile.in
|
|
delete mode 100644 src/lib/crypto/builtin/des/d3_aead.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/d3_kysched.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/deps
|
|
delete mode 100644 src/lib/crypto/builtin/des/des_int.h
|
|
delete mode 100644 src/lib/crypto/builtin/des/des_keys.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/destest.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/doc/libdes.doc
|
|
delete mode 100644 src/lib/crypto/builtin/des/f_aead.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/f_cbc.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/f_cksum.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/f_parity.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/f_sched.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/f_tables.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/f_tables.h
|
|
delete mode 100644 src/lib/crypto/builtin/des/key_sched.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/keytest.data
|
|
delete mode 100644 src/lib/crypto/builtin/des/t_verify.c
|
|
delete mode 100644 src/lib/crypto/builtin/des/weak_key.c
|
|
delete mode 100644 src/lib/crypto/builtin/enc_provider/des3.c
|
|
delete mode 100644 src/lib/crypto/krb/prf_des.c
|
|
delete mode 100644 src/lib/crypto/openssl/des/Makefile.in
|
|
delete mode 100644 src/lib/crypto/openssl/des/deps
|
|
delete mode 100644 src/lib/crypto/openssl/des/des_keys.c
|
|
delete mode 100644 src/lib/crypto/openssl/enc_provider/des3.c
|
|
|
|
diff --git a/doc/admin/advanced/retiring-des.rst b/doc/admin/advanced/retiring-des.rst
|
|
index 38f76d3f45..d5e3c30c04 100644
|
|
--- a/doc/admin/advanced/retiring-des.rst
|
|
+++ b/doc/admin/advanced/retiring-des.rst
|
|
@@ -10,6 +10,13 @@ ability have rendered DES vulnerable to brute force attacks on its 56-bit
|
|
keyspace. As such, it is now considered insecure and should not be
|
|
used (:rfc:`6649`).
|
|
|
|
+In 1999, MIT krb5 added support for Triple-DES (3DES) encryption types.
|
|
+However, due to weakenings of DES and other security concerns, it is now also
|
|
+considered insecure and should not be used (:rfc:`8429`). AES encryption
|
|
+types were added to MIT in 2003, meaning that the number of deployments with
|
|
+3DES as the strongest encryption type is hopefully small. The rotation
|
|
+procedure described herein works for both DES and 3DES.
|
|
+
|
|
History
|
|
-------
|
|
|
|
@@ -27,6 +34,10 @@ and removed DES (single-DES) support in release 1.18. As a
|
|
consequence, a release prior to 1.18 is required to perform these
|
|
migrations.
|
|
|
|
+3DES (a flagged deprecated encryption type) was also removed downstream by
|
|
+rharwood@redhat.com starting in 1.18; likewise, a pre-1.18 release is required
|
|
+to perform these migrations.
|
|
+
|
|
Types of keys
|
|
-------------
|
|
|
|
diff --git a/doc/admin/conf_files/kdc_conf.rst b/doc/admin/conf_files/kdc_conf.rst
|
|
index 74a0a2acef..846c58ed82 100644
|
|
--- a/doc/admin/conf_files/kdc_conf.rst
|
|
+++ b/doc/admin/conf_files/kdc_conf.rst
|
|
@@ -854,8 +854,6 @@ Encryption types marked as "weak" and "deprecated" are available for
|
|
compatibility but not recommended for use.
|
|
|
|
==================================================== =========================================================
|
|
-des3-cbc-raw Triple DES cbc mode raw (weak)
|
|
-des3-cbc-sha1 des3-hmac-sha1 des3-cbc-sha1-kd Triple DES cbc mode with HMAC/sha1 (deprecated)
|
|
aes256-cts-hmac-sha1-96 aes256-cts aes256-sha1 AES-256 CTS mode with 96-bit SHA-1 HMAC
|
|
aes128-cts-hmac-sha1-96 aes128-cts aes128-sha1 AES-128 CTS mode with 96-bit SHA-1 HMAC
|
|
aes256-cts-hmac-sha384-192 aes256-sha2 AES-256 CTS mode with 192-bit SHA-384 HMAC
|
|
@@ -864,7 +862,6 @@ arcfour-hmac rc4-hmac arcfour-hmac-md5 RC4 with HMAC/MD5 (deprecat
|
|
arcfour-hmac-exp rc4-hmac-exp arcfour-hmac-md5-exp Exportable RC4 with HMAC/MD5 (weak)
|
|
camellia256-cts-cmac camellia256-cts Camellia-256 CTS mode with CMAC
|
|
camellia128-cts-cmac camellia128-cts Camellia-128 CTS mode with CMAC
|
|
-des3 The triple DES family: des3-cbc-sha1
|
|
aes The AES family: aes256-cts-hmac-sha1-96, aes128-cts-hmac-sha1-96, aes256-cts-hmac-sha384-192, and aes128-cts-hmac-sha256-128
|
|
rc4 The RC4 family: arcfour-hmac
|
|
camellia The Camellia family: camellia256-cts-cmac and camellia128-cts-cmac
|
|
@@ -876,8 +873,8 @@ from the current list by prefixing them with a minus sign ("-").
|
|
Types or families can be prefixed with a plus sign ("+") for symmetry;
|
|
it has the same meaning as just listing the type or family. For
|
|
example, "``DEFAULT -rc4``" would be the default set of encryption
|
|
-types with RC4 types removed, and "``des3 DEFAULT``" would be the
|
|
-default set of encryption types with triple DES types moved to the
|
|
+types with RC4 types removed, and "``aes128-sha2 DEFAULT``" would be
|
|
+the default set of encryption types with aes128-sha2 moved to the
|
|
front.
|
|
|
|
While **aes128-cts** and **aes256-cts** are supported for all Kerberos
|
|
diff --git a/doc/admin/enctypes.rst b/doc/admin/enctypes.rst
|
|
index 694922c0d9..c4d5499d3b 100644
|
|
--- a/doc/admin/enctypes.rst
|
|
+++ b/doc/admin/enctypes.rst
|
|
@@ -129,7 +129,7 @@ enctype weak? krb5 Windows
|
|
des-cbc-crc weak <1.18 >=2000
|
|
des-cbc-md4 weak <1.18 ?
|
|
des-cbc-md5 weak <1.18 >=2000
|
|
-des3-cbc-sha1 deprecated >=1.1 none
|
|
+des3-cbc-sha1 deprecated <1.18 none
|
|
arcfour-hmac deprecated >=1.3 >=2000
|
|
arcfour-hmac-exp weak >=1.3 >=2000
|
|
aes128-cts-hmac-sha1-96 >=1.3 >=Vista
|
|
@@ -148,9 +148,11 @@ default.
|
|
krb5 releases 1.17 and later flag deprecated encryption types
|
|
(including ``des3-cbc-sha1`` and ``arcfour-hmac``) in KDC logs and
|
|
kadmin output. krb5 release 1.19 issues a warning during initial
|
|
-authentication if ``des3-cbc-sha1`` is used. Future releases will
|
|
-disable ``des3-cbc-sha1`` by default and eventually remove support for
|
|
-it.
|
|
+authentication if ``des3-cbc-sha1`` is used.
|
|
+
|
|
+krb5 releases 1.18 and later remove single-DES and 3DES
|
|
+(downstream-only patch) enctype support. Microsoft Windows never
|
|
+supported 3DES.
|
|
|
|
|
|
Migrating away from older encryption types
|
|
diff --git a/doc/admin/troubleshoot.rst b/doc/admin/troubleshoot.rst
|
|
index ade5e1f87a..e4dc54f7e5 100644
|
|
--- a/doc/admin/troubleshoot.rst
|
|
+++ b/doc/admin/troubleshoot.rst
|
|
@@ -73,11 +73,10 @@ credential verification failed: KDC has no support for encryption type
|
|
......................................................................
|
|
|
|
This most commonly happens when trying to use a principal with only
|
|
-DES keys, in a release (MIT krb5 1.7 or later) which disables DES by
|
|
-default. DES encryption is considered weak due to its inadequate key
|
|
-size. If you cannot migrate away from its use, you can re-enable DES
|
|
-by adding ``allow_weak_crypto = true`` to the :ref:`libdefaults`
|
|
-section of :ref:`krb5.conf(5)`.
|
|
+DES/3DES keys, in a release (MIT krb5 1.7 or later) which disables DES
|
|
+by default. DES encryption is considered weak due to its inadequate
|
|
+key size and has been removed upstream; 3DES is not recommended, and
|
|
+has been removed downstream by rharwood@redhat.com.
|
|
|
|
|
|
.. _err_cert_chain_cert_expired:
|
|
diff --git a/doc/appdev/refs/macros/index.rst b/doc/appdev/refs/macros/index.rst
|
|
index 45fe160d7f..b4b1f3bd93 100644
|
|
--- a/doc/appdev/refs/macros/index.rst
|
|
+++ b/doc/appdev/refs/macros/index.rst
|
|
@@ -36,7 +36,6 @@ Public
|
|
CKSUMTYPE_HMAC_SHA1_96_AES256.rst
|
|
CKSUMTYPE_HMAC_SHA256_128_AES128.rst
|
|
CKSUMTYPE_HMAC_SHA384_192_AES256.rst
|
|
- CKSUMTYPE_HMAC_SHA1_DES3.rst
|
|
CKSUMTYPE_MD5_HMAC_ARCFOUR.rst
|
|
CKSUMTYPE_NIST_SHA.rst
|
|
CKSUMTYPE_RSA_MD4.rst
|
|
diff --git a/doc/conf.py b/doc/conf.py
|
|
index cd76f5999f..1e1cfce80c 100644
|
|
--- a/doc/conf.py
|
|
+++ b/doc/conf.py
|
|
@@ -281,7 +281,7 @@ else:
|
|
rst_epilog += '''
|
|
.. |krb5conf| replace:: ``/etc/krb5.conf``
|
|
.. |defkeysalts| replace:: ``aes256-cts-hmac-sha1-96:normal aes128-cts-hmac-sha1-96:normal``
|
|
-.. |defetypes| replace:: ``aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha384-192 aes128-cts-hmac-sha256-128 des3-cbc-sha1 arcfour-hmac-md5 camellia256-cts-cmac camellia128-cts-cmac``
|
|
+.. |defetypes| replace:: ``aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha384-192 aes128-cts-hmac-sha256-128 arcfour-hmac-md5 camellia256-cts-cmac camellia128-cts-cmac``
|
|
.. |defmkey| replace:: ``aes256-cts-hmac-sha1-96``
|
|
.. |copy| unicode:: U+000A9
|
|
'''
|
|
diff --git a/doc/mitK5features.rst b/doc/mitK5features.rst
|
|
index 10effcf175..cad0855724 100644
|
|
--- a/doc/mitK5features.rst
|
|
+++ b/doc/mitK5features.rst
|
|
@@ -37,7 +37,7 @@ Database backends: LDAP, DB2, LMDB
|
|
|
|
krb4 support: Kerberos 5 release < 1.8
|
|
|
|
-DES support: Kerberos 5 release < 1.18 (See :ref:`retiring-des`)
|
|
+DES/3DES support: Kerberos 5 release < 1.18 (See :ref:`retiring-des`)
|
|
|
|
Interoperability
|
|
----------------
|
|
diff --git a/src/Makefile.in b/src/Makefile.in
|
|
index 8f14e9bf2c..ba3bb18eec 100644
|
|
--- a/src/Makefile.in
|
|
+++ b/src/Makefile.in
|
|
@@ -130,7 +130,7 @@ WINMAKEFILES=Makefile \
|
|
lib\Makefile lib\crypto\Makefile lib\crypto\krb\Makefile \
|
|
lib\crypto\builtin\Makefile lib\crypto\builtin\aes\Makefile \
|
|
lib\crypto\builtin\enc_provider\Makefile \
|
|
- lib\crypto\builtin\des\Makefile lib\crypto\builtin\md5\Makefile \
|
|
+ lib\crypto\builtin\md5\Makefile \
|
|
lib\crypto\builtin\camellia\Makefile lib\crypto\builtin\md4\Makefile \
|
|
lib\crypto\builtin\hash_provider\Makefile \
|
|
lib\crypto\builtin\sha2\Makefile lib\crypto\builtin\sha1\Makefile \
|
|
@@ -202,8 +202,6 @@ WINMAKEFILES=Makefile \
|
|
##DOS## $(WCONFIG) config < $@.in > $@
|
|
##DOS##lib\crypto\builtin\enc_provider\Makefile: lib\crypto\builtin\enc_provider\Makefile.in $(MKFDEP)
|
|
##DOS## $(WCONFIG) config < $@.in > $@
|
|
-##DOS##lib\crypto\builtin\des\Makefile: lib\crypto\builtin\des\Makefile.in $(MKFDEP)
|
|
-##DOS## $(WCONFIG) config < $@.in > $@
|
|
##DOS##lib\crypto\builtin\md5\Makefile: lib\crypto\builtin\md5\Makefile.in $(MKFDEP)
|
|
##DOS## $(WCONFIG) config < $@.in > $@
|
|
##DOS##lib\crypto\builtin\camellia\Makefile: lib\crypto\builtin\camellia\Makefile.in $(MKFDEP)
|
|
diff --git a/src/configure.ac b/src/configure.ac
|
|
index 69be9030f8..2561e917a2 100644
|
|
--- a/src/configure.ac
|
|
+++ b/src/configure.ac
|
|
@@ -1513,12 +1513,12 @@ V5_AC_OUTPUT_MAKEFILE(.
|
|
lib lib/kdb
|
|
|
|
lib/crypto lib/crypto/krb lib/crypto/crypto_tests
|
|
- lib/crypto/builtin lib/crypto/builtin/des
|
|
+ lib/crypto/builtin
|
|
lib/crypto/builtin/aes lib/crypto/builtin/camellia
|
|
lib/crypto/builtin/md4 lib/crypto/builtin/md5
|
|
lib/crypto/builtin/sha1 lib/crypto/builtin/sha2
|
|
lib/crypto/builtin/enc_provider lib/crypto/builtin/hash_provider
|
|
- lib/crypto/openssl lib/crypto/openssl/des
|
|
+ lib/crypto/openssl
|
|
lib/crypto/openssl/enc_provider lib/crypto/openssl/hash_provider
|
|
|
|
lib/krb5 lib/krb5/error_tables lib/krb5/asn.1 lib/krb5/ccache
|
|
diff --git a/src/include/krb5/krb5.hin b/src/include/krb5/krb5.hin
|
|
index dd6430ece8..350bcf86f2 100644
|
|
--- a/src/include/krb5/krb5.hin
|
|
+++ b/src/include/krb5/krb5.hin
|
|
@@ -426,8 +426,8 @@ typedef struct _krb5_crypto_iov {
|
|
#define ENCTYPE_DES_CBC_MD4 0x0002 /**< @deprecated no longer supported */
|
|
#define ENCTYPE_DES_CBC_MD5 0x0003 /**< @deprecated no longer supported */
|
|
#define ENCTYPE_DES_CBC_RAW 0x0004 /**< @deprecated no longer supported */
|
|
-#define ENCTYPE_DES3_CBC_SHA 0x0005 /**< @deprecated DES-3 cbc with SHA1 */
|
|
-#define ENCTYPE_DES3_CBC_RAW 0x0006 /**< @deprecated DES-3 cbc mode raw */
|
|
+#define ENCTYPE_DES3_CBC_SHA 0x0005 /**< @deprecated no longer supported */
|
|
+#define ENCTYPE_DES3_CBC_RAW 0x0006 /**< @deprecated no longer supported */
|
|
#define ENCTYPE_DES_HMAC_SHA1 0x0008 /**< @deprecated no longer supported */
|
|
/* PKINIT */
|
|
#define ENCTYPE_DSA_SHA1_CMS 0x0009 /**< DSA with SHA1, CMS signature */
|
|
@@ -436,9 +436,9 @@ typedef struct _krb5_crypto_iov {
|
|
#define ENCTYPE_RC2_CBC_ENV 0x000c /**< RC2 cbc mode, CMS enveloped data */
|
|
#define ENCTYPE_RSA_ENV 0x000d /**< RSA encryption, CMS enveloped data */
|
|
#define ENCTYPE_RSA_ES_OAEP_ENV 0x000e /**< RSA w/OEAP encryption, CMS enveloped data */
|
|
-#define ENCTYPE_DES3_CBC_ENV 0x000f /**< DES-3 cbc mode, CMS enveloped data */
|
|
+#define ENCTYPE_DES3_CBC_ENV 0x000f /**< @deprecated no longer supported */
|
|
|
|
-#define ENCTYPE_DES3_CBC_SHA1 0x0010
|
|
+#define ENCTYPE_DES3_CBC_SHA1 0x0010 /**< @deprecated removed */
|
|
#define ENCTYPE_AES128_CTS_HMAC_SHA1_96 0x0011 /**< RFC 3962 */
|
|
#define ENCTYPE_AES256_CTS_HMAC_SHA1_96 0x0012 /**< RFC 3962 */
|
|
#define ENCTYPE_AES128_CTS_HMAC_SHA256_128 0x0013 /**< RFC 8009 */
|
|
@@ -463,7 +463,7 @@ typedef struct _krb5_crypto_iov {
|
|
#define CKSUMTYPE_RSA_MD5 0x0007
|
|
#define CKSUMTYPE_RSA_MD5_DES 0x0008
|
|
#define CKSUMTYPE_NIST_SHA 0x0009
|
|
-#define CKSUMTYPE_HMAC_SHA1_DES3 0x000c
|
|
+#define CKSUMTYPE_HMAC_SHA1_DES3 0x000c /* @deprecated removed */
|
|
#define CKSUMTYPE_SHA1 0x000e /**< RFC 3961 */
|
|
#define CKSUMTYPE_HMAC_SHA1_96_AES128 0x000f /**< RFC 3962. Used with
|
|
ENCTYPE_AES128_CTS_HMAC_SHA1_96 */
|
|
diff --git a/src/kdc/kdc_util.c b/src/kdc/kdc_util.c
|
|
index 75e04b73db..fe4e48209a 100644
|
|
--- a/src/kdc/kdc_util.c
|
|
+++ b/src/kdc/kdc_util.c
|
|
@@ -1154,8 +1154,6 @@ enctype_name(krb5_enctype ktype, char *buf, size_t buflen)
|
|
name = "rsaEncryption-EnvOID";
|
|
else if (ktype == ENCTYPE_RSA_ES_OAEP_ENV)
|
|
name = "id-RSAES-OAEP-EnvOID";
|
|
- else if (ktype == ENCTYPE_DES3_CBC_ENV)
|
|
- name = "des-ede3-cbc-EnvOID";
|
|
else
|
|
return krb5_enctype_to_name(ktype, FALSE, buf, buflen);
|
|
|
|
@@ -1647,8 +1645,6 @@ krb5_boolean
|
|
enctype_requires_etype_info_2(krb5_enctype enctype)
|
|
{
|
|
switch(enctype) {
|
|
- case ENCTYPE_DES3_CBC_SHA1:
|
|
- case ENCTYPE_DES3_CBC_RAW:
|
|
case ENCTYPE_ARCFOUR_HMAC:
|
|
case ENCTYPE_ARCFOUR_HMAC_EXP :
|
|
return 0;
|
|
diff --git a/src/lib/crypto/Makefile.in b/src/lib/crypto/Makefile.in
|
|
index 10e8c74cf8..25c4f40cc3 100644
|
|
--- a/src/lib/crypto/Makefile.in
|
|
+++ b/src/lib/crypto/Makefile.in
|
|
@@ -10,12 +10,12 @@ LIBMINOR=1
|
|
RELDIR=crypto
|
|
|
|
STOBJLISTS=krb/OBJS.ST \
|
|
- builtin/OBJS.ST builtin/des/OBJS.ST \
|
|
+ builtin/OBJS.ST \
|
|
builtin/aes/OBJS.ST builtin/camellia/OBJS.ST \
|
|
builtin/md4/OBJS.ST builtin/md5/OBJS.ST \
|
|
builtin/sha1/OBJS.ST builtin/sha2/OBJS.ST \
|
|
builtin/enc_provider/OBJS.ST builtin/hash_provider/OBJS.ST \
|
|
- openssl/OBJS.ST openssl/des/OBJS.ST \
|
|
+ openssl/OBJS.ST \
|
|
openssl/enc_provider/OBJS.ST openssl/hash_provider/OBJS.ST
|
|
|
|
SUBDIROBJLISTS=$(STOBJLISTS)
|
|
@@ -28,8 +28,8 @@ SHLIB_EXPDEPLIBS= $(SUPPORT_DEPLIB)
|
|
SHLIB_LDFLAGS= $(LDFLAGS) @SHLIB_RPATH_DIRS@
|
|
|
|
##DOS##LIBNAME=$(OUTPRE)crypto.lib
|
|
-##DOS##OBJFILEDEP=$(OUTPRE)krb.lst $(OUTPRE)aes.lst $(OUTPRE)enc_provider.lst $(OUTPRE)des.lst $(OUTPRE)md5.lst $(OUTPRE)camellia.lst $(OUTPRE)md4.lst $(OUTPRE)hash_provider.lst $(OUTPRE)sha2.lst $(OUTPRE)sha1.lst $(OUTPRE)builtin.lst
|
|
-##DOS##OBJFILELIST=@$(OUTPRE)krb.lst @$(OUTPRE)aes.lst @$(OUTPRE)enc_provider.lst @$(OUTPRE)des.lst @$(OUTPRE)md5.lst @$(OUTPRE)camellia.lst @$(OUTPRE)md4.lst @$(OUTPRE)hash_provider.lst @$(OUTPRE)sha2.lst @$(OUTPRE)sha1.lst @$(OUTPRE)builtin.lst
|
|
+##DOS##OBJFILEDEP=$(OUTPRE)krb.lst $(OUTPRE)aes.lst $(OUTPRE)enc_provider.lst $(OUTPRE)md5.lst $(OUTPRE)camellia.lst $(OUTPRE)md4.lst $(OUTPRE)hash_provider.lst $(OUTPRE)sha2.lst $(OUTPRE)sha1.lst $(OUTPRE)builtin.lst
|
|
+##DOS##OBJFILELIST=@$(OUTPRE)krb.lst @$(OUTPRE)aes.lst @$(OUTPRE)enc_provider.lst @$(OUTPRE)md5.lst @$(OUTPRE)camellia.lst @$(OUTPRE)md4.lst @$(OUTPRE)hash_provider.lst @$(OUTPRE)sha2.lst @$(OUTPRE)sha1.lst @$(OUTPRE)builtin.lst
|
|
|
|
all-unix: all-liblinks
|
|
install-unix: install-libs
|
|
diff --git a/src/lib/crypto/builtin/Makefile.in b/src/lib/crypto/builtin/Makefile.in
|
|
index 243bb17ba3..30bfcd30c0 100644
|
|
--- a/src/lib/crypto/builtin/Makefile.in
|
|
+++ b/src/lib/crypto/builtin/Makefile.in
|
|
@@ -1,6 +1,6 @@
|
|
mydir=lib$(S)crypto$(S)builtin
|
|
BUILDTOP=$(REL)..$(S)..$(S)..
|
|
-SUBDIRS=camellia des aes md4 md5 sha1 sha2 enc_provider hash_provider
|
|
+SUBDIRS=camellia aes md4 md5 sha1 sha2 enc_provider hash_provider
|
|
LOCALINCLUDES=-I$(srcdir)/../krb $(CRYPTO_IMPL_CFLAGS)
|
|
|
|
##DOS##BUILDTOP = ..\..\..
|
|
@@ -25,7 +25,7 @@ SRCS=\
|
|
$(srcdir)/kdf.c \
|
|
$(srcdir)/pbkdf2.c
|
|
|
|
-SUBDIROBJLISTS= des/OBJS.ST md4/OBJS.ST \
|
|
+SUBDIROBJLISTS= md4/OBJS.ST \
|
|
md5/OBJS.ST sha1/OBJS.ST sha2/OBJS.ST \
|
|
enc_provider/OBJS.ST \
|
|
hash_provider/OBJS.ST \
|
|
diff --git a/src/lib/crypto/builtin/des/ISSUES b/src/lib/crypto/builtin/des/ISSUES
|
|
deleted file mode 100644
|
|
index 1578911033..0000000000
|
|
--- a/src/lib/crypto/builtin/des/ISSUES
|
|
+++ /dev/null
|
|
@@ -1,13 +0,0 @@
|
|
-Issues to be addressed for src/lib/crypto/des: -*- text -*-
|
|
-
|
|
-
|
|
-"const" could be used in more places
|
|
-
|
|
-
|
|
-Array types are used in calling interfaces. Under ANSI C, a value of
|
|
-type "arraytype *" cannot be assigned to a variable of type "const
|
|
-arraytype *", so we get compilation warnings.
|
|
-
|
|
-Possible fix: Rewrite internal interfaces to not use arrays this way.
|
|
-Provide external routines compatible with old API, but not using
|
|
-const?
|
|
diff --git a/src/lib/crypto/builtin/des/Makefile.in b/src/lib/crypto/builtin/des/Makefile.in
|
|
deleted file mode 100644
|
|
index 397ac87ed4..0000000000
|
|
--- a/src/lib/crypto/builtin/des/Makefile.in
|
|
+++ /dev/null
|
|
@@ -1,82 +0,0 @@
|
|
-mydir=lib$(S)crypto$(S)builtin$(S)des
|
|
-BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
|
|
-LOCALINCLUDES=-I$(srcdir)/../../krb $(CRYPTO_IMPL_CFLAGS)
|
|
-
|
|
-##DOS##BUILDTOP = ..\..\..\..
|
|
-##DOS##PREFIXDIR = builtin\des
|
|
-##DOS##OBJFILE = ..\..\$(OUTPRE)des.lst
|
|
-
|
|
-STLIBOBJS=\
|
|
- d3_aead.o \
|
|
- d3_kysched.o \
|
|
- des_keys.o \
|
|
- f_aead.o \
|
|
- f_cksum.o \
|
|
- f_parity.o \
|
|
- f_sched.o \
|
|
- f_tables.o \
|
|
- key_sched.o \
|
|
- weak_key.o
|
|
-
|
|
-OBJS= $(OUTPRE)d3_aead.$(OBJEXT) \
|
|
- $(OUTPRE)d3_kysched.$(OBJEXT) \
|
|
- $(OUTPRE)des_keys.$(OBJEXT) \
|
|
- $(OUTPRE)f_aead.$(OBJEXT) \
|
|
- $(OUTPRE)f_cksum.$(OBJEXT) \
|
|
- $(OUTPRE)f_parity.$(OBJEXT) \
|
|
- $(OUTPRE)f_sched.$(OBJEXT) \
|
|
- $(OUTPRE)f_tables.$(OBJEXT) \
|
|
- $(OUTPRE)key_sched.$(OBJEXT) \
|
|
- $(OUTPRE)weak_key.$(OBJEXT)
|
|
-
|
|
-SRCS= $(srcdir)/d3_aead.c \
|
|
- $(srcdir)/d3_kysched.c \
|
|
- $(srcdir)/des_keys.c \
|
|
- $(srcdir)/f_aead.c \
|
|
- $(srcdir)/f_cksum.c \
|
|
- $(srcdir)/f_parity.c \
|
|
- $(srcdir)/f_sched.c \
|
|
- $(srcdir)/f_tables.c \
|
|
- $(srcdir)/key_sched.c \
|
|
- $(srcdir)/weak_key.c
|
|
-
|
|
-EXTRADEPSRCS = $(srcdir)/destest.c $(srcdir)/f_cbc.c $(srcdir)/t_verify.c
|
|
-
|
|
-##DOS##LIBOBJS = $(OBJS)
|
|
-
|
|
-TOBJS = $(OUTPRE)key_sched.$(OBJEXT) $(OUTPRE)f_sched.$(OBJEXT) \
|
|
- $(OUTPRE)f_cbc.$(OBJEXT) $(OUTPRE)f_tables.$(OBJEXT) \
|
|
- $(OUTPRE)f_cksum.$(OBJEXT)
|
|
-
|
|
-verify$(EXEEXT): t_verify.$(OBJEXT) $(TOBJS) f_parity.$(OBJEXT) \
|
|
- $(COM_ERR_DEPLIB) $(SUPPORT_DEPLIB)
|
|
- $(CC_LINK) -o $@ t_verify.$(OBJEXT) $(TOBJS) f_parity.$(OBJEXT) \
|
|
- $(COM_ERR_LIB) $(SUPPORT_LIB)
|
|
-
|
|
-destest$(EXEEXT): destest.$(OBJEXT) $(TOBJS) $(SUPPORT_DEPLIB)
|
|
- $(CC_LINK) -o $@ destest.$(OBJEXT) $(TOBJS) $(SUPPORT_LIB)
|
|
-
|
|
-all-unix: all-libobjs
|
|
-
|
|
-check-unix: check-unix-@CRYPTO_BUILTIN_TESTS@
|
|
-check-unix-no:
|
|
-check-unix-yes: verify destest
|
|
- $(RUN_TEST) ./verify -z
|
|
- $(RUN_TEST) ./verify -m
|
|
- $(RUN_TEST) ./verify
|
|
- $(RUN_TEST) ./destest < $(srcdir)/keytest.data
|
|
-
|
|
-includes: depend
|
|
-
|
|
-depend: $(SRCS)
|
|
-
|
|
-check-windows:
|
|
-
|
|
-clean:
|
|
- $(RM) destest.$(OBJEXT) destest$(EXEEXT) verify$(EXEEXT) \
|
|
- t_verify.$(OBJEXT) $(TOBJS)
|
|
-
|
|
-clean-unix:: clean-libobjs
|
|
-
|
|
-@libobj_frag@
|
|
-
|
|
diff --git a/src/lib/crypto/builtin/des/d3_aead.c b/src/lib/crypto/builtin/des/d3_aead.c
|
|
deleted file mode 100644
|
|
index fb83f73b43..0000000000
|
|
--- a/src/lib/crypto/builtin/des/d3_aead.c
|
|
+++ /dev/null
|
|
@@ -1,137 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/*
|
|
- * Copyright (C) 2008 by the Massachusetts Institute of Technology.
|
|
- * Copyright 1995 by Richard P. Basch. All Rights Reserved.
|
|
- * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used
|
|
- * in advertising or publicity pertaining to distribution of the software
|
|
- * without specific, written prior permission. Richard P. Basch,
|
|
- * Lehman Brothers and M.I.T. make no representations about the suitability
|
|
- * of this software for any purpose. It is provided "as is" without
|
|
- * express or implied warranty.
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-#include "f_tables.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES
|
|
-
|
|
-void
|
|
-krb5int_des3_cbc_encrypt(krb5_crypto_iov *data, unsigned long num_data,
|
|
- const mit_des_key_schedule ks1,
|
|
- const mit_des_key_schedule ks2,
|
|
- const mit_des_key_schedule ks3,
|
|
- mit_des_cblock ivec)
|
|
-{
|
|
- unsigned DES_INT32 left, right;
|
|
- const unsigned DES_INT32 *kp1, *kp2, *kp3;
|
|
- const unsigned char *ip;
|
|
- struct iov_cursor cursor;
|
|
- unsigned char block[MIT_DES_BLOCK_LENGTH];
|
|
-
|
|
- /* Get key pointers here. These won't need to be reinitialized. */
|
|
- kp1 = (const unsigned DES_INT32 *)ks1;
|
|
- kp2 = (const unsigned DES_INT32 *)ks2;
|
|
- kp3 = (const unsigned DES_INT32 *)ks3;
|
|
-
|
|
- /* Initialize left and right with the contents of the initial vector. */
|
|
- ip = (ivec != NULL) ? ivec : mit_des_zeroblock;
|
|
- left = load_32_be(ip);
|
|
- right = load_32_be(ip + 4);
|
|
-
|
|
- k5_iov_cursor_init(&cursor, data, num_data, MIT_DES_BLOCK_LENGTH, FALSE);
|
|
- while (k5_iov_cursor_get(&cursor, block)) {
|
|
- /* xor this block with the previous ciphertext. */
|
|
- left ^= load_32_be(block);
|
|
- right ^= load_32_be(block + 4);
|
|
-
|
|
- /* Encrypt what we have and store it back into block. */
|
|
- DES_DO_ENCRYPT(left, right, kp1);
|
|
- DES_DO_DECRYPT(left, right, kp2);
|
|
- DES_DO_ENCRYPT(left, right, kp3);
|
|
- store_32_be(left, block);
|
|
- store_32_be(right, block + 4);
|
|
-
|
|
- k5_iov_cursor_put(&cursor, block);
|
|
- }
|
|
-
|
|
- if (ivec != NULL) {
|
|
- store_32_be(left, ivec);
|
|
- store_32_be(right, ivec + 4);
|
|
- }
|
|
-}
|
|
-
|
|
-void
|
|
-krb5int_des3_cbc_decrypt(krb5_crypto_iov *data, unsigned long num_data,
|
|
- const mit_des_key_schedule ks1,
|
|
- const mit_des_key_schedule ks2,
|
|
- const mit_des_key_schedule ks3,
|
|
- mit_des_cblock ivec)
|
|
-{
|
|
- unsigned DES_INT32 left, right;
|
|
- const unsigned DES_INT32 *kp1, *kp2, *kp3;
|
|
- const unsigned char *ip;
|
|
- unsigned DES_INT32 ocipherl, ocipherr;
|
|
- unsigned DES_INT32 cipherl, cipherr;
|
|
- struct iov_cursor cursor;
|
|
- unsigned char block[MIT_DES_BLOCK_LENGTH];
|
|
-
|
|
- /* Get key pointers here. These won't need to be reinitialized. */
|
|
- kp1 = (const unsigned DES_INT32 *)ks1;
|
|
- kp2 = (const unsigned DES_INT32 *)ks2;
|
|
- kp3 = (const unsigned DES_INT32 *)ks3;
|
|
-
|
|
- /*
|
|
- * Decrypting is harder than encrypting because of
|
|
- * the necessity of remembering a lot more things.
|
|
- * Should think about this a little more...
|
|
- */
|
|
-
|
|
- /* Prime the old cipher with ivec.*/
|
|
- ip = (ivec != NULL) ? ivec : mit_des_zeroblock;
|
|
- ocipherl = load_32_be(ip);
|
|
- ocipherr = load_32_be(ip + 4);
|
|
-
|
|
- k5_iov_cursor_init(&cursor, data, num_data, MIT_DES_BLOCK_LENGTH, FALSE);
|
|
- while (k5_iov_cursor_get(&cursor, block)) {
|
|
- /* Split this block into left and right. */
|
|
- cipherl = left = load_32_be(block);
|
|
- cipherr = right = load_32_be(block + 4);
|
|
-
|
|
- /* Decrypt and xor with the old cipher to get plain text. */
|
|
- DES_DO_DECRYPT(left, right, kp3);
|
|
- DES_DO_ENCRYPT(left, right, kp2);
|
|
- DES_DO_DECRYPT(left, right, kp1);
|
|
- left ^= ocipherl;
|
|
- right ^= ocipherr;
|
|
-
|
|
- /* Store the encrypted halves back into block. */
|
|
- store_32_be(left, block);
|
|
- store_32_be(right, block + 4);
|
|
-
|
|
- /* Save current cipher block halves. */
|
|
- ocipherl = cipherl;
|
|
- ocipherr = cipherr;
|
|
-
|
|
- k5_iov_cursor_put(&cursor, block);
|
|
- }
|
|
-
|
|
- if (ivec != NULL) {
|
|
- store_32_be(ocipherl, ivec);
|
|
- store_32_be(ocipherr, ivec + 4);
|
|
- }
|
|
-}
|
|
-
|
|
-#endif /* K5_BUILTIN_DES */
|
|
diff --git a/src/lib/crypto/builtin/des/d3_kysched.c b/src/lib/crypto/builtin/des/d3_kysched.c
|
|
deleted file mode 100644
|
|
index 55fb9449b5..0000000000
|
|
--- a/src/lib/crypto/builtin/des/d3_kysched.c
|
|
+++ /dev/null
|
|
@@ -1,55 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/*
|
|
- * Copyright 1995 by Richard P. Basch. All Rights Reserved.
|
|
- * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used
|
|
- * in advertising or publicity pertaining to distribution of the software
|
|
- * without specific, written prior permission. Richard P. Basch,
|
|
- * Lehman Brothers and M.I.T. make no representations about the suitability
|
|
- * of this software for any purpose. It is provided "as is" without
|
|
- * express or implied warranty.
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES
|
|
-
|
|
-int
|
|
-mit_des3_key_sched(mit_des3_cblock k, mit_des3_key_schedule schedule)
|
|
-{
|
|
- mit_des_make_key_sched(k[0],schedule[0]);
|
|
- mit_des_make_key_sched(k[1],schedule[1]);
|
|
- mit_des_make_key_sched(k[2],schedule[2]);
|
|
-
|
|
- if (!mit_des_check_key_parity(k[0])) /* bad parity --> return -1 */
|
|
- return(-1);
|
|
- if (mit_des_is_weak_key(k[0]))
|
|
- return(-2);
|
|
-
|
|
- if (!mit_des_check_key_parity(k[1]))
|
|
- return(-1);
|
|
- if (mit_des_is_weak_key(k[1]))
|
|
- return(-2);
|
|
-
|
|
- if (!mit_des_check_key_parity(k[2]))
|
|
- return(-1);
|
|
- if (mit_des_is_weak_key(k[2]))
|
|
- return(-2);
|
|
-
|
|
- /* if key was good, return 0 */
|
|
- return 0;
|
|
-}
|
|
-
|
|
-#endif /* K5_BUILTIN_DES */
|
|
diff --git a/src/lib/crypto/builtin/des/deps b/src/lib/crypto/builtin/des/deps
|
|
deleted file mode 100644
|
|
index 1c1239d696..0000000000
|
|
--- a/src/lib/crypto/builtin/des/deps
|
|
+++ /dev/null
|
|
@@ -1,146 +0,0 @@
|
|
-#
|
|
-# Generated makefile dependencies follow.
|
|
-#
|
|
-d3_aead.so d3_aead.po $(OUTPRE)d3_aead.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
|
|
- $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
|
|
- $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h \
|
|
- $(top_srcdir)/include/k5-buf.h $(top_srcdir)/include/k5-err.h \
|
|
- $(top_srcdir)/include/k5-gmt_mktime.h $(top_srcdir)/include/k5-int-pkinit.h \
|
|
- $(top_srcdir)/include/k5-int.h $(top_srcdir)/include/k5-platform.h \
|
|
- $(top_srcdir)/include/k5-plugin.h $(top_srcdir)/include/k5-thread.h \
|
|
- $(top_srcdir)/include/k5-trace.h $(top_srcdir)/include/krb5.h \
|
|
- $(top_srcdir)/include/krb5/authdata_plugin.h $(top_srcdir)/include/krb5/plugin.h \
|
|
- $(top_srcdir)/include/port-sockets.h $(top_srcdir)/include/socket-utils.h \
|
|
- d3_aead.c des_int.h f_tables.h
|
|
-d3_kysched.so d3_kysched.po $(OUTPRE)d3_kysched.$(OBJEXT): \
|
|
- $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
|
|
- $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
|
|
- $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h $(top_srcdir)/include/k5-buf.h \
|
|
- $(top_srcdir)/include/k5-err.h $(top_srcdir)/include/k5-gmt_mktime.h \
|
|
- $(top_srcdir)/include/k5-int-pkinit.h $(top_srcdir)/include/k5-int.h \
|
|
- $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-plugin.h \
|
|
- $(top_srcdir)/include/k5-thread.h $(top_srcdir)/include/k5-trace.h \
|
|
- $(top_srcdir)/include/krb5.h $(top_srcdir)/include/krb5/authdata_plugin.h \
|
|
- $(top_srcdir)/include/krb5/plugin.h $(top_srcdir)/include/port-sockets.h \
|
|
- $(top_srcdir)/include/socket-utils.h d3_kysched.c des_int.h
|
|
-des_keys.so des_keys.po $(OUTPRE)des_keys.$(OBJEXT): \
|
|
- $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
|
|
- $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
|
|
- $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h $(top_srcdir)/include/k5-buf.h \
|
|
- $(top_srcdir)/include/k5-err.h $(top_srcdir)/include/k5-gmt_mktime.h \
|
|
- $(top_srcdir)/include/k5-int-pkinit.h $(top_srcdir)/include/k5-int.h \
|
|
- $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-plugin.h \
|
|
- $(top_srcdir)/include/k5-thread.h $(top_srcdir)/include/k5-trace.h \
|
|
- $(top_srcdir)/include/krb5.h $(top_srcdir)/include/krb5/authdata_plugin.h \
|
|
- $(top_srcdir)/include/krb5/plugin.h $(top_srcdir)/include/port-sockets.h \
|
|
- $(top_srcdir)/include/socket-utils.h des_int.h des_keys.c
|
|
-f_aead.so f_aead.po $(OUTPRE)f_aead.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
|
|
- $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
|
|
- $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h \
|
|
- $(top_srcdir)/include/k5-buf.h $(top_srcdir)/include/k5-err.h \
|
|
- $(top_srcdir)/include/k5-gmt_mktime.h $(top_srcdir)/include/k5-int-pkinit.h \
|
|
- $(top_srcdir)/include/k5-int.h $(top_srcdir)/include/k5-platform.h \
|
|
- $(top_srcdir)/include/k5-plugin.h $(top_srcdir)/include/k5-thread.h \
|
|
- $(top_srcdir)/include/k5-trace.h $(top_srcdir)/include/krb5.h \
|
|
- $(top_srcdir)/include/krb5/authdata_plugin.h $(top_srcdir)/include/krb5/plugin.h \
|
|
- $(top_srcdir)/include/port-sockets.h $(top_srcdir)/include/socket-utils.h \
|
|
- des_int.h f_aead.c f_tables.h
|
|
-f_cksum.so f_cksum.po $(OUTPRE)f_cksum.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
|
|
- $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
|
|
- $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h \
|
|
- $(top_srcdir)/include/k5-buf.h $(top_srcdir)/include/k5-err.h \
|
|
- $(top_srcdir)/include/k5-gmt_mktime.h $(top_srcdir)/include/k5-int-pkinit.h \
|
|
- $(top_srcdir)/include/k5-int.h $(top_srcdir)/include/k5-platform.h \
|
|
- $(top_srcdir)/include/k5-plugin.h $(top_srcdir)/include/k5-thread.h \
|
|
- $(top_srcdir)/include/k5-trace.h $(top_srcdir)/include/krb5.h \
|
|
- $(top_srcdir)/include/krb5/authdata_plugin.h $(top_srcdir)/include/krb5/plugin.h \
|
|
- $(top_srcdir)/include/port-sockets.h $(top_srcdir)/include/socket-utils.h \
|
|
- des_int.h f_cksum.c f_tables.h
|
|
-f_parity.so f_parity.po $(OUTPRE)f_parity.$(OBJEXT): \
|
|
- $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
|
|
- $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
|
|
- $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h $(top_srcdir)/include/k5-buf.h \
|
|
- $(top_srcdir)/include/k5-err.h $(top_srcdir)/include/k5-gmt_mktime.h \
|
|
- $(top_srcdir)/include/k5-int-pkinit.h $(top_srcdir)/include/k5-int.h \
|
|
- $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-plugin.h \
|
|
- $(top_srcdir)/include/k5-thread.h $(top_srcdir)/include/k5-trace.h \
|
|
- $(top_srcdir)/include/krb5.h $(top_srcdir)/include/krb5/authdata_plugin.h \
|
|
- $(top_srcdir)/include/krb5/plugin.h $(top_srcdir)/include/port-sockets.h \
|
|
- $(top_srcdir)/include/socket-utils.h des_int.h f_parity.c
|
|
-f_sched.so f_sched.po $(OUTPRE)f_sched.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
|
|
- $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
|
|
- $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h \
|
|
- $(top_srcdir)/include/k5-buf.h $(top_srcdir)/include/k5-err.h \
|
|
- $(top_srcdir)/include/k5-gmt_mktime.h $(top_srcdir)/include/k5-int-pkinit.h \
|
|
- $(top_srcdir)/include/k5-int.h $(top_srcdir)/include/k5-platform.h \
|
|
- $(top_srcdir)/include/k5-plugin.h $(top_srcdir)/include/k5-thread.h \
|
|
- $(top_srcdir)/include/k5-trace.h $(top_srcdir)/include/krb5.h \
|
|
- $(top_srcdir)/include/krb5/authdata_plugin.h $(top_srcdir)/include/krb5/plugin.h \
|
|
- $(top_srcdir)/include/port-sockets.h $(top_srcdir)/include/socket-utils.h \
|
|
- des_int.h f_sched.c
|
|
-f_tables.so f_tables.po $(OUTPRE)f_tables.$(OBJEXT): \
|
|
- $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
|
|
- $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
|
|
- $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h $(top_srcdir)/include/k5-buf.h \
|
|
- $(top_srcdir)/include/k5-err.h $(top_srcdir)/include/k5-gmt_mktime.h \
|
|
- $(top_srcdir)/include/k5-int-pkinit.h $(top_srcdir)/include/k5-int.h \
|
|
- $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-plugin.h \
|
|
- $(top_srcdir)/include/k5-thread.h $(top_srcdir)/include/k5-trace.h \
|
|
- $(top_srcdir)/include/krb5.h $(top_srcdir)/include/krb5/authdata_plugin.h \
|
|
- $(top_srcdir)/include/krb5/plugin.h $(top_srcdir)/include/port-sockets.h \
|
|
- $(top_srcdir)/include/socket-utils.h des_int.h f_tables.c \
|
|
- f_tables.h
|
|
-key_sched.so key_sched.po $(OUTPRE)key_sched.$(OBJEXT): \
|
|
- $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
|
|
- $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
|
|
- $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h $(top_srcdir)/include/k5-buf.h \
|
|
- $(top_srcdir)/include/k5-err.h $(top_srcdir)/include/k5-gmt_mktime.h \
|
|
- $(top_srcdir)/include/k5-int-pkinit.h $(top_srcdir)/include/k5-int.h \
|
|
- $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-plugin.h \
|
|
- $(top_srcdir)/include/k5-thread.h $(top_srcdir)/include/k5-trace.h \
|
|
- $(top_srcdir)/include/krb5.h $(top_srcdir)/include/krb5/authdata_plugin.h \
|
|
- $(top_srcdir)/include/krb5/plugin.h $(top_srcdir)/include/port-sockets.h \
|
|
- $(top_srcdir)/include/socket-utils.h des_int.h key_sched.c
|
|
-weak_key.so weak_key.po $(OUTPRE)weak_key.$(OBJEXT): \
|
|
- $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
|
|
- $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
|
|
- $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h $(top_srcdir)/include/k5-buf.h \
|
|
- $(top_srcdir)/include/k5-err.h $(top_srcdir)/include/k5-gmt_mktime.h \
|
|
- $(top_srcdir)/include/k5-int-pkinit.h $(top_srcdir)/include/k5-int.h \
|
|
- $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-plugin.h \
|
|
- $(top_srcdir)/include/k5-thread.h $(top_srcdir)/include/k5-trace.h \
|
|
- $(top_srcdir)/include/krb5.h $(top_srcdir)/include/krb5/authdata_plugin.h \
|
|
- $(top_srcdir)/include/krb5/plugin.h $(top_srcdir)/include/port-sockets.h \
|
|
- $(top_srcdir)/include/socket-utils.h des_int.h weak_key.c
|
|
-destest.so destest.po $(OUTPRE)destest.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
|
|
- $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
|
|
- $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(top_srcdir)/include/k5-buf.h \
|
|
- $(top_srcdir)/include/k5-err.h $(top_srcdir)/include/k5-gmt_mktime.h \
|
|
- $(top_srcdir)/include/k5-int-pkinit.h $(top_srcdir)/include/k5-int.h \
|
|
- $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-plugin.h \
|
|
- $(top_srcdir)/include/k5-thread.h $(top_srcdir)/include/k5-trace.h \
|
|
- $(top_srcdir)/include/krb5.h $(top_srcdir)/include/krb5/authdata_plugin.h \
|
|
- $(top_srcdir)/include/krb5/plugin.h $(top_srcdir)/include/port-sockets.h \
|
|
- $(top_srcdir)/include/socket-utils.h des_int.h destest.c
|
|
-f_cbc.so f_cbc.po $(OUTPRE)f_cbc.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
|
|
- $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
|
|
- $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(top_srcdir)/include/k5-buf.h \
|
|
- $(top_srcdir)/include/k5-err.h $(top_srcdir)/include/k5-gmt_mktime.h \
|
|
- $(top_srcdir)/include/k5-int-pkinit.h $(top_srcdir)/include/k5-int.h \
|
|
- $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-plugin.h \
|
|
- $(top_srcdir)/include/k5-thread.h $(top_srcdir)/include/k5-trace.h \
|
|
- $(top_srcdir)/include/krb5.h $(top_srcdir)/include/krb5/authdata_plugin.h \
|
|
- $(top_srcdir)/include/krb5/plugin.h $(top_srcdir)/include/port-sockets.h \
|
|
- $(top_srcdir)/include/socket-utils.h des_int.h f_cbc.c \
|
|
- f_tables.h
|
|
-t_verify.so t_verify.po $(OUTPRE)t_verify.$(OBJEXT): \
|
|
- $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
|
|
- $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
|
|
- $(COM_ERR_DEPS) $(top_srcdir)/include/k5-buf.h $(top_srcdir)/include/k5-err.h \
|
|
- $(top_srcdir)/include/k5-gmt_mktime.h $(top_srcdir)/include/k5-int-pkinit.h \
|
|
- $(top_srcdir)/include/k5-int.h $(top_srcdir)/include/k5-platform.h \
|
|
- $(top_srcdir)/include/k5-plugin.h $(top_srcdir)/include/k5-thread.h \
|
|
- $(top_srcdir)/include/k5-trace.h $(top_srcdir)/include/krb5.h \
|
|
- $(top_srcdir)/include/krb5/authdata_plugin.h $(top_srcdir)/include/krb5/plugin.h \
|
|
- $(top_srcdir)/include/port-sockets.h $(top_srcdir)/include/socket-utils.h \
|
|
- des_int.h t_verify.c
|
|
diff --git a/src/lib/crypto/builtin/des/des_int.h b/src/lib/crypto/builtin/des/des_int.h
|
|
deleted file mode 100644
|
|
index f8dc6b296a..0000000000
|
|
--- a/src/lib/crypto/builtin/des/des_int.h
|
|
+++ /dev/null
|
|
@@ -1,285 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/des_int.h */
|
|
-/*
|
|
- * Copyright 1987, 1988, 1990, 2002 by the Massachusetts Institute of
|
|
- * Technology. All Rights Reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-/*
|
|
- * Copyright (C) 1998 by the FundsXpress, INC.
|
|
- *
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may require
|
|
- * a specific license from the United States Government. It is the
|
|
- * responsibility of any person or organization contemplating export to
|
|
- * obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of FundsXpress. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. FundsXpress makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- *
|
|
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
- */
|
|
-
|
|
-/* Private include file for the Data Encryption Standard library. */
|
|
-
|
|
-/* only do the whole thing once */
|
|
-#ifndef DES_INTERNAL_DEFS
|
|
-#define DES_INTERNAL_DEFS
|
|
-
|
|
-#include "k5-int.h"
|
|
-/*
|
|
- * Begin "mit-des.h"
|
|
- */
|
|
-#ifndef KRB5_MIT_DES__
|
|
-#define KRB5_MIT_DES__
|
|
-
|
|
-#if defined(__MACH__) && defined(__APPLE__)
|
|
-#include <TargetConditionals.h>
|
|
-#include <AvailabilityMacros.h>
|
|
-#if TARGET_RT_MAC_CFM
|
|
-#error "Use KfM 4.0 SDK headers for CFM compilation."
|
|
-#endif
|
|
-#if defined(DEPRECATED_IN_MAC_OS_X_VERSION_10_5) && !defined(KRB5_SUPRESS_DEPRECATED_WARNINGS)
|
|
-#define KRB5INT_DES_DEPRECATED DEPRECATED_IN_MAC_OS_X_VERSION_10_5
|
|
-#endif
|
|
-#endif /* defined(__MACH__) && defined(__APPLE__) */
|
|
-
|
|
-/* Macro to add deprecated attribute to DES types and functions */
|
|
-/* Currently only defined on macOS 10.5 and later. */
|
|
-#ifndef KRB5INT_DES_DEPRECATED
|
|
-#define KRB5INT_DES_DEPRECATED
|
|
-#endif
|
|
-
|
|
-#include <limits.h>
|
|
-
|
|
-#if UINT_MAX >= 0xFFFFFFFFUL
|
|
-#define DES_INT32 int
|
|
-#define DES_UINT32 unsigned int
|
|
-#else
|
|
-#define DES_INT32 long
|
|
-#define DES_UINT32 unsigned long
|
|
-#endif
|
|
-
|
|
-typedef unsigned char des_cblock[8] /* crypto-block size */
|
|
-KRB5INT_DES_DEPRECATED;
|
|
-
|
|
-/*
|
|
- * Key schedule.
|
|
- *
|
|
- * This used to be
|
|
- *
|
|
- * typedef struct des_ks_struct {
|
|
- * union { DES_INT32 pad; des_cblock _;} __;
|
|
- * } des_key_schedule[16];
|
|
- *
|
|
- * but it would cause trouble if DES_INT32 were ever more than 4
|
|
- * bytes. The reason is that all the encryption functions cast it to
|
|
- * (DES_INT32 *), and treat it as if it were DES_INT32[32]. If
|
|
- * 2*sizeof(DES_INT32) is ever more than sizeof(des_cblock), the
|
|
- * caller-allocated des_key_schedule will be overflowed by the key
|
|
- * scheduling functions. We can't assume that every platform will
|
|
- * have an exact 32-bit int, and nothing should be looking inside a
|
|
- * des_key_schedule anyway.
|
|
- */
|
|
-typedef struct des_ks_struct { DES_INT32 _[2]; } des_key_schedule[16]
|
|
-KRB5INT_DES_DEPRECATED;
|
|
-
|
|
-typedef des_cblock mit_des_cblock;
|
|
-typedef des_key_schedule mit_des_key_schedule;
|
|
-
|
|
-/* Triple-DES structures */
|
|
-typedef mit_des_cblock mit_des3_cblock[3];
|
|
-typedef mit_des_key_schedule mit_des3_key_schedule[3];
|
|
-
|
|
-#define MIT_DES_ENCRYPT 1
|
|
-#define MIT_DES_DECRYPT 0
|
|
-
|
|
-typedef struct mit_des_ran_key_seed {
|
|
- krb5_encrypt_block eblock;
|
|
- krb5_data sequence;
|
|
-} mit_des_random_state;
|
|
-
|
|
-/* the first byte of the key is already in the keyblock */
|
|
-
|
|
-#define MIT_DES_BLOCK_LENGTH (8*sizeof(krb5_octet))
|
|
-/* This used to be 8*sizeof(krb5_octet) */
|
|
-#define MIT_DES_KEYSIZE 8
|
|
-
|
|
-#define MIT_DES_CBC_CKSUM_LENGTH (4*sizeof(krb5_octet))
|
|
-
|
|
-#endif /* KRB5_MIT_DES__ */
|
|
-/*
|
|
- * End "mit-des.h"
|
|
- */
|
|
-
|
|
-/* afsstring2key.c */
|
|
-krb5_error_code mit_afs_string_to_key(krb5_keyblock *keyblock,
|
|
- const krb5_data *data,
|
|
- const krb5_data *salt);
|
|
-char *mit_afs_crypt(const char *pw, const char *salt, char *iobuf);
|
|
-
|
|
-/* f_cksum.c */
|
|
-unsigned long mit_des_cbc_cksum(const krb5_octet *, krb5_octet *,
|
|
- unsigned long, const mit_des_key_schedule,
|
|
- const krb5_octet *);
|
|
-
|
|
-/* f_cbc.c (used by test programs) */
|
|
-int
|
|
-mit_des_cbc_encrypt(const mit_des_cblock *in, mit_des_cblock *out,
|
|
- unsigned long length, const mit_des_key_schedule schedule,
|
|
- const mit_des_cblock ivec, int enc);
|
|
-
|
|
-#define mit_des_zeroblock krb5int_c_mit_des_zeroblock
|
|
-extern const mit_des_cblock mit_des_zeroblock;
|
|
-
|
|
-/* fin_rndkey.c */
|
|
-krb5_error_code mit_des_finish_random_key(const krb5_encrypt_block *,
|
|
- krb5_pointer *);
|
|
-
|
|
-/* finish_key.c */
|
|
-krb5_error_code mit_des_finish_key(krb5_encrypt_block *);
|
|
-
|
|
-/* init_rkey.c */
|
|
-krb5_error_code mit_des_init_random_key(const krb5_encrypt_block *,
|
|
- const krb5_keyblock *,
|
|
- krb5_pointer *);
|
|
-
|
|
-/* key_parity.c */
|
|
-void mit_des_fixup_key_parity(mit_des_cblock);
|
|
-int mit_des_check_key_parity(mit_des_cblock);
|
|
-
|
|
-/* key_sched.c */
|
|
-int mit_des_key_sched(mit_des_cblock, mit_des_key_schedule);
|
|
-
|
|
-/* process_ky.c */
|
|
-krb5_error_code mit_des_process_key(krb5_encrypt_block *,
|
|
- const krb5_keyblock *);
|
|
-
|
|
-/* random_key.c */
|
|
-krb5_error_code mit_des_random_key(const krb5_encrypt_block *,
|
|
- krb5_pointer, krb5_keyblock **);
|
|
-
|
|
-/* string2key.c */
|
|
-krb5_error_code mit_des_string_to_key(const krb5_encrypt_block *,
|
|
- krb5_keyblock *, const krb5_data *,
|
|
- const krb5_data *);
|
|
-krb5_error_code mit_des_string_to_key_int(krb5_keyblock *, const krb5_data *,
|
|
- const krb5_data *);
|
|
-
|
|
-/* weak_key.c */
|
|
-int mit_des_is_weak_key(mit_des_cblock);
|
|
-
|
|
-/* cmb_keys.c */
|
|
-krb5_error_code mit_des_combine_subkeys(const krb5_keyblock *,
|
|
- const krb5_keyblock *,
|
|
- krb5_keyblock **);
|
|
-
|
|
-/* f_pcbc.c */
|
|
-int mit_des_pcbc_encrypt();
|
|
-
|
|
-/* f_sched.c */
|
|
-int mit_des_make_key_sched(mit_des_cblock, mit_des_key_schedule);
|
|
-
|
|
-
|
|
-/* misc.c */
|
|
-extern void swap_bits(char *);
|
|
-extern unsigned long long_swap_bits(unsigned long);
|
|
-extern unsigned long swap_six_bits_to_ansi(unsigned long);
|
|
-extern unsigned long swap_four_bits_to_ansi(unsigned long);
|
|
-extern unsigned long swap_bit_pos_1(unsigned long);
|
|
-extern unsigned long swap_bit_pos_0(unsigned long);
|
|
-extern unsigned long swap_bit_pos_0_to_ansi(unsigned long);
|
|
-extern unsigned long rev_swap_bit_pos_0(unsigned long);
|
|
-extern unsigned long swap_byte_bits(unsigned long);
|
|
-extern unsigned long swap_long_bytes_bit_number(unsigned long);
|
|
-#ifdef FILE
|
|
-/* XXX depends on FILE being a #define! */
|
|
-extern void test_set(FILE *, const char *, int, const char *, int);
|
|
-#endif
|
|
-
|
|
-void
|
|
-krb5int_des3_cbc_encrypt(krb5_crypto_iov *data, unsigned long num_data,
|
|
- const mit_des_key_schedule ks1,
|
|
- const mit_des_key_schedule ks2,
|
|
- const mit_des_key_schedule ks3,
|
|
- mit_des_cblock ivec);
|
|
-
|
|
-void
|
|
-krb5int_des3_cbc_decrypt(krb5_crypto_iov *data, unsigned long num_data,
|
|
- const mit_des_key_schedule ks1,
|
|
- const mit_des_key_schedule ks2,
|
|
- const mit_des_key_schedule ks3,
|
|
- mit_des_cblock ivec);
|
|
-
|
|
-void
|
|
-krb5int_des_cbc_encrypt(krb5_crypto_iov *data, unsigned long num_data,
|
|
- const mit_des_key_schedule schedule,
|
|
- mit_des_cblock ivec);
|
|
-
|
|
-void
|
|
-krb5int_des_cbc_decrypt(krb5_crypto_iov *data, unsigned long num_data,
|
|
- const mit_des_key_schedule schedule,
|
|
- mit_des_cblock ivec);
|
|
-
|
|
-void
|
|
-krb5int_des_cbc_mac(const krb5_crypto_iov *data, unsigned long num_data,
|
|
- const mit_des_key_schedule schedule, mit_des_cblock ivec,
|
|
- mit_des_cblock out);
|
|
-
|
|
-/* d3_procky.c */
|
|
-krb5_error_code mit_des3_process_key(krb5_encrypt_block *eblock,
|
|
- const krb5_keyblock *keyblock);
|
|
-
|
|
-/* d3_kysched.c */
|
|
-int mit_des3_key_sched(mit_des3_cblock key, mit_des3_key_schedule schedule);
|
|
-
|
|
-/* d3_str2ky.c */
|
|
-krb5_error_code mit_des3_string_to_key(const krb5_encrypt_block *eblock,
|
|
- krb5_keyblock *keyblock,
|
|
- const krb5_data *data,
|
|
- const krb5_data *salt);
|
|
-
|
|
-/* u_nfold.c */
|
|
-krb5_error_code mit_des_n_fold(const krb5_octet *input, const size_t in_len,
|
|
- krb5_octet *output, const size_t out_len);
|
|
-
|
|
-/* u_rn_key.c */
|
|
-int mit_des_is_weak_keyblock(krb5_keyblock *keyblock);
|
|
-
|
|
-void mit_des_fixup_keyblock_parity(krb5_keyblock *keyblock);
|
|
-
|
|
-krb5_error_code mit_des_set_random_generator_seed(const krb5_data *seed,
|
|
- krb5_pointer random_state);
|
|
-
|
|
-krb5_error_code mit_des_set_random_sequence_number(const krb5_data *sequence,
|
|
- krb5_pointer random_state);
|
|
-#endif /*DES_INTERNAL_DEFS*/
|
|
diff --git a/src/lib/crypto/builtin/des/des_keys.c b/src/lib/crypto/builtin/des/des_keys.c
|
|
deleted file mode 100644
|
|
index 027b09d728..0000000000
|
|
--- a/src/lib/crypto/builtin/des/des_keys.c
|
|
+++ /dev/null
|
|
@@ -1,38 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/des_keys.c - Key functions used by Kerberos code */
|
|
-/*
|
|
- * Copyright (C) 2011 by the Massachusetts Institute of Technology.
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES_KEY_PARITY
|
|
-
|
|
-void
|
|
-k5_des_fixup_key_parity(unsigned char *keybits)
|
|
-{
|
|
- mit_des_fixup_key_parity(keybits);
|
|
-}
|
|
-
|
|
-#endif /* K5_BUILTIN_DES_KEY_PARITY */
|
|
diff --git a/src/lib/crypto/builtin/des/destest.c b/src/lib/crypto/builtin/des/destest.c
|
|
deleted file mode 100644
|
|
index 52114304e3..0000000000
|
|
--- a/src/lib/crypto/builtin/des/destest.c
|
|
+++ /dev/null
|
|
@@ -1,240 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/destest.c */
|
|
-/*
|
|
- * Copyright 1990,1991 by the Massachusetts Institute of Technology.
|
|
- * All Rights Reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-/*
|
|
- * Copyright (C) 1998 by the FundsXpress, INC.
|
|
- *
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may require
|
|
- * a specific license from the United States Government. It is the
|
|
- * responsibility of any person or organization contemplating export to
|
|
- * obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of FundsXpress. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. FundsXpress makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- *
|
|
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
- */
|
|
-
|
|
-/* Test a DES implementation against known inputs & outputs. */
|
|
-
|
|
-#include "des_int.h"
|
|
-#include <ctype.h>
|
|
-#include <stdio.h>
|
|
-
|
|
-void convert (char *, unsigned char []);
|
|
-
|
|
-void des_cblock_print_file (mit_des_cblock, FILE *);
|
|
-
|
|
-krb5_octet zeroblock[8] = {0,0,0,0,0,0,0,0};
|
|
-
|
|
-int
|
|
-main(argc, argv)
|
|
- int argc;
|
|
- char *argv[];
|
|
-{
|
|
- char block1[17], block2[17], block3[17];
|
|
- /* Force tests of unaligned accesses. */
|
|
- union { unsigned char c[8*4+3]; long l; } u;
|
|
- unsigned char *ioblocks = u.c;
|
|
- unsigned char *input = ioblocks+1;
|
|
- unsigned char *output = ioblocks+10;
|
|
- unsigned char *output2 = ioblocks+19;
|
|
- unsigned char *key = ioblocks+27;
|
|
- mit_des_key_schedule sched;
|
|
- int num = 0;
|
|
- int retval;
|
|
-
|
|
- int error = 0;
|
|
-
|
|
- while (scanf("%16s %16s %16s", block1, block2, block3) == 3) {
|
|
- convert(block1, key);
|
|
- convert(block2, input);
|
|
- convert(block3, output);
|
|
-
|
|
- retval = mit_des_key_sched(key, sched);
|
|
- if (retval) {
|
|
- fprintf(stderr, "des test: can't process key: %d\n", retval);
|
|
- fprintf(stderr, "des test: %s %s %s\n", block1, block2, block3);
|
|
- exit(1);
|
|
- }
|
|
- mit_des_cbc_encrypt((const mit_des_cblock *) input,
|
|
- (mit_des_cblock *) output2, 8,
|
|
- sched, zeroblock, 1);
|
|
-
|
|
- if (memcmp((char *)output2, (char *)output, 8)) {
|
|
- fprintf(stderr,
|
|
- "DES ENCRYPT ERROR, key %s, text %s, real cipher %s, computed cyphertext %02X%02X%02X%02X%02X%02X%02X%02X\n",
|
|
- block1, block2, block3,
|
|
- output2[0],output2[1],output2[2],output2[3],
|
|
- output2[4],output2[5],output2[6],output2[7]);
|
|
- error++;
|
|
- }
|
|
-
|
|
- /*
|
|
- * Now try decrypting....
|
|
- */
|
|
- mit_des_cbc_encrypt((const mit_des_cblock *) output,
|
|
- (mit_des_cblock *) output2, 8,
|
|
- sched, zeroblock, 0);
|
|
-
|
|
- if (memcmp((char *)output2, (char *)input, 8)) {
|
|
- fprintf(stderr,
|
|
- "DES DECRYPT ERROR, key %s, text %s, real cipher %s, computed cleartext %02X%02X%02X%02X%02X%02X%02X%02X\n",
|
|
- block1, block2, block3,
|
|
- output2[0],output2[1],output2[2],output2[3],
|
|
- output2[4],output2[5],output2[6],output2[7]);
|
|
- error++;
|
|
- }
|
|
-
|
|
- num++;
|
|
- }
|
|
-
|
|
- if (error)
|
|
- printf("destest: failed to pass the test\n");
|
|
- else
|
|
- printf("destest: %d tests passed successfully\n", num);
|
|
-
|
|
- exit( (error > 256 && error % 256) ? 1 : error);
|
|
-}
|
|
-
|
|
-int value[128] = {
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- 0, 1, 2, 3, 4, 5, 6, 7,
|
|
- 8, 9, -1, -1, -1, -1, -1, -1,
|
|
- -1, 10, 11, 12, 13, 14, 15, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
- -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-};
|
|
-
|
|
-void
|
|
-convert(text, cblock)
|
|
- char *text;
|
|
- unsigned char cblock[];
|
|
-{
|
|
- int i;
|
|
- for (i = 0; i < 8; i++) {
|
|
- if (!isascii((unsigned char)text[i * 2]))
|
|
- abort ();
|
|
- if (value[(int) text[i*2]] == -1 || value[(int) text[i*2+1]] == -1) {
|
|
- printf("Bad value byte %d in %s\n", i, text);
|
|
- exit(1);
|
|
- }
|
|
- cblock[i] = 16*value[(int) text[i*2]] + value[(int) text[i*2+1]];
|
|
- }
|
|
- return;
|
|
-}
|
|
-
|
|
-/*
|
|
- * Fake out the DES library, for the purposes of testing.
|
|
- */
|
|
-
|
|
-int
|
|
-mit_des_is_weak_key(key)
|
|
- mit_des_cblock key;
|
|
-{
|
|
- return 0; /* fake it out for testing */
|
|
-}
|
|
-
|
|
-void
|
|
-des_cblock_print_file(x, fp)
|
|
- mit_des_cblock x;
|
|
- FILE *fp;
|
|
-{
|
|
- unsigned char *y = (unsigned char *) x;
|
|
- int i = 0;
|
|
- fprintf(fp," 0x { ");
|
|
-
|
|
- while (i++ < 8) {
|
|
- fprintf(fp,"%x",*y++);
|
|
- if (i < 8)
|
|
- fprintf(fp,", ");
|
|
- }
|
|
- fprintf(fp," }");
|
|
-}
|
|
-
|
|
-
|
|
-#define smask(step) ((1<<step)-1)
|
|
-#define pstep(x,step) (((x)&smask(step))^(((x)>>step)&smask(step)))
|
|
-#define parity_char(x) pstep(pstep(pstep((x),4),2),1)
|
|
-
|
|
-/*
|
|
- * des_check_key_parity: returns true iff key has the correct des parity.
|
|
- * See des_fix_key_parity for the definition of
|
|
- * correct des parity.
|
|
- */
|
|
-int
|
|
-mit_des_check_key_parity(key)
|
|
- mit_des_cblock key;
|
|
-{
|
|
- unsigned int i;
|
|
-
|
|
- for (i=0; i<sizeof(mit_des_cblock); i++) {
|
|
- if ((key[i] & 1) == parity_char(0xfe&key[i])) {
|
|
- printf("warning: bad parity key:");
|
|
- des_cblock_print_file(key, stdout);
|
|
- putchar('\n');
|
|
-
|
|
- return 1;
|
|
- }
|
|
- }
|
|
-
|
|
- return(1);
|
|
-}
|
|
-
|
|
-void
|
|
-mit_des_fixup_key_parity(key)
|
|
- mit_des_cblock key;
|
|
-{
|
|
- unsigned int i;
|
|
- for (i=0; i<sizeof(mit_des_cblock); i++)
|
|
- {
|
|
- key[i] &= 0xfe;
|
|
- key[i] |= 1^parity_char(key[i]);
|
|
- }
|
|
-
|
|
- return;
|
|
-}
|
|
diff --git a/src/lib/crypto/builtin/des/doc/libdes.doc b/src/lib/crypto/builtin/des/doc/libdes.doc
|
|
deleted file mode 100644
|
|
index 6e9431ed2e..0000000000
|
|
--- a/src/lib/crypto/builtin/des/doc/libdes.doc
|
|
+++ /dev/null
|
|
@@ -1,208 +0,0 @@
|
|
-
|
|
- How to use the Kerberos encryption library.
|
|
-
|
|
- Revised 10/15/85 spm
|
|
-
|
|
-1) The following include file is needed:
|
|
-
|
|
- /projects/auth/include/des.h (VAX)
|
|
- --------------- (PC8086)
|
|
-
|
|
-2) The encryption library that should be linked to is:
|
|
-
|
|
- /projects/auth/lib/libdes.a (VAX)
|
|
-| /projects/auth/ibm/lib/libdes.a (PC8086 cross-compilation environment)
|
|
-
|
|
-3) For each key that may be simultaneously active,
|
|
- allocate (either compile or malloc) a "Key_schedule" struct,
|
|
- defined in "des.h"
|
|
-
|
|
-4) Create key schedules, as needed, prior to using the encryption
|
|
- routines, via "des_set_key()".
|
|
-
|
|
-5) Setup the input and output areas. Make sure to note the restrictions
|
|
- on lengths being multiples of eight bytes.
|
|
-
|
|
-6) Invoke the encryption/decryption routines, "ecb_encrypt()"
|
|
- or "cbc_encrypt()"
|
|
-
|
|
-7) To generate a cryptographic checksum, use "cbc_cksum()"
|
|
-/* ---------------------------------------------------------------- */
|
|
-
|
|
- Routine Interfaces--
|
|
-
|
|
-/* ----------------------------------------------------------------- */
|
|
-
|
|
-int
|
|
- des_set_key(k,schedule)
|
|
- C_Block *k;
|
|
- Key_schedule schedule;
|
|
-
|
|
- Calculates a key schedule from (all) eight bytes of the input key, and
|
|
- puts it into the indicated "Key_schedule" struct;
|
|
-
|
|
- Make sure to pass valid eight bytes, no padding or other processing
|
|
- it done.
|
|
-
|
|
- The key schedule is then used in subsequent encryption/decryption
|
|
- operations. Many key schedules may be created and cached for later
|
|
- use.
|
|
-
|
|
- The user is responsible to clear keys and schedules no longer needed
|
|
- to prevent their disclosure.
|
|
-
|
|
-| Checks the parity of the key provided, to make sure it is odd per
|
|
-| FIPS spec. Returns 0 value for key ok, 1 for key_parity error.
|
|
-
|
|
-/* ---------------------------------------------------------------- */
|
|
-
|
|
-int
|
|
- ecb_encrypt(input,output,schedule,encrypt)
|
|
- C_Block *input; /* ptr to eight byte input value */
|
|
- C_Block *output; /* ptr to eight byte output value */
|
|
- int encrypt; /* 0 ==> decrypt, else encrypt */
|
|
- Key_schedule schedule; /* addr of key schedule */
|
|
-
|
|
-This is the low level routine that encrypts or decrypts a single 8-byte
|
|
-block in electronic code book mode. Always transforms the input
|
|
-data into the output data.
|
|
-
|
|
-If encrypt is non-zero, the input (cleartext) is encrypted into the
|
|
-output (ciphertext) using the specified key_schedule, pre-set via "des_set_key".
|
|
-
|
|
-If encrypt is zero, the input (now ciphertext) is decrypted into
|
|
-the output (now cleartext).
|
|
-
|
|
-Input and output may be the same space.
|
|
-
|
|
-Does not return any meaningful value. Void is not used for compatibility
|
|
-with other compilers.
|
|
-
|
|
-/* -------------------------------------------------------------- */
|
|
-
|
|
-int
|
|
- cbc_encrypt(input,output,length,schedule,ivec,encrypt)
|
|
-
|
|
- C_Block *input; /* ptr to input data */
|
|
- C_Block *output; /* ptr to output data */
|
|
- int length; /* desired length, in bytes */
|
|
- Key_schedule schedule; /* addr of precomputed schedule */
|
|
- C_Block *ivec; /* pointer to 8 byte initialization
|
|
- * vector
|
|
- */
|
|
- int encrypt /* 0 ==> decrypt; else encrypt*/
|
|
-
|
|
-
|
|
- If encrypt is non-zero, the routine cipher-block-chain encrypts
|
|
- the INPUT (cleartext) into the OUTPUT (ciphertext) using the provided
|
|
- key schedule and initialization vector. If the length is not an integral
|
|
- multiple of eight bytes, the last block is copied to a temp and zero
|
|
- filled (highest addresses). The output is ALWAYS an integral multiple
|
|
- of eight bytes.
|
|
-
|
|
- If encrypt is zero, the routine cipher-block chain decrypts the INPUT
|
|
- (ciphertext) into the OUTPUT (cleartext) using the provided key schedule
|
|
- and initialization vector. Decryption ALWAYS operates on integral
|
|
- multiples of 8 bytes, so will round the length provided up to the
|
|
- appropriate multiple. Consequently, it will always produce the rounded-up
|
|
- number of bytes of output cleartext. The application must determine if
|
|
- the output cleartext was zero-padded due to cleartext lengths not integral
|
|
- multiples of 8.
|
|
-
|
|
- No errors or meaningful value are returned. Void is not used for
|
|
- compatibility with other compilers.
|
|
-
|
|
-
|
|
-/* cbc checksum (MAC) only routine ---------------------------------------- */
|
|
-int
|
|
- cbc_cksum(input,output,length,schedule,ivec)
|
|
-
|
|
- C_Block *input; /* >= length bytes of inputtext */
|
|
- C_Block *output; /* >= length bytes of outputtext */
|
|
- int length; /* in bytes */
|
|
- Key_schedule schedule; /* precomputed key schedule */
|
|
- C_Block *ivec; /* 8 bytes of ivec */
|
|
-
|
|
-
|
|
- Produces a cryptographic checksum, 8 bytes, by cipher-block-chain
|
|
- encrypting the input, discarding the ciphertext output, and only retaining
|
|
- the last ciphertext 8-byte block. Uses the provided key schedule and ivec.
|
|
- The input is effectively zero-padded to an integral multiple of
|
|
- eight bytes, though the original input is not modified.
|
|
-
|
|
- No meaningful value is returned. Void is not used for compatibility
|
|
- with other compilers.
|
|
-
|
|
-
|
|
-/* random_key ----------------------------------------*/
|
|
-int
|
|
- random_key(key)
|
|
-
|
|
- C_Block *key;
|
|
-
|
|
- The start for the random number generated is set from the current time
|
|
- in microseconds, then the random number generator is invoked
|
|
- to create an eight byte output key (not a schedule). The key
|
|
- generated is set to odd parity per FIPS spec.
|
|
-
|
|
- The caller must supply space for the output key, pointed to
|
|
- by "*key", then after getting a new key, call the des_set_key()
|
|
- routine when needed.
|
|
-
|
|
- No meaningful value is returned. Void is not used for compatibility
|
|
- with other compilers.
|
|
-
|
|
-
|
|
-/* string_to_key --------------------------------------------*/
|
|
-
|
|
-int
|
|
- string_to_key(str,key)
|
|
- char *str;
|
|
- C_Block *key;
|
|
-
|
|
- This routines converts an arbitrary length, null terminated string
|
|
- to an 8 byte DES key, with each byte parity set to odd, per FIPS spec.
|
|
-
|
|
- The algorithm is as follows:
|
|
-
|
|
-| Take the first 8 bytes and remove the parity (leaving 56 bits).
|
|
-| Do the same for the second 8 bytes, and the third, etc. Do this for
|
|
-| as many sets of 8 bytes as necessary, filling in the remainder of the
|
|
-| last set with nulls. Fold the second set back on the first (i.e. bit
|
|
-| 0 over bit 55, and bit 55 over bit 0). Fold the third over the second
|
|
-| (bit 0 of the third set is now over bit 0 of the first set). Repeat
|
|
-| until you have done this to all sets. Xor the folded sets. Break the
|
|
-| result into 8 7 bit bytes, and generate odd parity for each byte. You
|
|
-| now have 64 bits. Note that DES takes a 64 bit key, and uses only the
|
|
-| non parity bits.
|
|
-
|
|
-
|
|
-/* read_password -------------------------------------------*/
|
|
-
|
|
-read_password(k,prompt,verify)
|
|
- C_Block *k;
|
|
- char *prompt;
|
|
- int verify;
|
|
-
|
|
-This routine issues the supplied prompt, turns off echo, if possible, and
|
|
-reads an input string. If verify is non-zero, it does it again, for use
|
|
-in applications such as changing a password. If verify is non-zero, both
|
|
-versions are compared, and the input is requested repeatedly until they
|
|
-match. Then, the input string is mapped into a valid DES key, internally
|
|
-using the string_to_key routine. The newly created key is copied to the
|
|
-area pointed to by parameter "k".
|
|
-
|
|
-No meaningful value is returned. If an error occurs trying to manipulate
|
|
-the terminal echo, the routine forces the process to exit.
|
|
-
|
|
-/* get_line ------------------------*/
|
|
-long get_line(p,max)
|
|
- char *p;
|
|
- long max;
|
|
-
|
|
-Reads input characters from standard input until either a newline appears or
|
|
-else the max length is reached. The characters read are stuffed into
|
|
-the string pointed to, which will always be null terminated. The newline
|
|
-is not inserted in the string. The max parameter includes the byte needed
|
|
-for the null terminator, so allocate and pass one more than the maximum
|
|
-string length desired.
|
|
diff --git a/src/lib/crypto/builtin/des/f_aead.c b/src/lib/crypto/builtin/des/f_aead.c
|
|
deleted file mode 100644
|
|
index f887735820..0000000000
|
|
--- a/src/lib/crypto/builtin/des/f_aead.c
|
|
+++ /dev/null
|
|
@@ -1,177 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/*
|
|
- * Copyright (C) 2008 by the Massachusetts Institute of Technology.
|
|
- * Copyright 1995 by Richard P. Basch. All Rights Reserved.
|
|
- * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used
|
|
- * in advertising or publicity pertaining to distribution of the software
|
|
- * without specific, written prior permission. Richard P. Basch,
|
|
- * Lehman Brothers and M.I.T. make no representations about the suitability
|
|
- * of this software for any purpose. It is provided "as is" without
|
|
- * express or implied warranty.
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-#include "f_tables.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES
|
|
-
|
|
-const mit_des_cblock mit_des_zeroblock /* = all zero */;
|
|
-
|
|
-void
|
|
-krb5int_des_cbc_encrypt(krb5_crypto_iov *data, unsigned long num_data,
|
|
- const mit_des_key_schedule schedule,
|
|
- mit_des_cblock ivec)
|
|
-{
|
|
- unsigned DES_INT32 left, right;
|
|
- const unsigned DES_INT32 *kp;
|
|
- const unsigned char *ip;
|
|
- struct iov_cursor cursor;
|
|
- unsigned char block[MIT_DES_BLOCK_LENGTH];
|
|
-
|
|
- /* Get key pointer here. This won't need to be reinitialized. */
|
|
- kp = (const unsigned DES_INT32 *)schedule;
|
|
-
|
|
- /* Initialize left and right with the contents of the initial vector. */
|
|
- ip = (ivec != NULL) ? ivec : mit_des_zeroblock;
|
|
- left = load_32_be(ip);
|
|
- right = load_32_be(ip + 4);
|
|
-
|
|
- k5_iov_cursor_init(&cursor, data, num_data, MIT_DES_BLOCK_LENGTH, FALSE);
|
|
- while (k5_iov_cursor_get(&cursor, block)) {
|
|
- /* Decompose this block and xor it with the previous ciphertext. */
|
|
- left ^= load_32_be(block);
|
|
- right ^= load_32_be(block + 4);
|
|
-
|
|
- /* Encrypt what we have and put back into block. */
|
|
- DES_DO_ENCRYPT(left, right, kp);
|
|
- store_32_be(left, block);
|
|
- store_32_be(right, block + 4);
|
|
-
|
|
- k5_iov_cursor_put(&cursor, block);
|
|
- }
|
|
-
|
|
- if (ivec != NULL) {
|
|
- store_32_be(left, ivec);
|
|
- store_32_be(right, ivec + 4);
|
|
- }
|
|
-}
|
|
-
|
|
-void
|
|
-krb5int_des_cbc_decrypt(krb5_crypto_iov *data, unsigned long num_data,
|
|
- const mit_des_key_schedule schedule,
|
|
- mit_des_cblock ivec)
|
|
-{
|
|
- unsigned DES_INT32 left, right;
|
|
- const unsigned DES_INT32 *kp;
|
|
- const unsigned char *ip;
|
|
- unsigned DES_INT32 ocipherl, ocipherr;
|
|
- unsigned DES_INT32 cipherl, cipherr;
|
|
- struct iov_cursor cursor;
|
|
- unsigned char block[MIT_DES_BLOCK_LENGTH];
|
|
-
|
|
- /* Get key pointer here. This won't need to be reinitialized. */
|
|
- kp = (const unsigned DES_INT32 *)schedule;
|
|
-
|
|
- /*
|
|
- * Decrypting is harder than encrypting because of
|
|
- * the necessity of remembering a lot more things.
|
|
- * Should think about this a little more...
|
|
- */
|
|
-
|
|
- /* Prime the old cipher with ivec. */
|
|
- ip = (ivec != NULL) ? ivec : mit_des_zeroblock;
|
|
- ocipherl = load_32_be(ip);
|
|
- ocipherr = load_32_be(ip + 4);
|
|
-
|
|
- k5_iov_cursor_init(&cursor, data, num_data, MIT_DES_BLOCK_LENGTH, FALSE);
|
|
- while (k5_iov_cursor_get(&cursor, block)) {
|
|
- /* Split this block into left and right. */
|
|
- cipherl = left = load_32_be(block);
|
|
- cipherr = right = load_32_be(block + 4);
|
|
-
|
|
- /* Decrypt and xor with the old cipher to get plain text. */
|
|
- DES_DO_DECRYPT(left, right, kp);
|
|
- left ^= ocipherl;
|
|
- right ^= ocipherr;
|
|
-
|
|
- /* Store the encrypted halves back into block. */
|
|
- store_32_be(left, block);
|
|
- store_32_be(right, block + 4);
|
|
-
|
|
- /* Save current cipher block halves. */
|
|
- ocipherl = cipherl;
|
|
- ocipherr = cipherr;
|
|
-
|
|
- k5_iov_cursor_put(&cursor, block);
|
|
- }
|
|
-
|
|
- if (ivec != NULL) {
|
|
- store_32_be(ocipherl, ivec);
|
|
- store_32_be(ocipherr, ivec + 4);
|
|
- }
|
|
-}
|
|
-
|
|
-void
|
|
-krb5int_des_cbc_mac(const krb5_crypto_iov *data, unsigned long num_data,
|
|
- const mit_des_key_schedule schedule, mit_des_cblock ivec,
|
|
- mit_des_cblock out)
|
|
-{
|
|
- unsigned DES_INT32 left, right;
|
|
- const unsigned DES_INT32 *kp;
|
|
- const unsigned char *ip;
|
|
- struct iov_cursor cursor;
|
|
- unsigned char block[MIT_DES_BLOCK_LENGTH];
|
|
-
|
|
- /* Get key pointer here. This won't need to be reinitialized. */
|
|
- kp = (const unsigned DES_INT32 *)schedule;
|
|
-
|
|
- /* Initialize left and right with the contents of the initial vector. */
|
|
- ip = (ivec != NULL) ? ivec : mit_des_zeroblock;
|
|
- left = load_32_be(ip);
|
|
- right = load_32_be(ip + 4);
|
|
-
|
|
- k5_iov_cursor_init(&cursor, data, num_data, MIT_DES_BLOCK_LENGTH, TRUE);
|
|
- while (k5_iov_cursor_get(&cursor, block)) {
|
|
- /* Decompose this block and xor it with the previous ciphertext. */
|
|
- left ^= load_32_be(block);
|
|
- right ^= load_32_be(block + 4);
|
|
-
|
|
- /* Encrypt what we have. */
|
|
- DES_DO_ENCRYPT(left, right, kp);
|
|
- }
|
|
-
|
|
- /* Output the final ciphertext block. */
|
|
- store_32_be(left, out);
|
|
- store_32_be(right, out + 4);
|
|
-}
|
|
-
|
|
-#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO)
|
|
-void krb5int_des_do_encrypt_2 (unsigned DES_INT32 *left,
|
|
- unsigned DES_INT32 *right,
|
|
- const unsigned DES_INT32 *kp)
|
|
-{
|
|
- DES_DO_ENCRYPT_1 (*left, *right, kp);
|
|
-}
|
|
-
|
|
-void krb5int_des_do_decrypt_2 (unsigned DES_INT32 *left,
|
|
- unsigned DES_INT32 *right,
|
|
- const unsigned DES_INT32 *kp)
|
|
-{
|
|
- DES_DO_DECRYPT_1 (*left, *right, kp);
|
|
-}
|
|
-#endif
|
|
-
|
|
-#endif /* K5_BUILTIN_DES */
|
|
diff --git a/src/lib/crypto/builtin/des/f_cbc.c b/src/lib/crypto/builtin/des/f_cbc.c
|
|
deleted file mode 100644
|
|
index 84d5382f22..0000000000
|
|
--- a/src/lib/crypto/builtin/des/f_cbc.c
|
|
+++ /dev/null
|
|
@@ -1,256 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/f_cbc.c */
|
|
-/*
|
|
- * Copyright (C) 1990 by the Massachusetts Institute of Technology.
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-
|
|
-/*
|
|
- * CBC functions; used only by the test programs at this time. (krb5 uses the
|
|
- * functions in f_aead.c instead.)
|
|
- */
|
|
-
|
|
-/*
|
|
- * des_cbc_encrypt.c - an implementation of the DES cipher function in cbc mode
|
|
- */
|
|
-#include "des_int.h"
|
|
-#include "f_tables.h"
|
|
-
|
|
-/*
|
|
- * des_cbc_encrypt - {en,de}crypt a stream in CBC mode
|
|
- */
|
|
-
|
|
-/*
|
|
- * This routine performs DES cipher-block-chaining operation, either
|
|
- * encrypting from cleartext to ciphertext, if encrypt != 0 or
|
|
- * decrypting from ciphertext to cleartext, if encrypt == 0.
|
|
- *
|
|
- * The key schedule is passed as an arg, as well as the cleartext or
|
|
- * ciphertext. The cleartext and ciphertext should be in host order.
|
|
- *
|
|
- * NOTE-- the output is ALWAYS an multiple of 8 bytes long. If not
|
|
- * enough space was provided, your program will get trashed.
|
|
- *
|
|
- * For encryption, the cleartext string is null padded, at the end, to
|
|
- * an integral multiple of eight bytes.
|
|
- *
|
|
- * For decryption, the ciphertext will be used in integral multiples
|
|
- * of 8 bytes, but only the first "length" bytes returned into the
|
|
- * cleartext.
|
|
- */
|
|
-
|
|
-const mit_des_cblock mit_des_zeroblock /* = all zero */;
|
|
-
|
|
-static void
|
|
-des_cbc_encrypt(const mit_des_cblock *in, mit_des_cblock *out,
|
|
- unsigned long length, const mit_des_key_schedule schedule,
|
|
- const mit_des_cblock ivec)
|
|
-{
|
|
- unsigned DES_INT32 left, right;
|
|
- const unsigned DES_INT32 *kp;
|
|
- const unsigned char *ip;
|
|
- unsigned char *op;
|
|
-
|
|
- /*
|
|
- * Get key pointer here. This won't need to be reinitialized
|
|
- */
|
|
- kp = (const unsigned DES_INT32 *)schedule;
|
|
-
|
|
- /*
|
|
- * Initialize left and right with the contents of the initial
|
|
- * vector.
|
|
- */
|
|
- ip = ivec;
|
|
- GET_HALF_BLOCK(left, ip);
|
|
- GET_HALF_BLOCK(right, ip);
|
|
-
|
|
- /*
|
|
- * Suitably initialized, now work the length down 8 bytes
|
|
- * at a time.
|
|
- */
|
|
- ip = *in;
|
|
- op = *out;
|
|
- while (length > 0) {
|
|
- /*
|
|
- * Get more input, xor it in. If the length is
|
|
- * greater than or equal to 8 this is straight
|
|
- * forward. Otherwise we have to fart around.
|
|
- */
|
|
- if (length >= 8) {
|
|
- unsigned DES_INT32 temp;
|
|
- GET_HALF_BLOCK(temp, ip);
|
|
- left ^= temp;
|
|
- GET_HALF_BLOCK(temp, ip);
|
|
- right ^= temp;
|
|
- length -= 8;
|
|
- } else {
|
|
- /*
|
|
- * Oh, shoot. We need to pad the
|
|
- * end with zeroes. Work backwards
|
|
- * to do this.
|
|
- */
|
|
- ip += (int) length;
|
|
- switch(length) {
|
|
- case 7:
|
|
- right ^= (*(--ip) & FF_UINT32) << 8;
|
|
- case 6:
|
|
- right ^= (*(--ip) & FF_UINT32) << 16;
|
|
- case 5:
|
|
- right ^= (*(--ip) & FF_UINT32) << 24;
|
|
- case 4:
|
|
- left ^= *(--ip) & FF_UINT32;
|
|
- case 3:
|
|
- left ^= (*(--ip) & FF_UINT32) << 8;
|
|
- case 2:
|
|
- left ^= (*(--ip) & FF_UINT32) << 16;
|
|
- case 1:
|
|
- left ^= (*(--ip) & FF_UINT32) << 24;
|
|
- break;
|
|
- }
|
|
- length = 0;
|
|
- }
|
|
-
|
|
- /*
|
|
- * Encrypt what we have
|
|
- */
|
|
- DES_DO_ENCRYPT(left, right, kp);
|
|
-
|
|
- /*
|
|
- * Copy the results out
|
|
- */
|
|
- PUT_HALF_BLOCK(left, op);
|
|
- PUT_HALF_BLOCK(right, op);
|
|
- }
|
|
-}
|
|
-
|
|
-static void
|
|
-des_cbc_decrypt(const mit_des_cblock *in, mit_des_cblock *out,
|
|
- unsigned long length, const mit_des_key_schedule schedule,
|
|
- const mit_des_cblock ivec)
|
|
-{
|
|
- unsigned DES_INT32 left, right;
|
|
- const unsigned DES_INT32 *kp;
|
|
- const unsigned char *ip;
|
|
- unsigned char *op;
|
|
- unsigned DES_INT32 ocipherl, ocipherr;
|
|
- unsigned DES_INT32 cipherl, cipherr;
|
|
-
|
|
- /*
|
|
- * Get key pointer here. This won't need to be reinitialized
|
|
- */
|
|
- kp = (const unsigned DES_INT32 *)schedule;
|
|
-
|
|
- /*
|
|
- * Decrypting is harder than encrypting because of
|
|
- * the necessity of remembering a lot more things.
|
|
- * Should think about this a little more...
|
|
- */
|
|
-
|
|
- if (length <= 0)
|
|
- return;
|
|
-
|
|
- /*
|
|
- * Prime the old cipher with ivec.
|
|
- */
|
|
- ip = ivec;
|
|
- GET_HALF_BLOCK(ocipherl, ip);
|
|
- GET_HALF_BLOCK(ocipherr, ip);
|
|
-
|
|
- /*
|
|
- * Now do this in earnest until we run out of length.
|
|
- */
|
|
- ip = *in;
|
|
- op = *out;
|
|
- for (;;) { /* check done inside loop */
|
|
- /*
|
|
- * Read a block from the input into left and
|
|
- * right. Save this cipher block for later.
|
|
- */
|
|
- GET_HALF_BLOCK(left, ip);
|
|
- GET_HALF_BLOCK(right, ip);
|
|
- cipherl = left;
|
|
- cipherr = right;
|
|
-
|
|
- /*
|
|
- * Decrypt this.
|
|
- */
|
|
- DES_DO_DECRYPT(left, right, kp);
|
|
-
|
|
- /*
|
|
- * Xor with the old cipher to get plain
|
|
- * text. Output 8 or less bytes of this.
|
|
- */
|
|
- left ^= ocipherl;
|
|
- right ^= ocipherr;
|
|
- if (length > 8) {
|
|
- length -= 8;
|
|
- PUT_HALF_BLOCK(left, op);
|
|
- PUT_HALF_BLOCK(right, op);
|
|
- /*
|
|
- * Save current cipher block here
|
|
- */
|
|
- ocipherl = cipherl;
|
|
- ocipherr = cipherr;
|
|
- } else {
|
|
- /*
|
|
- * Trouble here. Start at end of output,
|
|
- * work backwards.
|
|
- */
|
|
- op += (int) length;
|
|
- switch(length) {
|
|
- case 8:
|
|
- *(--op) = (unsigned char) (right & 0xff);
|
|
- case 7:
|
|
- *(--op) = (unsigned char) ((right >> 8) & 0xff);
|
|
- case 6:
|
|
- *(--op) = (unsigned char) ((right >> 16) & 0xff);
|
|
- case 5:
|
|
- *(--op) = (unsigned char) ((right >> 24) & 0xff);
|
|
- case 4:
|
|
- *(--op) = (unsigned char) (left & 0xff);
|
|
- case 3:
|
|
- *(--op) = (unsigned char) ((left >> 8) & 0xff);
|
|
- case 2:
|
|
- *(--op) = (unsigned char) ((left >> 16) & 0xff);
|
|
- case 1:
|
|
- *(--op) = (unsigned char) ((left >> 24) & 0xff);
|
|
- break;
|
|
- }
|
|
- break; /* we're done */
|
|
- }
|
|
- }
|
|
-}
|
|
-
|
|
-int
|
|
-mit_des_cbc_encrypt(const mit_des_cblock *in, mit_des_cblock *out,
|
|
- unsigned long length, const mit_des_key_schedule schedule,
|
|
- const mit_des_cblock ivec, int enc)
|
|
-{
|
|
- /*
|
|
- * Deal with encryption and decryption separately.
|
|
- */
|
|
- if (enc)
|
|
- des_cbc_encrypt(in, out, length, schedule, ivec);
|
|
- else
|
|
- des_cbc_decrypt(in, out, length, schedule, ivec);
|
|
- return 0;
|
|
-}
|
|
diff --git a/src/lib/crypto/builtin/des/f_cksum.c b/src/lib/crypto/builtin/des/f_cksum.c
|
|
deleted file mode 100644
|
|
index 615a947f4a..0000000000
|
|
--- a/src/lib/crypto/builtin/des/f_cksum.c
|
|
+++ /dev/null
|
|
@@ -1,141 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/f_cksum.c */
|
|
-/*
|
|
- * Copyright (C) 1990 by the Massachusetts Institute of Technology.
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-
|
|
-/* DES implementation donated by Dennis Ferguson */
|
|
-
|
|
-/*
|
|
- * des_cbc_cksum.c - compute an 8 byte checksum using DES in CBC mode
|
|
- */
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-#include "f_tables.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES
|
|
-
|
|
-/*
|
|
- * This routine performs DES cipher-block-chaining checksum operation,
|
|
- * a.k.a. Message Authentication Code. It ALWAYS encrypts from input
|
|
- * to a single 64 bit output MAC checksum.
|
|
- *
|
|
- * The key schedule is passed as an arg, as well as the cleartext or
|
|
- * ciphertext. The cleartext and ciphertext should be in host order.
|
|
- *
|
|
- * NOTE-- the output is ALWAYS 8 bytes long. If not enough space was
|
|
- * provided, your program will get trashed.
|
|
- *
|
|
- * The input is null padded, at the end (highest addr), to an integral
|
|
- * multiple of eight bytes.
|
|
- */
|
|
-
|
|
-unsigned long
|
|
-mit_des_cbc_cksum(const krb5_octet *in, krb5_octet *out,
|
|
- unsigned long length, const mit_des_key_schedule schedule,
|
|
- const krb5_octet *ivec)
|
|
-{
|
|
- unsigned DES_INT32 left, right;
|
|
- const unsigned DES_INT32 *kp;
|
|
- const unsigned char *ip;
|
|
- unsigned char *op;
|
|
- DES_INT32 len;
|
|
-
|
|
- /*
|
|
- * Initialize left and right with the contents of the initial
|
|
- * vector.
|
|
- */
|
|
- ip = ivec;
|
|
- GET_HALF_BLOCK(left, ip);
|
|
- GET_HALF_BLOCK(right, ip);
|
|
-
|
|
- /*
|
|
- * Suitably initialized, now work the length down 8 bytes
|
|
- * at a time.
|
|
- */
|
|
- ip = in;
|
|
- len = length;
|
|
- while (len > 0) {
|
|
- /*
|
|
- * Get more input, xor it in. If the length is
|
|
- * greater than or equal to 8 this is straight
|
|
- * forward. Otherwise we have to fart around.
|
|
- */
|
|
- if (len >= 8) {
|
|
- unsigned DES_INT32 temp;
|
|
- GET_HALF_BLOCK(temp, ip);
|
|
- left ^= temp;
|
|
- GET_HALF_BLOCK(temp, ip);
|
|
- right ^= temp;
|
|
- len -= 8;
|
|
- } else {
|
|
- /*
|
|
- * Oh, shoot. We need to pad the
|
|
- * end with zeroes. Work backwards
|
|
- * to do this.
|
|
- */
|
|
- ip += (int) len;
|
|
- switch(len) {
|
|
- case 7:
|
|
- right ^= (*(--ip) & FF_UINT32) << 8;
|
|
- case 6:
|
|
- right ^= (*(--ip) & FF_UINT32) << 16;
|
|
- case 5:
|
|
- right ^= (*(--ip) & FF_UINT32) << 24;
|
|
- case 4:
|
|
- left ^= *(--ip) & FF_UINT32;
|
|
- case 3:
|
|
- left ^= (*(--ip) & FF_UINT32) << 8;
|
|
- case 2:
|
|
- left ^= (*(--ip) & FF_UINT32) << 16;
|
|
- case 1:
|
|
- left ^= (*(--ip) & FF_UINT32) << 24;
|
|
- break;
|
|
- }
|
|
- len = 0;
|
|
- }
|
|
-
|
|
- /*
|
|
- * Encrypt what we have
|
|
- */
|
|
- kp = (const unsigned DES_INT32 *)schedule;
|
|
- DES_DO_ENCRYPT(left, right, kp);
|
|
- }
|
|
-
|
|
- /*
|
|
- * Done. Left and right have the checksum. Put it into
|
|
- * the output.
|
|
- */
|
|
- op = out;
|
|
- PUT_HALF_BLOCK(left, op);
|
|
- PUT_HALF_BLOCK(right, op);
|
|
-
|
|
- /*
|
|
- * Return right. I'll bet the MIT code returns this
|
|
- * inconsistantly (with the low order byte of the checksum
|
|
- * not always in the low order byte of the DES_INT32). We won't.
|
|
- */
|
|
- return right & 0xFFFFFFFFUL;
|
|
-}
|
|
-
|
|
-#endif /* K5_BUILTIN_DES */
|
|
diff --git a/src/lib/crypto/builtin/des/f_parity.c b/src/lib/crypto/builtin/des/f_parity.c
|
|
deleted file mode 100644
|
|
index a658878f6f..0000000000
|
|
--- a/src/lib/crypto/builtin/des/f_parity.c
|
|
+++ /dev/null
|
|
@@ -1,64 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/*
|
|
- * These routines check and fix parity of encryption keys for the DES
|
|
- * algorithm.
|
|
- *
|
|
- * They are a replacement for routines in key_parity.c, that don't require
|
|
- * the table building that they do.
|
|
- *
|
|
- * Mark Eichin -- Cygnus Support
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES_KEY_PARITY
|
|
-
|
|
-/*
|
|
- * des_fixup_key_parity: Forces odd parity per byte; parity is bits
|
|
- * 8,16,...64 in des order, implies 0, 8, 16, ...
|
|
- * vax order.
|
|
- */
|
|
-#define smask(step) ((1<<step)-1)
|
|
-#define pstep(x,step) (((x)&smask(step))^(((x)>>step)&smask(step)))
|
|
-#define parity_char(x) pstep(pstep(pstep((x),4),2),1)
|
|
-
|
|
-void
|
|
-mit_des_fixup_key_parity(mit_des_cblock key)
|
|
-{
|
|
- unsigned int i;
|
|
- for (i=0; i<sizeof(mit_des_cblock); i++)
|
|
- {
|
|
- key[i] &= 0xfe;
|
|
- key[i] |= 1^parity_char(key[i]);
|
|
- }
|
|
-
|
|
- return;
|
|
-}
|
|
-
|
|
-#endif /* K5_BUILTIN_DES_KEY_PARITY */
|
|
-
|
|
-#ifdef K5_BUILTIN_DES
|
|
-
|
|
-/*
|
|
- * des_check_key_parity: returns true iff key has the correct des parity.
|
|
- * See des_fix_key_parity for the definition of
|
|
- * correct des parity.
|
|
- */
|
|
-int
|
|
-mit_des_check_key_parity(mit_des_cblock key)
|
|
-{
|
|
- unsigned int i;
|
|
-
|
|
- for (i=0; i<sizeof(mit_des_cblock); i++)
|
|
- {
|
|
- if((key[i] & 1) == parity_char(0xfe&key[i]))
|
|
- {
|
|
- return 0;
|
|
- }
|
|
- }
|
|
-
|
|
- return(1);
|
|
-}
|
|
-
|
|
-#endif /* K5_BUILTIN_DES */
|
|
diff --git a/src/lib/crypto/builtin/des/f_sched.c b/src/lib/crypto/builtin/des/f_sched.c
|
|
deleted file mode 100644
|
|
index bbc88a1c8d..0000000000
|
|
--- a/src/lib/crypto/builtin/des/f_sched.c
|
|
+++ /dev/null
|
|
@@ -1,363 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/f_sched.c */
|
|
-/*
|
|
- * Copyright (C) 1990 by the Massachusetts Institute of Technology.
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-
|
|
-/* DES implementation donated by Dennis Ferguson */
|
|
-
|
|
-/*
|
|
- * des_make_sched.c - permute a DES key, returning the resulting key schedule
|
|
- */
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES
|
|
-
|
|
-/*
|
|
- * Permuted choice 1 tables. These are used to extract bits
|
|
- * from the left and right parts of the key to form Ci and Di.
|
|
- * The code that uses these tables knows which bits from which
|
|
- * part of each key are used to form Ci and Di.
|
|
- */
|
|
-static const unsigned DES_INT32 PC1_CL[8] = {
|
|
- 0x00000000, 0x00000010, 0x00001000, 0x00001010,
|
|
- 0x00100000, 0x00100010, 0x00101000, 0x00101010
|
|
-};
|
|
-
|
|
-static const unsigned DES_INT32 PC1_DL[16] = {
|
|
- 0x00000000, 0x00100000, 0x00001000, 0x00101000,
|
|
- 0x00000010, 0x00100010, 0x00001010, 0x00101010,
|
|
- 0x00000001, 0x00100001, 0x00001001, 0x00101001,
|
|
- 0x00000011, 0x00100011, 0x00001011, 0x00101011
|
|
-};
|
|
-
|
|
-static const unsigned DES_INT32 PC1_CR[16] = {
|
|
- 0x00000000, 0x00000001, 0x00000100, 0x00000101,
|
|
- 0x00010000, 0x00010001, 0x00010100, 0x00010101,
|
|
- 0x01000000, 0x01000001, 0x01000100, 0x01000101,
|
|
- 0x01010000, 0x01010001, 0x01010100, 0x01010101
|
|
-};
|
|
-
|
|
-static const unsigned DES_INT32 PC1_DR[8] = {
|
|
- 0x00000000, 0x01000000, 0x00010000, 0x01010000,
|
|
- 0x00000100, 0x01000100, 0x00010100, 0x01010100
|
|
-};
|
|
-
|
|
-
|
|
-/*
|
|
- * At the start of some iterations of the key schedule we do
|
|
- * a circular left shift by one place, while for others we do a shift by
|
|
- * two places. This has bits set for the iterations where we do 2 bit
|
|
- * shifts, starting at the low order bit.
|
|
- */
|
|
-#define TWO_BIT_SHIFTS 0x7efc
|
|
-
|
|
-/*
|
|
- * Permuted choice 2 tables. The first actually produces the low order
|
|
- * 24 bits of the subkey Ki from the 28 bit value of Ci. The second produces
|
|
- * the high order 24 bits from Di. The tables are indexed by six bit
|
|
- * segments of Ci and Di respectively. The code is handcrafted to compute
|
|
- * the appropriate 6 bit chunks.
|
|
- *
|
|
- * Note that for ease of computation, the 24 bit values are produced with
|
|
- * six bits going into each byte. Note also that the table has been byte
|
|
- * rearranged to produce keys which match the order we will apply them
|
|
- * in in the des code.
|
|
- */
|
|
-static const unsigned DES_INT32 PC2_C[4][64] = {
|
|
- {
|
|
- 0x00000000, 0x00000004, 0x00010000, 0x00010004,
|
|
- 0x00000400, 0x00000404, 0x00010400, 0x00010404,
|
|
- 0x00000020, 0x00000024, 0x00010020, 0x00010024,
|
|
- 0x00000420, 0x00000424, 0x00010420, 0x00010424,
|
|
- 0x01000000, 0x01000004, 0x01010000, 0x01010004,
|
|
- 0x01000400, 0x01000404, 0x01010400, 0x01010404,
|
|
- 0x01000020, 0x01000024, 0x01010020, 0x01010024,
|
|
- 0x01000420, 0x01000424, 0x01010420, 0x01010424,
|
|
- 0x00020000, 0x00020004, 0x00030000, 0x00030004,
|
|
- 0x00020400, 0x00020404, 0x00030400, 0x00030404,
|
|
- 0x00020020, 0x00020024, 0x00030020, 0x00030024,
|
|
- 0x00020420, 0x00020424, 0x00030420, 0x00030424,
|
|
- 0x01020000, 0x01020004, 0x01030000, 0x01030004,
|
|
- 0x01020400, 0x01020404, 0x01030400, 0x01030404,
|
|
- 0x01020020, 0x01020024, 0x01030020, 0x01030024,
|
|
- 0x01020420, 0x01020424, 0x01030420, 0x01030424,
|
|
- },
|
|
- {
|
|
- 0x00000000, 0x02000000, 0x00000800, 0x02000800,
|
|
- 0x00080000, 0x02080000, 0x00080800, 0x02080800,
|
|
- 0x00000001, 0x02000001, 0x00000801, 0x02000801,
|
|
- 0x00080001, 0x02080001, 0x00080801, 0x02080801,
|
|
- 0x00000100, 0x02000100, 0x00000900, 0x02000900,
|
|
- 0x00080100, 0x02080100, 0x00080900, 0x02080900,
|
|
- 0x00000101, 0x02000101, 0x00000901, 0x02000901,
|
|
- 0x00080101, 0x02080101, 0x00080901, 0x02080901,
|
|
- 0x10000000, 0x12000000, 0x10000800, 0x12000800,
|
|
- 0x10080000, 0x12080000, 0x10080800, 0x12080800,
|
|
- 0x10000001, 0x12000001, 0x10000801, 0x12000801,
|
|
- 0x10080001, 0x12080001, 0x10080801, 0x12080801,
|
|
- 0x10000100, 0x12000100, 0x10000900, 0x12000900,
|
|
- 0x10080100, 0x12080100, 0x10080900, 0x12080900,
|
|
- 0x10000101, 0x12000101, 0x10000901, 0x12000901,
|
|
- 0x10080101, 0x12080101, 0x10080901, 0x12080901,
|
|
- },
|
|
- {
|
|
- 0x00000000, 0x00040000, 0x00002000, 0x00042000,
|
|
- 0x00100000, 0x00140000, 0x00102000, 0x00142000,
|
|
- 0x20000000, 0x20040000, 0x20002000, 0x20042000,
|
|
- 0x20100000, 0x20140000, 0x20102000, 0x20142000,
|
|
- 0x00000008, 0x00040008, 0x00002008, 0x00042008,
|
|
- 0x00100008, 0x00140008, 0x00102008, 0x00142008,
|
|
- 0x20000008, 0x20040008, 0x20002008, 0x20042008,
|
|
- 0x20100008, 0x20140008, 0x20102008, 0x20142008,
|
|
- 0x00200000, 0x00240000, 0x00202000, 0x00242000,
|
|
- 0x00300000, 0x00340000, 0x00302000, 0x00342000,
|
|
- 0x20200000, 0x20240000, 0x20202000, 0x20242000,
|
|
- 0x20300000, 0x20340000, 0x20302000, 0x20342000,
|
|
- 0x00200008, 0x00240008, 0x00202008, 0x00242008,
|
|
- 0x00300008, 0x00340008, 0x00302008, 0x00342008,
|
|
- 0x20200008, 0x20240008, 0x20202008, 0x20242008,
|
|
- 0x20300008, 0x20340008, 0x20302008, 0x20342008,
|
|
- },
|
|
- {
|
|
- 0x00000000, 0x00000010, 0x08000000, 0x08000010,
|
|
- 0x00000200, 0x00000210, 0x08000200, 0x08000210,
|
|
- 0x00000002, 0x00000012, 0x08000002, 0x08000012,
|
|
- 0x00000202, 0x00000212, 0x08000202, 0x08000212,
|
|
- 0x04000000, 0x04000010, 0x0c000000, 0x0c000010,
|
|
- 0x04000200, 0x04000210, 0x0c000200, 0x0c000210,
|
|
- 0x04000002, 0x04000012, 0x0c000002, 0x0c000012,
|
|
- 0x04000202, 0x04000212, 0x0c000202, 0x0c000212,
|
|
- 0x00001000, 0x00001010, 0x08001000, 0x08001010,
|
|
- 0x00001200, 0x00001210, 0x08001200, 0x08001210,
|
|
- 0x00001002, 0x00001012, 0x08001002, 0x08001012,
|
|
- 0x00001202, 0x00001212, 0x08001202, 0x08001212,
|
|
- 0x04001000, 0x04001010, 0x0c001000, 0x0c001010,
|
|
- 0x04001200, 0x04001210, 0x0c001200, 0x0c001210,
|
|
- 0x04001002, 0x04001012, 0x0c001002, 0x0c001012,
|
|
- 0x04001202, 0x04001212, 0x0c001202, 0x0c001212
|
|
- },
|
|
-};
|
|
-
|
|
-static const unsigned DES_INT32 PC2_D[4][64] = {
|
|
- {
|
|
- 0x00000000, 0x02000000, 0x00020000, 0x02020000,
|
|
- 0x00000100, 0x02000100, 0x00020100, 0x02020100,
|
|
- 0x00000008, 0x02000008, 0x00020008, 0x02020008,
|
|
- 0x00000108, 0x02000108, 0x00020108, 0x02020108,
|
|
- 0x00200000, 0x02200000, 0x00220000, 0x02220000,
|
|
- 0x00200100, 0x02200100, 0x00220100, 0x02220100,
|
|
- 0x00200008, 0x02200008, 0x00220008, 0x02220008,
|
|
- 0x00200108, 0x02200108, 0x00220108, 0x02220108,
|
|
- 0x00000200, 0x02000200, 0x00020200, 0x02020200,
|
|
- 0x00000300, 0x02000300, 0x00020300, 0x02020300,
|
|
- 0x00000208, 0x02000208, 0x00020208, 0x02020208,
|
|
- 0x00000308, 0x02000308, 0x00020308, 0x02020308,
|
|
- 0x00200200, 0x02200200, 0x00220200, 0x02220200,
|
|
- 0x00200300, 0x02200300, 0x00220300, 0x02220300,
|
|
- 0x00200208, 0x02200208, 0x00220208, 0x02220208,
|
|
- 0x00200308, 0x02200308, 0x00220308, 0x02220308,
|
|
- },
|
|
- {
|
|
- 0x00000000, 0x00001000, 0x00000020, 0x00001020,
|
|
- 0x00100000, 0x00101000, 0x00100020, 0x00101020,
|
|
- 0x08000000, 0x08001000, 0x08000020, 0x08001020,
|
|
- 0x08100000, 0x08101000, 0x08100020, 0x08101020,
|
|
- 0x00000004, 0x00001004, 0x00000024, 0x00001024,
|
|
- 0x00100004, 0x00101004, 0x00100024, 0x00101024,
|
|
- 0x08000004, 0x08001004, 0x08000024, 0x08001024,
|
|
- 0x08100004, 0x08101004, 0x08100024, 0x08101024,
|
|
- 0x00000400, 0x00001400, 0x00000420, 0x00001420,
|
|
- 0x00100400, 0x00101400, 0x00100420, 0x00101420,
|
|
- 0x08000400, 0x08001400, 0x08000420, 0x08001420,
|
|
- 0x08100400, 0x08101400, 0x08100420, 0x08101420,
|
|
- 0x00000404, 0x00001404, 0x00000424, 0x00001424,
|
|
- 0x00100404, 0x00101404, 0x00100424, 0x00101424,
|
|
- 0x08000404, 0x08001404, 0x08000424, 0x08001424,
|
|
- 0x08100404, 0x08101404, 0x08100424, 0x08101424,
|
|
- },
|
|
- {
|
|
- 0x00000000, 0x10000000, 0x00010000, 0x10010000,
|
|
- 0x00000002, 0x10000002, 0x00010002, 0x10010002,
|
|
- 0x00002000, 0x10002000, 0x00012000, 0x10012000,
|
|
- 0x00002002, 0x10002002, 0x00012002, 0x10012002,
|
|
- 0x00040000, 0x10040000, 0x00050000, 0x10050000,
|
|
- 0x00040002, 0x10040002, 0x00050002, 0x10050002,
|
|
- 0x00042000, 0x10042000, 0x00052000, 0x10052000,
|
|
- 0x00042002, 0x10042002, 0x00052002, 0x10052002,
|
|
- 0x20000000, 0x30000000, 0x20010000, 0x30010000,
|
|
- 0x20000002, 0x30000002, 0x20010002, 0x30010002,
|
|
- 0x20002000, 0x30002000, 0x20012000, 0x30012000,
|
|
- 0x20002002, 0x30002002, 0x20012002, 0x30012002,
|
|
- 0x20040000, 0x30040000, 0x20050000, 0x30050000,
|
|
- 0x20040002, 0x30040002, 0x20050002, 0x30050002,
|
|
- 0x20042000, 0x30042000, 0x20052000, 0x30052000,
|
|
- 0x20042002, 0x30042002, 0x20052002, 0x30052002,
|
|
- },
|
|
- {
|
|
- 0x00000000, 0x04000000, 0x00000001, 0x04000001,
|
|
- 0x01000000, 0x05000000, 0x01000001, 0x05000001,
|
|
- 0x00000010, 0x04000010, 0x00000011, 0x04000011,
|
|
- 0x01000010, 0x05000010, 0x01000011, 0x05000011,
|
|
- 0x00080000, 0x04080000, 0x00080001, 0x04080001,
|
|
- 0x01080000, 0x05080000, 0x01080001, 0x05080001,
|
|
- 0x00080010, 0x04080010, 0x00080011, 0x04080011,
|
|
- 0x01080010, 0x05080010, 0x01080011, 0x05080011,
|
|
- 0x00000800, 0x04000800, 0x00000801, 0x04000801,
|
|
- 0x01000800, 0x05000800, 0x01000801, 0x05000801,
|
|
- 0x00000810, 0x04000810, 0x00000811, 0x04000811,
|
|
- 0x01000810, 0x05000810, 0x01000811, 0x05000811,
|
|
- 0x00080800, 0x04080800, 0x00080801, 0x04080801,
|
|
- 0x01080800, 0x05080800, 0x01080801, 0x05080801,
|
|
- 0x00080810, 0x04080810, 0x00080811, 0x04080811,
|
|
- 0x01080810, 0x05080810, 0x01080811, 0x05080811
|
|
- },
|
|
-};
|
|
-
|
|
-
|
|
-
|
|
-/*
|
|
- * Permute the key to give us our key schedule.
|
|
- */
|
|
-int
|
|
-mit_des_make_key_sched(mit_des_cblock key, mit_des_key_schedule schedule)
|
|
-{
|
|
- unsigned DES_INT32 c, d;
|
|
-
|
|
- {
|
|
- /*
|
|
- * Need a pointer for the keys and a temporary DES_INT32
|
|
- */
|
|
- const unsigned char *k;
|
|
- unsigned DES_INT32 tmp;
|
|
-
|
|
- /*
|
|
- * Fetch the key into something we can work with
|
|
- */
|
|
- k = key;
|
|
-
|
|
- /*
|
|
- * The first permutted choice gives us the 28 bits for C0 and
|
|
- * 28 for D0. C0 gets 12 bits from the left key and 16 from
|
|
- * the right, while D0 gets 16 from the left and 12 from the
|
|
- * right. The code knows which bits go where.
|
|
- */
|
|
- tmp = load_32_be(k), k += 4;
|
|
-
|
|
- c = PC1_CL[(tmp >> 29) & 0x7]
|
|
- | (PC1_CL[(tmp >> 21) & 0x7] << 1)
|
|
- | (PC1_CL[(tmp >> 13) & 0x7] << 2)
|
|
- | (PC1_CL[(tmp >> 5) & 0x7] << 3);
|
|
- d = PC1_DL[(tmp >> 25) & 0xf]
|
|
- | (PC1_DL[(tmp >> 17) & 0xf] << 1)
|
|
- | (PC1_DL[(tmp >> 9) & 0xf] << 2)
|
|
- | (PC1_DL[(tmp >> 1) & 0xf] << 3);
|
|
-
|
|
- tmp = load_32_be(k), k += 4;
|
|
-
|
|
- c |= PC1_CR[(tmp >> 28) & 0xf]
|
|
- | (PC1_CR[(tmp >> 20) & 0xf] << 1)
|
|
- | (PC1_CR[(tmp >> 12) & 0xf] << 2)
|
|
- | (PC1_CR[(tmp >> 4) & 0xf] << 3);
|
|
- d |= PC1_DR[(tmp >> 25) & 0x7]
|
|
- | (PC1_DR[(tmp >> 17) & 0x7] << 1)
|
|
- | (PC1_DR[(tmp >> 9) & 0x7] << 2)
|
|
- | (PC1_DR[(tmp >> 1) & 0x7] << 3);
|
|
- }
|
|
-
|
|
- {
|
|
- /*
|
|
- * Need several temporaries in here
|
|
- */
|
|
- unsigned DES_INT32 ltmp, rtmp;
|
|
- unsigned DES_INT32 *k;
|
|
- int two_bit_shifts;
|
|
- int i;
|
|
- /*
|
|
- * Now iterate to compute the key schedule. Note that we
|
|
- * record the entire set of subkeys in 6 bit chunks since
|
|
- * they are used that way. At 6 bits/char, we need
|
|
- * 48/6 char's/subkey * 16 subkeys/encryption == 128 bytes.
|
|
- * The schedule must be this big.
|
|
- */
|
|
- k = (unsigned DES_INT32 *)schedule;
|
|
- two_bit_shifts = TWO_BIT_SHIFTS;
|
|
- for (i = 16; i > 0; i--) {
|
|
- /*
|
|
- * Do the rotation. One bit and two bit rotations
|
|
- * are done separately. Note C and D are 28 bits.
|
|
- */
|
|
- if (two_bit_shifts & 0x1) {
|
|
- c = ((c << 2) & 0xffffffc) | (c >> 26);
|
|
- d = ((d << 2) & 0xffffffc) | (d >> 26);
|
|
- } else {
|
|
- c = ((c << 1) & 0xffffffe) | (c >> 27);
|
|
- d = ((d << 1) & 0xffffffe) | (d >> 27);
|
|
- }
|
|
- two_bit_shifts >>= 1;
|
|
-
|
|
- /*
|
|
- * Apply permutted choice 2 to C to get the first
|
|
- * 24 bits worth of keys. Note that bits 9, 18, 22
|
|
- * and 25 (using DES numbering) in C are unused. The
|
|
- * shift-mask stuff is done to delete these bits from
|
|
- * the indices, since this cuts the table size in half.
|
|
- *
|
|
- * The table is torqued, by the way. If the standard
|
|
- * byte order for this (high to low order) is 1234,
|
|
- * the table actually gives us 4132.
|
|
- */
|
|
- ltmp = PC2_C[0][((c >> 22) & 0x3f)]
|
|
- | PC2_C[1][((c >> 15) & 0xf) | ((c >> 16) & 0x30)]
|
|
- | PC2_C[2][((c >> 4) & 0x3) | ((c >> 9) & 0x3c)]
|
|
- | PC2_C[3][((c ) & 0x7) | ((c >> 4) & 0x38)];
|
|
- /*
|
|
- * Apply permutted choice 2 to D to get the other half.
|
|
- * Here, bits 7, 10, 15 and 26 go unused. The sqeezing
|
|
- * actually turns out to be cheaper here.
|
|
- *
|
|
- * This table is similarly torqued. If the standard
|
|
- * byte order is 5678, the table has the bytes permuted
|
|
- * to give us 7685.
|
|
- */
|
|
- rtmp = PC2_D[0][((d >> 22) & 0x3f)]
|
|
- | PC2_D[1][((d >> 14) & 0xf) | ((d >> 15) & 0x30)]
|
|
- | PC2_D[2][((d >> 7) & 0x3f)]
|
|
- | PC2_D[3][((d ) & 0x3) | ((d >> 1) & 0x3c)];
|
|
-
|
|
- /*
|
|
- * Make up two words of the key schedule, with a
|
|
- * byte order which is convenient for the DES
|
|
- * inner loop. The high order (first) word will
|
|
- * hold bytes 7135 (high to low order) while the
|
|
- * second holds bytes 4682.
|
|
- */
|
|
- *k++ = (ltmp & 0x00ffff00) | (rtmp & 0xff0000ff);
|
|
- *k++ = (ltmp & 0xff0000ff) | (rtmp & 0x00ffff00);
|
|
- }
|
|
- }
|
|
- return (0);
|
|
-}
|
|
-
|
|
-#endif /* K5_BUILTIN_DES */
|
|
diff --git a/src/lib/crypto/builtin/des/f_tables.c b/src/lib/crypto/builtin/des/f_tables.c
|
|
deleted file mode 100644
|
|
index e50ab1fc60..0000000000
|
|
--- a/src/lib/crypto/builtin/des/f_tables.c
|
|
+++ /dev/null
|
|
@@ -1,375 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/f_tables.c */
|
|
-/*
|
|
- * Copyright (C) 1990 by the Massachusetts Institute of Technology.
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-
|
|
-/* DES implementation donated by Dennis Ferguson */
|
|
-
|
|
-/*
|
|
- * des_tables.c - precomputed tables used for the DES cipher function
|
|
- */
|
|
-
|
|
-/*
|
|
- * Include the header file so something will complain if the
|
|
- * declarations get out of sync
|
|
- */
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-#include "f_tables.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES
|
|
-
|
|
-/*
|
|
- * These tables may be declared const if you want. Many compilers
|
|
- * don't support this, though.
|
|
- */
|
|
-
|
|
-/*
|
|
- * The DES algorithm which uses these is intended to be fairly speedy
|
|
- * at the expense of some memory. All the standard hacks are used.
|
|
- * The S boxes and the P permutation are precomputed into one table.
|
|
- * The E box never actually appears explicitly since it is easy to apply
|
|
- * this algorithmically as needed. The initial permutation and final
|
|
- * (inverse initial) permutation are computed from tables designed to
|
|
- * permute one byte at a time. This should run pretty fast on machines
|
|
- * with 32 bit words and bit field/multiple bit shift instructions which
|
|
- * are fast.
|
|
- */
|
|
-
|
|
-/*
|
|
- * The initial permutation array. This is used to compute both the
|
|
- * left and the right halves of the initial permutation using bytes
|
|
- * from words made from the following operations:
|
|
- *
|
|
- * ((left & 0x55555555) << 1) | (right & 0x55555555) for left half
|
|
- * (left & 0xaaaaaaaa) | ((right & 0xaaaaaaaa) >> 1) for right half
|
|
- *
|
|
- * The scheme is that we index into the table using each byte. The
|
|
- * result from the high order byte is or'd with the result from the
|
|
- * next byte shifted left once is or'd with the result from the next
|
|
- * byte shifted left twice if or'd with the result from the low order
|
|
- * byte shifted left by three. Clear?
|
|
- */
|
|
-
|
|
-const unsigned DES_INT32 des_IP_table[256] = {
|
|
- 0x00000000, 0x00000010, 0x00000001, 0x00000011,
|
|
- 0x00001000, 0x00001010, 0x00001001, 0x00001011,
|
|
- 0x00000100, 0x00000110, 0x00000101, 0x00000111,
|
|
- 0x00001100, 0x00001110, 0x00001101, 0x00001111,
|
|
- 0x00100000, 0x00100010, 0x00100001, 0x00100011,
|
|
- 0x00101000, 0x00101010, 0x00101001, 0x00101011,
|
|
- 0x00100100, 0x00100110, 0x00100101, 0x00100111,
|
|
- 0x00101100, 0x00101110, 0x00101101, 0x00101111,
|
|
- 0x00010000, 0x00010010, 0x00010001, 0x00010011,
|
|
- 0x00011000, 0x00011010, 0x00011001, 0x00011011,
|
|
- 0x00010100, 0x00010110, 0x00010101, 0x00010111,
|
|
- 0x00011100, 0x00011110, 0x00011101, 0x00011111,
|
|
- 0x00110000, 0x00110010, 0x00110001, 0x00110011,
|
|
- 0x00111000, 0x00111010, 0x00111001, 0x00111011,
|
|
- 0x00110100, 0x00110110, 0x00110101, 0x00110111,
|
|
- 0x00111100, 0x00111110, 0x00111101, 0x00111111,
|
|
- 0x10000000, 0x10000010, 0x10000001, 0x10000011,
|
|
- 0x10001000, 0x10001010, 0x10001001, 0x10001011,
|
|
- 0x10000100, 0x10000110, 0x10000101, 0x10000111,
|
|
- 0x10001100, 0x10001110, 0x10001101, 0x10001111,
|
|
- 0x10100000, 0x10100010, 0x10100001, 0x10100011,
|
|
- 0x10101000, 0x10101010, 0x10101001, 0x10101011,
|
|
- 0x10100100, 0x10100110, 0x10100101, 0x10100111,
|
|
- 0x10101100, 0x10101110, 0x10101101, 0x10101111,
|
|
- 0x10010000, 0x10010010, 0x10010001, 0x10010011,
|
|
- 0x10011000, 0x10011010, 0x10011001, 0x10011011,
|
|
- 0x10010100, 0x10010110, 0x10010101, 0x10010111,
|
|
- 0x10011100, 0x10011110, 0x10011101, 0x10011111,
|
|
- 0x10110000, 0x10110010, 0x10110001, 0x10110011,
|
|
- 0x10111000, 0x10111010, 0x10111001, 0x10111011,
|
|
- 0x10110100, 0x10110110, 0x10110101, 0x10110111,
|
|
- 0x10111100, 0x10111110, 0x10111101, 0x10111111,
|
|
- 0x01000000, 0x01000010, 0x01000001, 0x01000011,
|
|
- 0x01001000, 0x01001010, 0x01001001, 0x01001011,
|
|
- 0x01000100, 0x01000110, 0x01000101, 0x01000111,
|
|
- 0x01001100, 0x01001110, 0x01001101, 0x01001111,
|
|
- 0x01100000, 0x01100010, 0x01100001, 0x01100011,
|
|
- 0x01101000, 0x01101010, 0x01101001, 0x01101011,
|
|
- 0x01100100, 0x01100110, 0x01100101, 0x01100111,
|
|
- 0x01101100, 0x01101110, 0x01101101, 0x01101111,
|
|
- 0x01010000, 0x01010010, 0x01010001, 0x01010011,
|
|
- 0x01011000, 0x01011010, 0x01011001, 0x01011011,
|
|
- 0x01010100, 0x01010110, 0x01010101, 0x01010111,
|
|
- 0x01011100, 0x01011110, 0x01011101, 0x01011111,
|
|
- 0x01110000, 0x01110010, 0x01110001, 0x01110011,
|
|
- 0x01111000, 0x01111010, 0x01111001, 0x01111011,
|
|
- 0x01110100, 0x01110110, 0x01110101, 0x01110111,
|
|
- 0x01111100, 0x01111110, 0x01111101, 0x01111111,
|
|
- 0x11000000, 0x11000010, 0x11000001, 0x11000011,
|
|
- 0x11001000, 0x11001010, 0x11001001, 0x11001011,
|
|
- 0x11000100, 0x11000110, 0x11000101, 0x11000111,
|
|
- 0x11001100, 0x11001110, 0x11001101, 0x11001111,
|
|
- 0x11100000, 0x11100010, 0x11100001, 0x11100011,
|
|
- 0x11101000, 0x11101010, 0x11101001, 0x11101011,
|
|
- 0x11100100, 0x11100110, 0x11100101, 0x11100111,
|
|
- 0x11101100, 0x11101110, 0x11101101, 0x11101111,
|
|
- 0x11010000, 0x11010010, 0x11010001, 0x11010011,
|
|
- 0x11011000, 0x11011010, 0x11011001, 0x11011011,
|
|
- 0x11010100, 0x11010110, 0x11010101, 0x11010111,
|
|
- 0x11011100, 0x11011110, 0x11011101, 0x11011111,
|
|
- 0x11110000, 0x11110010, 0x11110001, 0x11110011,
|
|
- 0x11111000, 0x11111010, 0x11111001, 0x11111011,
|
|
- 0x11110100, 0x11110110, 0x11110101, 0x11110111,
|
|
- 0x11111100, 0x11111110, 0x11111101, 0x11111111
|
|
-};
|
|
-
|
|
-/*
|
|
- * The final permutation array. Like the IP array, used
|
|
- * to compute both the left and right results from the bytes
|
|
- * of words computed from:
|
|
- *
|
|
- * ((left & 0x0f0f0f0f) << 4) | (right & 0x0f0f0f0f) for left result
|
|
- * (left & 0xf0f0f0f0) | ((right & 0xf0f0f0f0) >> 4) for right result
|
|
- *
|
|
- * The result from the high order byte is shifted left 6 bits and
|
|
- * or'd with the result from the next byte shifted left 4 bits, which
|
|
- * is or'd with the result from the next byte shifted left 2 bits,
|
|
- * which is or'd with the result from the low byte.
|
|
- */
|
|
-const unsigned DES_INT32 des_FP_table[256] = {
|
|
- 0x00000000, 0x02000000, 0x00020000, 0x02020000,
|
|
- 0x00000200, 0x02000200, 0x00020200, 0x02020200,
|
|
- 0x00000002, 0x02000002, 0x00020002, 0x02020002,
|
|
- 0x00000202, 0x02000202, 0x00020202, 0x02020202,
|
|
- 0x01000000, 0x03000000, 0x01020000, 0x03020000,
|
|
- 0x01000200, 0x03000200, 0x01020200, 0x03020200,
|
|
- 0x01000002, 0x03000002, 0x01020002, 0x03020002,
|
|
- 0x01000202, 0x03000202, 0x01020202, 0x03020202,
|
|
- 0x00010000, 0x02010000, 0x00030000, 0x02030000,
|
|
- 0x00010200, 0x02010200, 0x00030200, 0x02030200,
|
|
- 0x00010002, 0x02010002, 0x00030002, 0x02030002,
|
|
- 0x00010202, 0x02010202, 0x00030202, 0x02030202,
|
|
- 0x01010000, 0x03010000, 0x01030000, 0x03030000,
|
|
- 0x01010200, 0x03010200, 0x01030200, 0x03030200,
|
|
- 0x01010002, 0x03010002, 0x01030002, 0x03030002,
|
|
- 0x01010202, 0x03010202, 0x01030202, 0x03030202,
|
|
- 0x00000100, 0x02000100, 0x00020100, 0x02020100,
|
|
- 0x00000300, 0x02000300, 0x00020300, 0x02020300,
|
|
- 0x00000102, 0x02000102, 0x00020102, 0x02020102,
|
|
- 0x00000302, 0x02000302, 0x00020302, 0x02020302,
|
|
- 0x01000100, 0x03000100, 0x01020100, 0x03020100,
|
|
- 0x01000300, 0x03000300, 0x01020300, 0x03020300,
|
|
- 0x01000102, 0x03000102, 0x01020102, 0x03020102,
|
|
- 0x01000302, 0x03000302, 0x01020302, 0x03020302,
|
|
- 0x00010100, 0x02010100, 0x00030100, 0x02030100,
|
|
- 0x00010300, 0x02010300, 0x00030300, 0x02030300,
|
|
- 0x00010102, 0x02010102, 0x00030102, 0x02030102,
|
|
- 0x00010302, 0x02010302, 0x00030302, 0x02030302,
|
|
- 0x01010100, 0x03010100, 0x01030100, 0x03030100,
|
|
- 0x01010300, 0x03010300, 0x01030300, 0x03030300,
|
|
- 0x01010102, 0x03010102, 0x01030102, 0x03030102,
|
|
- 0x01010302, 0x03010302, 0x01030302, 0x03030302,
|
|
- 0x00000001, 0x02000001, 0x00020001, 0x02020001,
|
|
- 0x00000201, 0x02000201, 0x00020201, 0x02020201,
|
|
- 0x00000003, 0x02000003, 0x00020003, 0x02020003,
|
|
- 0x00000203, 0x02000203, 0x00020203, 0x02020203,
|
|
- 0x01000001, 0x03000001, 0x01020001, 0x03020001,
|
|
- 0x01000201, 0x03000201, 0x01020201, 0x03020201,
|
|
- 0x01000003, 0x03000003, 0x01020003, 0x03020003,
|
|
- 0x01000203, 0x03000203, 0x01020203, 0x03020203,
|
|
- 0x00010001, 0x02010001, 0x00030001, 0x02030001,
|
|
- 0x00010201, 0x02010201, 0x00030201, 0x02030201,
|
|
- 0x00010003, 0x02010003, 0x00030003, 0x02030003,
|
|
- 0x00010203, 0x02010203, 0x00030203, 0x02030203,
|
|
- 0x01010001, 0x03010001, 0x01030001, 0x03030001,
|
|
- 0x01010201, 0x03010201, 0x01030201, 0x03030201,
|
|
- 0x01010003, 0x03010003, 0x01030003, 0x03030003,
|
|
- 0x01010203, 0x03010203, 0x01030203, 0x03030203,
|
|
- 0x00000101, 0x02000101, 0x00020101, 0x02020101,
|
|
- 0x00000301, 0x02000301, 0x00020301, 0x02020301,
|
|
- 0x00000103, 0x02000103, 0x00020103, 0x02020103,
|
|
- 0x00000303, 0x02000303, 0x00020303, 0x02020303,
|
|
- 0x01000101, 0x03000101, 0x01020101, 0x03020101,
|
|
- 0x01000301, 0x03000301, 0x01020301, 0x03020301,
|
|
- 0x01000103, 0x03000103, 0x01020103, 0x03020103,
|
|
- 0x01000303, 0x03000303, 0x01020303, 0x03020303,
|
|
- 0x00010101, 0x02010101, 0x00030101, 0x02030101,
|
|
- 0x00010301, 0x02010301, 0x00030301, 0x02030301,
|
|
- 0x00010103, 0x02010103, 0x00030103, 0x02030103,
|
|
- 0x00010303, 0x02010303, 0x00030303, 0x02030303,
|
|
- 0x01010101, 0x03010101, 0x01030101, 0x03030101,
|
|
- 0x01010301, 0x03010301, 0x01030301, 0x03030301,
|
|
- 0x01010103, 0x03010103, 0x01030103, 0x03030103,
|
|
- 0x01010303, 0x03010303, 0x01030303, 0x03030303
|
|
-};
|
|
-
|
|
-
|
|
-/*
|
|
- * The SP table is actually the S boxes and the P permutation
|
|
- * table combined. This table is actually reordered from the
|
|
- * spec, to match the order of key application we follow.
|
|
- */
|
|
-const unsigned DES_INT32 des_SP_table[8][64] = {
|
|
- {
|
|
- 0x00100000, 0x02100001, 0x02000401, 0x00000000, /* 7 */
|
|
- 0x00000400, 0x02000401, 0x00100401, 0x02100400,
|
|
- 0x02100401, 0x00100000, 0x00000000, 0x02000001,
|
|
- 0x00000001, 0x02000000, 0x02100001, 0x00000401,
|
|
- 0x02000400, 0x00100401, 0x00100001, 0x02000400,
|
|
- 0x02000001, 0x02100000, 0x02100400, 0x00100001,
|
|
- 0x02100000, 0x00000400, 0x00000401, 0x02100401,
|
|
- 0x00100400, 0x00000001, 0x02000000, 0x00100400,
|
|
- 0x02000000, 0x00100400, 0x00100000, 0x02000401,
|
|
- 0x02000401, 0x02100001, 0x02100001, 0x00000001,
|
|
- 0x00100001, 0x02000000, 0x02000400, 0x00100000,
|
|
- 0x02100400, 0x00000401, 0x00100401, 0x02100400,
|
|
- 0x00000401, 0x02000001, 0x02100401, 0x02100000,
|
|
- 0x00100400, 0x00000000, 0x00000001, 0x02100401,
|
|
- 0x00000000, 0x00100401, 0x02100000, 0x00000400,
|
|
- 0x02000001, 0x02000400, 0x00000400, 0x00100001,
|
|
- },
|
|
- {
|
|
- 0x00808200, 0x00000000, 0x00008000, 0x00808202, /* 1 */
|
|
- 0x00808002, 0x00008202, 0x00000002, 0x00008000,
|
|
- 0x00000200, 0x00808200, 0x00808202, 0x00000200,
|
|
- 0x00800202, 0x00808002, 0x00800000, 0x00000002,
|
|
- 0x00000202, 0x00800200, 0x00800200, 0x00008200,
|
|
- 0x00008200, 0x00808000, 0x00808000, 0x00800202,
|
|
- 0x00008002, 0x00800002, 0x00800002, 0x00008002,
|
|
- 0x00000000, 0x00000202, 0x00008202, 0x00800000,
|
|
- 0x00008000, 0x00808202, 0x00000002, 0x00808000,
|
|
- 0x00808200, 0x00800000, 0x00800000, 0x00000200,
|
|
- 0x00808002, 0x00008000, 0x00008200, 0x00800002,
|
|
- 0x00000200, 0x00000002, 0x00800202, 0x00008202,
|
|
- 0x00808202, 0x00008002, 0x00808000, 0x00800202,
|
|
- 0x00800002, 0x00000202, 0x00008202, 0x00808200,
|
|
- 0x00000202, 0x00800200, 0x00800200, 0x00000000,
|
|
- 0x00008002, 0x00008200, 0x00000000, 0x00808002,
|
|
- },
|
|
- {
|
|
- 0x00000104, 0x04010100, 0x00000000, 0x04010004, /* 3 */
|
|
- 0x04000100, 0x00000000, 0x00010104, 0x04000100,
|
|
- 0x00010004, 0x04000004, 0x04000004, 0x00010000,
|
|
- 0x04010104, 0x00010004, 0x04010000, 0x00000104,
|
|
- 0x04000000, 0x00000004, 0x04010100, 0x00000100,
|
|
- 0x00010100, 0x04010000, 0x04010004, 0x00010104,
|
|
- 0x04000104, 0x00010100, 0x00010000, 0x04000104,
|
|
- 0x00000004, 0x04010104, 0x00000100, 0x04000000,
|
|
- 0x04010100, 0x04000000, 0x00010004, 0x00000104,
|
|
- 0x00010000, 0x04010100, 0x04000100, 0x00000000,
|
|
- 0x00000100, 0x00010004, 0x04010104, 0x04000100,
|
|
- 0x04000004, 0x00000100, 0x00000000, 0x04010004,
|
|
- 0x04000104, 0x00010000, 0x04000000, 0x04010104,
|
|
- 0x00000004, 0x00010104, 0x00010100, 0x04000004,
|
|
- 0x04010000, 0x04000104, 0x00000104, 0x04010000,
|
|
- 0x00010104, 0x00000004, 0x04010004, 0x00010100,
|
|
- },
|
|
- {
|
|
- 0x00000080, 0x01040080, 0x01040000, 0x21000080, /* 5 */
|
|
- 0x00040000, 0x00000080, 0x20000000, 0x01040000,
|
|
- 0x20040080, 0x00040000, 0x01000080, 0x20040080,
|
|
- 0x21000080, 0x21040000, 0x00040080, 0x20000000,
|
|
- 0x01000000, 0x20040000, 0x20040000, 0x00000000,
|
|
- 0x20000080, 0x21040080, 0x21040080, 0x01000080,
|
|
- 0x21040000, 0x20000080, 0x00000000, 0x21000000,
|
|
- 0x01040080, 0x01000000, 0x21000000, 0x00040080,
|
|
- 0x00040000, 0x21000080, 0x00000080, 0x01000000,
|
|
- 0x20000000, 0x01040000, 0x21000080, 0x20040080,
|
|
- 0x01000080, 0x20000000, 0x21040000, 0x01040080,
|
|
- 0x20040080, 0x00000080, 0x01000000, 0x21040000,
|
|
- 0x21040080, 0x00040080, 0x21000000, 0x21040080,
|
|
- 0x01040000, 0x00000000, 0x20040000, 0x21000000,
|
|
- 0x00040080, 0x01000080, 0x20000080, 0x00040000,
|
|
- 0x00000000, 0x20040000, 0x01040080, 0x20000080,
|
|
- },
|
|
- {
|
|
- 0x80401000, 0x80001040, 0x80001040, 0x00000040, /* 4 */
|
|
- 0x00401040, 0x80400040, 0x80400000, 0x80001000,
|
|
- 0x00000000, 0x00401000, 0x00401000, 0x80401040,
|
|
- 0x80000040, 0x00000000, 0x00400040, 0x80400000,
|
|
- 0x80000000, 0x00001000, 0x00400000, 0x80401000,
|
|
- 0x00000040, 0x00400000, 0x80001000, 0x00001040,
|
|
- 0x80400040, 0x80000000, 0x00001040, 0x00400040,
|
|
- 0x00001000, 0x00401040, 0x80401040, 0x80000040,
|
|
- 0x00400040, 0x80400000, 0x00401000, 0x80401040,
|
|
- 0x80000040, 0x00000000, 0x00000000, 0x00401000,
|
|
- 0x00001040, 0x00400040, 0x80400040, 0x80000000,
|
|
- 0x80401000, 0x80001040, 0x80001040, 0x00000040,
|
|
- 0x80401040, 0x80000040, 0x80000000, 0x00001000,
|
|
- 0x80400000, 0x80001000, 0x00401040, 0x80400040,
|
|
- 0x80001000, 0x00001040, 0x00400000, 0x80401000,
|
|
- 0x00000040, 0x00400000, 0x00001000, 0x00401040,
|
|
- },
|
|
- {
|
|
- 0x10000008, 0x10200000, 0x00002000, 0x10202008, /* 6 */
|
|
- 0x10200000, 0x00000008, 0x10202008, 0x00200000,
|
|
- 0x10002000, 0x00202008, 0x00200000, 0x10000008,
|
|
- 0x00200008, 0x10002000, 0x10000000, 0x00002008,
|
|
- 0x00000000, 0x00200008, 0x10002008, 0x00002000,
|
|
- 0x00202000, 0x10002008, 0x00000008, 0x10200008,
|
|
- 0x10200008, 0x00000000, 0x00202008, 0x10202000,
|
|
- 0x00002008, 0x00202000, 0x10202000, 0x10000000,
|
|
- 0x10002000, 0x00000008, 0x10200008, 0x00202000,
|
|
- 0x10202008, 0x00200000, 0x00002008, 0x10000008,
|
|
- 0x00200000, 0x10002000, 0x10000000, 0x00002008,
|
|
- 0x10000008, 0x10202008, 0x00202000, 0x10200000,
|
|
- 0x00202008, 0x10202000, 0x00000000, 0x10200008,
|
|
- 0x00000008, 0x00002000, 0x10200000, 0x00202008,
|
|
- 0x00002000, 0x00200008, 0x10002008, 0x00000000,
|
|
- 0x10202000, 0x10000000, 0x00200008, 0x10002008,
|
|
- },
|
|
- {
|
|
- 0x08000820, 0x00000800, 0x00020000, 0x08020820, /* 8 */
|
|
- 0x08000000, 0x08000820, 0x00000020, 0x08000000,
|
|
- 0x00020020, 0x08020000, 0x08020820, 0x00020800,
|
|
- 0x08020800, 0x00020820, 0x00000800, 0x00000020,
|
|
- 0x08020000, 0x08000020, 0x08000800, 0x00000820,
|
|
- 0x00020800, 0x00020020, 0x08020020, 0x08020800,
|
|
- 0x00000820, 0x00000000, 0x00000000, 0x08020020,
|
|
- 0x08000020, 0x08000800, 0x00020820, 0x00020000,
|
|
- 0x00020820, 0x00020000, 0x08020800, 0x00000800,
|
|
- 0x00000020, 0x08020020, 0x00000800, 0x00020820,
|
|
- 0x08000800, 0x00000020, 0x08000020, 0x08020000,
|
|
- 0x08020020, 0x08000000, 0x00020000, 0x08000820,
|
|
- 0x00000000, 0x08020820, 0x00020020, 0x08000020,
|
|
- 0x08020000, 0x08000800, 0x08000820, 0x00000000,
|
|
- 0x08020820, 0x00020800, 0x00020800, 0x00000820,
|
|
- 0x00000820, 0x00020020, 0x08000000, 0x08020800,
|
|
- },
|
|
- {
|
|
- 0x40084010, 0x40004000, 0x00004000, 0x00084010, /* 2 */
|
|
- 0x00080000, 0x00000010, 0x40080010, 0x40004010,
|
|
- 0x40000010, 0x40084010, 0x40084000, 0x40000000,
|
|
- 0x40004000, 0x00080000, 0x00000010, 0x40080010,
|
|
- 0x00084000, 0x00080010, 0x40004010, 0x00000000,
|
|
- 0x40000000, 0x00004000, 0x00084010, 0x40080000,
|
|
- 0x00080010, 0x40000010, 0x00000000, 0x00084000,
|
|
- 0x00004010, 0x40084000, 0x40080000, 0x00004010,
|
|
- 0x00000000, 0x00084010, 0x40080010, 0x00080000,
|
|
- 0x40004010, 0x40080000, 0x40084000, 0x00004000,
|
|
- 0x40080000, 0x40004000, 0x00000010, 0x40084010,
|
|
- 0x00084010, 0x00000010, 0x00004000, 0x40000000,
|
|
- 0x00004010, 0x40084000, 0x00080000, 0x40000010,
|
|
- 0x00080010, 0x40004010, 0x40000010, 0x00080010,
|
|
- 0x00084000, 0x00000000, 0x40004000, 0x00004010,
|
|
- 0x40000000, 0x40080010, 0x40084010, 0x00084000
|
|
- },
|
|
-};
|
|
-
|
|
-#endif /* K5_BUILTIN_DES */
|
|
diff --git a/src/lib/crypto/builtin/des/f_tables.h b/src/lib/crypto/builtin/des/f_tables.h
|
|
deleted file mode 100644
|
|
index fc91b566cf..0000000000
|
|
--- a/src/lib/crypto/builtin/des/f_tables.h
|
|
+++ /dev/null
|
|
@@ -1,285 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/f_tables.h */
|
|
-/*
|
|
- * Copyright (C) 1990 by the Massachusetts Institute of Technology.
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-
|
|
-/*
|
|
- * DES implementation donated by Dennis Ferguson
|
|
- */
|
|
-
|
|
-/*
|
|
- * des_tables.h - declarations to import the DES tables, used internally
|
|
- * by some of the library routines.
|
|
- */
|
|
-#ifndef __DES_TABLES_H__
|
|
-#define __DES_TABLES_H__ /* nothing */
|
|
-
|
|
-#include "k5-platform.h"
|
|
-/*
|
|
- * These may be declared const if you wish. Be sure to change the
|
|
- * declarations in des_tables.c as well.
|
|
- */
|
|
-extern const unsigned DES_INT32 des_IP_table[256];
|
|
-extern const unsigned DES_INT32 des_FP_table[256];
|
|
-extern const unsigned DES_INT32 des_SP_table[8][64];
|
|
-
|
|
-/*
|
|
- * Use standard shortforms to reference these to save typing
|
|
- */
|
|
-#define IP des_IP_table
|
|
-#define FP des_FP_table
|
|
-#define SP des_SP_table
|
|
-
|
|
-#ifdef DEBUG
|
|
-#define DEB(foofraw) printf foofraw
|
|
-#else
|
|
-#define DEB(foofraw) /* nothing */
|
|
-#endif
|
|
-
|
|
-/*
|
|
- * Code to do a DES round using the tables. Note that the E expansion
|
|
- * is easy to compute algorithmically, especially if done out-of-order.
|
|
- * Take a look at its form and compare it to everything involving temp
|
|
- * below. Since SP[0-7] don't have any bits in common set it is okay
|
|
- * to do the successive xor's.
|
|
- *
|
|
- * Note too that the SP table has been reordered to match the order of
|
|
- * the keys (if the original order of SP was 12345678, the reordered
|
|
- * table is 71354682). This is unnecessary, but was done since some
|
|
- * compilers seem to like you going through the matrix from beginning
|
|
- * to end.
|
|
- *
|
|
- * There is a difference in the best way to do this depending on whether
|
|
- * one is encrypting or decrypting. If encrypting we move forward through
|
|
- * the keys and hence should move forward through the table. If decrypting
|
|
- * we go back. Part of the need for this comes from trying to emulate
|
|
- * existing software which generates a single key schedule and uses it
|
|
- * both for encrypting and decrypting. Generating separate encryption
|
|
- * and decryption key schedules would allow one to use the same code
|
|
- * for both.
|
|
- *
|
|
- * left, right and temp should be unsigned DES_INT32 values. left and right
|
|
- * should be the high and low order parts of the cipher block at the
|
|
- * current stage of processing (this makes sense if you read the spec).
|
|
- * kp should be an unsigned DES_INT32 pointer which points at the current
|
|
- * set of subkeys in the key schedule. It is advanced to the next set
|
|
- * (i.e. by 8 bytes) when this is done.
|
|
- *
|
|
- * This occurs in the innermost loop of the DES function. The four
|
|
- * variables should really be in registers.
|
|
- *
|
|
- * When using this, the inner loop of the DES function might look like:
|
|
- *
|
|
- * for (i = 0; i < 8; i++) {
|
|
- * DES_SP_{EN,DE}CRYPT_ROUND(left, right, temp, kp);
|
|
- * DES_SP_{EN,DE}CRYPT_ROUND(right, left, temp, kp);
|
|
- * }
|
|
- *
|
|
- * Note the trick above. You are supposed to do 16 rounds, swapping
|
|
- * left and right at the end of each round. By doing two rounds at
|
|
- * a time and swapping left and right in the code we can avoid the
|
|
- * swaps altogether.
|
|
- */
|
|
-#define DES_SP_ENCRYPT_ROUND(left, right, temp, kp) do { \
|
|
- (temp) = (((right) >> 11) | ((right) << 21)) ^ *(kp)++; \
|
|
- (left) ^= SP[0][((temp) >> 24) & 0x3f] \
|
|
- | SP[1][((temp) >> 16) & 0x3f] \
|
|
- | SP[2][((temp) >> 8) & 0x3f] \
|
|
- | SP[3][((temp) ) & 0x3f]; \
|
|
- (temp) = (((right) >> 23) | ((right) << 9)) ^ *(kp)++; \
|
|
- (left) ^= SP[4][((temp) >> 24) & 0x3f] \
|
|
- | SP[5][((temp) >> 16) & 0x3f] \
|
|
- | SP[6][((temp) >> 8) & 0x3f] \
|
|
- | SP[7][((temp) ) & 0x3f]; \
|
|
- } while(0);
|
|
-
|
|
-#define DES_SP_DECRYPT_ROUND(left, right, temp, kp) do { \
|
|
- (temp) = (((right) >> 23) | ((right) << 9)) ^ *(--(kp)); \
|
|
- (left) ^= SP[7][((temp) ) & 0x3f] \
|
|
- | SP[6][((temp) >> 8) & 0x3f] \
|
|
- | SP[5][((temp) >> 16) & 0x3f] \
|
|
- | SP[4][((temp) >> 24) & 0x3f]; \
|
|
- (temp) = (((right) >> 11) | ((right) << 21)) ^ *(--(kp)); \
|
|
- (left) ^= SP[3][((temp) ) & 0x3f] \
|
|
- | SP[2][((temp) >> 8) & 0x3f] \
|
|
- | SP[1][((temp) >> 16) & 0x3f] \
|
|
- | SP[0][((temp) >> 24) & 0x3f]; \
|
|
- } while (0);
|
|
-
|
|
-/*
|
|
- * Macros to help deal with the initial permutation table. Note
|
|
- * the IP table only deals with 32 bits at a time, allowing us to
|
|
- * collect the bits we need to deal with each half into an unsigned
|
|
- * DES_INT32. By carefully selecting how the bits are ordered we also
|
|
- * take advantages of symmetries in the table so that we can use a
|
|
- * single table to compute the permutation of all bytes. This sounds
|
|
- * complicated, but if you go through the process of designing the
|
|
- * table you'll find the symmetries fall right out.
|
|
- *
|
|
- * The follow macros compute the set of bits used to index the
|
|
- * table for produce the left and right permuted result.
|
|
- *
|
|
- * The inserted cast to unsigned DES_INT32 circumvents a bug in
|
|
- * the Macintosh MPW 3.2 C compiler which loses the unsignedness and
|
|
- * propagates the high-order bit in the shift.
|
|
- */
|
|
-#define DES_IP_LEFT_BITS(left, right) \
|
|
- ((((left) & 0x55555555) << 1) | ((right) & 0x55555555))
|
|
-#define DES_IP_RIGHT_BITS(left, right) \
|
|
- (((left) & 0xaaaaaaaa) | \
|
|
- ( ( (unsigned DES_INT32) ((right) & 0xaaaaaaaa) ) >> 1))
|
|
-
|
|
-/*
|
|
- * The following macro does an in-place initial permutation given
|
|
- * the current left and right parts of the block and a single
|
|
- * temporary. Use this more as a guide for rolling your own, though.
|
|
- * The best way to do the IP depends on the form of the data you
|
|
- * are dealing with. If you use this, though, try to make left,
|
|
- * right and temp unsigned DES_INT32s.
|
|
- */
|
|
-#define DES_INITIAL_PERM(left, right, temp) do { \
|
|
- (temp) = DES_IP_RIGHT_BITS((left), (right)); \
|
|
- (right) = DES_IP_LEFT_BITS((left), (right)); \
|
|
- (left) = IP[((right) >> 24) & 0xff] \
|
|
- | (IP[((right) >> 16) & 0xff] << 1) \
|
|
- | (IP[((right) >> 8) & 0xff] << 2) \
|
|
- | (IP[(right) & 0xff] << 3); \
|
|
- (right) = IP[((temp) >> 24) & 0xff] \
|
|
- | (IP[((temp) >> 16) & 0xff] << 1) \
|
|
- | (IP[((temp) >> 8) & 0xff] << 2) \
|
|
- | (IP[(temp) & 0xff] << 3); \
|
|
- } while(0);
|
|
-
|
|
-/*
|
|
- * Now the final permutation stuff. The same comments apply to
|
|
- * this as to the initial permutation, except that we use different
|
|
- * bits and shifts.
|
|
- *
|
|
- * The inserted cast to unsigned DES_INT32 circumvents a bug in
|
|
- * the Macintosh MPW 3.2 C compiler which loses the unsignedness and
|
|
- * propagates the high-order bit in the shift.
|
|
- */
|
|
-#define DES_FP_LEFT_BITS(left, right) \
|
|
- ((((left) & 0x0f0f0f0f) << 4) | ((right) & 0x0f0f0f0f))
|
|
-#define DES_FP_RIGHT_BITS(left, right) \
|
|
- (((left) & 0xf0f0f0f0) | \
|
|
- ( ( (unsigned DES_INT32) ((right) & 0xf0f0f0f0) ) >> 4))
|
|
-
|
|
-
|
|
-/*
|
|
- * Here is a sample final permutation. Note that there is a trick
|
|
- * here. DES requires swapping the left and right parts after the
|
|
- * last cipher round but before the final permutation. We do this
|
|
- * swapping internally, which is why left and right are confused
|
|
- * at the beginning.
|
|
- */
|
|
-#define DES_FINAL_PERM(left, right, temp) do { \
|
|
- (temp) = DES_FP_RIGHT_BITS((right), (left)); \
|
|
- (right) = DES_FP_LEFT_BITS((right), (left)); \
|
|
- (left) = (FP[((right) >> 24) & 0xff] << 6) \
|
|
- | (FP[((right) >> 16) & 0xff] << 4) \
|
|
- | (FP[((right) >> 8) & 0xff] << 2) \
|
|
- | FP[(right) & 0xff]; \
|
|
- (right) = (FP[((temp) >> 24) & 0xff] << 6) \
|
|
- | (FP[((temp) >> 16) & 0xff] << 4) \
|
|
- | (FP[((temp) >> 8) & 0xff] << 2) \
|
|
- | FP[temp & 0xff]; \
|
|
- } while(0);
|
|
-
|
|
-
|
|
-/*
|
|
- * Finally, as a sample of how all this might be held together, the
|
|
- * following two macros do in-place encryptions and decryptions. left
|
|
- * and right are two unsigned DES_INT32 variables which at the beginning
|
|
- * are expected to hold the clear (encrypted) block in host byte order
|
|
- * (left the high order four bytes, right the low order). At the end
|
|
- * they will contain the encrypted (clear) block. temp is an unsigned DES_INT32
|
|
- * used as a temporary. kp is an unsigned DES_INT32 pointer pointing at
|
|
- * the start of the key schedule. All these should be in registers.
|
|
- *
|
|
- * You can probably do better than these by rewriting for particular
|
|
- * situations. These aren't bad, though.
|
|
- *
|
|
- * The DEB macros enable debugging when this code breaks (typically
|
|
- * when a buggy compiler breaks it), by printing the intermediate values
|
|
- * at each stage of the encryption, so that by comparing the output to
|
|
- * a known good machine, the location of the first error can be found.
|
|
- */
|
|
-#define DES_DO_ENCRYPT_1(left, right, kp) \
|
|
- do { \
|
|
- int i; \
|
|
- unsigned DES_INT32 temp1; \
|
|
- DEB (("do_encrypt %8lX %8lX \n", left, right)); \
|
|
- DES_INITIAL_PERM((left), (right), (temp1)); \
|
|
- DEB ((" after IP %8lX %8lX\n", left, right)); \
|
|
- for (i = 0; i < 8; i++) { \
|
|
- DES_SP_ENCRYPT_ROUND((left), (right), (temp1), (kp)); \
|
|
- DEB ((" round %2d %8lX %8lX \n", i*2, left, right)); \
|
|
- DES_SP_ENCRYPT_ROUND((right), (left), (temp1), (kp)); \
|
|
- DEB ((" round %2d %8lX %8lX \n", 1+i*2, left, right)); \
|
|
- } \
|
|
- DES_FINAL_PERM((left), (right), (temp1)); \
|
|
- (kp) -= (2 * 16); \
|
|
- DEB ((" after FP %8lX %8lX \n", left, right)); \
|
|
- } while (0)
|
|
-
|
|
-#define DES_DO_DECRYPT_1(left, right, kp) \
|
|
- do { \
|
|
- int i; \
|
|
- unsigned DES_INT32 temp2; \
|
|
- DES_INITIAL_PERM((left), (right), (temp2)); \
|
|
- (kp) += (2 * 16); \
|
|
- for (i = 0; i < 8; i++) { \
|
|
- DES_SP_DECRYPT_ROUND((left), (right), (temp2), (kp)); \
|
|
- DES_SP_DECRYPT_ROUND((right), (left), (temp2), (kp)); \
|
|
- } \
|
|
- DES_FINAL_PERM((left), (right), (temp2)); \
|
|
- } while (0)
|
|
-
|
|
-#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO)
|
|
-extern void krb5int_des_do_encrypt_2(unsigned DES_INT32 *l,
|
|
- unsigned DES_INT32 *r,
|
|
- const unsigned DES_INT32 *k);
|
|
-extern void krb5int_des_do_decrypt_2(unsigned DES_INT32 *l,
|
|
- unsigned DES_INT32 *r,
|
|
- const unsigned DES_INT32 *k);
|
|
-#define DES_DO_ENCRYPT(L,R,K) krb5int_des_do_encrypt_2(&(L), &(R), (K))
|
|
-#define DES_DO_DECRYPT(L,R,K) krb5int_des_do_decrypt_2(&(L), &(R), (K))
|
|
-#else
|
|
-#define DES_DO_ENCRYPT DES_DO_ENCRYPT_1
|
|
-#define DES_DO_DECRYPT DES_DO_DECRYPT_1
|
|
-#endif
|
|
-
|
|
-/*
|
|
- * These are handy dandy utility thingies for straightening out bytes.
|
|
- * Included here because they're used a couple of places.
|
|
- */
|
|
-#define GET_HALF_BLOCK(lr, ip) ((lr) = load_32_be(ip), (ip) += 4)
|
|
-#define PUT_HALF_BLOCK(lr, op) (store_32_be(lr, op), (op) += 4)
|
|
-
|
|
-/* Shorthand that we'll need in several places, for creating values that
|
|
- really can hold 32 bits regardless of the prevailing int size. */
|
|
-#define FF_UINT32 ((unsigned DES_INT32) 0xFF)
|
|
-
|
|
-#endif /* __DES_TABLES_H__ */
|
|
diff --git a/src/lib/crypto/builtin/des/key_sched.c b/src/lib/crypto/builtin/des/key_sched.c
|
|
deleted file mode 100644
|
|
index d6dedd93c6..0000000000
|
|
--- a/src/lib/crypto/builtin/des/key_sched.c
|
|
+++ /dev/null
|
|
@@ -1,66 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/key_sched.c */
|
|
-/*
|
|
- * Copyright 1985, 1986, 1987, 1988, 1990 by the Massachusetts Institute
|
|
- * of Technology.
|
|
- * All Rights Reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-
|
|
-/*
|
|
- * This routine computes the DES key schedule given a key. The
|
|
- * permutations and shifts have been done at compile time, resulting
|
|
- * in a direct one-step mapping from the input key to the key
|
|
- * schedule.
|
|
- *
|
|
- * Also checks parity and weak keys.
|
|
- *
|
|
- * Watch out for the subscripts -- most effectively start at 1 instead
|
|
- * of at zero. Maybe some bugs in that area.
|
|
- *
|
|
- * In case the user wants to cache the computed key schedule, it is
|
|
- * passed as an arg. Also implies that caller has explicit control
|
|
- * over zeroing both the key schedule and the key.
|
|
- *
|
|
- * Originally written 6/85 by Steve Miller, MIT Project Athena.
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES
|
|
-
|
|
-int
|
|
-mit_des_key_sched(mit_des_cblock k, mit_des_key_schedule schedule)
|
|
-{
|
|
- mit_des_make_key_sched(k,schedule);
|
|
-
|
|
- if (!mit_des_check_key_parity(k)) /* bad parity --> return -1 */
|
|
- return(-1);
|
|
-
|
|
- if (mit_des_is_weak_key(k))
|
|
- return(-2);
|
|
-
|
|
- /* if key was good, return 0 */
|
|
- return 0;
|
|
-}
|
|
-
|
|
-#endif /* K5_BUILTIN_DES */
|
|
diff --git a/src/lib/crypto/builtin/des/keytest.data b/src/lib/crypto/builtin/des/keytest.data
|
|
deleted file mode 100644
|
|
index 7ff34eedcf..0000000000
|
|
--- a/src/lib/crypto/builtin/des/keytest.data
|
|
+++ /dev/null
|
|
@@ -1,171 +0,0 @@
|
|
-0101010101010101 95F8A5E5DD31D900 8000000000000000
|
|
-0101010101010101 DD7F121CA5015619 4000000000000000
|
|
-0101010101010101 2E8653104F3834EA 2000000000000000
|
|
-0101010101010101 4BD388FF6CD81D4F 1000000000000000
|
|
-0101010101010101 20B9E767B2FB1456 0800000000000000
|
|
-0101010101010101 55579380D77138EF 0400000000000000
|
|
-0101010101010101 6CC5DEFAAF04512F 0200000000000000
|
|
-0101010101010101 0D9F279BA5D87260 0100000000000000
|
|
-0101010101010101 D9031B0271BD5A0A 0080000000000000
|
|
-0101010101010101 424250B37C3DD951 0040000000000000
|
|
-0101010101010101 B8061B7ECD9A21E5 0020000000000000
|
|
-0101010101010101 F15D0F286B65BD28 0010000000000000
|
|
-0101010101010101 ADD0CC8D6E5DEBA1 0008000000000000
|
|
-0101010101010101 E6D5F82752AD63D1 0004000000000000
|
|
-0101010101010101 ECBFE3BD3F591A5E 0002000000000000
|
|
-0101010101010101 F356834379D165CD 0001000000000000
|
|
-0101010101010101 2B9F982F20037FA9 0000800000000000
|
|
-0101010101010101 889DE068A16F0BE6 0000400000000000
|
|
-0101010101010101 E19E275D846A1298 0000200000000000
|
|
-0101010101010101 329A8ED523D71AEC 0000100000000000
|
|
-0101010101010101 E7FCE22557D23C97 0000080000000000
|
|
-0101010101010101 12A9F5817FF2D65D 0000040000000000
|
|
-0101010101010101 A484C3AD38DC9C19 0000020000000000
|
|
-0101010101010101 FBE00A8A1EF8AD72 0000010000000000
|
|
-0101010101010101 750D079407521363 0000008000000000
|
|
-0101010101010101 64FEED9C724C2FAF 0000004000000000
|
|
-0101010101010101 F02B263B328E2B60 0000002000000000
|
|
-0101010101010101 9D64555A9A10B852 0000001000000000
|
|
-0101010101010101 D106FF0BED5255D7 0000000800000000
|
|
-0101010101010101 E1652C6B138C64A5 0000000400000000
|
|
-0101010101010101 E428581186EC8F46 0000000200000000
|
|
-0101010101010101 AEB5F5EDE22D1A36 0000000100000000
|
|
-0101010101010101 E943D7568AEC0C5C 0000000080000000
|
|
-0101010101010101 DF98C8276F54B04B 0000000040000000
|
|
-0101010101010101 B160E4680F6C696F 0000000020000000
|
|
-0101010101010101 FA0752B07D9C4AB8 0000000010000000
|
|
-0101010101010101 CA3A2B036DBC8502 0000000008000000
|
|
-0101010101010101 5E0905517BB59BCF 0000000004000000
|
|
-0101010101010101 814EEB3B91D90726 0000000002000000
|
|
-0101010101010101 4D49DB1532919C9F 0000000001000000
|
|
-0101010101010101 25EB5FC3F8CF0621 0000000000800000
|
|
-0101010101010101 AB6A20C0620D1C6F 0000000000400000
|
|
-0101010101010101 79E90DBC98F92CCA 0000000000200000
|
|
-0101010101010101 866ECEDD8072BB0E 0000000000100000
|
|
-0101010101010101 8B54536F2F3E64A8 0000000000080000
|
|
-0101010101010101 EA51D3975595B86B 0000000000040000
|
|
-0101010101010101 CAFFC6AC4542DE31 0000000000020000
|
|
-0101010101010101 8DD45A2DDF90796C 0000000000010000
|
|
-0101010101010101 1029D55E880EC2D0 0000000000008000
|
|
-0101010101010101 5D86CB23639DBEA9 0000000000004000
|
|
-0101010101010101 1D1CA853AE7C0C5F 0000000000002000
|
|
-0101010101010101 CE332329248F3228 0000000000001000
|
|
-0101010101010101 8405D1ABE24FB942 0000000000000800
|
|
-0101010101010101 E643D78090CA4207 0000000000000400
|
|
-0101010101010101 48221B9937748A23 0000000000000200
|
|
-0101010101010101 DD7C0BBD61FAFD54 0000000000000100
|
|
-0101010101010101 2FBC291A570DB5C4 0000000000000080
|
|
-0101010101010101 E07C30D7E4E26E12 0000000000000040
|
|
-0101010101010101 0953E2258E8E90A1 0000000000000020
|
|
-0101010101010101 5B711BC4CEEBF2EE 0000000000000010
|
|
-0101010101010101 CC083F1E6D9E85F6 0000000000000008
|
|
-0101010101010101 D2FD8867D50D2DFE 0000000000000004
|
|
-0101010101010101 06E7EA22CE92708F 0000000000000002
|
|
-0101010101010101 166B40B44ABA4BD6 0000000000000001
|
|
-8001010101010101 0000000000000000 95A8D72813DAA94D
|
|
-4001010101010101 0000000000000000 0EEC1487DD8C26D5
|
|
-2001010101010101 0000000000000000 7AD16FFB79C45926
|
|
-1001010101010101 0000000000000000 D3746294CA6A6CF3
|
|
-0801010101010101 0000000000000000 809F5F873C1FD761
|
|
-0401010101010101 0000000000000000 C02FAFFEC989D1FC
|
|
-0201010101010101 0000000000000000 4615AA1D33E72F10
|
|
-0180010101010101 0000000000000000 2055123350C00858
|
|
-0140010101010101 0000000000000000 DF3B99D6577397C8
|
|
-0120010101010101 0000000000000000 31FE17369B5288C9
|
|
-0110010101010101 0000000000000000 DFDD3CC64DAE1642
|
|
-0108010101010101 0000000000000000 178C83CE2B399D94
|
|
-0104010101010101 0000000000000000 50F636324A9B7F80
|
|
-0102010101010101 0000000000000000 A8468EE3BC18F06D
|
|
-0101800101010101 0000000000000000 A2DC9E92FD3CDE92
|
|
-0101400101010101 0000000000000000 CAC09F797D031287
|
|
-0101200101010101 0000000000000000 90BA680B22AEB525
|
|
-0101100101010101 0000000000000000 CE7A24F350E280B6
|
|
-0101080101010101 0000000000000000 882BFF0AA01A0B87
|
|
-0101040101010101 0000000000000000 25610288924511C2
|
|
-0101020101010101 0000000000000000 C71516C29C75D170
|
|
-0101018001010101 0000000000000000 5199C29A52C9F059
|
|
-0101014001010101 0000000000000000 C22F0A294A71F29F
|
|
-0101012001010101 0000000000000000 EE371483714C02EA
|
|
-0101011001010101 0000000000000000 A81FBD448F9E522F
|
|
-0101010801010101 0000000000000000 4F644C92E192DFED
|
|
-0101010401010101 0000000000000000 1AFA9A66A6DF92AE
|
|
-0101010201010101 0000000000000000 B3C1CC715CB879D8
|
|
-0101010180010101 0000000000000000 19D032E64AB0BD8B
|
|
-0101010140010101 0000000000000000 3CFAA7A7DC8720DC
|
|
-0101010120010101 0000000000000000 B7265F7F447AC6F3
|
|
-0101010110010101 0000000000000000 9DB73B3C0D163F54
|
|
-0101010108010101 0000000000000000 8181B65BABF4A975
|
|
-0101010104010101 0000000000000000 93C9B64042EAA240
|
|
-0101010102010101 0000000000000000 5570530829705592
|
|
-0101010101800101 0000000000000000 8638809E878787A0
|
|
-0101010101400101 0000000000000000 41B9A79AF79AC208
|
|
-0101010101200101 0000000000000000 7A9BE42F2009A892
|
|
-0101010101100101 0000000000000000 29038D56BA6D2745
|
|
-0101010101080101 0000000000000000 5495C6ABF1E5DF51
|
|
-0101010101040101 0000000000000000 AE13DBD561488933
|
|
-0101010101020101 0000000000000000 024D1FFA8904E389
|
|
-0101010101018001 0000000000000000 D1399712F99BF02E
|
|
-0101010101014001 0000000000000000 14C1D7C1CFFEC79E
|
|
-0101010101012001 0000000000000000 1DE5279DAE3BED6F
|
|
-0101010101011001 0000000000000000 E941A33F85501303
|
|
-0101010101010801 0000000000000000 DA99DBBC9A03F379
|
|
-0101010101010401 0000000000000000 B7FC92F91D8E92E9
|
|
-0101010101010201 0000000000000000 AE8E5CAA3CA04E85
|
|
-0101010101010180 0000000000000000 9CC62DF43B6EED74
|
|
-0101010101010140 0000000000000000 D863DBB5C59A91A0
|
|
-0101010101010120 0000000000000000 A1AB2190545B91D7
|
|
-0101010101010110 0000000000000000 0875041E64C570F7
|
|
-0101010101010108 0000000000000000 5A594528BEBEF1CC
|
|
-0101010101010104 0000000000000000 FCDB3291DE21F0C0
|
|
-0101010101010102 0000000000000000 869EFD7F9F265A09
|
|
-1046913489980131 0000000000000000 88D55E54F54C97B4
|
|
-1007103489988020 0000000000000000 0C0CC00C83EA48FD
|
|
-10071034C8980120 0000000000000000 83BC8EF3A6570183
|
|
-1046103489988020 0000000000000000 DF725DCAD94EA2E9
|
|
-1086911519190101 0000000000000000 E652B53B550BE8B0
|
|
-1086911519580101 0000000000000000 AF527120C485CBB0
|
|
-5107B01519580101 0000000000000000 0F04CE393DB926D5
|
|
-1007B01519190101 0000000000000000 C9F00FFC74079067
|
|
-3107915498080101 0000000000000000 7CFD82A593252B4E
|
|
-3107919498080101 0000000000000000 CB49A2F9E91363E3
|
|
-10079115B9080140 0000000000000000 00B588BE70D23F56
|
|
-3107911598080140 0000000000000000 406A9A6AB43399AE
|
|
-1007D01589980101 0000000000000000 6CB773611DCA9ADA
|
|
-9107911589980101 0000000000000000 67FD21C17DBB5D70
|
|
-9107D01589190101 0000000000000000 9592CB4110430787
|
|
-1007D01598980120 0000000000000000 A6B7FF68A318DDD3
|
|
-1007940498190101 0000000000000000 4D102196C914CA16
|
|
-0107910491190401 0000000000000000 2DFA9F4573594965
|
|
-0107910491190101 0000000000000000 B46604816C0E0774
|
|
-0107940491190401 0000000000000000 6E7E6221A4F34E87
|
|
-19079210981A0101 0000000000000000 AA85E74643233199
|
|
-1007911998190801 0000000000000000 2E5A19DB4D1962D6
|
|
-10079119981A0801 0000000000000000 23A866A809D30894
|
|
-1007921098190101 0000000000000000 D812D961F017D320
|
|
-100791159819010B 0000000000000000 055605816E58608F
|
|
-1004801598190101 0000000000000000 ABD88E8B1B7716F1
|
|
-1004801598190102 0000000000000000 537AC95BE69DA1E1
|
|
-1004801598190108 0000000000000000 AED0F6AE3C25CDD8
|
|
-1002911598100104 0000000000000000 B3E35A5EE53E7B8D
|
|
-1002911598190104 0000000000000000 61C79C71921A2EF8
|
|
-1002911598100201 0000000000000000 E2F5728F0995013C
|
|
-1002911698100101 0000000000000000 1AEAC39A61F0A464
|
|
-7CA110454A1A6E57 01A1D6D039776742 690F5B0D9A26939B
|
|
-0131D9619DC1376E 5CD54CA83DEF57DA 7A389D10354BD271
|
|
-07A1133E4A0B2686 0248D43806F67172 868EBB51CAB4599A
|
|
-3849674C2602319E 51454B582DDF440A 7178876E01F19B2A
|
|
-04B915BA43FEB5B6 42FD443059577FA2 AF37FB421F8C4095
|
|
-0113B970FD34F2CE 059B5E0851CF143A 86A560F10EC6D85B
|
|
-0170F175468FB5E6 0756D8E0774761D2 0CD3DA020021DC09
|
|
-43297FAD38E373FE 762514B829BF486A EA676B2CB7DB2B7A
|
|
-07A7137045DA2A16 3BDD119049372802 DFD64A815CAF1A0F
|
|
-04689104C2FD3B2F 26955F6835AF609A 5C513C9C4886C088
|
|
-37D06BB516CB7546 164D5E404F275232 0A2AEEAE3FF4AB77
|
|
-1F08260D1AC2465E 6B056E18759F5CCA EF1BF03E5DFA575A
|
|
-584023641ABA6176 004BD6EF09176062 88BF0DB6D70DEE56
|
|
-025816164629B007 480D39006EE762F2 A1F9915541020B56
|
|
-49793EBC79B3258F 437540C8698F3CFA 6FBF1CAFCFFD0556
|
|
-4FB05E1515AB73A7 072D43A077075292 2F22E49BAB7CA1AC
|
|
-49E95D6D4CA229BF 02FE55778117F12A 5A6B612CC26CCE4A
|
|
-018310DC409B26D6 1D9D5C5018F728C2 5F4C038ED12B2E41
|
|
-1C587F1C13924FEF 305532286D6F295A 63FAC0D034D9F793
|
|
diff --git a/src/lib/crypto/builtin/des/t_verify.c b/src/lib/crypto/builtin/des/t_verify.c
|
|
deleted file mode 100644
|
|
index 4a19933cad..0000000000
|
|
--- a/src/lib/crypto/builtin/des/t_verify.c
|
|
+++ /dev/null
|
|
@@ -1,395 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/t_verify.c */
|
|
-/*
|
|
- * Copyright 1988, 1990 by the Massachusetts Institute of Technology.
|
|
- * All Rights Reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-/*
|
|
- * Copyright (C) 1998 by the FundsXpress, INC.
|
|
- *
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may require
|
|
- * a specific license from the United States Government. It is the
|
|
- * responsibility of any person or organization contemplating export to
|
|
- * obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of FundsXpress. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. FundsXpress makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- *
|
|
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
- */
|
|
-
|
|
-/*
|
|
- *
|
|
- * Program to test the correctness of the DES library
|
|
- * implementation.
|
|
- *
|
|
- * exit returns 0 ==> success
|
|
- * -1 ==> error
|
|
- */
|
|
-
|
|
-#include "k5-int.h"
|
|
-#include "des_int.h"
|
|
-#include <stdio.h>
|
|
-#include "com_err.h"
|
|
-
|
|
-static void do_encrypt(unsigned char *, unsigned char *);
|
|
-static void do_decrypt(unsigned char *, unsigned char *);
|
|
-
|
|
-char *progname;
|
|
-int nflag = 2;
|
|
-int vflag;
|
|
-int mflag;
|
|
-int zflag;
|
|
-int pid;
|
|
-int mit_des_debug;
|
|
-
|
|
-unsigned char cipher_text[64];
|
|
-unsigned char clear_text[64] = "Now is the time for all " ;
|
|
-unsigned char clear_text2[64] = "7654321 Now is the time for ";
|
|
-unsigned char clear_text3[64] = {2,0,0,0, 1,0,0,0};
|
|
-unsigned char output[64];
|
|
-unsigned char zero_text[8] = {0x0,0,0,0,0,0,0,0};
|
|
-unsigned char msb_text[8] = {0x0,0,0,0, 0,0,0,0x40}; /* to ANSI MSB */
|
|
-unsigned char *input;
|
|
-
|
|
-/* 0x0123456789abcdef */
|
|
-unsigned char default_key[8] = {
|
|
- 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef
|
|
-};
|
|
-unsigned char key2[8] = { 0x08,0x19,0x2a,0x3b,0x4c,0x5d,0x6e,0x7f };
|
|
-unsigned char key3[8] = { 0x80,1,1,1,1,1,1,1 };
|
|
-mit_des_cblock s_key;
|
|
-unsigned char default_ivec[8] = {
|
|
- 0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef
|
|
-};
|
|
-unsigned char *ivec;
|
|
-unsigned char zero_key[8] = {1,1,1,1,1,1,1,1}; /* just parity bits */
|
|
-
|
|
-unsigned char cipher1[8] = {
|
|
- 0x25,0xdd,0xac,0x3e,0x96,0x17,0x64,0x67
|
|
-};
|
|
-unsigned char cipher2[8] = {
|
|
- 0x3f,0xa4,0x0e,0x8a,0x98,0x4d,0x48,0x15
|
|
-};
|
|
-unsigned char cipher3[64] = {
|
|
- 0xe5,0xc7,0xcd,0xde,0x87,0x2b,0xf2,0x7c,
|
|
- 0x43,0xe9,0x34,0x00,0x8c,0x38,0x9c,0x0f,
|
|
- 0x68,0x37,0x88,0x49,0x9a,0x7c,0x05,0xf6
|
|
-};
|
|
-unsigned char checksum[8] = {
|
|
- 0x58,0xd2,0xe7,0x7e,0x86,0x06,0x27,0x33
|
|
-};
|
|
-
|
|
-unsigned char zresult[8] = {
|
|
- 0x8c, 0xa6, 0x4d, 0xe9, 0xc1, 0xb1, 0x23, 0xa7
|
|
-};
|
|
-
|
|
-unsigned char mresult[8] = {
|
|
- 0xa3, 0x80, 0xe0, 0x2a, 0x6b, 0xe5, 0x46, 0x96
|
|
-};
|
|
-
|
|
-
|
|
-/*
|
|
- * Can also add :
|
|
- * plaintext = 0, key = 0, cipher = 0x8ca64de9c1b123a7 (or is it a 1?)
|
|
- */
|
|
-
|
|
-mit_des_key_schedule sched;
|
|
-
|
|
-int
|
|
-main(argc,argv)
|
|
- int argc;
|
|
- char *argv[];
|
|
-{
|
|
- /* Local Declarations */
|
|
- size_t in_length;
|
|
- int retval;
|
|
- int i, j;
|
|
-
|
|
-#ifdef WINDOWS
|
|
- /* Set screen window buffer to infinite size -- MS default is tiny. */
|
|
- _wsetscreenbuf (fileno (stdout), _WINBUFINF);
|
|
-#endif
|
|
- progname=argv[0]; /* salt away invoking program */
|
|
-
|
|
- while (--argc > 0 && (*++argv)[0] == '-')
|
|
- for (i=1; argv[0][i] != '\0'; i++) {
|
|
- switch (argv[0][i]) {
|
|
-
|
|
- /* debug flag */
|
|
- case 'd':
|
|
- mit_des_debug=3;
|
|
- continue;
|
|
-
|
|
- case 'z':
|
|
- zflag = 1;
|
|
- continue;
|
|
-
|
|
- case 'm':
|
|
- mflag = 1;
|
|
- continue;
|
|
-
|
|
- default:
|
|
- printf("%s: illegal flag \"%c\" ",
|
|
- progname,argv[0][i]);
|
|
- exit(1);
|
|
- }
|
|
- };
|
|
-
|
|
- if (argc) {
|
|
- fprintf(stderr, "Usage: %s [-dmz]\n", progname);
|
|
- exit(1);
|
|
- }
|
|
-
|
|
- /* do some initialisation */
|
|
-
|
|
- /* use known input and key */
|
|
-
|
|
- /* ECB zero text zero key */
|
|
- if (zflag) {
|
|
- input = zero_text;
|
|
- mit_des_key_sched(zero_key, sched);
|
|
- printf("plaintext = key = 0, cipher = 0x8ca64de9c1b123a7\n");
|
|
- do_encrypt(input,cipher_text);
|
|
- printf("\tcipher = (low to high bytes)\n\t\t");
|
|
- for (j = 0; j<=7; j++)
|
|
- printf("%02x ",cipher_text[j]);
|
|
- printf("\n");
|
|
- do_decrypt(output,cipher_text);
|
|
- if ( memcmp((char *)cipher_text, (char *)zresult, 8) ) {
|
|
- printf("verify: error in zero key test\n");
|
|
- exit(-1);
|
|
- }
|
|
-
|
|
- exit(0);
|
|
- }
|
|
-
|
|
- if (mflag) {
|
|
- input = msb_text;
|
|
- mit_des_key_sched(key3, sched);
|
|
- printf("plaintext = 0x00 00 00 00 00 00 00 40, ");
|
|
- printf("key = 0x80 01 01 01 01 01 01 01\n");
|
|
- printf(" cipher = 0xa380e02a6be54696\n");
|
|
- do_encrypt(input,cipher_text);
|
|
- printf("\tcipher = (low to high bytes)\n\t\t");
|
|
- for (j = 0; j<=7; j++) {
|
|
- printf("%02x ",cipher_text[j]);
|
|
- }
|
|
- printf("\n");
|
|
- do_decrypt(output,cipher_text);
|
|
- if ( memcmp((char *)cipher_text, (char *)mresult, 8) ) {
|
|
- printf("verify: error in msb test\n");
|
|
- exit(-1);
|
|
- }
|
|
- exit(0);
|
|
- }
|
|
-
|
|
- /* ECB mode Davies and Price */
|
|
- {
|
|
- input = zero_text;
|
|
- mit_des_key_sched(key2, sched);
|
|
- printf("Examples per FIPS publication 81, keys ivs and cipher\n");
|
|
- printf("in hex. These are the correct answers, see below for\n");
|
|
- printf("the actual answers.\n\n");
|
|
- printf("Examples per Davies and Price.\n\n");
|
|
- printf("EXAMPLE ECB\tkey = 08192a3b4c5d6e7f\n");
|
|
- printf("\tclear = 0\n");
|
|
- printf("\tcipher = 25 dd ac 3e 96 17 64 67\n");
|
|
- printf("ACTUAL ECB\n");
|
|
- printf("\tclear \"%s\"\n", input);
|
|
- do_encrypt(input,cipher_text);
|
|
- printf("\tcipher = (low to high bytes)\n\t\t");
|
|
- for (j = 0; j<=7; j++)
|
|
- printf("%02x ",cipher_text[j]);
|
|
- printf("\n\n");
|
|
- do_decrypt(output,cipher_text);
|
|
- if ( memcmp((char *)cipher_text, (char *)cipher1, 8) ) {
|
|
- printf("verify: error in ECB encryption\n");
|
|
- exit(-1);
|
|
- }
|
|
- else
|
|
- printf("verify: ECB encryption is correct\n\n");
|
|
- }
|
|
-
|
|
- /* ECB mode */
|
|
- {
|
|
- mit_des_key_sched(default_key, sched);
|
|
- input = clear_text;
|
|
- ivec = default_ivec;
|
|
- printf("EXAMPLE ECB\tkey = 0123456789abcdef\n");
|
|
- printf("\tclear = \"Now is the time for all \"\n");
|
|
- printf("\tcipher = 3f a4 0e 8a 98 4d 48 15 ...\n");
|
|
- printf("ACTUAL ECB\n\tclear \"%s\"",input);
|
|
- do_encrypt(input,cipher_text);
|
|
- printf("\n\tcipher = (low to high bytes)\n\t\t");
|
|
- for (j = 0; j<=7; j++) {
|
|
- printf("%02x ",cipher_text[j]);
|
|
- }
|
|
- printf("\n\n");
|
|
- do_decrypt(output,cipher_text);
|
|
- if ( memcmp((char *)cipher_text, (char *)cipher2, 8) ) {
|
|
- printf("verify: error in ECB encryption\n");
|
|
- exit(-1);
|
|
- }
|
|
- else
|
|
- printf("verify: ECB encryption is correct\n\n");
|
|
- }
|
|
-
|
|
- /* CBC mode */
|
|
- printf("EXAMPLE CBC\tkey = 0123456789abcdef");
|
|
- printf("\tiv = 1234567890abcdef\n");
|
|
- printf("\tclear = \"Now is the time for all \"\n");
|
|
- printf("\tcipher =\te5 c7 cd de 87 2b f2 7c\n");
|
|
- printf("\t\t\t43 e9 34 00 8c 38 9c 0f\n");
|
|
- printf("\t\t\t68 37 88 49 9a 7c 05 f6\n");
|
|
-
|
|
- printf("ACTUAL CBC\n\tclear \"%s\"\n",input);
|
|
- in_length = strlen((char *)input);
|
|
- if ((retval = mit_des_cbc_encrypt((const mit_des_cblock *) input,
|
|
- (mit_des_cblock *) cipher_text,
|
|
- (size_t) in_length,
|
|
- sched,
|
|
- ivec,
|
|
- MIT_DES_ENCRYPT))) {
|
|
- com_err("des verify", retval, "can't encrypt");
|
|
- exit(-1);
|
|
- }
|
|
- printf("\tciphertext = (low to high bytes)\n");
|
|
- for (i = 0; i <= 2; i++) {
|
|
- printf("\t\t");
|
|
- for (j = 0; j <= 7; j++) {
|
|
- printf("%02x ",cipher_text[i*8+j]);
|
|
- }
|
|
- printf("\n");
|
|
- }
|
|
- if ((retval = mit_des_cbc_encrypt((const mit_des_cblock *) cipher_text,
|
|
- (mit_des_cblock *) clear_text,
|
|
- (size_t) in_length,
|
|
- sched,
|
|
- ivec,
|
|
- MIT_DES_DECRYPT))) {
|
|
- com_err("des verify", retval, "can't decrypt");
|
|
- exit(-1);
|
|
- }
|
|
- printf("\tdecrypted clear_text = \"%s\"\n",clear_text);
|
|
-
|
|
- if ( memcmp((char *)cipher_text, (char *)cipher3, in_length) ) {
|
|
- printf("verify: error in CBC encryption\n");
|
|
- exit(-1);
|
|
- }
|
|
- else
|
|
- printf("verify: CBC encryption is correct\n\n");
|
|
-
|
|
- printf("EXAMPLE CBC checksum");
|
|
- printf("\tkey = 0123456789abcdef\tiv = 1234567890abcdef\n");
|
|
- printf("\tclear =\t\t\"7654321 Now is the time for \"\n");
|
|
- printf("\tchecksum\t58 d2 e7 7e 86 06 27 33, ");
|
|
- printf("or some part thereof\n");
|
|
- input = clear_text2;
|
|
- mit_des_cbc_cksum(input,cipher_text, strlen((char *)input),
|
|
- sched,ivec);
|
|
- printf("ACTUAL CBC checksum\n");
|
|
- printf("\t\tencrypted cksum = (low to high bytes)\n\t\t");
|
|
- for (j = 0; j<=7; j++)
|
|
- printf("%02x ",cipher_text[j]);
|
|
- printf("\n\n");
|
|
- if ( memcmp((char *)cipher_text, (char *)checksum, 8) ) {
|
|
- printf("verify: error in CBC checksum\n");
|
|
- exit(-1);
|
|
- }
|
|
- else
|
|
- printf("verify: CBC checksum is correct\n\n");
|
|
-
|
|
- exit(0);
|
|
-}
|
|
-
|
|
-static void
|
|
-do_encrypt(in,out)
|
|
- unsigned char *in;
|
|
- unsigned char *out;
|
|
-{
|
|
- int i, j;
|
|
- for (i =1; i<=nflag; i++) {
|
|
- mit_des_cbc_encrypt((const mit_des_cblock *)in,
|
|
- (mit_des_cblock *)out,
|
|
- 8,
|
|
- sched,
|
|
- zero_text,
|
|
- MIT_DES_ENCRYPT);
|
|
- if (mit_des_debug) {
|
|
- printf("\nclear %s\n",in);
|
|
- for (j = 0; j<=7; j++)
|
|
- printf("%02X ",in[j] & 0xff);
|
|
- printf("\tcipher ");
|
|
- for (j = 0; j<=7; j++)
|
|
- printf("%02X ",out[j] & 0xff);
|
|
- }
|
|
- }
|
|
-}
|
|
-
|
|
-static void
|
|
-do_decrypt(in,out)
|
|
- unsigned char *out;
|
|
- unsigned char *in;
|
|
- /* try to invert it */
|
|
-{
|
|
- int i, j;
|
|
- for (i =1; i<=nflag; i++) {
|
|
- mit_des_cbc_encrypt((const mit_des_cblock *)out,
|
|
- (mit_des_cblock *)in,
|
|
- 8,
|
|
- sched,
|
|
- zero_text,
|
|
- MIT_DES_DECRYPT);
|
|
- if (mit_des_debug) {
|
|
- printf("clear %s\n",in);
|
|
- for (j = 0; j<=7; j++)
|
|
- printf("%02X ",in[j] & 0xff);
|
|
- printf("\tcipher ");
|
|
- for (j = 0; j<=7; j++)
|
|
- printf("%02X ",out[j] & 0xff);
|
|
- }
|
|
- }
|
|
-}
|
|
-
|
|
-/*
|
|
- * Fake out the DES library, for the purposes of testing.
|
|
- */
|
|
-
|
|
-int
|
|
-mit_des_is_weak_key(key)
|
|
- mit_des_cblock key;
|
|
-{
|
|
- return 0; /* fake it out for testing */
|
|
-}
|
|
diff --git a/src/lib/crypto/builtin/des/weak_key.c b/src/lib/crypto/builtin/des/weak_key.c
|
|
deleted file mode 100644
|
|
index f8304a3638..0000000000
|
|
--- a/src/lib/crypto/builtin/des/weak_key.c
|
|
+++ /dev/null
|
|
@@ -1,90 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/builtin/des/weak_key.c */
|
|
-/*
|
|
- * Copyright 1989,1990 by the Massachusetts Institute of Technology.
|
|
- * All Rights Reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-
|
|
-/*
|
|
- * Under U.S. law, this software may not be exported outside the US
|
|
- * without license from the U.S. Commerce department.
|
|
- *
|
|
- * These routines form the library interface to the DES facilities.
|
|
- *
|
|
- * Originally written 8/85 by Steve Miller, MIT Project Athena.
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES
|
|
-
|
|
-/*
|
|
- * The following are the weak DES keys:
|
|
- */
|
|
-static const mit_des_cblock weak[16] = {
|
|
- /* weak keys */
|
|
- {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},
|
|
- {0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe},
|
|
- {0x1f,0x1f,0x1f,0x1f,0x0e,0x0e,0x0e,0x0e},
|
|
- {0xe0,0xe0,0xe0,0xe0,0xf1,0xf1,0xf1,0xf1},
|
|
-
|
|
- /* semi-weak */
|
|
- {0x01,0xfe,0x01,0xfe,0x01,0xfe,0x01,0xfe},
|
|
- {0xfe,0x01,0xfe,0x01,0xfe,0x01,0xfe,0x01},
|
|
-
|
|
- {0x1f,0xe0,0x1f,0xe0,0x0e,0xf1,0x0e,0xf1},
|
|
- {0xe0,0x1f,0xe0,0x1f,0xf1,0x0e,0xf1,0x0e},
|
|
-
|
|
- {0x01,0xe0,0x01,0xe0,0x01,0xf1,0x01,0xf1},
|
|
- {0xe0,0x01,0xe0,0x01,0xf1,0x01,0xf1,0x01},
|
|
-
|
|
- {0x1f,0xfe,0x1f,0xfe,0x0e,0xfe,0x0e,0xfe},
|
|
- {0xfe,0x1f,0xfe,0x1f,0xfe,0x0e,0xfe,0x0e},
|
|
-
|
|
- {0x01,0x1f,0x01,0x1f,0x01,0x0e,0x01,0x0e},
|
|
- {0x1f,0x01,0x1f,0x01,0x0e,0x01,0x0e,0x01},
|
|
-
|
|
- {0xe0,0xfe,0xe0,0xfe,0xf1,0xfe,0xf1,0xfe},
|
|
- {0xfe,0xe0,0xfe,0xe0,0xfe,0xf1,0xfe,0xf1}
|
|
-};
|
|
-
|
|
-/*
|
|
- * mit_des_is_weak_key: returns true iff key is a [semi-]weak des key.
|
|
- *
|
|
- * Requires: key has correct odd parity.
|
|
- */
|
|
-int
|
|
-mit_des_is_weak_key(mit_des_cblock key)
|
|
-{
|
|
- unsigned int i;
|
|
- const mit_des_cblock *weak_p = weak;
|
|
-
|
|
- for (i = 0; i < (sizeof(weak)/sizeof(mit_des_cblock)); i++) {
|
|
- if (!memcmp(weak_p++,key,sizeof(mit_des_cblock)))
|
|
- return 1;
|
|
- }
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-#endif /* K5_BUILTIN_DES */
|
|
diff --git a/src/lib/crypto/builtin/enc_provider/Makefile.in b/src/lib/crypto/builtin/enc_provider/Makefile.in
|
|
index 6ad7cbd4e0..655966b255 100644
|
|
--- a/src/lib/crypto/builtin/enc_provider/Makefile.in
|
|
+++ b/src/lib/crypto/builtin/enc_provider/Makefile.in
|
|
@@ -1,6 +1,6 @@
|
|
mydir=lib$(S)crypto$(S)builtin$(S)enc_provider
|
|
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
|
|
-LOCALINCLUDES = -I$(srcdir)/../des -I$(srcdir)/../aes -I$(srcdir)/../camellia \
|
|
+LOCALINCLUDES = -I$(srcdir)/../aes -I$(srcdir)/../camellia \
|
|
-I$(srcdir)/../../krb $(CRYPTO_IMPL_CFLAGS)
|
|
|
|
##DOS##BUILDTOP = ..\..\..\..
|
|
@@ -8,19 +8,16 @@ LOCALINCLUDES = -I$(srcdir)/../des -I$(srcdir)/../aes -I$(srcdir)/../camellia \
|
|
##DOS##OBJFILE = ..\..\$(OUTPRE)enc_provider.lst
|
|
|
|
STLIBOBJS= \
|
|
- des3.o \
|
|
rc4.o \
|
|
aes.o \
|
|
camellia.o
|
|
|
|
OBJS= \
|
|
- $(OUTPRE)des3.$(OBJEXT) \
|
|
$(OUTPRE)aes.$(OBJEXT) \
|
|
$(OUTPRE)camellia.$(OBJEXT) \
|
|
$(OUTPRE)rc4.$(OBJEXT)
|
|
|
|
SRCS= \
|
|
- $(srcdir)/des3.c \
|
|
$(srcdir)/aes.c \
|
|
$(srcdir)/camellia.c \
|
|
$(srcdir)/rc4.c
|
|
diff --git a/src/lib/crypto/builtin/enc_provider/deps b/src/lib/crypto/builtin/enc_provider/deps
|
|
index a3414a38ec..dc29d9fce8 100644
|
|
--- a/src/lib/crypto/builtin/enc_provider/deps
|
|
+++ b/src/lib/crypto/builtin/enc_provider/deps
|
|
@@ -1,17 +1,6 @@
|
|
#
|
|
# Generated makefile dependencies follow.
|
|
#
|
|
-des3.so des3.po $(OUTPRE)des3.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
|
|
- $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
|
|
- $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h \
|
|
- $(srcdir)/../des/des_int.h $(top_srcdir)/include/k5-buf.h \
|
|
- $(top_srcdir)/include/k5-err.h $(top_srcdir)/include/k5-gmt_mktime.h \
|
|
- $(top_srcdir)/include/k5-int-pkinit.h $(top_srcdir)/include/k5-int.h \
|
|
- $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-plugin.h \
|
|
- $(top_srcdir)/include/k5-thread.h $(top_srcdir)/include/k5-trace.h \
|
|
- $(top_srcdir)/include/krb5.h $(top_srcdir)/include/krb5/authdata_plugin.h \
|
|
- $(top_srcdir)/include/krb5/plugin.h $(top_srcdir)/include/port-sockets.h \
|
|
- $(top_srcdir)/include/socket-utils.h des3.c
|
|
aes.so aes.po $(OUTPRE)aes.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
|
|
$(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
|
|
$(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h \
|
|
diff --git a/src/lib/crypto/builtin/enc_provider/des3.c b/src/lib/crypto/builtin/enc_provider/des3.c
|
|
deleted file mode 100644
|
|
index c2634d5e10..0000000000
|
|
--- a/src/lib/crypto/builtin/enc_provider/des3.c
|
|
+++ /dev/null
|
|
@@ -1,109 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/*
|
|
- * Copyright (C) 1998 by the FundsXpress, INC.
|
|
- *
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may require
|
|
- * a specific license from the United States Government. It is the
|
|
- * responsibility of any person or organization contemplating export to
|
|
- * obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of FundsXpress. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. FundsXpress makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- *
|
|
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-#include "des_int.h"
|
|
-
|
|
-#ifdef K5_BUILTIN_DES
|
|
-
|
|
-static krb5_error_code
|
|
-validate_and_schedule(krb5_key key, const krb5_data *ivec,
|
|
- const krb5_crypto_iov *data, size_t num_data,
|
|
- mit_des3_key_schedule *schedule)
|
|
-{
|
|
- if (key->keyblock.length != 24)
|
|
- return(KRB5_BAD_KEYSIZE);
|
|
- if (iov_total_length(data, num_data, FALSE) % 8 != 0)
|
|
- return(KRB5_BAD_MSIZE);
|
|
- if (ivec && (ivec->length != 8))
|
|
- return(KRB5_BAD_MSIZE);
|
|
-
|
|
- switch (mit_des3_key_sched(*(mit_des3_cblock *)key->keyblock.contents,
|
|
- *schedule)) {
|
|
- case -1:
|
|
- return(KRB5DES_BAD_KEYPAR);
|
|
- case -2:
|
|
- return(KRB5DES_WEAK_KEY);
|
|
- }
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static krb5_error_code
|
|
-k5_des3_encrypt(krb5_key key, const krb5_data *ivec, krb5_crypto_iov *data,
|
|
- size_t num_data)
|
|
-{
|
|
- mit_des3_key_schedule schedule;
|
|
- krb5_error_code err;
|
|
-
|
|
- err = validate_and_schedule(key, ivec, data, num_data, &schedule);
|
|
- if (err)
|
|
- return err;
|
|
-
|
|
- /* this has a return value, but the code always returns zero */
|
|
- krb5int_des3_cbc_encrypt(data, num_data,
|
|
- schedule[0], schedule[1], schedule[2],
|
|
- ivec != NULL ? (unsigned char *) ivec->data :
|
|
- NULL);
|
|
-
|
|
- zap(schedule, sizeof(schedule));
|
|
-
|
|
- return(0);
|
|
-}
|
|
-
|
|
-static krb5_error_code
|
|
-k5_des3_decrypt(krb5_key key, const krb5_data *ivec, krb5_crypto_iov *data,
|
|
- size_t num_data)
|
|
-{
|
|
- mit_des3_key_schedule schedule;
|
|
- krb5_error_code err;
|
|
-
|
|
- err = validate_and_schedule(key, ivec, data, num_data, &schedule);
|
|
- if (err)
|
|
- return err;
|
|
-
|
|
- /* this has a return value, but the code always returns zero */
|
|
- krb5int_des3_cbc_decrypt(data, num_data,
|
|
- schedule[0], schedule[1], schedule[2],
|
|
- ivec != NULL ? (unsigned char *) ivec->data :
|
|
- NULL);
|
|
-
|
|
- zap(schedule, sizeof(schedule));
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-const struct krb5_enc_provider krb5int_enc_des3 = {
|
|
- 8,
|
|
- 21, 24,
|
|
- k5_des3_encrypt,
|
|
- k5_des3_decrypt,
|
|
- NULL,
|
|
- krb5int_des_init_state,
|
|
- krb5int_default_free_state
|
|
-};
|
|
-
|
|
-#endif /* K5_BUILTIN_DES */
|
|
diff --git a/src/lib/crypto/crypto_tests/t_cf2.expected b/src/lib/crypto/crypto_tests/t_cf2.expected
|
|
index f8251a16cb..bc6aa50c84 100644
|
|
--- a/src/lib/crypto/crypto_tests/t_cf2.expected
|
|
+++ b/src/lib/crypto/crypto_tests/t_cf2.expected
|
|
@@ -1,6 +1,5 @@
|
|
97df97e4b798b29eb31ed7280287a92a
|
|
4d6ca4e629785c1f01baf55e2e548566b9617ae3a96868c337cb93b5e72b1c7b
|
|
-e58f9eb643862c13ad38e529313462a7f73e62834fe54a01
|
|
24d7f6b6bae4e5c00d2082c5ebab3672
|
|
edd02a39d2dbde31611c16e610be062c
|
|
67f6ea530aea85a37dcbb23349ea52dcc61ca8493ff557252327fd8304341584
|
|
diff --git a/src/lib/crypto/crypto_tests/t_cf2.in b/src/lib/crypto/crypto_tests/t_cf2.in
|
|
index 73e2f8fbc9..c4d23b506b 100644
|
|
--- a/src/lib/crypto/crypto_tests/t_cf2.in
|
|
+++ b/src/lib/crypto/crypto_tests/t_cf2.in
|
|
@@ -8,11 +8,6 @@ key1
|
|
key2
|
|
a
|
|
b
|
|
-16
|
|
-key1
|
|
-key2
|
|
-a
|
|
-b
|
|
23
|
|
key1
|
|
key2
|
|
diff --git a/src/lib/crypto/crypto_tests/t_cksums.c b/src/lib/crypto/crypto_tests/t_cksums.c
|
|
index 557340ec5e..9f9a177ef0 100644
|
|
--- a/src/lib/crypto/crypto_tests/t_cksums.c
|
|
+++ b/src/lib/crypto/crypto_tests/t_cksums.c
|
|
@@ -59,16 +59,6 @@ struct test {
|
|
"\xDA\x39\xA3\xEE\x5E\x6B\x4B\x0D\x32\x55\xBF\xEF\x95\x60\x18\x90"
|
|
"\xAF\xD8\x07\x09" }
|
|
},
|
|
- {
|
|
- { KV5M_DATA, 9, "six seven" },
|
|
- CKSUMTYPE_HMAC_SHA1_DES3, ENCTYPE_DES3_CBC_SHA1, 2,
|
|
- { KV5M_DATA, 24,
|
|
- "\x7A\x25\xDF\x89\x92\x29\x6D\xCE\xDA\x0E\x13\x5B\xC4\x04\x6E\x23"
|
|
- "\x75\xB3\xC1\x4C\x98\xFB\xC1\x62" },
|
|
- { KV5M_DATA, 20,
|
|
- "\x0E\xEF\xC9\xC3\xE0\x49\xAA\xBC\x1B\xA5\xC4\x01\x67\x7D\x9A\xB6"
|
|
- "\x99\x08\x2B\xB4" }
|
|
- },
|
|
{
|
|
{ KV5M_DATA, 37, "eight nine ten eleven twelve thirteen" },
|
|
CKSUMTYPE_HMAC_SHA1_96_AES128, ENCTYPE_AES128_CTS_HMAC_SHA1_96, 3,
|
|
diff --git a/src/lib/crypto/crypto_tests/t_decrypt.c b/src/lib/crypto/crypto_tests/t_decrypt.c
|
|
index a40a855007..716f2c337a 100644
|
|
--- a/src/lib/crypto/crypto_tests/t_decrypt.c
|
|
+++ b/src/lib/crypto/crypto_tests/t_decrypt.c
|
|
@@ -39,62 +39,6 @@ struct test {
|
|
krb5_data keybits;
|
|
krb5_data ciphertext;
|
|
} test_cases[] = {
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- { KV5M_DATA, 0, "", }, 0,
|
|
- { KV5M_DATA, 24,
|
|
- "\x7A\x25\xDF\x89\x92\x29\x6D\xCE\xDA\x0E\x13\x5B\xC4\x04\x6E\x23"
|
|
- "\x75\xB3\xC1\x4C\x98\xFB\xC1\x62" },
|
|
- { KV5M_DATA, 28,
|
|
- "\x54\x8A\xF4\xD5\x04\xF7\xD7\x23\x30\x3F\x12\x17\x5F\xE8\x38\x6B"
|
|
- "\x7B\x53\x35\xA9\x67\xBA\xD6\x1F\x3B\xF0\xB1\x43" }
|
|
- },
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- { KV5M_DATA, 1, "1", }, 1,
|
|
- { KV5M_DATA, 24,
|
|
- "\xBC\x07\x83\x89\x15\x13\xD5\xCE\x57\xBC\x13\x8F\xD3\xC1\x1A\xE6"
|
|
- "\x40\x45\x23\x85\x32\x29\x62\xB6" },
|
|
- { KV5M_DATA, 36,
|
|
- "\x9C\x3C\x1D\xBA\x47\x47\xD8\x5A\xF2\x91\x6E\x47\x45\xF2\xDC\xE3"
|
|
- "\x80\x46\x79\x6E\x51\x04\xBC\xCD\xFB\x66\x9A\x91\xD4\x4B\xC3\x56"
|
|
- "\x66\x09\x45\xC7" }
|
|
- },
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- { KV5M_DATA, 9, "9 bytesss", }, 2,
|
|
- { KV5M_DATA, 24,
|
|
- "\x2F\xD0\xF7\x25\xCE\x04\x10\x0D\x2F\xC8\xA1\x80\x98\x83\x1F\x85"
|
|
- "\x0B\x45\xD9\xEF\x85\x0B\xD9\x20" },
|
|
- { KV5M_DATA, 44,
|
|
- "\xCF\x91\x44\xEB\xC8\x69\x79\x81\x07\x5A\x8B\xAD\x8D\x74\xE5\xD7"
|
|
- "\xD5\x91\xEB\x7D\x97\x70\xC7\xAD\xA2\x5E\xE8\xC5\xB3\xD6\x94\x44"
|
|
- "\xDF\xEC\x79\xA5\xB7\xA0\x14\x82\xD9\xAF\x74\xE6" }
|
|
- },
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- { KV5M_DATA, 13, "13 bytes byte", }, 3,
|
|
- { KV5M_DATA, 24,
|
|
- "\x0D\xD5\x20\x94\xE0\xF4\x1C\xEC\xCB\x5B\xE5\x10\xA7\x64\xB3\x51"
|
|
- "\x76\xE3\x98\x13\x32\xF1\xE5\x98" },
|
|
- { KV5M_DATA, 44,
|
|
- "\x83\x9A\x17\x08\x1E\xCB\xAF\xBC\xDC\x91\xB8\x8C\x69\x55\xDD\x3C"
|
|
- "\x45\x14\x02\x3C\xF1\x77\xB7\x7B\xF0\xD0\x17\x7A\x16\xF7\x05\xE8"
|
|
- "\x49\xCB\x77\x81\xD7\x6A\x31\x6B\x19\x3F\x8D\x30" }
|
|
- },
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- { KV5M_DATA, 30, "30 bytes bytes bytes bytes byt", }, 4,
|
|
- { KV5M_DATA, 24,
|
|
- "\xF1\x16\x86\xCB\xBC\x9E\x23\xEA\x54\xFE\xCD\x2A\x3D\xCD\xFB\x20"
|
|
- "\xB6\xFE\x98\xBF\x26\x45\xC4\xC4" },
|
|
- { KV5M_DATA, 60,
|
|
- "\x89\x43\x3E\x83\xFD\x0E\xA3\x66\x6C\xFF\xCD\x18\xD8\xDE\xEB\xC5"
|
|
- "\x3B\x9A\x34\xED\xBE\xB1\x59\xD9\xF6\x67\xC6\xC2\xB9\xA9\x64\x40"
|
|
- "\x1D\x55\xE7\xE9\xC6\x8D\x64\x8D\x65\xC3\xAA\x84\xFF\xA3\x79\x0C"
|
|
- "\x14\xA8\x64\xDA\x80\x73\xA9\xA9\x5C\x4B\xA2\xBC" }
|
|
- },
|
|
-
|
|
{
|
|
ENCTYPE_ARCFOUR_HMAC,
|
|
{ KV5M_DATA, 0, "", }, 0,
|
|
@@ -524,7 +468,6 @@ printhex(const char *head, void *data, size_t len)
|
|
|
|
static krb5_enctype
|
|
enctypes[] = {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
ENCTYPE_ARCFOUR_HMAC,
|
|
ENCTYPE_ARCFOUR_HMAC_EXP,
|
|
ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
diff --git a/src/lib/crypto/crypto_tests/t_derive.c b/src/lib/crypto/crypto_tests/t_derive.c
|
|
index afbf7477f6..93ce30da20 100644
|
|
--- a/src/lib/crypto/crypto_tests/t_derive.c
|
|
+++ b/src/lib/crypto/crypto_tests/t_derive.c
|
|
@@ -38,41 +38,6 @@ struct test {
|
|
enum deriv_alg alg;
|
|
krb5_data expected_key;
|
|
} test_cases[] = {
|
|
- /* Kc, Ke, Kei for a DES3 key */
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- { KV5M_DATA, 24,
|
|
- "\x85\x0B\xB5\x13\x58\x54\x8C\xD0\x5E\x86\x76\x8C\x31\x3E\x3B\xFE"
|
|
- "\xF7\x51\x19\x37\xDC\xF7\x2C\x3E" },
|
|
- { KV5M_DATA, 5, "\0\0\0\2\x99" },
|
|
- DERIVE_RFC3961,
|
|
- { KV5M_DATA, 24,
|
|
- "\xF7\x8C\x49\x6D\x16\xE6\xC2\xDA\xE0\xE0\xB6\xC2\x40\x57\xA8\x4C"
|
|
- "\x04\x26\xAE\xEF\x26\xFD\x6D\xCE" }
|
|
- },
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- { KV5M_DATA, 24,
|
|
- "\x85\x0B\xB5\x13\x58\x54\x8C\xD0\x5E\x86\x76\x8C\x31\x3E\x3B\xFE"
|
|
- "\xF7\x51\x19\x37\xDC\xF7\x2C\x3E" },
|
|
- { KV5M_DATA, 5, "\0\0\0\2\xAA" },
|
|
- DERIVE_RFC3961,
|
|
- { KV5M_DATA, 24,
|
|
- "\x5B\x57\x23\xD0\xB6\x34\xCB\x68\x4C\x3E\xBA\x52\x64\xE9\xA7\x0D"
|
|
- "\x52\xE6\x83\x23\x1A\xD3\xC4\xCE" }
|
|
- },
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- { KV5M_DATA, 24,
|
|
- "\x85\x0B\xB5\x13\x58\x54\x8C\xD0\x5E\x86\x76\x8C\x31\x3E\x3B\xFE"
|
|
- "\xF7\x51\x19\x37\xDC\xF7\x2C\x3E" },
|
|
- { KV5M_DATA, 5, "\0\0\0\2\x55" },
|
|
- DERIVE_RFC3961,
|
|
- { KV5M_DATA, 24,
|
|
- "\xA7\x7C\x94\x98\x0E\x9B\x73\x45\xA8\x15\x25\xC4\x23\xA7\x37\xCE"
|
|
- "\x67\xF4\xCD\x91\xB6\xB3\xDA\x45" }
|
|
- },
|
|
-
|
|
/* Kc, Ke, Ki for an AES-128 key */
|
|
{
|
|
ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
@@ -286,7 +251,6 @@ static const struct krb5_enc_provider *
|
|
get_enc_provider(krb5_enctype enctype)
|
|
{
|
|
switch (enctype) {
|
|
- case ENCTYPE_DES3_CBC_SHA1: return &krb5int_enc_des3;
|
|
case ENCTYPE_AES128_CTS_HMAC_SHA1_96: return &krb5int_enc_aes128;
|
|
case ENCTYPE_AES256_CTS_HMAC_SHA1_96: return &krb5int_enc_aes256;
|
|
case ENCTYPE_CAMELLIA128_CTS_CMAC: return &krb5int_enc_camellia128;
|
|
diff --git a/src/lib/crypto/crypto_tests/t_encrypt.c b/src/lib/crypto/crypto_tests/t_encrypt.c
|
|
index bd9b94691c..290a72e1e0 100644
|
|
--- a/src/lib/crypto/crypto_tests/t_encrypt.c
|
|
+++ b/src/lib/crypto/crypto_tests/t_encrypt.c
|
|
@@ -37,7 +37,6 @@
|
|
|
|
/* What enctypes should we test?*/
|
|
krb5_enctype interesting_enctypes[] = {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
ENCTYPE_ARCFOUR_HMAC,
|
|
ENCTYPE_ARCFOUR_HMAC_EXP,
|
|
ENCTYPE_AES256_CTS_HMAC_SHA1_96,
|
|
diff --git a/src/lib/crypto/crypto_tests/t_short.c b/src/lib/crypto/crypto_tests/t_short.c
|
|
index d4c2b97dfd..4466b71158 100644
|
|
--- a/src/lib/crypto/crypto_tests/t_short.c
|
|
+++ b/src/lib/crypto/crypto_tests/t_short.c
|
|
@@ -34,7 +34,6 @@
|
|
#include "k5-int.h"
|
|
|
|
krb5_enctype interesting_enctypes[] = {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
ENCTYPE_ARCFOUR_HMAC,
|
|
ENCTYPE_ARCFOUR_HMAC_EXP,
|
|
ENCTYPE_AES256_CTS_HMAC_SHA1_96,
|
|
diff --git a/src/lib/crypto/crypto_tests/t_str2key.c b/src/lib/crypto/crypto_tests/t_str2key.c
|
|
index cdb1acc6d0..ef4c4a7d3b 100644
|
|
--- a/src/lib/crypto/crypto_tests/t_str2key.c
|
|
+++ b/src/lib/crypto/crypto_tests/t_str2key.c
|
|
@@ -35,58 +35,6 @@ struct test {
|
|
krb5_error_code expected_err;
|
|
krb5_boolean allow_weak;
|
|
} test_cases[] = {
|
|
- /* Test vectors from RFC 3961 appendix A.4. */
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- "password",
|
|
- { KV5M_DATA, 21, "ATHENA.MIT.EDUraeburn" },
|
|
- { KV5M_DATA, 0, NULL },
|
|
- { KV5M_DATA, 24, "\x85\x0B\xB5\x13\x58\x54\x8C\xD0\x5E\x86\x76\x8C"
|
|
- "\x31\x3E\x3B\xFE\xF7\x51\x19\x37\xDC\xF7\x2C\x3E" },
|
|
- 0,
|
|
- FALSE
|
|
- },
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- "potatoe",
|
|
- { KV5M_DATA, 19, "WHITEHOUSE.GOVdanny" },
|
|
- { KV5M_DATA, 0, NULL },
|
|
- { KV5M_DATA, 24, "\xDF\xCD\x23\x3D\xD0\xA4\x32\x04\xEA\x6D\xC4\x37"
|
|
- "\xFB\x15\xE0\x61\xB0\x29\x79\xC1\xF7\x4F\x37\x7A" },
|
|
- 0,
|
|
- FALSE
|
|
- },
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- "penny",
|
|
- { KV5M_DATA, 19, "EXAMPLE.COMbuckaroo" },
|
|
- { KV5M_DATA, 0, NULL },
|
|
- { KV5M_DATA, 24, "\x6D\x2F\xCD\xF2\xD6\xFB\xBC\x3D\xDC\xAD\xB5\xDA"
|
|
- "\x57\x10\xA2\x34\x89\xB0\xD3\xB6\x9D\x5D\x9D\x4A" },
|
|
- 0,
|
|
- FALSE
|
|
- },
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- "\xC3\x9F",
|
|
- { KV5M_DATA, 23, "ATHENA.MIT.EDUJuri\xC5\xA1\x69\xC4\x87" },
|
|
- { KV5M_DATA, 0, NULL },
|
|
- { KV5M_DATA, 24, "\x16\xD5\xA4\x0E\x1C\xE3\xBA\xCB\x61\xB9\xDC\xE0"
|
|
- "\x04\x70\x32\x4C\x83\x19\x73\xA7\xB9\x52\xFE\xB0" },
|
|
- 0,
|
|
- FALSE
|
|
- },
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
- "\xF0\x9D\x84\x9E",
|
|
- { KV5M_DATA, 18, "EXAMPLE.COMpianist" },
|
|
- { KV5M_DATA, 0, NULL },
|
|
- { KV5M_DATA, 24, "\x85\x76\x37\x26\x58\x5D\xBC\x1C\xCE\x6E\xC4\x3E"
|
|
- "\x1F\x75\x1F\x07\xF1\xC4\xCB\xB0\x98\xF4\x0B\x19" },
|
|
- 0,
|
|
- FALSE
|
|
- },
|
|
-
|
|
/* Test vectors from RFC 3962 appendix B. */
|
|
{
|
|
ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
diff --git a/src/lib/crypto/crypto_tests/vectors.c b/src/lib/crypto/crypto_tests/vectors.c
|
|
index bcf5c9106f..eb107dbcd2 100644
|
|
--- a/src/lib/crypto/crypto_tests/vectors.c
|
|
+++ b/src/lib/crypto/crypto_tests/vectors.c
|
|
@@ -190,8 +190,6 @@ test_s2k (krb5_enctype enctype)
|
|
}
|
|
}
|
|
|
|
-static void test_des3_s2k () { test_s2k (ENCTYPE_DES3_CBC_SHA1); }
|
|
-
|
|
static void
|
|
keyToData (krb5_keyblock *k, krb5_data *d)
|
|
{
|
|
@@ -208,8 +206,6 @@ void check_error (int r, int line) {
|
|
}
|
|
#define CHECK check_error(r, __LINE__)
|
|
|
|
-extern struct krb5_enc_provider krb5int_enc_des3;
|
|
-struct krb5_enc_provider *enc = &krb5int_enc_des3;
|
|
extern struct krb5_enc_provider krb5int_enc_aes128, krb5int_enc_aes256;
|
|
|
|
void DK (krb5_keyblock *out, krb5_keyblock *in, const krb5_data *usage) {
|
|
diff --git a/src/lib/crypto/krb/Makefile.in b/src/lib/crypto/krb/Makefile.in
|
|
index cb2e40a3a5..f66698bd53 100644
|
|
--- a/src/lib/crypto/krb/Makefile.in
|
|
+++ b/src/lib/crypto/krb/Makefile.in
|
|
@@ -47,7 +47,6 @@ STLIBOBJS=\
|
|
prf.o \
|
|
prf_aes2.o \
|
|
prf_cmac.o \
|
|
- prf_des.o \
|
|
prf_dk.o \
|
|
prf_rc4.o \
|
|
prng.o \
|
|
@@ -103,7 +102,6 @@ OBJS=\
|
|
$(OUTPRE)prf.$(OBJEXT) \
|
|
$(OUTPRE)prf_aes2.$(OBJEXT) \
|
|
$(OUTPRE)prf_cmac.$(OBJEXT) \
|
|
- $(OUTPRE)prf_des.$(OBJEXT) \
|
|
$(OUTPRE)prf_dk.$(OBJEXT) \
|
|
$(OUTPRE)prf_rc4.$(OBJEXT) \
|
|
$(OUTPRE)prng.$(OBJEXT) \
|
|
@@ -159,7 +157,6 @@ SRCS=\
|
|
$(srcdir)/prf.c \
|
|
$(srcdir)/prf_aes2.c \
|
|
$(srcdir)/prf_cmac.c \
|
|
- $(srcdir)/prf_des.c \
|
|
$(srcdir)/prf_dk.c \
|
|
$(srcdir)/prf_rc4.c \
|
|
$(srcdir)/prng.c \
|
|
diff --git a/src/lib/crypto/krb/cksumtypes.c b/src/lib/crypto/krb/cksumtypes.c
|
|
index f7ba322f24..25a3ffd2d2 100644
|
|
--- a/src/lib/crypto/krb/cksumtypes.c
|
|
+++ b/src/lib/crypto/krb/cksumtypes.c
|
|
@@ -52,12 +52,6 @@ const struct krb5_cksumtypes krb5int_cksumtypes_list[] = {
|
|
krb5int_unkeyed_checksum, NULL,
|
|
20, 20, CKSUM_UNKEYED },
|
|
|
|
- { CKSUMTYPE_HMAC_SHA1_DES3,
|
|
- "hmac-sha1-des3", { "hmac-sha1-des3-kd" }, "HMAC-SHA1 DES3 key",
|
|
- &krb5int_enc_des3, &krb5int_hash_sha1,
|
|
- krb5int_dk_checksum, NULL,
|
|
- 20, 20, 0 },
|
|
-
|
|
{ CKSUMTYPE_HMAC_MD5_ARCFOUR,
|
|
"hmac-md5-rc4", { "hmac-md5-enc", "hmac-md5-earcfour" },
|
|
"Microsoft HMAC MD5",
|
|
diff --git a/src/lib/crypto/krb/crypto_int.h b/src/lib/crypto/krb/crypto_int.h
|
|
index 3629616d96..1ee4b30e02 100644
|
|
--- a/src/lib/crypto/krb/crypto_int.h
|
|
+++ b/src/lib/crypto/krb/crypto_int.h
|
|
@@ -332,8 +332,6 @@ krb5_error_code krb5int_aes2_string_to_key(const struct krb5_keytypes *enc,
|
|
/* Random to key */
|
|
krb5_error_code k5_rand2key_direct(const krb5_data *randombits,
|
|
krb5_keyblock *keyblock);
|
|
-krb5_error_code k5_rand2key_des3(const krb5_data *randombits,
|
|
- krb5_keyblock *keyblock);
|
|
|
|
/* Pseudo-random function */
|
|
krb5_error_code krb5int_des_prf(const struct krb5_keytypes *ktp,
|
|
@@ -411,11 +409,6 @@ krb5_keyusage krb5int_arcfour_translate_usage(krb5_keyusage usage);
|
|
/* Ensure library initialization has occurred. */
|
|
int krb5int_crypto_init(void);
|
|
|
|
-/* DES default state initialization handler (used by module enc providers). */
|
|
-krb5_error_code krb5int_des_init_state(const krb5_keyblock *key,
|
|
- krb5_keyusage keyusage,
|
|
- krb5_data *state_out);
|
|
-
|
|
/* Default state cleanup handler (used by module enc providers). */
|
|
void krb5int_default_free_state(krb5_data *state);
|
|
|
|
@@ -468,7 +461,6 @@ void k5_iov_cursor_put(struct iov_cursor *cursor, unsigned char *block);
|
|
/* Modules must implement the k5_sha256() function prototyped in k5-int.h. */
|
|
|
|
/* Modules must implement the following enc_providers and hash_providers: */
|
|
-extern const struct krb5_enc_provider krb5int_enc_des3;
|
|
extern const struct krb5_enc_provider krb5int_enc_arcfour;
|
|
extern const struct krb5_enc_provider krb5int_enc_aes128;
|
|
extern const struct krb5_enc_provider krb5int_enc_aes256;
|
|
@@ -485,9 +477,6 @@ extern const struct krb5_hash_provider krb5int_hash_sha384;
|
|
|
|
/* Modules must implement the following functions. */
|
|
|
|
-/* Set the parity bits to the correct values in keybits. */
|
|
-void k5_des_fixup_key_parity(unsigned char *keybits);
|
|
-
|
|
/* Compute an HMAC using the provided hash function, key, and data, storing the
|
|
* result into output (caller-allocated). */
|
|
krb5_error_code krb5int_hmac(const struct krb5_hash_provider *hash,
|
|
diff --git a/src/lib/crypto/krb/default_state.c b/src/lib/crypto/krb/default_state.c
|
|
index 0757c8b02c..f89dc79023 100644
|
|
--- a/src/lib/crypto/krb/default_state.c
|
|
+++ b/src/lib/crypto/krb/default_state.c
|
|
@@ -32,16 +32,6 @@
|
|
|
|
#include "crypto_int.h"
|
|
|
|
-krb5_error_code
|
|
-krb5int_des_init_state(const krb5_keyblock *key, krb5_keyusage usage,
|
|
- krb5_data *state_out)
|
|
-{
|
|
- if (alloc_data(state_out, 8))
|
|
- return ENOMEM;
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
void
|
|
krb5int_default_free_state(krb5_data *state)
|
|
{
|
|
diff --git a/src/lib/crypto/krb/enctype_util.c b/src/lib/crypto/krb/enctype_util.c
|
|
index 1542d40629..a0037912a7 100644
|
|
--- a/src/lib/crypto/krb/enctype_util.c
|
|
+++ b/src/lib/crypto/krb/enctype_util.c
|
|
@@ -45,6 +45,9 @@ struct {
|
|
{ ENCTYPE_DES_CBC_MD5, "des-cbc-md5" },
|
|
{ ENCTYPE_DES_CBC_RAW, "des-cbc-raw" },
|
|
{ ENCTYPE_DES_HMAC_SHA1, "des-hmac-sha1" },
|
|
+ { ENCTYPE_DES3_CBC_SHA, "des3-cbc-sha1" },
|
|
+ { ENCTYPE_DES3_CBC_RAW, "des3-cbc-raw" },
|
|
+ { ENCTYPE_DES3_CBC_SHA1, "des3-hmac-sha1" },
|
|
{ ENCTYPE_NULL, NULL }
|
|
};
|
|
|
|
diff --git a/src/lib/crypto/krb/etypes.c b/src/lib/crypto/krb/etypes.c
|
|
index fc278783b9..7635393a41 100644
|
|
--- a/src/lib/crypto/krb/etypes.c
|
|
+++ b/src/lib/crypto/krb/etypes.c
|
|
@@ -35,27 +35,6 @@
|
|
|
|
/* Deprecations come from RFC 6649 and RFC 8249. */
|
|
const struct krb5_keytypes krb5int_enctypes_list[] = {
|
|
- { ENCTYPE_DES3_CBC_RAW,
|
|
- "des3-cbc-raw", { 0 }, "Triple DES cbc mode raw",
|
|
- &krb5int_enc_des3, NULL,
|
|
- 16,
|
|
- krb5int_raw_crypto_length, krb5int_raw_encrypt, krb5int_raw_decrypt,
|
|
- krb5int_dk_string_to_key, k5_rand2key_des3,
|
|
- NULL, /*PRF*/
|
|
- 0,
|
|
- ETYPE_WEAK | ETYPE_DEPRECATED, 112 },
|
|
-
|
|
- { ENCTYPE_DES3_CBC_SHA1,
|
|
- "des3-cbc-sha1", { "des3-hmac-sha1", "des3-cbc-sha1-kd" },
|
|
- "Triple DES cbc mode with HMAC/sha1",
|
|
- &krb5int_enc_des3, &krb5int_hash_sha1,
|
|
- 16,
|
|
- krb5int_dk_crypto_length, krb5int_dk_encrypt, krb5int_dk_decrypt,
|
|
- krb5int_dk_string_to_key, k5_rand2key_des3,
|
|
- krb5int_dk_prf,
|
|
- CKSUMTYPE_HMAC_SHA1_DES3,
|
|
- ETYPE_DEPRECATED, 112 },
|
|
-
|
|
/* rc4-hmac uses a 128-bit key, but due to weaknesses in the RC4 cipher, we
|
|
* consider its strength degraded and assign it an SSF value of 64. */
|
|
{ ENCTYPE_ARCFOUR_HMAC,
|
|
diff --git a/src/lib/crypto/krb/prf_des.c b/src/lib/crypto/krb/prf_des.c
|
|
deleted file mode 100644
|
|
index 7a2d719c5f..0000000000
|
|
--- a/src/lib/crypto/krb/prf_des.c
|
|
+++ /dev/null
|
|
@@ -1,47 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/krb/prf_des.c - RFC 3961 DES-based PRF */
|
|
-/*
|
|
- * Copyright (C) 2004, 2009 by the Massachusetts Institute of Technology.
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-
|
|
-krb5_error_code
|
|
-krb5int_des_prf(const struct krb5_keytypes *ktp, krb5_key key,
|
|
- const krb5_data *in, krb5_data *out)
|
|
-{
|
|
- const struct krb5_hash_provider *hash = &krb5int_hash_md5;
|
|
- krb5_crypto_iov iov;
|
|
- krb5_error_code ret;
|
|
-
|
|
- /* Compute a hash of the input, storing into the output buffer. */
|
|
- iov.flags = KRB5_CRYPTO_TYPE_DATA;
|
|
- iov.data = *in;
|
|
- ret = hash->hash(&iov, 1, out);
|
|
- if (ret != 0)
|
|
- return ret;
|
|
-
|
|
- /* Encrypt the hash in place. */
|
|
- iov.data = *out;
|
|
- return ktp->enc->encrypt(key, NULL, &iov, 1);
|
|
-}
|
|
diff --git a/src/lib/crypto/krb/random_to_key.c b/src/lib/crypto/krb/random_to_key.c
|
|
index 9394385aa0..863090beb2 100644
|
|
--- a/src/lib/crypto/krb/random_to_key.c
|
|
+++ b/src/lib/crypto/krb/random_to_key.c
|
|
@@ -71,31 +71,3 @@ k5_rand2key_direct(const krb5_data *randombits, krb5_keyblock *keyblock)
|
|
memcpy(keyblock->contents, randombits->data, randombits->length);
|
|
return 0;
|
|
}
|
|
-
|
|
-static inline void
|
|
-eighth_byte(unsigned char *b)
|
|
-{
|
|
- b[7] = (((b[0] & 1) << 1) | ((b[1] & 1) << 2) | ((b[2] & 1) << 3) |
|
|
- ((b[3] & 1) << 4) | ((b[4] & 1) << 5) | ((b[5] & 1) << 6) |
|
|
- ((b[6] & 1) << 7));
|
|
-}
|
|
-
|
|
-krb5_error_code
|
|
-k5_rand2key_des3(const krb5_data *randombits, krb5_keyblock *keyblock)
|
|
-{
|
|
- int i;
|
|
-
|
|
- if (randombits->length != 21)
|
|
- return KRB5_CRYPTO_INTERNAL;
|
|
-
|
|
- keyblock->magic = KV5M_KEYBLOCK;
|
|
-
|
|
- /* Take the seven bytes, move them around into the top 7 bits of the
|
|
- * 8 key bytes, then compute the parity bits. Do this three times. */
|
|
- for (i = 0; i < 3; i++) {
|
|
- memcpy(&keyblock->contents[i * 8], &randombits->data[i * 7], 7);
|
|
- eighth_byte(&keyblock->contents[i * 8]);
|
|
- k5_des_fixup_key_parity(&keyblock->contents[i * 8]);
|
|
- }
|
|
- return 0;
|
|
-}
|
|
diff --git a/src/lib/crypto/libk5crypto.exports b/src/lib/crypto/libk5crypto.exports
|
|
index 052f4d4b51..d8ffa63304 100644
|
|
--- a/src/lib/crypto/libk5crypto.exports
|
|
+++ b/src/lib/crypto/libk5crypto.exports
|
|
@@ -86,7 +86,6 @@ krb5_k_verify_checksum
|
|
krb5_k_verify_checksum_iov
|
|
krb5int_aes_encrypt
|
|
krb5int_aes_decrypt
|
|
-krb5int_enc_des3
|
|
krb5int_arcfour_gsscrypt
|
|
krb5int_camellia_encrypt
|
|
krb5int_cmac_checksum
|
|
diff --git a/src/lib/crypto/openssl/Makefile.in b/src/lib/crypto/openssl/Makefile.in
|
|
index cf11f6847b..8e4cdb8bbf 100644
|
|
--- a/src/lib/crypto/openssl/Makefile.in
|
|
+++ b/src/lib/crypto/openssl/Makefile.in
|
|
@@ -1,6 +1,6 @@
|
|
mydir=lib$(S)crypto$(S)openssl
|
|
BUILDTOP=$(REL)..$(S)..$(S)..
|
|
-SUBDIRS=des enc_provider hash_provider
|
|
+SUBDIRS=enc_provider hash_provider
|
|
LOCALINCLUDES=-I$(srcdir)/../krb $(CRYPTO_IMPL_CFLAGS)
|
|
|
|
STLIBOBJS=\
|
|
@@ -24,7 +24,7 @@ SRCS=\
|
|
$(srcdir)/pbkdf2.c \
|
|
$(srcdir)/sha256.c
|
|
|
|
-SUBDIROBJLISTS= des/OBJS.ST md4/OBJS.ST \
|
|
+SUBDIROBJLISTS= md4/OBJS.ST \
|
|
md5/OBJS.ST sha1/OBJS.ST sha2/OBJS.ST \
|
|
enc_provider/OBJS.ST \
|
|
hash_provider/OBJS.ST \
|
|
diff --git a/src/lib/crypto/openssl/des/Makefile.in b/src/lib/crypto/openssl/des/Makefile.in
|
|
deleted file mode 100644
|
|
index a6cece1dd1..0000000000
|
|
--- a/src/lib/crypto/openssl/des/Makefile.in
|
|
+++ /dev/null
|
|
@@ -1,20 +0,0 @@
|
|
-mydir=lib$(S)crypto$(S)openssl$(S)des
|
|
-BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
|
|
-LOCALINCLUDES = -I$(srcdir)/../../krb $(CRYPTO_IMPL_CFLAGS)
|
|
-
|
|
-STLIBOBJS= des_keys.o
|
|
-
|
|
-OBJS= $(OUTPRE)des_keys.$(OBJEXT)
|
|
-
|
|
-SRCS= $(srcdir)/des_keys.c
|
|
-
|
|
-all-unix: all-libobjs
|
|
-
|
|
-includes: depend
|
|
-
|
|
-depend: $(SRCS)
|
|
-
|
|
-clean-unix:: clean-libobjs
|
|
-
|
|
-@libobj_frag@
|
|
-
|
|
diff --git a/src/lib/crypto/openssl/des/deps b/src/lib/crypto/openssl/des/deps
|
|
deleted file mode 100644
|
|
index 723c268082..0000000000
|
|
--- a/src/lib/crypto/openssl/des/deps
|
|
+++ /dev/null
|
|
@@ -1,14 +0,0 @@
|
|
-#
|
|
-# Generated makefile dependencies follow.
|
|
-#
|
|
-des_keys.so des_keys.po $(OUTPRE)des_keys.$(OBJEXT): \
|
|
- $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \
|
|
- $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \
|
|
- $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h $(top_srcdir)/include/k5-buf.h \
|
|
- $(top_srcdir)/include/k5-err.h $(top_srcdir)/include/k5-gmt_mktime.h \
|
|
- $(top_srcdir)/include/k5-int-pkinit.h $(top_srcdir)/include/k5-int.h \
|
|
- $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-plugin.h \
|
|
- $(top_srcdir)/include/k5-thread.h $(top_srcdir)/include/k5-trace.h \
|
|
- $(top_srcdir)/include/krb5.h $(top_srcdir)/include/krb5/authdata_plugin.h \
|
|
- $(top_srcdir)/include/krb5/plugin.h $(top_srcdir)/include/port-sockets.h \
|
|
- $(top_srcdir)/include/socket-utils.h des_keys.c
|
|
diff --git a/src/lib/crypto/openssl/des/des_keys.c b/src/lib/crypto/openssl/des/des_keys.c
|
|
deleted file mode 100644
|
|
index 83f1cbf22a..0000000000
|
|
--- a/src/lib/crypto/openssl/des/des_keys.c
|
|
+++ /dev/null
|
|
@@ -1,39 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/openssl/des/des_keys.c - Key functions used by Kerberos code */
|
|
-/*
|
|
- * Copyright (C) 2011 by the Massachusetts Institute of Technology.
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-
|
|
-#ifdef K5_OPENSSL_DES_KEY_PARITY
|
|
-
|
|
-#include <openssl/des.h>
|
|
-
|
|
-void
|
|
-k5_des_fixup_key_parity(unsigned char *keybits)
|
|
-{
|
|
- DES_set_odd_parity((DES_cblock *)keybits);
|
|
-}
|
|
-
|
|
-#endif
|
|
diff --git a/src/lib/crypto/openssl/enc_provider/Makefile.in b/src/lib/crypto/openssl/enc_provider/Makefile.in
|
|
index 26827cfed5..f0d37c1213 100644
|
|
--- a/src/lib/crypto/openssl/enc_provider/Makefile.in
|
|
+++ b/src/lib/crypto/openssl/enc_provider/Makefile.in
|
|
@@ -3,19 +3,16 @@ BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
|
|
LOCALINCLUDES = -I$(srcdir)/../../krb $(CRYPTO_IMPL_CFLAGS)
|
|
|
|
STLIBOBJS= \
|
|
- des3.o \
|
|
rc4.o \
|
|
aes.o \
|
|
camellia.o
|
|
|
|
OBJS= \
|
|
- $(OUTPRE)des3.$(OBJEXT) \
|
|
$(OUTPRE)aes.$(OBJEXT) \
|
|
$(OUTPRE)camellia.$(OBJEXT) \
|
|
$(OUTPRE)rc4.$(OBJEXT)
|
|
|
|
SRCS= \
|
|
- $(srcdir)/des3.c \
|
|
$(srcdir)/aes.c \
|
|
$(srcdir)/camellia.c \
|
|
$(srcdir)/rc4.c
|
|
diff --git a/src/lib/crypto/openssl/enc_provider/deps b/src/lib/crypto/openssl/enc_provider/deps
|
|
index 1c87a526d0..a502990a0c 100644
|
|
--- a/src/lib/crypto/openssl/enc_provider/deps
|
|
+++ b/src/lib/crypto/openssl/enc_provider/deps
|
|
@@ -1,17 +1,6 @@
|
|
#
|
|
# Generated makefile dependencies follow.
|
|
#
|
|
-des3.so des3.po $(OUTPRE)des3.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
|
|
- $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
|
|
- $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h \
|
|
- $(top_srcdir)/include/k5-buf.h $(top_srcdir)/include/k5-err.h \
|
|
- $(top_srcdir)/include/k5-gmt_mktime.h $(top_srcdir)/include/k5-int-pkinit.h \
|
|
- $(top_srcdir)/include/k5-int.h $(top_srcdir)/include/k5-platform.h \
|
|
- $(top_srcdir)/include/k5-plugin.h $(top_srcdir)/include/k5-thread.h \
|
|
- $(top_srcdir)/include/k5-trace.h $(top_srcdir)/include/krb5.h \
|
|
- $(top_srcdir)/include/krb5/authdata_plugin.h $(top_srcdir)/include/krb5/plugin.h \
|
|
- $(top_srcdir)/include/port-sockets.h $(top_srcdir)/include/socket-utils.h \
|
|
- des3.c
|
|
aes.so aes.po $(OUTPRE)aes.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
|
|
$(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \
|
|
$(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(srcdir)/../../krb/crypto_int.h \
|
|
diff --git a/src/lib/crypto/openssl/enc_provider/des3.c b/src/lib/crypto/openssl/enc_provider/des3.c
|
|
deleted file mode 100644
|
|
index 90fcf9acb5..0000000000
|
|
--- a/src/lib/crypto/openssl/enc_provider/des3.c
|
|
+++ /dev/null
|
|
@@ -1,188 +0,0 @@
|
|
-/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
-/* lib/crypto/openssl/enc_provider/des3.c */
|
|
-/*
|
|
- * Copyright (C) 2009 by the Massachusetts Institute of Technology.
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may
|
|
- * require a specific license from the United States Government.
|
|
- * It is the responsibility of any person or organization contemplating
|
|
- * export to obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. Furthermore if you modify this software you must label
|
|
- * your software as modified software and not distribute it in such a
|
|
- * fashion that it might be confused with the original M.I.T. software.
|
|
- * M.I.T. makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- */
|
|
-/*
|
|
- * Copyright (C) 1998 by the FundsXpress, INC.
|
|
- *
|
|
- * All rights reserved.
|
|
- *
|
|
- * Export of this software from the United States of America may require
|
|
- * a specific license from the United States Government. It is the
|
|
- * responsibility of any person or organization contemplating export to
|
|
- * obtain such a license before exporting.
|
|
- *
|
|
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
- * distribute this software and its documentation for any purpose and
|
|
- * without fee is hereby granted, provided that the above copyright
|
|
- * notice appear in all copies and that both that copyright notice and
|
|
- * this permission notice appear in supporting documentation, and that
|
|
- * the name of FundsXpress. not be used in advertising or publicity pertaining
|
|
- * to distribution of the software without specific, written prior
|
|
- * permission. FundsXpress makes no representations about the suitability of
|
|
- * this software for any purpose. It is provided "as is" without express
|
|
- * or implied warranty.
|
|
- *
|
|
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
- */
|
|
-
|
|
-#include "crypto_int.h"
|
|
-
|
|
-#ifdef K5_OPENSSL_DES
|
|
-
|
|
-#include <openssl/evp.h>
|
|
-
|
|
-#define DES3_BLOCK_SIZE 8
|
|
-#define DES3_KEY_SIZE 24
|
|
-#define DES3_KEY_BYTES 21
|
|
-
|
|
-static krb5_error_code
|
|
-validate(krb5_key key, const krb5_data *ivec, const krb5_crypto_iov *data,
|
|
- size_t num_data, krb5_boolean *empty)
|
|
-{
|
|
- size_t input_length = iov_total_length(data, num_data, FALSE);
|
|
-
|
|
- if (key->keyblock.length != DES3_KEY_SIZE)
|
|
- return(KRB5_BAD_KEYSIZE);
|
|
- if ((input_length%DES3_BLOCK_SIZE) != 0)
|
|
- return(KRB5_BAD_MSIZE);
|
|
- if (ivec && (ivec->length != 8))
|
|
- return(KRB5_BAD_MSIZE);
|
|
-
|
|
- *empty = (input_length == 0);
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static krb5_error_code
|
|
-k5_des3_encrypt(krb5_key key, const krb5_data *ivec, krb5_crypto_iov *data,
|
|
- size_t num_data)
|
|
-{
|
|
- int ret, olen = DES3_BLOCK_SIZE;
|
|
- unsigned char iblock[DES3_BLOCK_SIZE], oblock[DES3_BLOCK_SIZE];
|
|
- struct iov_cursor cursor;
|
|
- EVP_CIPHER_CTX *ctx;
|
|
- krb5_boolean empty;
|
|
-
|
|
- ret = validate(key, ivec, data, num_data, &empty);
|
|
- if (ret != 0 || empty)
|
|
- return ret;
|
|
-
|
|
- ctx = EVP_CIPHER_CTX_new();
|
|
- if (ctx == NULL)
|
|
- return ENOMEM;
|
|
-
|
|
- ret = EVP_EncryptInit_ex(ctx, EVP_des_ede3_cbc(), NULL,
|
|
- key->keyblock.contents,
|
|
- (ivec) ? (unsigned char*)ivec->data : NULL);
|
|
- if (!ret) {
|
|
- EVP_CIPHER_CTX_free(ctx);
|
|
- return KRB5_CRYPTO_INTERNAL;
|
|
- }
|
|
-
|
|
- EVP_CIPHER_CTX_set_padding(ctx,0);
|
|
-
|
|
- k5_iov_cursor_init(&cursor, data, num_data, DES3_BLOCK_SIZE, FALSE);
|
|
- while (k5_iov_cursor_get(&cursor, iblock)) {
|
|
- ret = EVP_EncryptUpdate(ctx, oblock, &olen, iblock, DES3_BLOCK_SIZE);
|
|
- if (!ret)
|
|
- break;
|
|
- k5_iov_cursor_put(&cursor, oblock);
|
|
- }
|
|
-
|
|
- if (ivec != NULL)
|
|
- memcpy(ivec->data, oblock, DES3_BLOCK_SIZE);
|
|
-
|
|
- EVP_CIPHER_CTX_free(ctx);
|
|
-
|
|
- zap(iblock, sizeof(iblock));
|
|
- zap(oblock, sizeof(oblock));
|
|
-
|
|
- if (ret != 1)
|
|
- return KRB5_CRYPTO_INTERNAL;
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static krb5_error_code
|
|
-k5_des3_decrypt(krb5_key key, const krb5_data *ivec, krb5_crypto_iov *data,
|
|
- size_t num_data)
|
|
-{
|
|
- int ret, olen = DES3_BLOCK_SIZE;
|
|
- unsigned char iblock[DES3_BLOCK_SIZE], oblock[DES3_BLOCK_SIZE];
|
|
- struct iov_cursor cursor;
|
|
- EVP_CIPHER_CTX *ctx;
|
|
- krb5_boolean empty;
|
|
-
|
|
- ret = validate(key, ivec, data, num_data, &empty);
|
|
- if (ret != 0 || empty)
|
|
- return ret;
|
|
-
|
|
- ctx = EVP_CIPHER_CTX_new();
|
|
- if (ctx == NULL)
|
|
- return ENOMEM;
|
|
-
|
|
- ret = EVP_DecryptInit_ex(ctx, EVP_des_ede3_cbc(), NULL,
|
|
- key->keyblock.contents,
|
|
- (ivec) ? (unsigned char*)ivec->data : NULL);
|
|
- if (!ret) {
|
|
- EVP_CIPHER_CTX_free(ctx);
|
|
- return KRB5_CRYPTO_INTERNAL;
|
|
- }
|
|
-
|
|
- EVP_CIPHER_CTX_set_padding(ctx,0);
|
|
-
|
|
- k5_iov_cursor_init(&cursor, data, num_data, DES3_BLOCK_SIZE, FALSE);
|
|
- while (k5_iov_cursor_get(&cursor, iblock)) {
|
|
- ret = EVP_DecryptUpdate(ctx, oblock, &olen,
|
|
- (unsigned char *)iblock, DES3_BLOCK_SIZE);
|
|
- if (!ret)
|
|
- break;
|
|
- k5_iov_cursor_put(&cursor, oblock);
|
|
- }
|
|
-
|
|
- if (ivec != NULL)
|
|
- memcpy(ivec->data, iblock, DES3_BLOCK_SIZE);
|
|
-
|
|
- EVP_CIPHER_CTX_free(ctx);
|
|
-
|
|
- zap(iblock, sizeof(iblock));
|
|
- zap(oblock, sizeof(oblock));
|
|
-
|
|
- if (ret != 1)
|
|
- return KRB5_CRYPTO_INTERNAL;
|
|
- return 0;
|
|
-}
|
|
-
|
|
-const struct krb5_enc_provider krb5int_enc_des3 = {
|
|
- DES3_BLOCK_SIZE,
|
|
- DES3_KEY_BYTES, DES3_KEY_SIZE,
|
|
- k5_des3_encrypt,
|
|
- k5_des3_decrypt,
|
|
- NULL,
|
|
- krb5int_des_init_state,
|
|
- krb5int_default_free_state
|
|
-};
|
|
-
|
|
-#endif /* K5_OPENSSL_DES */
|
|
diff --git a/src/lib/crypto/openssl/kdf.c b/src/lib/crypto/openssl/kdf.c
|
|
index 41e845eae0..5a43c3d9eb 100644
|
|
--- a/src/lib/crypto/openssl/kdf.c
|
|
+++ b/src/lib/crypto/openssl/kdf.c
|
|
@@ -60,8 +60,6 @@ enc_name(const struct krb5_enc_provider *enc)
|
|
return "AES-128-CBC";
|
|
if (enc == &krb5int_enc_aes256)
|
|
return "AES-256-CBC";
|
|
- if (enc == &krb5int_enc_des3)
|
|
- return "DES-EDE3-CBC";
|
|
return NULL;
|
|
}
|
|
|
|
diff --git a/src/lib/gssapi/krb5/accept_sec_context.c b/src/lib/gssapi/krb5/accept_sec_context.c
|
|
index b35e11bfb6..d7c2ad321e 100644
|
|
--- a/src/lib/gssapi/krb5/accept_sec_context.c
|
|
+++ b/src/lib/gssapi/krb5/accept_sec_context.c
|
|
@@ -1026,7 +1026,6 @@ kg_accept_krb5(minor_status, context_handle,
|
|
}
|
|
|
|
switch (negotiated_etype) {
|
|
- case ENCTYPE_DES3_CBC_SHA1:
|
|
case ENCTYPE_ARCFOUR_HMAC:
|
|
case ENCTYPE_ARCFOUR_HMAC_EXP:
|
|
/* RFC 4121 accidentally omits RC4-HMAC-EXP as a "not-newer"
|
|
diff --git a/src/lib/gssapi/krb5/gssapiP_krb5.h b/src/lib/gssapi/krb5/gssapiP_krb5.h
|
|
index 7364607198..5aeb69aebc 100644
|
|
--- a/src/lib/gssapi/krb5/gssapiP_krb5.h
|
|
+++ b/src/lib/gssapi/krb5/gssapiP_krb5.h
|
|
@@ -125,14 +125,14 @@ enum sgn_alg {
|
|
/* SGN_ALG_DES_MAC = 0x0002, */
|
|
/* SGN_ALG_3 = 0x0003, /\* not published *\/ */
|
|
SGN_ALG_HMAC_MD5 = 0x0011, /* microsoft w2k; */
|
|
- SGN_ALG_HMAC_SHA1_DES3_KD = 0x0004
|
|
+ /* SGN_ALG_HMAC_SHA1_DES3_KD = 0x0004 */
|
|
};
|
|
enum seal_alg {
|
|
SEAL_ALG_NONE = 0xffff,
|
|
/* SEAL_ALG_DES = 0x0000, */
|
|
/* SEAL_ALG_1 = 0x0001, /\* not published *\/ */
|
|
SEAL_ALG_MICROSOFT_RC4 = 0x0010, /* microsoft w2k; */
|
|
- SEAL_ALG_DES3KD = 0x0002
|
|
+ /* SEAL_ALG_DES3KD = 0x0002 */
|
|
};
|
|
|
|
/* for 3DES */
|
|
@@ -153,7 +153,7 @@ enum qop {
|
|
GSS_KRB5_INTEG_C_QOP_HMAC_SHA1 = 0x0004,
|
|
GSS_KRB5_INTEG_C_QOP_MASK = 0x00ff,
|
|
/* GSS_KRB5_CONF_C_QOP_DES = 0x0100, */
|
|
- GSS_KRB5_CONF_C_QOP_DES3_KD = 0x0200,
|
|
+ /* GSS_KRB5_CONF_C_QOP_DES3_KD = 0x0200, */
|
|
GSS_KRB5_CONF_C_QOP_MASK = 0xff00
|
|
};
|
|
|
|
diff --git a/src/lib/gssapi/krb5/k5seal.c b/src/lib/gssapi/krb5/k5seal.c
|
|
index 99275be53a..0e5d10b115 100644
|
|
--- a/src/lib/gssapi/krb5/k5seal.c
|
|
+++ b/src/lib/gssapi/krb5/k5seal.c
|
|
@@ -142,19 +142,12 @@ make_seal_token_v1 (krb5_context context,
|
|
|
|
/* pad the plaintext, encrypt if needed, and stick it in the token */
|
|
|
|
- /* initialize the the checksum */
|
|
- switch (signalg) {
|
|
- case SGN_ALG_HMAC_SHA1_DES3_KD:
|
|
- md5cksum.checksum_type = CKSUMTYPE_HMAC_SHA1_DES3;
|
|
- break;
|
|
- case SGN_ALG_HMAC_MD5:
|
|
- md5cksum.checksum_type = CKSUMTYPE_HMAC_MD5_ARCFOUR;
|
|
- if (toktype != KG_TOK_SEAL_MSG)
|
|
- sign_usage = 15;
|
|
- break;
|
|
- default:
|
|
- abort ();
|
|
- }
|
|
+ if (signalg != SGN_ALG_HMAC_MD5)
|
|
+ abort();
|
|
+
|
|
+ md5cksum.checksum_type = CKSUMTYPE_HMAC_MD5_ARCFOUR;
|
|
+ if (toktype != KG_TOK_SEAL_MSG)
|
|
+ sign_usage = 15;
|
|
|
|
code = krb5_c_checksum_length(context, md5cksum.checksum_type, &sumlen);
|
|
if (code) {
|
|
@@ -203,20 +196,8 @@ make_seal_token_v1 (krb5_context context,
|
|
gssalloc_free(t);
|
|
return(code);
|
|
}
|
|
- switch(signalg) {
|
|
- case SGN_ALG_HMAC_SHA1_DES3_KD:
|
|
- /*
|
|
- * Using key derivation, the call to krb5_c_make_checksum
|
|
- * already dealt with encrypting.
|
|
- */
|
|
- if (md5cksum.length != cksum_size)
|
|
- abort ();
|
|
- memcpy(checksum, md5cksum.contents, md5cksum.length);
|
|
- break;
|
|
- case SGN_ALG_HMAC_MD5:
|
|
- memcpy(checksum, md5cksum.contents, cksum_size);
|
|
- break;
|
|
- }
|
|
+
|
|
+ memcpy(checksum, md5cksum.contents, cksum_size);
|
|
|
|
krb5_free_checksum_contents(context, &md5cksum);
|
|
|
|
diff --git a/src/lib/gssapi/krb5/k5sealiov.c b/src/lib/gssapi/krb5/k5sealiov.c
|
|
index 7bf7609a48..d5e12cb436 100644
|
|
--- a/src/lib/gssapi/krb5/k5sealiov.c
|
|
+++ b/src/lib/gssapi/krb5/k5sealiov.c
|
|
@@ -147,18 +147,11 @@ make_seal_token_v1_iov(krb5_context context,
|
|
/* pad the plaintext, encrypt if needed, and stick it in the token */
|
|
|
|
/* initialize the checksum */
|
|
- switch (ctx->signalg) {
|
|
- case SGN_ALG_HMAC_SHA1_DES3_KD:
|
|
- md5cksum.checksum_type = CKSUMTYPE_HMAC_SHA1_DES3;
|
|
- break;
|
|
- case SGN_ALG_HMAC_MD5:
|
|
- md5cksum.checksum_type = CKSUMTYPE_HMAC_MD5_ARCFOUR;
|
|
- if (toktype != KG_TOK_WRAP_MSG)
|
|
- sign_usage = 15;
|
|
- break;
|
|
- default:
|
|
- abort ();
|
|
- }
|
|
+ if (ctx->signalg != SGN_ALG_HMAC_MD5)
|
|
+ abort();
|
|
+ md5cksum.checksum_type = CKSUMTYPE_HMAC_MD5_ARCFOUR;
|
|
+ if (toktype != KG_TOK_WRAP_MSG)
|
|
+ sign_usage = 15;
|
|
|
|
code = krb5_c_checksum_length(context, md5cksum.checksum_type, &k5_trailerlen);
|
|
if (code != 0)
|
|
@@ -182,15 +175,7 @@ make_seal_token_v1_iov(krb5_context context,
|
|
if (code != 0)
|
|
goto cleanup;
|
|
|
|
- switch (ctx->signalg) {
|
|
- case SGN_ALG_HMAC_SHA1_DES3_KD:
|
|
- assert(md5cksum.length == ctx->cksum_size);
|
|
- memcpy(checksum, md5cksum.contents, md5cksum.length);
|
|
- break;
|
|
- case SGN_ALG_HMAC_MD5:
|
|
- memcpy(checksum, md5cksum.contents, ctx->cksum_size);
|
|
- break;
|
|
- }
|
|
+ memcpy(checksum, md5cksum.contents, ctx->cksum_size);
|
|
|
|
/* create the seq_num */
|
|
code = kg_make_seq_num(context, ctx->seq, ctx->initiate ? 0 : 0xFF,
|
|
diff --git a/src/lib/gssapi/krb5/k5unseal.c b/src/lib/gssapi/krb5/k5unseal.c
|
|
index 9b183bc337..f0cc4a6809 100644
|
|
--- a/src/lib/gssapi/krb5/k5unseal.c
|
|
+++ b/src/lib/gssapi/krb5/k5unseal.c
|
|
@@ -131,28 +131,21 @@ kg_unseal_v1(context, minor_status, ctx, ptr, bodysize, message_buffer,
|
|
but few enough that we can try them all. */
|
|
|
|
if ((ctx->sealalg == SEAL_ALG_NONE && signalg > 1) ||
|
|
- (ctx->sealalg == SEAL_ALG_DES3KD &&
|
|
- signalg != SGN_ALG_HMAC_SHA1_DES3_KD)||
|
|
(ctx->sealalg == SEAL_ALG_MICROSOFT_RC4 &&
|
|
signalg != SGN_ALG_HMAC_MD5)) {
|
|
*minor_status = 0;
|
|
return GSS_S_DEFECTIVE_TOKEN;
|
|
}
|
|
|
|
- switch (signalg) {
|
|
- case SGN_ALG_HMAC_MD5:
|
|
- cksum_len = 8;
|
|
- if (toktype != KG_TOK_SEAL_MSG)
|
|
- sign_usage = 15;
|
|
- break;
|
|
- case SGN_ALG_HMAC_SHA1_DES3_KD:
|
|
- cksum_len = 20;
|
|
- break;
|
|
- default:
|
|
+ if (signalg != SGN_ALG_HMAC_MD5) {
|
|
*minor_status = 0;
|
|
return GSS_S_DEFECTIVE_TOKEN;
|
|
}
|
|
|
|
+ cksum_len = 8;
|
|
+ if (toktype != KG_TOK_SEAL_MSG)
|
|
+ sign_usage = 15;
|
|
+
|
|
if ((size_t)bodysize < 14 + cksum_len) {
|
|
*minor_status = 0;
|
|
return GSS_S_DEFECTIVE_TOKEN;
|
|
@@ -252,64 +245,53 @@ kg_unseal_v1(context, minor_status, ctx, ptr, bodysize, message_buffer,
|
|
/* compute the checksum of the message */
|
|
|
|
/* initialize the the cksum */
|
|
- switch (signalg) {
|
|
- case SGN_ALG_HMAC_MD5:
|
|
- md5cksum.checksum_type = CKSUMTYPE_HMAC_MD5_ARCFOUR;
|
|
- break;
|
|
- case SGN_ALG_HMAC_SHA1_DES3_KD:
|
|
- md5cksum.checksum_type = CKSUMTYPE_HMAC_SHA1_DES3;
|
|
- break;
|
|
- default:
|
|
- abort ();
|
|
- }
|
|
+ if (signalg != SGN_ALG_HMAC_MD5)
|
|
+ abort();
|
|
+ md5cksum.checksum_type = CKSUMTYPE_HMAC_MD5_ARCFOUR;
|
|
|
|
code = krb5_c_checksum_length(context, md5cksum.checksum_type, &sumlen);
|
|
if (code)
|
|
return(code);
|
|
md5cksum.length = sumlen;
|
|
|
|
- switch (signalg) {
|
|
- default:
|
|
+ if (signalg != SGN_ALG_HMAC_MD5) {
|
|
*minor_status = 0;
|
|
return(GSS_S_DEFECTIVE_TOKEN);
|
|
+ }
|
|
|
|
- case SGN_ALG_HMAC_SHA1_DES3_KD:
|
|
- case SGN_ALG_HMAC_MD5:
|
|
- /* compute the checksum of the message */
|
|
-
|
|
- /* 8 = bytes of token body to be checksummed according to spec */
|
|
+ /* compute the checksum of the message */
|
|
|
|
- if (! (data_ptr = xmalloc(8 + plainlen))) {
|
|
- if (sealalg != 0xffff)
|
|
- xfree(plain);
|
|
- if (toktype == KG_TOK_SEAL_MSG)
|
|
- gssalloc_free(token.value);
|
|
- *minor_status = ENOMEM;
|
|
- return(GSS_S_FAILURE);
|
|
- }
|
|
+ /* 8 = bytes of token body to be checksummed according to spec */
|
|
|
|
- (void) memcpy(data_ptr, ptr-2, 8);
|
|
+ if (! (data_ptr = xmalloc(8 + plainlen))) {
|
|
+ if (sealalg != 0xffff)
|
|
+ xfree(plain);
|
|
+ if (toktype == KG_TOK_SEAL_MSG)
|
|
+ gssalloc_free(token.value);
|
|
+ *minor_status = ENOMEM;
|
|
+ return(GSS_S_FAILURE);
|
|
+ }
|
|
|
|
- (void) memcpy(data_ptr+8, plain, plainlen);
|
|
+ (void) memcpy(data_ptr, ptr-2, 8);
|
|
|
|
- plaind.length = 8 + plainlen;
|
|
- plaind.data = data_ptr;
|
|
- code = krb5_k_make_checksum(context, md5cksum.checksum_type,
|
|
- ctx->seq, sign_usage,
|
|
- &plaind, &md5cksum);
|
|
- xfree(data_ptr);
|
|
+ (void) memcpy(data_ptr+8, plain, plainlen);
|
|
|
|
- if (code) {
|
|
- if (toktype == KG_TOK_SEAL_MSG)
|
|
- gssalloc_free(token.value);
|
|
- *minor_status = code;
|
|
- return(GSS_S_FAILURE);
|
|
- }
|
|
+ plaind.length = 8 + plainlen;
|
|
+ plaind.data = data_ptr;
|
|
+ code = krb5_k_make_checksum(context, md5cksum.checksum_type,
|
|
+ ctx->seq, sign_usage,
|
|
+ &plaind, &md5cksum);
|
|
+ xfree(data_ptr);
|
|
|
|
- code = k5_bcmp(md5cksum.contents, ptr + 14, cksum_len);
|
|
- break;
|
|
+ if (code) {
|
|
+ if (toktype == KG_TOK_SEAL_MSG)
|
|
+ gssalloc_free(token.value);
|
|
+ *minor_status = code;
|
|
+ return(GSS_S_FAILURE);
|
|
}
|
|
|
|
+ code = k5_bcmp(md5cksum.contents, ptr + 14, cksum_len);
|
|
+
|
|
krb5_free_checksum_contents(context, &md5cksum);
|
|
if (sealalg != 0xffff)
|
|
xfree(plain);
|
|
diff --git a/src/lib/gssapi/krb5/k5unsealiov.c b/src/lib/gssapi/krb5/k5unsealiov.c
|
|
index 85a9574f36..3ce2a90ce9 100644
|
|
--- a/src/lib/gssapi/krb5/k5unsealiov.c
|
|
+++ b/src/lib/gssapi/krb5/k5unsealiov.c
|
|
@@ -102,28 +102,21 @@ kg_unseal_v1_iov(krb5_context context,
|
|
}
|
|
|
|
if ((ctx->sealalg == SEAL_ALG_NONE && signalg > 1) ||
|
|
- (ctx->sealalg == SEAL_ALG_DES3KD &&
|
|
- signalg != SGN_ALG_HMAC_SHA1_DES3_KD)||
|
|
(ctx->sealalg == SEAL_ALG_MICROSOFT_RC4 &&
|
|
signalg != SGN_ALG_HMAC_MD5)) {
|
|
*minor_status = 0;
|
|
return GSS_S_DEFECTIVE_TOKEN;
|
|
}
|
|
|
|
- switch (signalg) {
|
|
- case SGN_ALG_HMAC_MD5:
|
|
- cksum_len = 8;
|
|
- if (toktype != KG_TOK_WRAP_MSG)
|
|
- sign_usage = 15;
|
|
- break;
|
|
- case SGN_ALG_HMAC_SHA1_DES3_KD:
|
|
- cksum_len = 20;
|
|
- break;
|
|
- default:
|
|
+ if (signalg != SGN_ALG_HMAC_MD5) {
|
|
*minor_status = 0;
|
|
return GSS_S_DEFECTIVE_TOKEN;
|
|
}
|
|
|
|
+ cksum_len = 8;
|
|
+ if (toktype != KG_TOK_WRAP_MSG)
|
|
+ sign_usage = 15;
|
|
+
|
|
/* get the token parameters */
|
|
code = kg_get_seq_num(context, ctx->seq, ptr + 14, ptr + 6, &direction,
|
|
&seqnum);
|
|
@@ -181,16 +174,10 @@ kg_unseal_v1_iov(krb5_context context,
|
|
|
|
/* initialize the checksum */
|
|
|
|
- switch (signalg) {
|
|
- case SGN_ALG_HMAC_MD5:
|
|
- md5cksum.checksum_type = CKSUMTYPE_HMAC_MD5_ARCFOUR;
|
|
- break;
|
|
- case SGN_ALG_HMAC_SHA1_DES3_KD:
|
|
- md5cksum.checksum_type = CKSUMTYPE_HMAC_SHA1_DES3;
|
|
- break;
|
|
- default:
|
|
+ if (signalg != SGN_ALG_HMAC_MD5)
|
|
abort();
|
|
- }
|
|
+
|
|
+ md5cksum.checksum_type = CKSUMTYPE_HMAC_MD5_ARCFOUR;
|
|
|
|
code = krb5_c_checksum_length(context, md5cksum.checksum_type, &sumlen);
|
|
if (code != 0) {
|
|
@@ -209,18 +196,13 @@ kg_unseal_v1_iov(krb5_context context,
|
|
goto cleanup;
|
|
}
|
|
|
|
- switch (signalg) {
|
|
- case SGN_ALG_HMAC_SHA1_DES3_KD:
|
|
- case SGN_ALG_HMAC_MD5:
|
|
- code = k5_bcmp(md5cksum.contents, ptr + 14, cksum_len);
|
|
- break;
|
|
- default:
|
|
+ if (signalg != SGN_ALG_HMAC_MD5) {
|
|
code = 0;
|
|
retval = GSS_S_DEFECTIVE_TOKEN;
|
|
goto cleanup;
|
|
- break;
|
|
}
|
|
|
|
+ code = k5_bcmp(md5cksum.contents, ptr + 14, cksum_len);
|
|
if (code != 0) {
|
|
code = 0;
|
|
retval = GSS_S_BAD_SIG;
|
|
diff --git a/src/lib/gssapi/krb5/util_crypt.c b/src/lib/gssapi/krb5/util_crypt.c
|
|
index 84f1949887..32150f5e34 100644
|
|
--- a/src/lib/gssapi/krb5/util_crypt.c
|
|
+++ b/src/lib/gssapi/krb5/util_crypt.c
|
|
@@ -97,17 +97,6 @@ kg_setup_keys(krb5_context context, krb5_gss_ctx_id_rec *ctx, krb5_key subkey,
|
|
return code;
|
|
|
|
switch (subkey->keyblock.enctype) {
|
|
- case ENCTYPE_DES3_CBC_SHA1:
|
|
- code = kg_copy_keys(context, ctx, subkey);
|
|
- if (code != 0)
|
|
- return code;
|
|
-
|
|
- ctx->enc->keyblock.enctype = ENCTYPE_DES3_CBC_RAW;
|
|
- ctx->seq->keyblock.enctype = ENCTYPE_DES3_CBC_RAW;
|
|
- ctx->signalg = SGN_ALG_HMAC_SHA1_DES3_KD;
|
|
- ctx->cksum_size = 20;
|
|
- ctx->sealalg = SEAL_ALG_DES3KD;
|
|
- break;
|
|
case ENCTYPE_ARCFOUR_HMAC:
|
|
case ENCTYPE_ARCFOUR_HMAC_EXP:
|
|
/* RFC 4121 accidentally omits RC4-HMAC-EXP as a "not-newer" enctype,
|
|
diff --git a/src/lib/krb5/krb/init_ctx.c b/src/lib/krb5/krb/init_ctx.c
|
|
index 87b486c53f..2b5abcd817 100644
|
|
--- a/src/lib/krb5/krb/init_ctx.c
|
|
+++ b/src/lib/krb5/krb/init_ctx.c
|
|
@@ -59,7 +59,6 @@
|
|
static krb5_enctype default_enctype_list[] = {
|
|
ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
ENCTYPE_AES256_CTS_HMAC_SHA384_192, ENCTYPE_AES128_CTS_HMAC_SHA256_128,
|
|
- ENCTYPE_DES3_CBC_SHA1,
|
|
ENCTYPE_ARCFOUR_HMAC,
|
|
ENCTYPE_CAMELLIA128_CTS_CMAC, ENCTYPE_CAMELLIA256_CTS_CMAC,
|
|
0
|
|
@@ -450,8 +449,6 @@ krb5int_parse_enctype_list(krb5_context context, const char *profkey,
|
|
/* Set all enctypes in the default list. */
|
|
for (i = 0; default_list[i]; i++)
|
|
mod_list(default_list[i], sel, weak, &list);
|
|
- } else if (strcasecmp(token, "des3") == 0) {
|
|
- mod_list(ENCTYPE_DES3_CBC_SHA1, sel, weak, &list);
|
|
} else if (strcasecmp(token, "aes") == 0) {
|
|
mod_list(ENCTYPE_AES256_CTS_HMAC_SHA1_96, sel, weak, &list);
|
|
mod_list(ENCTYPE_AES128_CTS_HMAC_SHA1_96, sel, weak, &list);
|
|
diff --git a/src/lib/krb5/krb/s4u_creds.c b/src/lib/krb5/krb/s4u_creds.c
|
|
index 44d113e7c5..9662785783 100644
|
|
--- a/src/lib/krb5/krb/s4u_creds.c
|
|
+++ b/src/lib/krb5/krb/s4u_creds.c
|
|
@@ -288,8 +288,6 @@ verify_s4u2self_reply(krb5_context context,
|
|
assert(req_s4u_user != NULL);
|
|
|
|
switch (subkey->enctype) {
|
|
- case ENCTYPE_DES3_CBC_SHA1:
|
|
- case ENCTYPE_DES3_CBC_RAW:
|
|
case ENCTYPE_ARCFOUR_HMAC:
|
|
case ENCTYPE_ARCFOUR_HMAC_EXP :
|
|
not_newer = TRUE;
|
|
diff --git a/src/lib/krb5/krb/t_etypes.c b/src/lib/krb5/krb/t_etypes.c
|
|
index 90c9f626c6..935aca12f5 100644
|
|
--- a/src/lib/krb5/krb/t_etypes.c
|
|
+++ b/src/lib/krb5/krb/t_etypes.c
|
|
@@ -50,17 +50,6 @@ static struct {
|
|
{ ENCTYPE_AES256_CTS_HMAC_SHA1_96, 0 },
|
|
0, 0
|
|
},
|
|
- /* Family followed by enctype */
|
|
- { "aes des3-cbc-sha1-kd",
|
|
- { 0 },
|
|
- { ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
- ENCTYPE_AES256_CTS_HMAC_SHA384_192, ENCTYPE_AES128_CTS_HMAC_SHA256_128,
|
|
- ENCTYPE_DES3_CBC_SHA1, 0 },
|
|
- { ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
- ENCTYPE_AES256_CTS_HMAC_SHA384_192, ENCTYPE_AES128_CTS_HMAC_SHA256_128,
|
|
- ENCTYPE_DES3_CBC_SHA1, 0 },
|
|
- 0, 0
|
|
- },
|
|
/* Family with enctype removed */
|
|
{ "camellia -camellia256-cts-cmac",
|
|
{ 0 },
|
|
@@ -69,46 +58,15 @@ static struct {
|
|
},
|
|
/* Default set with family added and enctype removed */
|
|
{ "DEFAULT +aes -arcfour-hmac-md5",
|
|
- { ENCTYPE_ARCFOUR_HMAC, ENCTYPE_DES3_CBC_SHA1, 0 },
|
|
- { ENCTYPE_DES3_CBC_SHA1, ENCTYPE_AES256_CTS_HMAC_SHA1_96,
|
|
+ { ENCTYPE_ARCFOUR_HMAC, 0 },
|
|
+ { ENCTYPE_AES256_CTS_HMAC_SHA1_96,
|
|
ENCTYPE_AES128_CTS_HMAC_SHA1_96, ENCTYPE_AES256_CTS_HMAC_SHA384_192,
|
|
ENCTYPE_AES128_CTS_HMAC_SHA256_128, 0 },
|
|
- { ENCTYPE_DES3_CBC_SHA1,
|
|
- ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
+ { ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
ENCTYPE_AES256_CTS_HMAC_SHA384_192, ENCTYPE_AES128_CTS_HMAC_SHA256_128,
|
|
0 },
|
|
0, 0
|
|
},
|
|
- /* Default set with families removed and enctypes added (one redundant) */
|
|
- { "DEFAULT -des3 rc4-hmac rc4-hmac-exp",
|
|
- { ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
- ENCTYPE_DES3_CBC_SHA1, ENCTYPE_ARCFOUR_HMAC, 0 },
|
|
- { ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
- ENCTYPE_ARCFOUR_HMAC, 0 },
|
|
- { ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
- ENCTYPE_ARCFOUR_HMAC, ENCTYPE_ARCFOUR_HMAC_EXP, 0 },
|
|
- 0, 0
|
|
- },
|
|
- /* Default set with family moved to front */
|
|
- { "des3 +DEFAULT",
|
|
- { ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES128_CTS_HMAC_SHA1_96,
|
|
- ENCTYPE_DES3_CBC_SHA1, 0 },
|
|
- { ENCTYPE_DES3_CBC_SHA1, ENCTYPE_AES256_CTS_HMAC_SHA1_96,
|
|
- ENCTYPE_AES128_CTS_HMAC_SHA1_96, 0 },
|
|
- { ENCTYPE_DES3_CBC_SHA1, ENCTYPE_AES256_CTS_HMAC_SHA1_96,
|
|
- ENCTYPE_AES128_CTS_HMAC_SHA1_96, 0 },
|
|
- 0, 0
|
|
- },
|
|
- /* Two families with default set removed (exotic case), enctype added */
|
|
- { "aes +rc4 -DEFaulT des3-hmac-sha1",
|
|
- { ENCTYPE_AES128_CTS_HMAC_SHA1_96, ENCTYPE_DES3_CBC_SHA1,
|
|
- ENCTYPE_ARCFOUR_HMAC, 0 },
|
|
- { ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES256_CTS_HMAC_SHA384_192,
|
|
- ENCTYPE_AES128_CTS_HMAC_SHA256_128, ENCTYPE_DES3_CBC_SHA1, 0 },
|
|
- { ENCTYPE_AES256_CTS_HMAC_SHA1_96, ENCTYPE_AES256_CTS_HMAC_SHA384_192,
|
|
- ENCTYPE_AES128_CTS_HMAC_SHA256_128, ENCTYPE_DES3_CBC_SHA1, 0 },
|
|
- 0, 0
|
|
- },
|
|
/* Test krb5_set_default_in_tkt_ktypes */
|
|
{ NULL,
|
|
{ ENCTYPE_AES256_CTS_HMAC_SHA1_96, 0 },
|
|
diff --git a/src/lib/krb5/os/t_trace.c b/src/lib/krb5/os/t_trace.c
|
|
index 10ba8d0ac7..24064ffcfd 100644
|
|
--- a/src/lib/krb5/os/t_trace.c
|
|
+++ b/src/lib/krb5/os/t_trace.c
|
|
@@ -65,8 +65,8 @@ main (int argc, char *argv[])
|
|
krb5_principal princ = &principal_data;
|
|
krb5_pa_data padata, padata2, **padatap;
|
|
krb5_enctype enctypes[4] = {
|
|
- ENCTYPE_DES3_CBC_SHA, ENCTYPE_ARCFOUR_HMAC_EXP, ENCTYPE_UNKNOWN,
|
|
- ENCTYPE_NULL};
|
|
+ ENCTYPE_AES128_CTS_HMAC_SHA1_96, ENCTYPE_ARCFOUR_HMAC_EXP,
|
|
+ ENCTYPE_UNKNOWN, ENCTYPE_NULL};
|
|
krb5_ccache ccache;
|
|
krb5_keytab keytab;
|
|
krb5_creds creds;
|
|
diff --git a/src/lib/krb5/os/t_trace.ref b/src/lib/krb5/os/t_trace.ref
|
|
index 044a66999e..98fb14f3f7 100644
|
|
--- a/src/lib/krb5/os/t_trace.ref
|
|
+++ b/src/lib/krb5/os/t_trace.ref
|
|
@@ -41,7 +41,7 @@ int, krb5_principal type: ?
|
|
krb5_pa_data **, display list of padata type numbers: PA-PW-SALT (3), 0
|
|
krb5_pa_data **, display list of padata type numbers: (empty)
|
|
krb5_enctype, display shortest name of enctype: aes128-cts
|
|
-krb5_enctype *, display list of enctypes: 5, rc4-hmac-exp, 511
|
|
+krb5_enctype *, display list of enctypes: aes128-cts, rc4-hmac-exp, 511
|
|
krb5_enctype *, display list of enctypes: (empty)
|
|
krb5_ccache, display type:name: FILE:/path/to/ccache
|
|
krb5_keytab, display name: FILE:/etc/krb5.keytab
|
|
diff --git a/src/plugins/preauth/pkinit/pkcs11.h b/src/plugins/preauth/pkinit/pkcs11.h
|
|
index e3d2846315..586661bb7e 100644
|
|
--- a/src/plugins/preauth/pkinit/pkcs11.h
|
|
+++ b/src/plugins/preauth/pkinit/pkcs11.h
|
|
@@ -339,9 +339,9 @@ typedef unsigned long ck_key_type_t;
|
|
#define CKK_GENERIC_SECRET (0x10)
|
|
#define CKK_RC2 (0x11)
|
|
#define CKK_RC4 (0x12)
|
|
-#define CKK_DES (0x13)
|
|
-#define CKK_DES2 (0x14)
|
|
-#define CKK_DES3 (0x15)
|
|
+/* #define CKK_DES (0x13) */
|
|
+/* #define CKK_DES2 (0x14) */
|
|
+/* #define CKK_DES3 (0x15) */
|
|
#define CKK_CAST (0x16)
|
|
#define CKK_CAST3 (0x17)
|
|
#define CKK_CAST128 (0x18)
|
|
diff --git a/src/plugins/preauth/pkinit/pkinit_crypto.h b/src/plugins/preauth/pkinit/pkinit_crypto.h
|
|
index e22798f668..9fa315d7a0 100644
|
|
--- a/src/plugins/preauth/pkinit/pkinit_crypto.h
|
|
+++ b/src/plugins/preauth/pkinit/pkinit_crypto.h
|
|
@@ -370,11 +370,11 @@ krb5_error_code server_process_dh
|
|
* krb5_algorithm_identifier
|
|
*/
|
|
krb5_error_code create_krb5_supportedCMSTypes
|
|
- (krb5_context context, /* IN */
|
|
- pkinit_plg_crypto_context plg_cryptoctx, /* IN */
|
|
- pkinit_req_crypto_context req_cryptoctx, /* IN */
|
|
- pkinit_identity_crypto_context id_cryptoctx, /* IN */
|
|
- krb5_algorithm_identifier ***supportedCMSTypes); /* OUT */
|
|
+ (krb5_context context, /* IN */
|
|
+ pkinit_plg_crypto_context plg_cryptoctx, /* IN */
|
|
+ pkinit_req_crypto_context req_cryptoctx, /* IN */
|
|
+ pkinit_identity_crypto_context id_cryptoctx, /* IN */
|
|
+ krb5_algorithm_identifier ***supportedCMSTypes); /* OUT */
|
|
|
|
/*
|
|
* this functions takes in crypto specific representation of
|
|
diff --git a/src/plugins/preauth/pkinit/pkinit_kdf_test.c b/src/plugins/preauth/pkinit/pkinit_kdf_test.c
|
|
index 7f38e84910..99c93ac128 100644
|
|
--- a/src/plugins/preauth/pkinit/pkinit_kdf_test.c
|
|
+++ b/src/plugins/preauth/pkinit/pkinit_kdf_test.c
|
|
@@ -49,7 +49,6 @@ char eighteen_bs[9];
|
|
char party_u_name[] = "lha@SU.SE";
|
|
char party_v_name[] = "krbtgt/SU.SE@SU.SE";
|
|
int enctype_aes = ENCTYPE_AES256_CTS_HMAC_SHA1_96;
|
|
-int enctype_des3 = ENCTYPE_DES3_CBC_SHA1;
|
|
const krb5_data lha_data = DATA_FROM_STRING("lha");
|
|
|
|
krb5_octet key1_hex[] =
|
|
@@ -187,35 +186,6 @@ main(int argc, char **argv)
|
|
goto cleanup;
|
|
}
|
|
|
|
- /* TEST 3: SHA-512/DES3 */
|
|
- /* set up algorithm id */
|
|
- alg_id.algorithm = sha512_id;
|
|
-
|
|
- enctype = enctype_des3;
|
|
-
|
|
- /* call pkinit_alg_agility_kdf() with test vector values*/
|
|
- if (0 != (retval = pkinit_alg_agility_kdf(context, &secret,
|
|
- &alg_id.algorithm,
|
|
- u_principal, v_principal,
|
|
- enctype, &as_req, &pk_as_rep,
|
|
- &key_block))) {
|
|
- printf("ERROR in pkinit_kdf_test: kdf call failed, retval = %d\n",
|
|
- retval);
|
|
- goto cleanup;
|
|
- }
|
|
-
|
|
- /* compare key to expected key value */
|
|
-
|
|
- if ((key_block.length == sizeof(key3_hex)) &&
|
|
- (0 == memcmp(key_block.contents, key3_hex, key_block.length))) {
|
|
- printf("SUCCESS: TEST 3 (SHA-512/DES3), Correct key value generated.\n");
|
|
- retval = 0;
|
|
- } else {
|
|
- printf("FAILURE: TEST 2 (SHA-512/DES3), Incorrect key value generated!\n");
|
|
- retval = 1;
|
|
- goto cleanup;
|
|
- }
|
|
-
|
|
cleanup:
|
|
/* release all allocated resources, whether good or bad return */
|
|
free(secret.data);
|
|
diff --git a/src/plugins/preauth/spake/t_vectors.c b/src/plugins/preauth/spake/t_vectors.c
|
|
index 2279202d3a..96b0307d78 100644
|
|
--- a/src/plugins/preauth/spake/t_vectors.c
|
|
+++ b/src/plugins/preauth/spake/t_vectors.c
|
|
@@ -56,31 +56,6 @@ struct test {
|
|
const char *K2;
|
|
const char *K3;
|
|
} tests[] = {
|
|
- { ENCTYPE_DES3_CBC_SHA1, SPAKE_GROUP_EDWARDS25519,
|
|
- /* initial key, w, x, y, T, S, K */
|
|
- "850BB51358548CD05E86768C313E3BFEF7511937DCF72C3E",
|
|
- "686D84730CB8679AE95416C6567C6A63F2C9CEF124F7A3371AE81E11CAD42A37",
|
|
- "201012D07BFD48DDFA33C4AAC4FB1E229FB0D043CFE65EBFB14399091C71A723",
|
|
- "500B294797B8B042ACA1BEDC0F5931A4F52C537B3608B2D05CC8A2372F439F25",
|
|
- "18F511E750C97B592ACD30DB7D9E5FCA660389102E6BF610C1BFBED4616C8362",
|
|
- "5D10705E0D1E43D5DBF30240CCFBDE4A0230C70D4C79147AB0B317EDAD2F8AE7",
|
|
- "25BDE0D875F0FEB5755F45BA5E857889D916ECF7476F116AA31DC3E037EC4292",
|
|
- /* support, challenge, thash, body */
|
|
- "A0093007A0053003020101",
|
|
- "A1363034A003020101A122042018F511E750C97B592ACD30DB7D9E5FCA660389"
|
|
- "102E6BF610C1BFBED4616C8362A20930073005A003020101",
|
|
- "EAAA08807D0616026FF51C849EFBF35BA0CE3C5300E7D486DA46351B13D4605B",
|
|
- "3075A00703050000000000A1143012A003020101A10B30091B07726165627572"
|
|
- "6EA2101B0E415448454E412E4D49542E454455A3233021A003020102A11A3018"
|
|
- "1B066B72627467741B0E415448454E412E4D49542E454455A511180F31393730"
|
|
- "303130313030303030305AA703020100A8053003020110",
|
|
- /* K'[0], K'[1], K'[2], K'[3] */
|
|
- "BAF12FAE7CD958CBF1A29BFBC71F89CE49E03E295D89DAFD",
|
|
- "64F73DD9C41908206BCEC1F719026B574F9D13463D7A2520",
|
|
- "0454520B086B152C455829E6BAEFF78A61DFE9E3D04A895D",
|
|
- "4A92260B25E3EF94C125D5C24C3E5BCED5B37976E67F25C4",
|
|
- },
|
|
-
|
|
{ ENCTYPE_ARCFOUR_HMAC, SPAKE_GROUP_EDWARDS25519,
|
|
/* initial key, w, x, y, T, S, K */
|
|
"8846F7EAEE8FB117AD06BDD830B7586C",
|
|
diff --git a/src/tests/gssapi/t_enctypes.py b/src/tests/gssapi/t_enctypes.py
|
|
index 7494d7fcdb..2f95d89967 100755
|
|
--- a/src/tests/gssapi/t_enctypes.py
|
|
+++ b/src/tests/gssapi/t_enctypes.py
|
|
@@ -1,24 +1,17 @@
|
|
from k5test import *
|
|
|
|
-# Define some convenience abbreviations for enctypes we will see in
|
|
-# test program output. For background, aes256 and aes128 are "CFX
|
|
-# enctypes", meaning that they imply support for RFC 4121, while des3
|
|
-# and rc4 are not. DES3 keys will appear as 'des3-cbc-raw' in
|
|
-# t_enctypes output because that's how GSSAPI does raw triple-DES
|
|
-# encryption without the RFC3961 framing.
|
|
+# Define some convenience abbreviations for enctypes we will see in test
|
|
+# program output. For background, aes256 and aes128 are "CFX enctypes",
|
|
+# meaning that they imply support for RFC 4121, while rc4 does not.
|
|
aes256 = 'aes256-cts-hmac-sha1-96'
|
|
aes128 = 'aes128-cts-hmac-sha1-96'
|
|
-des3 = 'des3-cbc-sha1'
|
|
-d_des3 = 'DEPRECATED:des3-cbc-sha1'
|
|
-des3raw = 'des3-cbc-raw'
|
|
-d_des3raw = 'DEPRECATED:des3-cbc-raw'
|
|
rc4 = 'arcfour-hmac'
|
|
d_rc4 = 'DEPRECATED:arcfour-hmac'
|
|
|
|
# These tests make assumptions about the default enctype lists, so set
|
|
# them explicitly rather than relying on the library defaults.
|
|
-supp='aes256-cts:normal aes128-cts:normal des3-cbc-sha1:normal rc4-hmac:normal'
|
|
-conf = {'libdefaults': {'permitted_enctypes': 'aes des3 rc4'},
|
|
+supp='aes256-cts:normal aes128-cts:normal rc4-hmac:normal'
|
|
+conf = {'libdefaults': {'permitted_enctypes': 'aes rc4'},
|
|
'realms': {'$realm': {'supported_enctypes': supp}}}
|
|
realm = K5Realm(krb5_conf=conf)
|
|
shutil.copyfile(realm.ccache, os.path.join(realm.testdir, 'save'))
|
|
@@ -87,19 +80,12 @@ test('both aes128', 'aes128-cts', 'aes128-cts',
|
|
test_err('acc aes128', None, 'aes128-cts',
|
|
'Encryption type aes256-cts-hmac-sha1-96 not permitted')
|
|
|
|
-# If the initiator constrains the permitted session enctypes to des3,
|
|
-# no acceptor subkey will be generated because we can't upgrade to a
|
|
-# CFX enctype.
|
|
-test('init des3', 'des3', None,
|
|
- tktenc=aes256, tktsession=d_des3,
|
|
- proto='rfc1964', isubkey=des3raw, asubkey=None)
|
|
-
|
|
# Force the ticket session key to be rc4, so we can test some subkey
|
|
# upgrade cases. The ticket encryption key remains aes256.
|
|
realm.run([kadminl, 'setstr', realm.host_princ, 'session_enctypes', 'rc4'])
|
|
|
|
# With no arguments, the initiator should send an upgrade list of
|
|
-# [aes256 aes128 des3] and the acceptor should upgrade to an aes256
|
|
+# [aes256 aes128] and the acceptor should upgrade to an aes256
|
|
# subkey.
|
|
test('upgrade noargs', None, None,
|
|
tktenc=aes256, tktsession=d_rc4,
|
|
@@ -115,13 +101,6 @@ test('upgrade init aes128+rc4', 'aes128-cts rc4', None,
|
|
tktenc=aes256, tktsession=d_rc4,
|
|
proto='cfx', isubkey=rc4, asubkey=aes128)
|
|
|
|
-# If the initiator permits rc4 but prefers des3, it will send an
|
|
-# upgrade list of [des3], but the acceptor won't generate a subkey
|
|
-# because des3 isn't a CFX enctype.
|
|
-test('upgrade init des3+rc4', 'des3 rc4', None,
|
|
- tktenc=aes256, tktsession=d_rc4,
|
|
- proto='rfc1964', isubkey=rc4, asubkey=None)
|
|
-
|
|
# If the acceptor permits only aes128, subkey negotiation will fail
|
|
# because the ticket session key and initiator subkey are
|
|
# non-permitted. (This is unfortunate if the acceptor's restriction
|
|
diff --git a/src/tests/gssapi/t_invalid.c b/src/tests/gssapi/t_invalid.c
|
|
index 9876a11e67..fb8fe55111 100644
|
|
--- a/src/tests/gssapi/t_invalid.c
|
|
+++ b/src/tests/gssapi/t_invalid.c
|
|
@@ -84,18 +84,6 @@ struct test {
|
|
size_t toklen;
|
|
const char *token;
|
|
} tests[] = {
|
|
- {
|
|
- ENCTYPE_DES3_CBC_SHA1, ENCTYPE_DES3_CBC_RAW,
|
|
- SEAL_ALG_DES3KD, SGN_ALG_HMAC_SHA1_DES3_KD, 20,
|
|
- 24,
|
|
- "\x4F\xEA\x19\x19\x5E\x0E\x10\xDF\x3D\x29\xB5\x13\x8F\x01\xC7\xA7"
|
|
- "\x92\x3D\x38\xF7\x26\x73\x0D\x6D",
|
|
- 65,
|
|
- "\x60\x3F\x06\x09\x2A\x86\x48\x86\xF7\x12\x01\x02\x02\x02\x01\x04"
|
|
- "\x00\x02\x00\xFF\xFF\xEB\xF3\x9A\x89\x24\x57\xB8\x63\x95\x25\xE8"
|
|
- "\x6E\x8E\x79\xE6\x2E\xCA\xD3\xFF\x57\x9F\x8C\xAB\xEF\xDD\x28\x10"
|
|
- "\x2F\x93\x21\x2E\xF2\x52\xB6\x6F\xA8\xBB\x8A\x6D\xAA\x6F\xB7\xF4\xD4"
|
|
- },
|
|
{
|
|
ENCTYPE_ARCFOUR_HMAC, ENCTYPE_ARCFOUR_HMAC,
|
|
SEAL_ALG_MICROSOFT_RC4, SGN_ALG_HMAC_MD5, 8,
|
|
diff --git a/src/tests/gssapi/t_pcontok.c b/src/tests/gssapi/t_pcontok.c
|
|
index 7368f752f0..bf22bd3da1 100644
|
|
--- a/src/tests/gssapi/t_pcontok.c
|
|
+++ b/src/tests/gssapi/t_pcontok.c
|
|
@@ -43,7 +43,6 @@
|
|
#include "k5-int.h"
|
|
#include "common.h"
|
|
|
|
-#define SGN_ALG_HMAC_SHA1_DES3_KD 0x04
|
|
#define SGN_ALG_HMAC_MD5 0x11
|
|
|
|
/*
|
|
@@ -77,17 +76,12 @@ make_delete_token(gss_krb5_lucid_context_v1_t *lctx, gss_buffer_desc *out)
|
|
ret = krb5_k_create_key(context, &seqkb, &seq);
|
|
check_k5err(context, "krb5_k_create_key", ret);
|
|
|
|
- if (signalg == SGN_ALG_HMAC_SHA1_DES3_KD) {
|
|
- cktype = CKSUMTYPE_HMAC_SHA1_DES3;
|
|
- cksize = 20;
|
|
- ckusage = 23;
|
|
- } else if (signalg == SGN_ALG_HMAC_MD5) {
|
|
- cktype = CKSUMTYPE_HMAC_MD5_ARCFOUR;
|
|
- cksize = 8;
|
|
- ckusage = 15;
|
|
- } else {
|
|
+ if (signalg != SGN_ALG_HMAC_MD5)
|
|
abort();
|
|
- }
|
|
+
|
|
+ cktype = CKSUMTYPE_HMAC_MD5_ARCFOUR;
|
|
+ cksize = 8;
|
|
+ ckusage = 15;
|
|
|
|
tlen = 20 + mech_krb5.length + cksize;
|
|
token = malloc(tlen);
|
|
diff --git a/src/tests/gssapi/t_prf.c b/src/tests/gssapi/t_prf.c
|
|
index f71774cdc9..d1857c433f 100644
|
|
--- a/src/tests/gssapi/t_prf.c
|
|
+++ b/src/tests/gssapi/t_prf.c
|
|
@@ -41,13 +41,6 @@ static struct {
|
|
const char *key2;
|
|
const char *out2;
|
|
} tests[] = {
|
|
- { ENCTYPE_DES3_CBC_SHA1,
|
|
- "70378A19CD64134580C27C0115D6B34A1CF2FEECEF9886A2",
|
|
- "9F8D127C520BB826BFF3E0FE5EF352389C17E0C073D9"
|
|
- "AC4A333D644D21BA3EF24F4A886D143F85AC9F6377FB",
|
|
- "3452A167DF1094BA1089E0A20E9E51ABEF1525922558B69E",
|
|
- "6BF24FABC858F8DD9752E4FCD331BB831F238B5BE190"
|
|
- "4EEA42E38F7A60C588F075C5C96A67E7F8B7BD0AECF4" },
|
|
{ ENCTYPE_ARCFOUR_HMAC,
|
|
"3BB3AE288C12B3B9D06B208A4151B3B6",
|
|
"9AEA11A3BCF3C53F1F91F5A0BA2132E2501ADF5F3C28"
|
|
diff --git a/src/tests/t_authdata.py b/src/tests/t_authdata.py
|
|
index bde1c36844..8fcd30db51 100644
|
|
--- a/src/tests/t_authdata.py
|
|
+++ b/src/tests/t_authdata.py
|
|
@@ -179,7 +179,7 @@ realm.run([kvno, 'restricted'])
|
|
# preferred krbtgt enctype changes.
|
|
mark('#8139 regression test')
|
|
realm.kinit(realm.user_princ, password('user'), ['-f'])
|
|
-realm.run([kadminl, 'cpw', '-randkey', '-keepold', '-e', 'des3-cbc-sha1',
|
|
+realm.run([kadminl, 'cpw', '-randkey', '-keepold', '-e', 'aes256-sha2',
|
|
realm.krbtgt_princ])
|
|
realm.run(['./forward'])
|
|
realm.run([kvno, realm.host_princ])
|
|
diff --git a/src/tests/t_etype_info.py b/src/tests/t_etype_info.py
|
|
index c982508d8b..a6f538b66d 100644
|
|
--- a/src/tests/t_etype_info.py
|
|
+++ b/src/tests/t_etype_info.py
|
|
@@ -1,8 +1,7 @@
|
|
from k5test import *
|
|
|
|
-supported_enctypes = 'aes128-cts des3-cbc-sha1 rc4-hmac'
|
|
-conf = {'libdefaults': {'allow_weak_crypto': 'true'},
|
|
- 'realms': {'$realm': {'supported_enctypes': supported_enctypes}}}
|
|
+supported_enctypes = 'aes128-cts rc4-hmac'
|
|
+conf = {'realms': {'$realm': {'supported_enctypes': supported_enctypes}}}
|
|
realm = K5Realm(create_host=False, get_creds=False, krb5_conf=conf)
|
|
|
|
realm.run([kadminl, 'addprinc', '-pw', 'pw', '+requires_preauth',
|
|
@@ -26,9 +25,9 @@ def test_etinfo(princ, enctypes, expected_lines):
|
|
# With no newer enctypes in the request, PA-ETYPE-INFO2,
|
|
# PA-ETYPE-INFO, and PA-PW-SALT appear in the AS-REP, each listing one
|
|
# key for the most preferred matching enctype.
|
|
-test_etinfo('user', 'rc4-hmac-exp des3 rc4',
|
|
- ['asrep etype_info2 des3-cbc-sha1 KRBTEST.COMuser',
|
|
- 'asrep etype_info des3-cbc-sha1 KRBTEST.COMuser',
|
|
+test_etinfo('user', 'rc4-hmac-exp rc4',
|
|
+ ['asrep etype_info2 rc4-hmac KRBTEST.COMuser',
|
|
+ 'asrep etype_info rc4-hmac KRBTEST.COMuser',
|
|
'asrep pw_salt KRBTEST.COMuser'])
|
|
|
|
# With a newer enctype in the request (even if it is not the most
|
|
@@ -39,9 +38,9 @@ test_etinfo('user', 'rc4 aes256-cts',
|
|
|
|
# In preauth-required errors, PA-PW-SALT does not appear, but the same
|
|
# etype-info2 values are expected.
|
|
-test_etinfo('preauthuser', 'rc4-hmac-exp des3 rc4',
|
|
- ['error etype_info2 des3-cbc-sha1 KRBTEST.COMpreauthuser',
|
|
- 'error etype_info des3-cbc-sha1 KRBTEST.COMpreauthuser'])
|
|
+test_etinfo('preauthuser', 'rc4-hmac-exp rc4',
|
|
+ ['error etype_info2 rc4-hmac KRBTEST.COMpreauthuser',
|
|
+ 'error etype_info rc4-hmac KRBTEST.COMpreauthuser'])
|
|
test_etinfo('preauthuser', 'rc4 aes256-cts',
|
|
['error etype_info2 rc4-hmac KRBTEST.COMpreauthuser'])
|
|
|
|
@@ -50,8 +49,8 @@ test_etinfo('preauthuser', 'rc4 aes256-cts',
|
|
# (to allow for preauth mechs which don't depend on long-term keys).
|
|
# An AS-REP cannot be generated without preauth as there is no reply
|
|
# key.
|
|
-test_etinfo('rc4user', 'des3', [])
|
|
-test_etinfo('nokeyuser', 'des3', [])
|
|
+test_etinfo('rc4user', 'aes128-cts', [])
|
|
+test_etinfo('nokeyuser', 'aes128-cts', [])
|
|
|
|
# Verify that etype-info2 is included in a MORE_PREAUTH_DATA_REQUIRED
|
|
# error if the client does optimistic preauth.
|
|
diff --git a/src/tests/t_keyrollover.py b/src/tests/t_keyrollover.py
|
|
index e9840dfae8..583c2fa27e 100755
|
|
--- a/src/tests/t_keyrollover.py
|
|
+++ b/src/tests/t_keyrollover.py
|
|
@@ -37,9 +37,9 @@ realm.run([klist, '-e'], expected_msg=msg)
|
|
|
|
# Test that the KDC only accepts the first enctype for a kvno, for a
|
|
# local-realm TGS request. To set this up, we abuse an edge-case
|
|
-# behavior of modprinc -kvno. First, set up a DES3 krbtgt entry at
|
|
+# behavior of modprinc -kvno. First, set up an aes128-sha2 krbtgt entry at
|
|
# kvno 1 and cache a krbtgt ticket.
|
|
-realm.run([kadminl, 'cpw', '-randkey', '-e', 'des3-cbc-sha1',
|
|
+realm.run([kadminl, 'cpw', '-randkey', '-e', 'aes128-cts-hmac-sha256-128',
|
|
realm.krbtgt_princ])
|
|
realm.run([kadminl, 'modprinc', '-kvno', '1', realm.krbtgt_princ])
|
|
realm.kinit(realm.user_princ, password('user'))
|
|
@@ -50,9 +50,9 @@ realm.run([kadminl, 'cpw', '-randkey', '-keepold', '-e', 'aes256-cts',
|
|
realm.run([kadminl, 'modprinc', '-kvno', '1', realm.krbtgt_princ])
|
|
out = realm.run([kadminl, 'getprinc', realm.krbtgt_princ])
|
|
if 'vno 1, aes256-cts' not in out or \
|
|
- 'vno 1, DEPRECATED:des3-cbc-sha1' not in out:
|
|
+ 'vno 1, aes128-cts-hmac-sha256-128' not in out:
|
|
fail('keyrollover: setup for TGS enctype test failed')
|
|
-# Now present the DES3 ticket to the KDC and make sure it's rejected.
|
|
+# Now present the aes128-sha2 ticket to the KDC and make sure it's rejected.
|
|
realm.run([kvno, realm.host_princ], expected_code=1)
|
|
|
|
realm.stop()
|
|
diff --git a/src/tests/t_mkey.py b/src/tests/t_mkey.py
|
|
index 32f4070bcb..da0ed1831e 100755
|
|
--- a/src/tests/t_mkey.py
|
|
+++ b/src/tests/t_mkey.py
|
|
@@ -7,7 +7,6 @@ import struct
|
|
# default enctype for master keys.
|
|
aes256 = 'aes256-cts-hmac-sha1-96'
|
|
aes128 = 'aes128-cts-hmac-sha1-96'
|
|
-des3 = 'des3-cbc-sha1'
|
|
defetype = aes256
|
|
|
|
realm = K5Realm(create_host=False, start_kadmind=True)
|
|
@@ -300,40 +299,6 @@ if 'Decrypt integrity check failed' in out or 'added to keytab' not in out:
|
|
|
|
realm.stop()
|
|
|
|
-# Load a dump file created with krb5 1.6, before the master key
|
|
-# rollover changes were introduced. Write out an old-format stash
|
|
-# file consistent with the dump's master password ("footes"). The K/M
|
|
-# entry in this database will not have actkvno tl-data because it was
|
|
-# created prior to master key rollover support. Verify that:
|
|
-# 1. We can access the database using the old-format stash file.
|
|
-# 2. list_mkeys displays the same list as for a post-1.7 KDB.
|
|
-mark('pre-1.7 stash file')
|
|
-dumpfile = os.path.join(srctop, 'tests', 'dumpfiles', 'dump.16')
|
|
-os.remove(stash_file)
|
|
-f = open(stash_file, 'wb')
|
|
-f.write(struct.pack('=HL24s', 16, 24,
|
|
- b'\xF8\x3E\xFB\xBA\x6D\x80\xD9\x54\xE5\x5D\xF2\xE0'
|
|
- b'\x94\xAD\x6D\x86\xB5\x16\x37\xEC\x7C\x8A\xBC\x86'))
|
|
-f.close()
|
|
-realm.run([kdb5_util, 'load', dumpfile])
|
|
-nprincs = len(realm.run([kadminl, 'listprincs']).splitlines())
|
|
-check_mkvno('K/M', 1)
|
|
-check_mkey_list((1, des3, True, True))
|
|
-
|
|
-# Create a new master key and verify that, without actkvkno tl-data:
|
|
-# 1. list_mkeys displays the same as for a post-1.7 KDB.
|
|
-# 2. update_princ_encryption still targets mkvno 1.
|
|
-# 3. libkadm5 still uses mkvno 1 for key changes.
|
|
-# 4. use_mkey creates the same list as for a post-1.7 KDB.
|
|
-mark('rollover from pre-1.7 KDB')
|
|
-add_mkey([])
|
|
-check_mkey_list((2, defetype, False, False), (1, des3, True, True))
|
|
-update_princ_encryption(False, 1, 0, nprincs - 1)
|
|
-realm.run([kadminl, 'addprinc', '-randkey', realm.user_princ])
|
|
-check_mkvno(realm.user_princ, 1)
|
|
-realm.run([kdb5_util, 'use_mkey', '2', 'now-1day'])
|
|
-check_mkey_list((2, defetype, True, True), (1, des3, True, False))
|
|
-
|
|
# Regression test for #8395. Purge the master key and verify that a
|
|
# master key fetch does not segfault.
|
|
mark('#8395 regression test')
|
|
diff --git a/src/tests/t_salt.py b/src/tests/t_salt.py
|
|
index 65084bbf35..55ca897459 100755
|
|
--- a/src/tests/t_salt.py
|
|
+++ b/src/tests/t_salt.py
|
|
@@ -16,13 +16,12 @@ def test_salt(realm, e1, salt, e2):
|
|
|
|
# Enctype/salt pairs chosen with non-default salt types.
|
|
# The enctypes are mostly arbitrary.
|
|
-salts = [('des3-cbc-sha1', 'norealm'),
|
|
+salts = [('aes128-cts-hmac-sha1-96', 'norealm'),
|
|
('arcfour-hmac', 'onlyrealm'),
|
|
('aes128-cts-hmac-sha1-96', 'special')]
|
|
# These enctypes are chosen to cover the different string-to-key routines.
|
|
# Omit ":normal" from aes256 to check that salttype defaulting works.
|
|
-second_kstypes = ['aes256-cts-hmac-sha1-96', 'arcfour-hmac:normal',
|
|
- 'des3-cbc-sha1:normal']
|
|
+second_kstypes = ['aes256-cts-hmac-sha1-96', 'arcfour-hmac:normal']
|
|
|
|
# Test using different salt types in a principal's key list.
|
|
# Parameters from one key in the list must not leak over to later ones.
|
|
diff --git a/src/util/k5test.py b/src/util/k5test.py
|
|
index 2a86c5cdfc..d823653aa0 100644
|
|
--- a/src/util/k5test.py
|
|
+++ b/src/util/k5test.py
|
|
@@ -1338,13 +1338,6 @@ _passes = [
|
|
# No special settings; exercises AES256.
|
|
('default', None, None, None),
|
|
|
|
- # Exercise the DES3 enctype.
|
|
- ('des3', None,
|
|
- {'libdefaults': {'permitted_enctypes': 'des3'}},
|
|
- {'realms': {'$realm': {
|
|
- 'supported_enctypes': 'des3-cbc-sha1:normal',
|
|
- 'master_key_type': 'des3-cbc-sha1'}}}),
|
|
-
|
|
# Exercise the arcfour enctype.
|
|
('arcfour', None,
|
|
{'libdefaults': {'permitted_enctypes': 'rc4'}},
|
|
diff --git a/src/windows/leash/htmlhelp/html/Encryption_Types.htm b/src/windows/leash/htmlhelp/html/Encryption_Types.htm
|
|
index 1aebdd0b4a..c38eefd2bd 100644
|
|
--- a/src/windows/leash/htmlhelp/html/Encryption_Types.htm
|
|
+++ b/src/windows/leash/htmlhelp/html/Encryption_Types.htm
|
|
@@ -79,19 +79,6 @@ will have an entry in the Encryption type column. <br>
|
|
<th>Description</th>
|
|
</tr>
|
|
<tr>
|
|
-<th id="th2"> des3- </th>
|
|
- <td> The triple DES family improves on
|
|
-the original DES (Data Encryption Standard) by using 3 separate 56-bit
|
|
-keys. Some modes of 3DES are considered weak while others are strong
|
|
-(if slow). <ul id="helpul">
|
|
-<li> des3-cbc-sha1</li>
|
|
-<li> des3-cbc-raw (<b>weak</b>) </li>
|
|
-<li>des3-hmac-sha1 </li>
|
|
-<li>des3-cbc-sha1-kd </li>
|
|
-</ul>
|
|
-</td>
|
|
- </tr>
|
|
-<tr>
|
|
<th id="th2"> aes </th>
|
|
<td>The AES Advanced Encryption Standard
|
|
family, like 3DES, is a symmetric block cipher and was designed
|
|
--
|
|
2.41.0
|
|
|