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