diff options
Diffstat (limited to 'bcpkix/src/main/java/org/bouncycastle/pkix/PKIXIdentity.java')
-rw-r--r-- | bcpkix/src/main/java/org/bouncycastle/pkix/PKIXIdentity.java | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/bcpkix/src/main/java/org/bouncycastle/pkix/PKIXIdentity.java b/bcpkix/src/main/java/org/bouncycastle/pkix/PKIXIdentity.java new file mode 100644 index 0000000..84ac046 --- /dev/null +++ b/bcpkix/src/main/java/org/bouncycastle/pkix/PKIXIdentity.java @@ -0,0 +1,64 @@ +package org.bouncycastle.pkix; + +import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; +import org.bouncycastle.asn1.x509.SubjectKeyIdentifier; +import org.bouncycastle.cert.X509CertificateHolder; +import org.bouncycastle.cms.KeyTransRecipientId; +import org.bouncycastle.cms.RecipientId; + +/** + * Holder class for public/private key based identity information. + */ +public class PKIXIdentity +{ + private final PrivateKeyInfo privateKeyInfo; + private final X509CertificateHolder[] certificateHolders; + + public PKIXIdentity(PrivateKeyInfo privateKeyInfo, X509CertificateHolder[] certificateHolders) + { + this.privateKeyInfo = privateKeyInfo; + this.certificateHolders = new X509CertificateHolder[certificateHolders.length]; + System.arraycopy(certificateHolders, 0, this.certificateHolders, 0, certificateHolders.length); + } + + /** + * Return the private key info for this identity. + * + * @return the identity's private key (if available, null otherwise). + */ + public PrivateKeyInfo getPrivateKeyInfo() + { + return privateKeyInfo; + } + + /** + * Return the certificate associated with the private key info. + * + * @return a X509CertificateHolder + */ + public X509CertificateHolder getCertificate() + { + return certificateHolders[0]; + } + + /** + * Return a RecipientId for the identity's (private key, certificate) pair. + */ + public RecipientId getRecipientId() + { + // TODO: handle key agreement + return new KeyTransRecipientId(certificateHolders[0].getIssuer(), certificateHolders[0].getSerialNumber(), getSubjectKeyIdentifier()); + } + + private byte[] getSubjectKeyIdentifier() + { + SubjectKeyIdentifier subId = SubjectKeyIdentifier.fromExtensions(certificateHolders[0].getExtensions()); + + if (subId == null) + { + return null; + } + + return subId.getKeyIdentifier(); + } +} |