/* See LICENSE for licensing and NOTICE for copyright. */
package org.cryptacular.pbe;
import org.cryptacular.spec.BufferedBlockCipherSpec;
import org.cryptacular.spec.DigestSpec;
/**
* Password-based encryption algorithms defined in PKCS#5 for PBES1 scheme.
*
* @author Middleware Services
* @version $Revision: 2745 $
*/
public enum PBES1Algorithm {
/** PBES1 encryption method with MD2 hash and DES CBC cipher. */
PbeWithMD2AndDES_CBC(
"1.2.840.113549.1.5.1",
new BufferedBlockCipherSpec("DES", "CBC", "PKCS5"),
new DigestSpec("MD2")),
/** PBES1 encryption method with MD2 hash and RC2 CBC cipher. */
PbeWithMD2AndRC2_CBC(
"1.2.840.113549.1.5.4",
new BufferedBlockCipherSpec("RC2", "CBC", "PKCS5"),
new DigestSpec("MD2")),
/** PBES1 encryption method with MD5 hash and DES CBC cipher. */
PbeWithMD5AndDES_CBC(
"1.2.840.113549.1.5.3",
new BufferedBlockCipherSpec("DES", "CBC", "PKCS5"),
new DigestSpec("MD5")),
/** PBES1 encryption method with MD5 hash and RC2 CBC cipher. */
PbeWithMD5AndRC2_CBC(
"1.2.840.113549.1.5.6",
new BufferedBlockCipherSpec("RC2", "CBC", "PKCS5"),
new DigestSpec("MD5")),
/** PBES1 encryption method with SHA1 hash and DES CBC cipher. */
PbeWithSHA1AndDES_CBC(
"1.2.840.113549.1.5.10",
new BufferedBlockCipherSpec("DES", "CBC", "PKCS5"),
new DigestSpec("SHA1")),
/** PBES1 encryption method with SHA1 hash and RC2 CBC cipher. */
PbeWithSHA1AndRC2_CBC(
"1.2.840.113549.1.5.11",
new BufferedBlockCipherSpec("RC2", "CBC", "PKCS5"),
new DigestSpec("SHA1"));
/** Algorithm identifier OID. */
private final String oid;
/** Cipher algorithm specification. */
private final BufferedBlockCipherSpec cipherSpec;
/** Pseudorandom function digest specification. */
private final DigestSpec digestSpec;
/**
* Creates a new instance with given parameters.
*
* @param id Algorithm OID.
* @param cipherSpec Cipher algorithm specification.
* @param digestSpec Digest specification used for pseudorandom function.
*/
PBES1Algorithm(final String id, final BufferedBlockCipherSpec cipherSpec, final DigestSpec digestSpec)
{
this.oid = id;
this.cipherSpec = cipherSpec;
this.digestSpec = digestSpec;
}
/**
* Gets the PBE algorithm for the given object identifier.
*
* @param oid PBE algorithm OID.
*
* @return Algorithm whose identifier equals given value.
*
* @throws IllegalArgumentException If no matching algorithm found.
*/
public static PBES1Algorithm fromOid(final String oid)
{
for (PBES1Algorithm a : PBES1Algorithm.values()) {
if (a.getOid().equals(oid)) {
return a;
}
}
throw new IllegalArgumentException("Unknown PBES1Algorithm for OID " + oid);
}
/** @return the oid */
public String getOid()
{
return oid;
}
/** @return Cipher algorithm specification. */
public BufferedBlockCipherSpec getCipherSpec()
{
return cipherSpec;
}
/** @return Digest algorithm. */
public DigestSpec getDigestSpec()
{
return digestSpec;
}
}