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