001package org.apache.commons.ssl.org.bouncycastle.asn1.tsp; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Boolean; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 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.ASN1TaggedObject; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 012import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 013import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Extensions; 014 015public class TimeStampReq 016 extends ASN1Object 017{ 018 ASN1Integer version; 019 020 MessageImprint messageImprint; 021 022 ASN1ObjectIdentifier tsaPolicy; 023 024 ASN1Integer nonce; 025 026 ASN1Boolean certReq; 027 028 Extensions extensions; 029 030 public static TimeStampReq getInstance(Object o) 031 { 032 if (o instanceof TimeStampReq) 033 { 034 return (TimeStampReq) o; 035 } 036 else if (o != null) 037 { 038 return new TimeStampReq(ASN1Sequence.getInstance(o)); 039 } 040 041 return null; 042 } 043 044 private TimeStampReq(ASN1Sequence seq) 045 { 046 int nbObjects = seq.size(); 047 048 int seqStart = 0; 049 050 // version 051 version = ASN1Integer.getInstance(seq.getObjectAt(seqStart)); 052 053 seqStart++; 054 055 // messageImprint 056 messageImprint = MessageImprint.getInstance(seq.getObjectAt(seqStart)); 057 058 seqStart++; 059 060 for (int opt = seqStart; opt < nbObjects; opt++) 061 { 062 // tsaPolicy 063 if (seq.getObjectAt(opt) instanceof ASN1ObjectIdentifier) 064 { 065 tsaPolicy = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(opt)); 066 } 067 // nonce 068 else if (seq.getObjectAt(opt) instanceof ASN1Integer) 069 { 070 nonce = ASN1Integer.getInstance(seq.getObjectAt(opt)); 071 } 072 // certReq 073 else if (seq.getObjectAt(opt) instanceof ASN1Boolean) 074 { 075 certReq = ASN1Boolean.getInstance(seq.getObjectAt(opt)); 076 } 077 // extensions 078 else if (seq.getObjectAt(opt) instanceof ASN1TaggedObject) 079 { 080 ASN1TaggedObject tagged = (ASN1TaggedObject)seq.getObjectAt(opt); 081 if (tagged.getTagNo() == 0) 082 { 083 extensions = Extensions.getInstance(tagged, false); 084 } 085 } 086 } 087 } 088 089 public TimeStampReq( 090 MessageImprint messageImprint, 091 ASN1ObjectIdentifier tsaPolicy, 092 ASN1Integer nonce, 093 ASN1Boolean certReq, 094 Extensions extensions) 095 { 096 // default 097 version = new ASN1Integer(1); 098 099 this.messageImprint = messageImprint; 100 this.tsaPolicy = tsaPolicy; 101 this.nonce = nonce; 102 this.certReq = certReq; 103 this.extensions = extensions; 104 } 105 106 public ASN1Integer getVersion() 107 { 108 return version; 109 } 110 111 public MessageImprint getMessageImprint() 112 { 113 return messageImprint; 114 } 115 116 public ASN1ObjectIdentifier getReqPolicy() 117 { 118 return tsaPolicy; 119 } 120 121 public ASN1Integer getNonce() 122 { 123 return nonce; 124 } 125 126 public ASN1Boolean getCertReq() 127 { 128 return certReq; 129 } 130 131 public Extensions getExtensions() 132 { 133 return extensions; 134 } 135 136 /** 137 * <pre> 138 * TimeStampReq ::= SEQUENCE { 139 * version INTEGER { v1(1) }, 140 * messageImprint MessageImprint, 141 * --a hash algorithm OID and the hash value of the data to be 142 * --time-stamped 143 * reqPolicy TSAPolicyId OPTIONAL, 144 * nonce INTEGER OPTIONAL, 145 * certReq BOOLEAN DEFAULT FALSE, 146 * extensions [0] IMPLICIT Extensions OPTIONAL 147 * } 148 * </pre> 149 */ 150 public ASN1Primitive toASN1Primitive() 151 { 152 ASN1EncodableVector v = new ASN1EncodableVector(); 153 154 v.add(version); 155 v.add(messageImprint); 156 157 if (tsaPolicy != null) 158 { 159 v.add(tsaPolicy); 160 } 161 162 if (nonce != null) 163 { 164 v.add(nonce); 165 } 166 167 if (certReq != null && certReq.isTrue()) 168 { 169 v.add(certReq); 170 } 171 172 if (extensions != null) 173 { 174 v.add(new DERTaggedObject(false, 0, extensions)); 175 } 176 177 return new DERSequence(v); 178 } 179}