org.spongycastle.bcpg.PublicKeyPacket Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scprov-jdk15 Show documentation
Show all versions of scprov-jdk15 Show documentation
Spongy Castle is a package-rename (org.bouncycastle.* to org.spongycastle.*) of Bouncy Castle intended for Android.
Android ships with a stripped-down version of Bouncy Castle - this causes classloader collisions if you try to add
an alternative (updated/complete) Bouncy Castle jar.
This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.5.
package org.spongycastle.bcpg;
import java.io.*;
import java.util.Date;
/**
* basic packet for a PGP public key
*/
public class PublicKeyPacket
extends ContainedPacket implements PublicKeyAlgorithmTags
{
private int version;
private long time;
private int validDays;
private int algorithm;
private BCPGKey key;
PublicKeyPacket(
BCPGInputStream in)
throws IOException
{
version = in.read();
time = ((long)in.read() << 24) | (in.read() << 16) | (in.read() << 8) | in.read();
if (version <= 3)
{
validDays = (in.read() << 8) | in.read();
}
algorithm = (byte)in.read();
switch (algorithm)
{
case RSA_ENCRYPT:
case RSA_GENERAL:
case RSA_SIGN:
key = new RSAPublicBCPGKey(in);
break;
case DSA:
key = new DSAPublicBCPGKey(in);
break;
case ELGAMAL_ENCRYPT:
case ELGAMAL_GENERAL:
key = new ElGamalPublicBCPGKey(in);
break;
default:
throw new IOException("unknown PGP public key algorithm encountered");
}
}
/**
* Construct version 4 public key packet.
*
* @param algorithm
* @param time
* @param key
*/
public PublicKeyPacket(
int algorithm,
Date time,
BCPGKey key)
{
this.version = 4;
this.time = time.getTime() / 1000;
this.algorithm = algorithm;
this.key = key;
}
public int getVersion()
{
return version;
}
public int getAlgorithm()
{
return algorithm;
}
public int getValidDays()
{
return validDays;
}
public Date getTime()
{
return new Date(time * 1000);
}
public BCPGKey getKey()
{
return key;
}
public byte[] getEncodedContents()
throws IOException
{
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
BCPGOutputStream pOut = new BCPGOutputStream(bOut);
pOut.write(version);
pOut.write((byte)(time >> 24));
pOut.write((byte)(time >> 16));
pOut.write((byte)(time >> 8));
pOut.write((byte)time);
if (version <= 3)
{
pOut.write((byte)(validDays >> 8));
pOut.write((byte)validDays);
}
pOut.write(algorithm);
pOut.writeObject((BCPGObject)key);
return bOut.toByteArray();
}
public void encode(
BCPGOutputStream out)
throws IOException
{
out.writePacket(PUBLIC_KEY, getEncodedContents(), true);
}
}