Home | History | Annotate | Download | only in pkcs
      1 package org.bouncycastle.asn1.pkcs;
      2 
      3 import org.bouncycastle.asn1.ASN1Encodable;
      4 import org.bouncycastle.asn1.ASN1EncodableVector;
      5 import org.bouncycastle.asn1.ASN1OctetString;
      6 import org.bouncycastle.asn1.ASN1Sequence;
      7 import org.bouncycastle.asn1.BERSequence;
      8 import org.bouncycastle.asn1.BERTaggedObject;
      9 import org.bouncycastle.asn1.DEREncodable;
     10 import org.bouncycastle.asn1.DERInteger;
     11 import org.bouncycastle.asn1.DERObject;
     12 import org.bouncycastle.asn1.DERObjectIdentifier;
     13 import org.bouncycastle.asn1.DERTaggedObject;
     14 import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
     15 
     16 /**
     17  * The EncryptedData object.
     18  * <pre>
     19  *      EncryptedData ::= SEQUENCE {
     20  *           version Version,
     21  *           encryptedContentInfo EncryptedContentInfo
     22  *      }
     23  *
     24  *
     25  *      EncryptedContentInfo ::= SEQUENCE {
     26  *          contentType ContentType,
     27  *          contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
     28  *          encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
     29  *    }
     30  *
     31  *    EncryptedContent ::= OCTET STRING
     32  * </pre>
     33  */
     34 public class EncryptedData
     35     extends ASN1Encodable
     36 {
     37     ASN1Sequence                data;
     38     DERObjectIdentifier         bagId;
     39     DERObject                   bagValue;
     40 
     41     public static EncryptedData getInstance(
     42          Object  obj)
     43     {
     44          if (obj instanceof EncryptedData)
     45          {
     46              return (EncryptedData)obj;
     47          }
     48          else if (obj instanceof ASN1Sequence)
     49          {
     50              return new EncryptedData((ASN1Sequence)obj);
     51          }
     52 
     53          throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName());
     54     }
     55 
     56     public EncryptedData(
     57         ASN1Sequence seq)
     58     {
     59         int version = ((DERInteger)seq.getObjectAt(0)).getValue().intValue();
     60 
     61         if (version != 0)
     62         {
     63             throw new IllegalArgumentException("sequence not version 0");
     64         }
     65 
     66         this.data = (ASN1Sequence)seq.getObjectAt(1);
     67     }
     68 
     69     public EncryptedData(
     70         DERObjectIdentifier     contentType,
     71         AlgorithmIdentifier     encryptionAlgorithm,
     72         DEREncodable            content)
     73     {
     74         ASN1EncodableVector v = new ASN1EncodableVector();
     75 
     76         v.add(contentType);
     77         v.add(encryptionAlgorithm.getDERObject());
     78         v.add(new BERTaggedObject(false, 0, content));
     79 
     80         data = new BERSequence(v);
     81     }
     82 
     83     public DERObjectIdentifier getContentType()
     84     {
     85         return (DERObjectIdentifier)data.getObjectAt(0);
     86     }
     87 
     88     public AlgorithmIdentifier getEncryptionAlgorithm()
     89     {
     90         return AlgorithmIdentifier.getInstance(data.getObjectAt(1));
     91     }
     92 
     93     public ASN1OctetString getContent()
     94     {
     95         if (data.size() == 3)
     96         {
     97             DERTaggedObject o = (DERTaggedObject)data.getObjectAt(2);
     98 
     99             return ASN1OctetString.getInstance(o, false);
    100         }
    101 
    102         return null;
    103     }
    104 
    105     public DERObject toASN1Object()
    106     {
    107         ASN1EncodableVector  v = new ASN1EncodableVector();
    108 
    109         v.add(new DERInteger(0));
    110         v.add(data);
    111 
    112         return new BERSequence(v);
    113     }
    114 }
    115