org.bouncycastle.bcpg.PublicKeyEncSessionPacket Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gwt-crypto Show documentation
Show all versions of gwt-crypto Show documentation
A GWT cryptography library ported from Legion of the Bouncy Castle.
The newest version!
package org.bouncycastle.bcpg;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.io.Streams;
/**
* basic packet for a PGP public key
*/
public class PublicKeyEncSessionPacket
extends ContainedPacket implements PublicKeyAlgorithmTags
{
private int version;
private long keyID;
private int algorithm;
private byte[][] data;
PublicKeyEncSessionPacket(
BCPGInputStream in)
throws IOException
{
version = in.read();
keyID |= (long)in.read() << 56;
keyID |= (long)in.read() << 48;
keyID |= (long)in.read() << 40;
keyID |= (long)in.read() << 32;
keyID |= (long)in.read() << 24;
keyID |= (long)in.read() << 16;
keyID |= (long)in.read() << 8;
keyID |= in.read();
algorithm = in.read();
switch (algorithm)
{
case RSA_ENCRYPT:
case RSA_GENERAL:
data = new byte[1][];
data[0] = new MPInteger(in).getEncoded();
break;
case ELGAMAL_ENCRYPT:
case ELGAMAL_GENERAL:
data = new byte[2][];
data[0] = new MPInteger(in).getEncoded();
data[1] = new MPInteger(in).getEncoded();
break;
case ECDH:
data = new byte[1][];
data[0] = Streams.readAll(in);
break;
default:
throw new IOException("unknown PGP public key algorithm encountered");
}
}
public PublicKeyEncSessionPacket(
long keyID,
int algorithm,
byte[][] data)
{
this.version = 3;
this.keyID = keyID;
this.algorithm = algorithm;
this.data = new byte[data.length][];
for (int i = 0; i != data.length; i++)
{
this.data[i] = Arrays.clone(data[i]);
}
}
public int getVersion()
{
return version;
}
public long getKeyID()
{
return keyID;
}
public int getAlgorithm()
{
return algorithm;
}
public byte[][] getEncSessionKey()
{
return data;
}
public void encode(
BCPGOutputStream out)
throws IOException
{
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
BCPGOutputStream pOut = new BCPGOutputStream(bOut);
pOut.write(version);
pOut.write((byte)(keyID >> 56));
pOut.write((byte)(keyID >> 48));
pOut.write((byte)(keyID >> 40));
pOut.write((byte)(keyID >> 32));
pOut.write((byte)(keyID >> 24));
pOut.write((byte)(keyID >> 16));
pOut.write((byte)(keyID >> 8));
pOut.write((byte)(keyID));
pOut.write(algorithm);
for (int i = 0; i != data.length; i++)
{
pOut.write(data[i]);
}
pOut.close();
out.writePacket(PUBLIC_KEY_ENC_SESSION , bOut.toByteArray(), true);
}
}