FileDocCategorySizeDatePackage
DESKeySpec.javaAPI DocAndroid 1.5 API7841Wed May 06 22:41:02 BST 2009javax.crypto.spec

DESKeySpec

public class DESKeySpec extends Object implements KeySpec
The key specification for a DES key.
since
Android 1.0

Fields Summary
public static final int
DES_KEY_LEN
The length of a DES key in bytes.
private final byte[]
key
private static final byte[]
SEMIWEAKS
Constructors Summary
public DESKeySpec(byte[] key)
Creates a new DESKeySpec from the first 8 bytes of the specified key data.

param
key the key data.
throws
InvalidKeyException if the length of the specified key data is less than 8.


                                                                  
         
        this(key, 0);
    
public DESKeySpec(byte[] key, int offset)
Creates a new DESKeySpec from the first 8 bytes of the specified key data starting at offset.

param
key the key data
param
offset the offset to start at.
throws
InvalidKeyException if the length of the specified key data starting at offset is less than 8.

        if (key == null) {
            throw new NullPointerException(Messages.getString("crypto.2F")); //$NON-NLS-1$
        }
        if (key.length - offset < DES_KEY_LEN) {
            throw new InvalidKeyException(
                    Messages.getString("crypto.40")); //$NON-NLS-1$
        }
        this.key = new byte[DES_KEY_LEN];
        System.arraycopy(key, offset, this.key, 0, DES_KEY_LEN);
    
Methods Summary
public byte[]getKey()
Returns a copy of the key.

return
a copy of the key.

        byte[] result = new byte[DES_KEY_LEN];
        System.arraycopy(this.key, 0, result, 0, DES_KEY_LEN);
        return result;
    
public static booleanisParityAdjusted(byte[] key, int offset)
Returns whether the specified key data starting at offset is parity-adjusted.

param
key the key data.
param
offset the offset to start checking at.
return
{@code true} if the specified key data is parity-adjusted, {@code false} otherwise.
throws
InvalidKeyException if the length of the key data starting at offset is less than 8, or the key is null.

        if (key == null) {
            throw new InvalidKeyException(Messages.getString("crypto.2F")); //$NON-NLS-1$
        }
        if (key.length - offset < DES_KEY_LEN) {
            throw new InvalidKeyException(
                    Messages.getString("crypto.40")); //$NON-NLS-1$
        }

        int byteKey = 0;

        for (int i = offset; i < DES_KEY_LEN; i++) {
            byteKey = key[i];

            byteKey ^= byteKey >> 1;
            byteKey ^= byteKey >> 2;
            byteKey ^= byteKey >> 4;

            if ((byteKey & 1) == 0) {
                return false;
            }
        }
        return true;
    
public static booleanisWeak(byte[] key, int offset)
Returns whether the specified key data starting at offset is weak or semi-weak.

param
key the key data.
param
offset the offset to start checking at.
return
{@code true} if the specified key data is weak or semi-weak.
throws
InvalidKeyException if the length of the key data starting at offset is less than 8, or it is null.

        if (key == null) {
            throw new InvalidKeyException(Messages.getString("crypto.2F")); //$NON-NLS-1$
        }
        if (key.length - offset < DES_KEY_LEN) {
            throw new InvalidKeyException(
                    Messages.getString("crypto.40")); //$NON-NLS-1$
        }
        I:
        for (int i=0; i<SEMIWEAKS.length; i++) {
            for (int j=0; j<DES_KEY_LEN; j++) {
                if (SEMIWEAKS[i][j] != key[offset+j]) {
                    continue I;
                }
            }
            return true;
        }
        return false;