JCEIESCipherpublic class JCEIESCipher extends WrapCipherSpi
Fields Summary |
---|
private org.bouncycastle.crypto.engines.IESEngine | cipher | private int | state | private ByteArrayOutputStream | buffer | private AlgorithmParameters | engineParam | private org.bouncycastle.jce.spec.IESParameterSpec | engineParams | private Class[] | availableSpecs |
Methods Summary |
---|
protected byte[] | engineDoFinal(byte[] input, int inputOffset, int inputLen)
if (inputLen != 0)
{
buffer.write(input, inputOffset, inputLen);
}
try
{
byte[] buf = buffer.toByteArray();
buffer.reset();
return cipher.processBlock(buf, 0, buf.length);
}
catch (InvalidCipherTextException e)
{
throw new BadPaddingException(e.getMessage());
}
| protected int | engineDoFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
if (inputLen != 0)
{
buffer.write(input, inputOffset, inputLen);
}
try
{
byte[] buf = buffer.toByteArray();
buffer.reset();
buf = cipher.processBlock(buf, 0, buf.length);
System.arraycopy(buf, 0, output, outputOffset, buf.length);
return buf.length;
}
catch (InvalidCipherTextException e)
{
throw new BadPaddingException(e.getMessage());
}
| protected int | engineGetBlockSize()
return 0;
| protected byte[] | engineGetIV()
return null;
| protected int | engineGetKeySize(java.security.Key key)
IESKey ieKey = (IESKey)key;
if (ieKey.getPrivate() instanceof DHPrivateKey)
{
DHPrivateKey k = (DHPrivateKey)ieKey.getPrivate();
return k.getX().bitLength();
}
// BEGIN android-removed
// else if (ieKey.getPrivate() instanceof ECPrivateKey)
// {
// ECPrivateKey k = (ECPrivateKey)ieKey.getPrivate();
//
// return k.getD().bitLength();
// }
// END android-removed
throw new IllegalArgumentException("not an IE key!");
| protected int | engineGetOutputSize(int inputLen)
if (state == Cipher.ENCRYPT_MODE || state == Cipher.WRAP_MODE)
{
return buffer.size() + inputLen + 20; /* SHA1 MAC size */
}
else if (state == Cipher.DECRYPT_MODE || state == Cipher.UNWRAP_MODE)
{
return buffer.size() + inputLen - 20;
}
else
{
throw new IllegalStateException("cipher not initialised");
}
| protected java.security.AlgorithmParameters | engineGetParameters()
if (engineParam == null)
{
if (engineParams != null)
{
String name = "IES";
try
{
engineParam = AlgorithmParameters.getInstance(name, "BC");
engineParam.init(engineParams);
}
catch (Exception e)
{
throw new RuntimeException(e.toString());
}
}
}
return engineParam;
| protected void | engineInit(int opmode, java.security.Key key, java.security.AlgorithmParameters params, java.security.SecureRandom random)
AlgorithmParameterSpec paramSpec = null;
if (params != null)
{
for (int i = 0; i != availableSpecs.length; i++)
{
try
{
paramSpec = params.getParameterSpec(availableSpecs[i]);
break;
}
catch (Exception e)
{
continue;
}
}
if (paramSpec == null)
{
throw new InvalidAlgorithmParameterException("can't handle parameter " + params.toString());
}
}
engineParam = params;
engineInit(opmode, key, paramSpec, random);
| protected void | engineInit(int opmode, java.security.Key key, java.security.SecureRandom random)
if (opmode == Cipher.ENCRYPT_MODE || opmode == Cipher.WRAP_MODE)
{
try
{
engineInit(opmode, key, (AlgorithmParameterSpec)null, random);
return;
}
catch (InvalidAlgorithmParameterException e)
{
// fall through...
}
}
throw new IllegalArgumentException("can't handle null parameter spec in IES");
| protected void | engineInit(int opmode, java.security.Key key, java.security.spec.AlgorithmParameterSpec params, java.security.SecureRandom random)
if (!(key instanceof IESKey))
{
throw new InvalidKeyException("must be passed IE key");
}
if (params == null && (opmode == Cipher.ENCRYPT_MODE || opmode == Cipher.WRAP_MODE))
{
//
// if nothing is specified we set up for a 128 bit mac, with
// 128 bit derivation vectors.
//
byte[] d = new byte[16];
byte[] e = new byte[16];
if (random == null)
{
random = new SecureRandom();
}
random.nextBytes(d);
random.nextBytes(e);
params = new IESParameterSpec(d, e, 128);
}
else if (!(params instanceof IESParameterSpec))
{
throw new InvalidAlgorithmParameterException("must be passed IES parameters");
}
IESKey ieKey = (IESKey)key;
CipherParameters pubKey;
CipherParameters privKey;
// BEGIN android-removed
// if (ieKey.getPublic() instanceof ECPublicKey)
// {
// pubKey = ECUtil.generatePublicKeyParameter(ieKey.getPublic());
// privKey = ECUtil.generatePrivateKeyParameter(ieKey.getPrivate());
// }
// else
// {
// END android-removed
pubKey = DHUtil.generatePublicKeyParameter(ieKey.getPublic());
privKey = DHUtil.generatePrivateKeyParameter(ieKey.getPrivate());
// BEGIN android-removed
// }
// END android-removed
this.engineParams = (IESParameterSpec)params;
IESParameters p = new IESParameters(engineParams.getDerivationV(), engineParams.getEncodingV(), engineParams.getMacKeySize());
this.state = opmode;
buffer.reset();
switch (opmode)
{
case Cipher.ENCRYPT_MODE:
case Cipher.WRAP_MODE:
cipher.init(true, privKey, pubKey, p);
break;
case Cipher.DECRYPT_MODE:
case Cipher.UNWRAP_MODE:
cipher.init(false, privKey, pubKey, p);
break;
default:
System.out.println("eeek!");
}
| protected void | engineSetMode(java.lang.String mode)
throw new IllegalArgumentException("can't support mode " + mode);
| protected void | engineSetPadding(java.lang.String padding)
throw new NoSuchPaddingException(padding + " unavailable with RSA.");
| protected byte[] | engineUpdate(byte[] input, int inputOffset, int inputLen)
buffer.write(input, inputOffset, inputLen);
return null;
| protected int | engineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
buffer.write(input, inputOffset, inputLen);
return 0;
|
|