org.bouncycastle.openpgp.PGPSignatureSubpacketVector Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcpg-jdk14 Show documentation
Show all versions of bcpg-jdk14 Show documentation
The Bouncy Castle Java API for handling the OpenPGP protocol. This jar contains the OpenPGP API for JDK 1.4. The APIs can be used in conjunction with a JCE/JCA provider such as the one provided with the Bouncy Castle Cryptography APIs.
package org.bouncycastle.openpgp;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.bouncycastle.bcpg.SignaturePacket;
import org.bouncycastle.bcpg.SignatureSubpacket;
import org.bouncycastle.bcpg.SignatureSubpacketTags;
import org.bouncycastle.bcpg.sig.Features;
import org.bouncycastle.bcpg.sig.IssuerKeyID;
import org.bouncycastle.bcpg.sig.KeyExpirationTime;
import org.bouncycastle.bcpg.sig.KeyFlags;
import org.bouncycastle.bcpg.sig.NotationData;
import org.bouncycastle.bcpg.sig.PreferredAlgorithms;
import org.bouncycastle.bcpg.sig.PrimaryUserID;
import org.bouncycastle.bcpg.sig.SignatureCreationTime;
import org.bouncycastle.bcpg.sig.SignatureExpirationTime;
import org.bouncycastle.bcpg.sig.SignerUserID;
/**
* Container for a list of signature subpackets.
*/
public class PGPSignatureSubpacketVector
{
SignatureSubpacket[] packets;
PGPSignatureSubpacketVector(
SignatureSubpacket[] packets)
{
this.packets = packets;
}
public SignatureSubpacket getSubpacket(
int type)
{
for (int i = 0; i != packets.length; i++)
{
if (packets[i].getType() == type)
{
return packets[i];
}
}
return null;
}
/**
* Return true if a particular subpacket type exists.
*
* @param type type to look for.
* @return true if present, false otherwise.
*/
public boolean hasSubpacket(
int type)
{
return getSubpacket(type) != null;
}
/**
* Return all signature subpackets of the passed in type.
* @param type subpacket type code
* @return an array of zero or more matching subpackets.
*/
public SignatureSubpacket[] getSubpackets(
int type)
{
List list = new ArrayList();
for (int i = 0; i != packets.length; i++)
{
if (packets[i].getType() == type)
{
list.add(packets[i]);
}
}
return (SignatureSubpacket[])list.toArray(new SignatureSubpacket[]{});
}
public PGPSignatureList getEmbeddedSignatures()
throws PGPException
{
SignatureSubpacket[] sigs = getSubpackets(SignatureSubpacketTags.EMBEDDED_SIGNATURE);
ArrayList l = new ArrayList();
for (int i = 0; i < sigs.length; i++)
{
try
{
l.add(new PGPSignature(SignaturePacket.fromByteArray(sigs[i].getData())));
}
catch (IOException e)
{
throw new PGPException("Unable to parse signature packet: " + e.getMessage(), e);
}
}
return new PGPSignatureList((PGPSignature[])l.toArray(new PGPSignature[l.size()]));
}
public NotationData[] getNotationDataOccurrences()
{
SignatureSubpacket[] notations = getSubpackets(SignatureSubpacketTags.NOTATION_DATA);
NotationData[] vals = new NotationData[notations.length];
for (int i = 0; i < notations.length; i++)
{
vals[i] = (NotationData)notations[i];
}
return vals;
}
/**
* @deprecated use getNotationDataOccurrences()
*/
public NotationData[] getNotationDataOccurences()
{
return getNotationDataOccurrences();
}
public long getIssuerKeyID()
{
SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.ISSUER_KEY_ID);
if (p == null)
{
return 0;
}
return ((IssuerKeyID)p).getKeyID();
}
public Date getSignatureCreationTime()
{
SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.CREATION_TIME);
if (p == null)
{
return null;
}
return ((SignatureCreationTime)p).getTime();
}
/**
* Return the number of seconds a signature is valid for after its creation date. A value of zero means
* the signature never expires.
*
* @return seconds a signature is valid for.
*/
public long getSignatureExpirationTime()
{
SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.EXPIRE_TIME);
if (p == null)
{
return 0;
}
return ((SignatureExpirationTime)p).getTime();
}
/**
* Return the number of seconds a key is valid for after its creation date. A value of zero means
* the key never expires.
*
* @return seconds a key is valid for.
*/
public long getKeyExpirationTime()
{
SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.KEY_EXPIRE_TIME);
if (p == null)
{
return 0;
}
return ((KeyExpirationTime)p).getTime();
}
public int[] getPreferredHashAlgorithms()
{
SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.PREFERRED_HASH_ALGS);
if (p == null)
{
return null;
}
return ((PreferredAlgorithms)p).getPreferences();
}
public int[] getPreferredSymmetricAlgorithms()
{
SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.PREFERRED_SYM_ALGS);
if (p == null)
{
return null;
}
return ((PreferredAlgorithms)p).getPreferences();
}
public int[] getPreferredCompressionAlgorithms()
{
SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.PREFERRED_COMP_ALGS);
if (p == null)
{
return null;
}
return ((PreferredAlgorithms)p).getPreferences();
}
public int getKeyFlags()
{
SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.KEY_FLAGS);
if (p == null)
{
return 0;
}
return ((KeyFlags)p).getFlags();
}
public String getSignerUserID()
{
SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.SIGNER_USER_ID);
if (p == null)
{
return null;
}
return ((SignerUserID)p).getID();
}
public boolean isPrimaryUserID()
{
PrimaryUserID primaryId = (PrimaryUserID)this.getSubpacket(SignatureSubpacketTags.PRIMARY_USER_ID);
if (primaryId != null)
{
return primaryId.isPrimaryUserID();
}
return false;
}
public int[] getCriticalTags()
{
int count = 0;
for (int i = 0; i != packets.length; i++)
{
if (packets[i].isCritical())
{
count++;
}
}
int[] list = new int[count];
count = 0;
for (int i = 0; i != packets.length; i++)
{
if (packets[i].isCritical())
{
list[count++] = packets[i].getType();
}
}
return list;
}
public Features getFeatures()
{
SignatureSubpacket p = this.getSubpacket(SignatureSubpacketTags.FEATURES);
if (p == null)
{
return null;
}
return new Features(p.isCritical(), p.isLongLength(), p.getData());
}
/**
* Return the number of packets this vector contains.
*
* @return size of the packet vector.
*/
public int size()
{
return packets.length;
}
SignatureSubpacket[] toSubpacketArray()
{
return packets;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy