001package org.apache.commons.ssl.org.bouncycastle.asn1.dvcs; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Choice; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1OctetString; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DEROctetString; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 012import org.apache.commons.ssl.org.bouncycastle.asn1.x509.DigestInfo; 013 014/** 015 * <pre> 016 * Data ::= CHOICE { 017 * message OCTET STRING , 018 * messageImprint DigestInfo, 019 * certs [0] SEQUENCE SIZE (1..MAX) OF 020 * TargetEtcChain 021 * } 022 * </pre> 023 */ 024 025public class Data 026 extends ASN1Object 027 implements ASN1Choice 028{ 029 private ASN1OctetString message; 030 private DigestInfo messageImprint; 031 private ASN1Sequence certs; 032 033 public Data(byte[] messageBytes) 034 { 035 this.message = new DEROctetString(messageBytes); 036 } 037 038 public Data(ASN1OctetString message) 039 { 040 this.message = message; 041 } 042 043 public Data(DigestInfo messageImprint) 044 { 045 this.messageImprint = messageImprint; 046 } 047 048 public Data(TargetEtcChain cert) 049 { 050 this.certs = new DERSequence(cert); 051 } 052 053 public Data(TargetEtcChain[] certs) 054 { 055 this.certs = new DERSequence(certs); 056 } 057 058 private Data(ASN1Sequence certs) 059 { 060 this.certs = certs; 061 } 062 063 public static Data getInstance(Object obj) 064 { 065 if (obj instanceof Data) 066 { 067 return (Data)obj; 068 } 069 else if (obj instanceof ASN1OctetString) 070 { 071 return new Data((ASN1OctetString)obj); 072 } 073 else if (obj instanceof ASN1Sequence) 074 { 075 return new Data(DigestInfo.getInstance(obj)); 076 } 077 else if (obj instanceof ASN1TaggedObject) 078 { 079 return new Data(ASN1Sequence.getInstance((ASN1TaggedObject)obj, false)); 080 } 081 throw new IllegalArgumentException("Unknown object submitted to getInstance: " + obj.getClass().getName()); 082 } 083 084 public static Data getInstance( 085 ASN1TaggedObject obj, 086 boolean explicit) 087 { 088 return getInstance(obj.getObject()); 089 } 090 091 public ASN1Primitive toASN1Primitive() 092 { 093 if (message != null) 094 { 095 return message.toASN1Primitive(); 096 } 097 if (messageImprint != null) 098 { 099 return messageImprint.toASN1Primitive(); 100 } 101 else 102 { 103 return new DERTaggedObject(false, 0, certs); 104 } 105 } 106 107 public String toString() 108 { 109 if (message != null) 110 { 111 return "Data {\n" + message + "}\n"; 112 } 113 if (messageImprint != null) 114 { 115 return "Data {\n" + messageImprint + "}\n"; 116 } 117 else 118 { 119 return "Data {\n" + certs + "}\n"; 120 } 121 } 122 123 public ASN1OctetString getMessage() 124 { 125 return message; 126 } 127 128 public DigestInfo getMessageImprint() 129 { 130 return messageImprint; 131 } 132 133 public TargetEtcChain[] getCerts() 134 { 135 if (certs == null) 136 { 137 return null; 138 } 139 140 TargetEtcChain[] tmp = new TargetEtcChain[certs.size()]; 141 142 for (int i = 0; i != tmp.length; i++) 143 { 144 tmp[i] = TargetEtcChain.getInstance(certs.getObjectAt(i)); 145 } 146 147 return tmp; 148 } 149}