001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Set; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DLSequence; 012import org.apache.commons.ssl.org.bouncycastle.asn1.DLTaggedObject; 013 014public class SafeBag 015 extends ASN1Object 016{ 017 private ASN1ObjectIdentifier bagId; 018 private ASN1Encodable bagValue; 019 private ASN1Set bagAttributes; 020 021 public SafeBag( 022 ASN1ObjectIdentifier oid, 023 ASN1Encodable obj) 024 { 025 this.bagId = oid; 026 this.bagValue = obj; 027 this.bagAttributes = null; 028 } 029 030 public SafeBag( 031 ASN1ObjectIdentifier oid, 032 ASN1Encodable obj, 033 ASN1Set bagAttributes) 034 { 035 this.bagId = oid; 036 this.bagValue = obj; 037 this.bagAttributes = bagAttributes; 038 } 039 040 public static SafeBag getInstance( 041 Object obj) 042 { 043 if (obj instanceof SafeBag) 044 { 045 return (SafeBag)obj; 046 } 047 048 if (obj != null) 049 { 050 return new SafeBag(ASN1Sequence.getInstance(obj)); 051 } 052 053 return null; 054 } 055 056 private SafeBag( 057 ASN1Sequence seq) 058 { 059 this.bagId = (ASN1ObjectIdentifier)seq.getObjectAt(0); 060 this.bagValue = ((ASN1TaggedObject)seq.getObjectAt(1)).getObject(); 061 if (seq.size() == 3) 062 { 063 this.bagAttributes = (ASN1Set)seq.getObjectAt(2); 064 } 065 } 066 067 public ASN1ObjectIdentifier getBagId() 068 { 069 return bagId; 070 } 071 072 public ASN1Encodable getBagValue() 073 { 074 return bagValue; 075 } 076 077 public ASN1Set getBagAttributes() 078 { 079 return bagAttributes; 080 } 081 082 public ASN1Primitive toASN1Primitive() 083 { 084 ASN1EncodableVector v = new ASN1EncodableVector(); 085 086 v.add(bagId); 087 v.add(new DLTaggedObject(true, 0, bagValue)); 088 089 if (bagAttributes != null) 090 { 091 v.add(bagAttributes); 092 } 093 094 return new DLSequence(v); 095 } 096}