1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or more contributor license agreements.  See the NOTICE file
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed with this work for additional information
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * regarding copyright ownership.  The ASF licenses this file
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to you under the Apache License, Version 2.0 (the
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * "License"); you may not use this file except in compliance
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * with the License.  You may obtain a copy of the License at
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *   http://www.apache.org/licenses/LICENSE-2.0
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * software distributed under the License is distributed on an
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * KIND, either express or implied.  See the License for the
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specific language governing permissions and limitations
17f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * under the License.
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.x509.tsp;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Date;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Boolean;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Explicit;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1GeneralizedTime;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Implicit;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Integer;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Oid;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Sequence;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Type;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.BerInputStream;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ObjectIdentifier;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.Extensions;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.GeneralName;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
38f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * As defined in Time-Stamp Protocol (TSP)
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (http://www.ietf.org/rfc/rfc3161.txt)
40f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * TSTInfo ::= SEQUENCE  {
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *    version                      INTEGER  { v1(1) },
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *    policy                       TSAPolicyId,
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *    messageImprint               MessageImprint,
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *      -- MUST have the same value as the similar field in
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *      -- TimeStampReq
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *    serialNumber                 INTEGER,
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     -- Time-Stamping users MUST be ready to accommodate integers
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     -- up to 160 bits.
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *    genTime                      GeneralizedTime,
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *    accuracy                     Accuracy                 OPTIONAL,
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *    ordering                     BOOLEAN             DEFAULT FALSE,
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *    nonce                        INTEGER                  OPTIONAL,
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *      -- MUST be present if the similar field was present
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *      -- in TimeStampReq.  In that case it MUST have the same value.
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *    tsa                          [0] GeneralName          OPTIONAL,
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *    extensions                   [1] IMPLICIT Extensions   OPTIONAL
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * }
59f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * TSAPolicyId ::= OBJECT IDENTIFIER
61f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
62f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * "tsa [0] GeneralName OPTIONAL" is EXPLICIT and the word EXPLICIT is omitted.
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class TSTInfo {
65f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final int version;
67f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final String policy;
69f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final MessageImprint messageImprint;
71f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final BigInteger serialNumber;
73f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final Date genTime;
75f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final int [] accuracy;
77f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final Boolean ordering;
79f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final BigInteger nonce;
81f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final GeneralName tsa;
83f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final Extensions extensions;
85f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public TSTInfo(int version, String policy, MessageImprint messageImprint,
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            BigInteger serialNumber, Date genTime, int[] accuracy,
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Boolean ordering, BigInteger nonce, GeneralName tsa,
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Extensions extensions) {
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.version = version;
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.policy = policy;
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.messageImprint = messageImprint;
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.serialNumber = serialNumber;
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.genTime = genTime;
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.accuracy = accuracy;
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.ordering = ordering;
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.nonce = nonce;
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.tsa = tsa;
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.extensions = extensions;
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
101f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String toString() {
1032f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        StringBuilder res = new StringBuilder();
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("-- TSTInfo:");
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\nversion:  ");
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append(version);
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\npolicy:  ");
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append(policy);
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\nmessageImprint:  ");
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append(messageImprint);
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\nserialNumber:  ");
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append(serialNumber);
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\ngenTime:  ");
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append(genTime);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\naccuracy:  ");
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (accuracy != null) {
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            res.append(accuracy[0] + " sec, " + accuracy[1] + " millis, "
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + accuracy[2] + " micros");
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\nordering:  ");
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append(ordering);
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\nnonce:  ");
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append(nonce);
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\ntsa:  ");
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append(tsa);
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\nextensions:  ");
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append(extensions);
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        res.append("\n-- TSTInfo End\n");
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return res.toString();
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return Returns the accuracy.
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int[] getAccuracy() {
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return accuracy;
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return Returns the extensions.
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Extensions getExtensions() {
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return extensions;
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return Returns the genTime.
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Date getGenTime() {
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return genTime;
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return Returns the messageImprint.
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public MessageImprint getMessageImprint() {
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return messageImprint;
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return Returns the nonce.
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public BigInteger getNonce() {
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return nonce;
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return Returns the ordering.
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Boolean getOrdering() {
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return ordering;
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return Returns the policy.
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getPolicy() {
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return policy;
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return Returns the serialNumber.
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public BigInteger getSerialNumber() {
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return serialNumber;
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return Returns the tsa.
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public GeneralName getTsa() {
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return tsa;
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return Returns the version.
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getVersion() {
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return version;
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         Accuracy ::= SEQUENCE {
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                seconds        INTEGER           OPTIONAL,
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                millis     [0] INTEGER  (1..999) OPTIONAL,
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                micros     [1] INTEGER  (1..999) OPTIONAL  }
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final ASN1Sequence ACCURACY
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            = new ASN1Sequence(new ASN1Type[] {
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ASN1Integer.getInstance(),
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ASN1Integer.getInstance(),
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ASN1Integer.getInstance()
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }) {
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        {
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setOptional(0);
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setOptional(1);
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setOptional(2);
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Object getDecodedObject(BerInputStream in) {
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object[] values = (Object[]) in.content;
222f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int [] accuracy = new int [3];
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int i = 0; i < 3; i++) {
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (values[i] != null) {
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    accuracy[i] = ASN1Integer.toIntValue(values[i]);
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    if (i > 0 && (accuracy[i] < 0 || accuracy[i] > 999)) {
228897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes                        throw new RuntimeException("Time-stamp accuracy value is incorrect: " + accuracy[i]);
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    }
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return accuracy;
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
234f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected void getValues(Object object, Object[] values) {
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int [] accuracy = (int []) object;
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int i = 0; i < 3; i++) {
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (i > 0 && (accuracy[i] < 0 || accuracy[i] > 999)) {
239897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes                    throw new RuntimeException("Time-stamp accuracy value is incorrect: " + accuracy[i]);
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                values[i] = BigInteger.valueOf(accuracy[i]).toByteArray();
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    };
245f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
246f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    public static final ASN1Sequence ASN1 = new ASN1Sequence(new ASN1Type[] {
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ASN1Integer.getInstance(),              // version
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ASN1Oid.getInstance(),                  // policy
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            MessageImprint.ASN1,                    // messageImprint
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ASN1Integer.getInstance(),              // serialNumber
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ASN1GeneralizedTime.getInstance(),      // genTime
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ACCURACY,                               // accuracy
253f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            ASN1Boolean.getInstance(),              // ordering
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ASN1Integer.getInstance(),              // nonce
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ASN1Explicit(0, GeneralName.ASN1),  // tsa
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ASN1Implicit(1, Extensions.ASN1) }) {// extensions
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        {
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setOptional(5);
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setDefault(Boolean.FALSE, 6);
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setOptional(7);
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setOptional(8);
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setOptional(9);
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Object getDecodedObject(BerInputStream in) {
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Object[] values = (Object[]) in.content;
267f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            BigInteger nonce = (values[7] == null) ? null : new BigInteger(
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (byte[]) values[7]);
270f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new TSTInfo(
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ASN1Integer.toIntValue(values[0]),
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ObjectIdentifier.toString((int[]) values[1]),
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (MessageImprint) values[2],
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger((byte[]) values[3]),
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (Date) values[4],
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (int []) values[5],
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (Boolean) values[6],
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    nonce,
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (GeneralName) values[8],
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (Extensions) values[9]);
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected void getValues(Object object, Object[] values) {
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TSTInfo info = (TSTInfo) object;
286f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            values[0] = ASN1Integer.fromIntValue(info.version);
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            values[1] = ObjectIdentifier.toIntArray(info.policy);
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            values[2] = info.messageImprint;
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            values[3] = info.serialNumber.toByteArray();
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            values[4] = info.genTime;
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            values[5] = info.accuracy;
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            values[6] = info.ordering;
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            values[7] = (info.nonce == null) ? null : info.nonce.toByteArray();
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            values[8] = info.tsa;
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            values[9] = info.extensions;
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    };
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
300