javax.crypto.spec.DESedeKeySpec#isParityAdjusted()源码实例Demo

下面列出了javax.crypto.spec.DESedeKeySpec#isParityAdjusted() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: dragonwell8_jdk   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码2 项目: TencentKona-8   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码3 项目: jdk8u60   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码4 项目: openjdk-jdk8u   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码5 项目: openjdk-jdk8u-backup   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码6 项目: openjdk-jdk9   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码7 项目: jdk8u-jdk   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码8 项目: hottub   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码9 项目: openjdk-8-source   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码10 项目: openjdk-8   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码11 项目: jdk8u_jdk   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码12 项目: jdk8u-jdk   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}
 
源代码13 项目: jdk8u-dev-jdk   文件: EncryptionKey.java
/**
 * Generates a sub-sessionkey from a given session key.
 *
 * Used in AcceptSecContextToken and KrbApReq by acceptor- and initiator-
 * side respectively.
 */
public EncryptionKey(EncryptionKey key) throws KrbCryptoException {
    // generate random sub-session key
    keyValue = Confounder.bytes(key.keyValue.length);
    for (int i = 0; i < keyValue.length; i++) {
      keyValue[i] ^= key.keyValue[i];
    }
    keyType = key.keyType;

    // check for key parity and weak keys
    try {
        // check for DES key
        if ((keyType == EncryptedData.ETYPE_DES_CBC_MD5) ||
            (keyType == EncryptedData.ETYPE_DES_CBC_CRC)) {
            // fix DES key parity
            if (!DESKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des.set_parity(keyValue);
            }
            // check for weak key
            if (DESKeySpec.isWeak(keyValue, 0)) {
                keyValue[7] = (byte)(keyValue[7] ^ 0xF0);
            }
        }
        // check for 3DES key
        if (keyType == EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
            // fix 3DES key parity
            if (!DESedeKeySpec.isParityAdjusted(keyValue, 0)) {
                keyValue = Des3.parityFix(keyValue);
            }
            // check for weak keys
            byte[] oneKey = new byte[8];
            for (int i=0; i<keyValue.length; i+=8) {
                System.arraycopy(keyValue, i, oneKey, 0, 8);
                if (DESKeySpec.isWeak(oneKey, 0)) {
                    keyValue[i+7] = (byte)(keyValue[i+7] ^ 0xF0);
                }
            }
        }
    } catch (GeneralSecurityException e) {
        KrbCryptoException ke = new KrbCryptoException(e.getMessage());
        ke.initCause(e);
        throw ke;
    }
}