| 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(); |
| } |
| } |