EnvelopedData.java
上传用户:lior1029
上传日期:2013-05-07
资源大小:209k
文件大小:5k
源码类别:

CA认证

开发平台:

Java

  1. package org.bouncycastle.asn1.cms;
  2. import java.util.Enumeration;
  3. import org.bouncycastle.asn1.ASN1Sequence;
  4. import org.bouncycastle.asn1.ASN1Set;
  5. import org.bouncycastle.asn1.ASN1TaggedObject;
  6. import org.bouncycastle.asn1.BERSequence;
  7. import org.bouncycastle.asn1.DERTaggedObject;
  8. import org.bouncycastle.asn1.DERInteger;
  9. import org.bouncycastle.asn1.DERObject;
  10. import org.bouncycastle.asn1.DEREncodable;
  11. import org.bouncycastle.asn1.ASN1EncodableVector;
  12. public class EnvelopedData
  13.     implements DEREncodable
  14. {
  15. private DERInteger              version;
  16. private OriginatorInfo          originatorInfo;
  17. private ASN1Set                 recipientInfos;
  18. private EncryptedContentInfo    encryptedContentInfo;
  19. private ASN1Set                 unprotectedAttrs;
  20. public EnvelopedData(
  21.         OriginatorInfo          originatorInfo,
  22.         ASN1Set                 recipientInfos,
  23.         EncryptedContentInfo    encryptedContentInfo,
  24.         ASN1Set                 unprotectedAttrs)
  25.     {
  26.         if (originatorInfo != null || unprotectedAttrs != null)
  27.         {
  28. version = new DERInteger(2);
  29. }
  30. else
  31.         {
  32. version = new DERInteger(0);
  33.             Enumeration e = recipientInfos.getObjects();
  34.             while (e.hasMoreElements())
  35.             {
  36.                 RecipientInfo   ri = RecipientInfo.getInstance(e.nextElement());
  37.                 if (!ri.getVersion().equals(version))
  38.                 {
  39.                     version = new DERInteger(2);
  40.                     break;
  41.                 }
  42.             }
  43. }
  44. this.originatorInfo = originatorInfo;
  45. this.recipientInfos = recipientInfos;
  46. this.encryptedContentInfo = encryptedContentInfo;
  47. this.unprotectedAttrs = unprotectedAttrs;
  48. }
  49.                      
  50. public EnvelopedData(
  51.         ASN1Sequence seq)
  52.     {
  53. int     index = 0;
  54. version = (DERInteger)seq.getObjectAt(index++);
  55. Object  tmp = seq.getObjectAt(index++);
  56. if (tmp instanceof ASN1TaggedObject)
  57.         {
  58. originatorInfo = OriginatorInfo.getInstance((ASN1TaggedObject)tmp, false);
  59. tmp = seq.getObjectAt(index++);
  60. }
  61. recipientInfos = ASN1Set.getInstance(tmp);
  62. encryptedContentInfo = EncryptedContentInfo.getInstance(seq.getObjectAt(index++));
  63. if(seq.size() > index)
  64.         {
  65. unprotectedAttrs = ASN1Set.getInstance((ASN1TaggedObject)seq.getObjectAt(index), false);
  66. }
  67. }
  68.     /**
  69.      * return an EnvelopedData object from a tagged object.
  70.      *
  71.      * @param obj the tagged object holding the object we want.
  72.      * @param explicit true if the object is meant to be explicitly
  73.      *              tagged false otherwise.
  74.      * @exception IllegalArgumentException if the object held by the
  75.      *          tagged object cannot be converted.
  76.      */
  77. public static EnvelopedData getInstance(
  78.         ASN1TaggedObject obj,
  79.         boolean explicit)
  80.     {
  81. return getInstance(ASN1Sequence.getInstance(obj, explicit));
  82. }
  83.     /**
  84.      * return an EnvelopedData object from the given object.
  85.      *
  86.      * @param obj the object we want converted.
  87.      * @exception IllegalArgumentException if the object cannot be converted.
  88.      */
  89. public static EnvelopedData getInstance(
  90.         Object obj)
  91.     {
  92. if (obj == null || obj instanceof EnvelopedData)
  93.         {
  94. return (EnvelopedData)obj;
  95. }
  96. if (obj instanceof ASN1Sequence)
  97.         {
  98. return new EnvelopedData((ASN1Sequence)obj);
  99. }
  100. throw new IllegalArgumentException("Invalid EnvelopedData: " + obj.getClass().getName());
  101. }
  102. public DERInteger getVersion()
  103.     {
  104. return version;
  105. }
  106. public OriginatorInfo getOriginatorInfo()
  107.     {
  108. return originatorInfo;
  109. }
  110. public ASN1Set getRecipientInfos()
  111.     {
  112. return recipientInfos;
  113. }
  114. public EncryptedContentInfo getEncryptedContentInfo()
  115.     {
  116. return encryptedContentInfo;
  117. }
  118. public ASN1Set getUnprotectedAttrs()
  119.     {
  120. return unprotectedAttrs;
  121. }
  122.     /** 
  123.      * <pre>
  124.      * EnvelopedData ::= SEQUENCE {
  125.      *  version CMSVersion,
  126.      *  originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
  127.      *  recipientInfos RecipientInfos,
  128.      *  encryptedContentInfo EncryptedContentInfo,
  129.      *  unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL 
  130.      * }
  131.      * </pre>
  132.      */
  133. public DERObject getDERObject()
  134.     {
  135.         ASN1EncodableVector  v = new ASN1EncodableVector();
  136. v.add(version);
  137. if (originatorInfo != null)
  138.         {
  139. v.add(new DERTaggedObject(false, 0, originatorInfo));
  140. }
  141. v.add(recipientInfos);
  142. v.add(encryptedContentInfo);
  143. if (unprotectedAttrs != null)
  144.         {
  145. v.add(new DERTaggedObject(false, 1, unprotectedAttrs));
  146. }
  147. return new BERSequence(v);
  148. }
  149. }