/* See LICENSE for licensing and NOTICE for copyright. */
package org.cryptacular.pbe;
import org.cryptacular.spec.BufferedBlockCipherSpec;
/**
* Supported password-based encryption algorithms for PKCS#5 PBES2 encryption scheme. The ciphers mentioned in PKCS#5
* are supported as well as others in common use or of presumed value.
*
* @author Middleware Services
* @version $Revision: 2745 $
*/
public enum PBES2Algorithm {
/** DES CBC cipher. */
DES("1.3.14.3.2.7", new BufferedBlockCipherSpec("DES", "CBC", "PKCS5"), 64),
/** 3-DES CBC cipher. */
DESede("1.2.840.113549.3.7", new BufferedBlockCipherSpec("DESede", "CBC", "PKCS5"), 192),
/** RC2 CBC cipher. */
RC2("1.2.840.113549.3.2", new BufferedBlockCipherSpec("RC2", "CBC", "PKCS5"), 64),
/** RC5 CBC cipher. */
RC5("1.2.840.113549.3.9", new BufferedBlockCipherSpec("RC5", "CBC", "PKCS5"), 128),
/** AES-128 CBC cipher. */
AES128("2.16.840.1.101.3.4.1.2", new BufferedBlockCipherSpec("AES", "CBC", "PKCS5"), 128),
/** AES-192 CBC cipher. */
AES192("2.16.840.1.101.3.4.1.22", new BufferedBlockCipherSpec("AES", "CBC", "PKCS5"), 192),
/** AES-256 CBC cipher. */
AES256("2.16.840.1.101.3.4.1.42", new BufferedBlockCipherSpec("AES", "CBC", "PKCS5"), 256);
/** Algorithm identifier OID. */
private final String oid;
/** Cipher algorithm specification. */
private final BufferedBlockCipherSpec cipherSpec;
/** Cipher key size in bits. */
private final int keySize;
/**
* Creates a new instance with given parameters.
*
* @param id Algorithm OID.
* @param cipherSpec Cipher algorithm specification.
* @param keySizeBits Size of derived key in bits to be used with cipher.
*/
PBES2Algorithm(final String id, final BufferedBlockCipherSpec cipherSpec, final int keySizeBits)
{
this.oid = id;
this.cipherSpec = cipherSpec;
this.keySize = keySizeBits;
}
/**
* 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 PBES2Algorithm fromOid(final String oid)
{
for (PBES2Algorithm a : PBES2Algorithm.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 Size of derived key in bits or -1 if algorithm does not define a key size. */
public int getKeySize()
{
return keySize;
}
}