| package org.bouncycastle.pkcs; |
| |
| import java.io.IOException; |
| |
| import org.bouncycastle.asn1.ASN1Encodable; |
| import org.bouncycastle.asn1.ASN1EncodableVector; |
| import org.bouncycastle.asn1.ASN1ObjectIdentifier; |
| import org.bouncycastle.asn1.DEROctetString; |
| import org.bouncycastle.asn1.DERSet; |
| import org.bouncycastle.asn1.pkcs.Attribute; |
| import org.bouncycastle.asn1.pkcs.CertBag; |
| import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; |
| import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; |
| import org.bouncycastle.asn1.pkcs.SafeBag; |
| import org.bouncycastle.asn1.x509.Certificate; |
| import org.bouncycastle.asn1.x509.CertificateList; |
| import org.bouncycastle.cert.X509CRLHolder; |
| import org.bouncycastle.cert.X509CertificateHolder; |
| import org.bouncycastle.operator.OutputEncryptor; |
| |
| public class PKCS12SafeBagBuilder |
| { |
| private ASN1ObjectIdentifier bagType; |
| private ASN1Encodable bagValue; |
| private ASN1EncodableVector bagAttrs = new ASN1EncodableVector(); |
| |
| public PKCS12SafeBagBuilder(PrivateKeyInfo privateKeyInfo, OutputEncryptor encryptor) |
| { |
| this.bagType = PKCSObjectIdentifiers.pkcs8ShroudedKeyBag; |
| this.bagValue = new PKCS8EncryptedPrivateKeyInfoBuilder(privateKeyInfo).build(encryptor).toASN1Structure(); |
| } |
| |
| public PKCS12SafeBagBuilder(PrivateKeyInfo privateKeyInfo) |
| { |
| this.bagType = PKCSObjectIdentifiers.keyBag; |
| this.bagValue = privateKeyInfo; |
| } |
| |
| public PKCS12SafeBagBuilder(X509CertificateHolder certificate) |
| throws IOException |
| { |
| this(certificate.toASN1Structure()); |
| } |
| |
| public PKCS12SafeBagBuilder(X509CRLHolder crl) |
| throws IOException |
| { |
| this(crl.toASN1Structure()); |
| } |
| |
| public PKCS12SafeBagBuilder(Certificate certificate) |
| throws IOException |
| { |
| this.bagType = PKCSObjectIdentifiers.certBag; |
| this.bagValue = new CertBag(PKCSObjectIdentifiers.x509Certificate, new DEROctetString(certificate.getEncoded())); |
| } |
| |
| public PKCS12SafeBagBuilder(CertificateList crl) |
| throws IOException |
| { |
| this.bagType = PKCSObjectIdentifiers.crlBag; |
| this.bagValue = new CertBag(PKCSObjectIdentifiers.x509Crl, new DEROctetString(crl.getEncoded())); |
| } |
| |
| public PKCS12SafeBagBuilder addBagAttribute(ASN1ObjectIdentifier attrType, ASN1Encodable attrValue) |
| { |
| bagAttrs.add(new Attribute(attrType, new DERSet(attrValue))); |
| |
| return this; |
| } |
| |
| public PKCS12SafeBag build() |
| { |
| return new PKCS12SafeBag(new SafeBag(bagType, bagValue, new DERSet(bagAttrs))); |
| } |
| } |