You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dr...@apache.org on 2015/01/12 14:06:49 UTC
[41/50] [abbrv] directory-kerberos git commit: Implementing des
is_weak to get rid of a dependency
Implementing des is_weak to get rid of a dependency
Project: http://git-wip-us.apache.org/repos/asf/directory-kerberos/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerberos/commit/b1df288c
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerberos/tree/b1df288c
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerberos/diff/b1df288c
Branch: refs/heads/master
Commit: b1df288c51c468b109dd451b550b05574d4eca95
Parents: e11e7f1
Author: Drankye <dr...@gmail.com>
Authored: Sat Dec 27 10:05:06 2014 +0800
Committer: Drankye <dr...@gmail.com>
Committed: Sat Dec 27 10:05:06 2014 +0800
----------------------------------------------------------------------
.../org/apache/kerberos/kerb/crypto/Des.java | 52 +++++++++++++++++---
1 file changed, 44 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-kerberos/blob/b1df288c/haox-kerb/kerb-crypto/src/main/java/org/apache/kerberos/kerb/crypto/Des.java
----------------------------------------------------------------------
diff --git a/haox-kerb/kerb-crypto/src/main/java/org/apache/kerberos/kerb/crypto/Des.java b/haox-kerb/kerb-crypto/src/main/java/org/apache/kerberos/kerb/crypto/Des.java
index da9a3ae..74a4e49 100644
--- a/haox-kerb/kerb-crypto/src/main/java/org/apache/kerberos/kerb/crypto/Des.java
+++ b/haox-kerb/kerb-crypto/src/main/java/org/apache/kerberos/kerb/crypto/Des.java
@@ -1,21 +1,57 @@
package org.apache.kerberos.kerb.crypto;
-import javax.crypto.spec.DESKeySpec;
-import java.security.InvalidKeyException;
+import java.util.Arrays;
+/**
+ * Based on MIT krb5 weak_key.c
+ */
public class Des {
+ /*
+ * The following are the weak DES keys:
+ */
+ static byte[][] WEAK_KEYS = {
+ /* weak keys */
+ {(byte) 0x01,(byte) 0x01,(byte) 0x01,(byte) 0x01,(byte) 0x01,(byte) 0x01,(byte) 0x01,(byte) 0x01},
+ {(byte) 0xfe,(byte) 0xfe,(byte) 0xfe,(byte) 0xfe,(byte) 0xfe,(byte) 0xfe,(byte) 0xfe,(byte) 0xfe},
+ {(byte) 0x1f,(byte) 0x1f,(byte) 0x1f,(byte) 0x1f,(byte) 0x0e,(byte) 0x0e,(byte) 0x0e,(byte) 0x0e},
+ {(byte) 0xe0,(byte) 0xe0,(byte) 0xe0,(byte) 0xe0,(byte) 0xf1,(byte) 0xf1,(byte) 0xf1,(byte) 0xf1},
+
+ /* semi-weak */
+ {(byte) 0x01,(byte) 0xfe,(byte) 0x01,(byte) 0xfe,(byte) 0x01,(byte) 0xfe,(byte) 0x01,(byte) 0xfe},
+ {(byte) 0xfe,(byte) 0x01,(byte) 0xfe,(byte) 0x01,(byte) 0xfe,(byte) 0x01,(byte) 0xfe,(byte) 0x01},
+
+ {(byte) 0x1f,(byte) 0xe0,(byte) 0x1f,(byte) 0xe0,(byte) 0x0e,(byte) 0xf1,(byte) 0x0e,(byte) 0xf1},
+ {(byte) 0xe0,(byte) 0x1f,(byte) 0xe0,(byte) 0x1f,(byte) 0xf1,(byte) 0x0e,(byte) 0xf1,(byte) 0x0e},
+
+ {(byte) 0x01,(byte) 0xe0,(byte) 0x01,(byte) 0xe0,(byte) 0x01,(byte) 0xf1,(byte) 0x01,(byte) 0xf1},
+ {(byte) 0xe0,(byte) 0x01,(byte) 0xe0,(byte) 0x01,(byte) 0xf1,(byte) 0x01,(byte) 0xf1,(byte) 0x01},
+
+ {(byte) 0x1f,(byte) 0xfe,(byte) 0x1f,(byte) 0xfe,(byte) 0x0e,(byte) 0xfe,(byte) 0x0e,(byte) 0xfe},
+ {(byte) 0xfe,(byte) 0x1f,(byte) 0xfe,(byte) 0x1f,(byte) 0xfe,(byte) 0x0e,(byte) 0xfe,(byte) 0x0e},
+
+ {(byte) 0x01,(byte) 0x1f,(byte) 0x01,(byte) 0x1f,(byte) 0x01,(byte) 0x0e,(byte) 0x01,(byte) 0x0e},
+ {(byte) 0x1f,(byte) 0x01,(byte) 0x1f,(byte) 0x01,(byte) 0x0e,(byte) 0x01,(byte) 0x0e,(byte) 0x01},
+
+ {(byte) 0xe0,(byte) 0xfe,(byte) 0xe0,(byte) 0xfe,(byte) 0xf1,(byte) 0xfe,(byte) 0xf1,(byte) 0xfe},
+ {(byte) 0xfe,(byte) 0xe0,(byte) 0xfe,(byte) 0xe0,(byte) 0xfe,(byte) 0xf1,(byte) 0xfe,(byte) 0xf1}
+ };
+
public static boolean isWeakKey(byte[] key) {
- try {
- return (DESKeySpec.isWeak(key, 0));
- } catch (InvalidKeyException ex) {
- return true;
+ for (byte[] weakKey : WEAK_KEYS) {
+ if (Arrays.equals(weakKey, key)) {
+ return true;
+ }
}
+ return false;
}
+ /**
+ * MIT krb5 FIXUP(k) in s2k_des.c
+ */
public static byte[] fixKey(byte[] key) {
- if (Des.isWeakKey(key)) {
- key[7] ^= 0xf0;
+ if (isWeakKey(key)) {
+ key[7] ^= (byte) 0xf0;
}
return key;
}