package org.bouncycastle.jcajce.provider.asymmetric.util; import java.util.HashSet; import java.util.Set; import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; import org.bouncycastle.util.Strings; public class DESUtil { private static final Set<String> des = new HashSet<String>(); static { des.add("DES"); des.add("DESEDE"); des.add(OIWObjectIdentifiers.desCBC.getId()); des.add(PKCSObjectIdentifiers.des_EDE3_CBC.getId()); des.add(PKCSObjectIdentifiers.des_EDE3_CBC.getId()); des.add(PKCSObjectIdentifiers.id_alg_CMS3DESwrap.getId()); } public static boolean isDES(String algorithmID) { String name = Strings.toUpperCase(algorithmID); return des.contains(name); } /** * DES Keys use the LSB as the odd parity bit. This can * be used to check for corrupt keys. * * @param bytes the byte array to set the parity on. */ public static void setOddParity( byte[] bytes) { for (int i = 0; i < bytes.length; i++) { int b = bytes[i]; bytes[i] = (byte)((b & 0xfe) | ((((b >> 1) ^ (b >> 2) ^ (b >> 3) ^ (b >> 4) ^ (b >> 5) ^ (b >> 6) ^ (b >> 7)) ^ 0x01) & 0x01)); } } }