org.bouncycastle.crypto.params.DESedeParameters Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcprov-ext-debug-jdk18on Show documentation
Show all versions of bcprov-ext-debug-jdk18on Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for Java 1.8 and later with debug enabled.
The newest version!
package org.bouncycastle.crypto.params;
public class DESedeParameters
extends DESParameters
{
/*
* DES-EDE Key length in bytes.
*/
static public final int DES_EDE_KEY_LENGTH = 24;
public DESedeParameters(
byte[] key)
{
super(key);
if (isWeakKey(key, 0, key.length))
{
throw new IllegalArgumentException("attempt to create weak DESede key");
}
}
/**
* return true if the passed in key is a DES-EDE weak key.
*
* @param key bytes making up the key
* @param offset offset into the byte array the key starts at
* @param length number of bytes making up the key
*/
public static boolean isWeakKey(
byte[] key,
int offset,
int length)
{
for (int i = offset; i < length; i += DES_KEY_LENGTH)
{
if (DESParameters.isWeakKey(key, i))
{
return true;
}
}
return false;
}
/**
* return true if the passed in key is a DES-EDE weak key.
*
* @param key bytes making up the key
* @param offset offset into the byte array the key starts at
*/
public static boolean isWeakKey(
byte[] key,
int offset)
{
return isWeakKey(key, offset, key.length - offset);
}
/**
* return true if the passed in key is a real 2/3 part DES-EDE key.
*
* @param key bytes making up the key
* @param offset offset into the byte array the key starts at
*/
public static boolean isRealEDEKey(byte[] key, int offset)
{
return key.length == 16 ? isReal2Key(key, offset) : isReal3Key(key, offset);
}
/**
* return true if the passed in key is a real 2 part DES-EDE key.
*
* @param key bytes making up the key
* @param offset offset into the byte array the key starts at
*/
public static boolean isReal2Key(byte[] key, int offset)
{
boolean isValid = false;
for (int i = offset; i != offset + 8; i++)
{
if (key[i] != key[i + 8])
{
isValid = true;
}
}
return isValid;
}
/**
* return true if the passed in key is a real 3 part DES-EDE key.
*
* @param key bytes making up the key
* @param offset offset into the byte array the key starts at
*/
public static boolean isReal3Key(byte[] key, int offset)
{
boolean diff12 = false, diff13 = false, diff23 = false;
for (int i = offset; i != offset + 8; i++)
{
diff12 |= (key[i] != key[i + 8]);
diff13 |= (key[i] != key[i + 16]);
diff23 |= (key[i + 8] != key[i + 16]);
}
return diff12 && diff13 && diff23;
}
}