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