001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs; 002 003import java.math.BigInteger; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.BERSequence; 011 012/** 013 * the infamous Pfx from PKCS12 014 */ 015public class Pfx 016 extends ASN1Object 017 implements PKCSObjectIdentifiers 018{ 019 private ContentInfo contentInfo; 020 private MacData macData = null; 021 022 private Pfx( 023 ASN1Sequence seq) 024 { 025 BigInteger version = ((ASN1Integer)seq.getObjectAt(0)).getValue(); 026 if (version.intValue() != 3) 027 { 028 throw new IllegalArgumentException("wrong version for PFX PDU"); 029 } 030 031 contentInfo = ContentInfo.getInstance(seq.getObjectAt(1)); 032 033 if (seq.size() == 3) 034 { 035 macData = MacData.getInstance(seq.getObjectAt(2)); 036 } 037 } 038 039 public static Pfx getInstance( 040 Object obj) 041 { 042 if (obj instanceof Pfx) 043 { 044 return (Pfx)obj; 045 } 046 047 if (obj != null) 048 { 049 return new Pfx(ASN1Sequence.getInstance(obj)); 050 } 051 052 return null; 053 } 054 055 public Pfx( 056 ContentInfo contentInfo, 057 MacData macData) 058 { 059 this.contentInfo = contentInfo; 060 this.macData = macData; 061 } 062 063 public ContentInfo getAuthSafe() 064 { 065 return contentInfo; 066 } 067 068 public MacData getMacData() 069 { 070 return macData; 071 } 072 073 public ASN1Primitive toASN1Primitive() 074 { 075 ASN1EncodableVector v = new ASN1EncodableVector(); 076 077 v.add(new ASN1Integer(3)); 078 v.add(contentInfo); 079 080 if (macData != null) 081 { 082 v.add(macData); 083 } 084 085 return new BERSequence(v); 086 } 087}