OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / libcore / luni / src / main / java / org / apache / harmony / security / x509 / tsp / PKIStatusInfo.java
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements.  See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership.  The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License.  You may obtain a copy of the License at
9  *
10  *   http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied.  See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19
20 package org.apache.harmony.security.x509.tsp;
21
22 import java.math.BigInteger;
23 import java.util.List;
24 import org.apache.harmony.security.asn1.ASN1BitString;
25 import org.apache.harmony.security.asn1.ASN1Integer;
26 import org.apache.harmony.security.asn1.ASN1Sequence;
27 import org.apache.harmony.security.asn1.ASN1SequenceOf;
28 import org.apache.harmony.security.asn1.ASN1StringType;
29 import org.apache.harmony.security.asn1.ASN1Type;
30 import org.apache.harmony.security.asn1.BerInputStream;
31 import org.apache.harmony.security.asn1.BitString;
32
33
34 /**
35  * As defined in Time-Stamp Protocol (TSP)
36  * (http://www.ietf.org/rfc/rfc3161.txt)
37  *
38  * PKIStatusInfo ::= SEQUENCE {
39  *    status PKIStatus,
40  *    statusString PKIFreeText OPTIONAL,
41  *    failInfo PKIFailureInfo OPTIONAL
42  * }
43  *
44  */
45 public class PKIStatusInfo {
46
47     private final PKIStatus status;
48
49     private final List statusString;
50
51     private final PKIFailureInfo failInfo;
52
53     public PKIStatusInfo(PKIStatus pKIStatus, List statusString,
54             PKIFailureInfo failInfo) {
55         this.status = pKIStatus;
56         this.statusString = statusString;
57         this.failInfo = failInfo;
58     }
59
60     public String toString(){
61         StringBuilder res = new StringBuilder();
62         res.append("-- PKIStatusInfo:");
63         res.append("\nPKIStatus : ");
64         res.append(status);
65         res.append("\nstatusString:  ");
66         res.append(statusString);
67         res.append("\nfailInfo:  ");
68         res.append(failInfo);
69         res.append("\n-- PKIStatusInfo End\n");
70         return res.toString();
71     }
72
73     /**
74      * @return Returns the failInfo.
75      */
76     public PKIFailureInfo getFailInfo() {
77         return failInfo;
78     }
79
80     /**
81      * @return Returns the pKIStatus.
82      */
83     public PKIStatus getStatus() {
84         return status;
85     }
86
87     /**
88      * @return Returns the statusString.
89      */
90     public List getStatusString() {
91         return statusString;
92     }
93
94     public static final ASN1Sequence ASN1 = new ASN1Sequence(new ASN1Type[] {
95         ASN1Integer.getInstance(),                      // status
96         new ASN1SequenceOf(ASN1StringType.UTF8STRING),  // statusString
97         ASN1BitString.getInstance() }) {                // failInfo
98         {
99             setOptional(1);
100             setOptional(2);
101         }
102
103         protected void getValues(Object object, Object[] values) {
104             PKIStatusInfo psi = (PKIStatusInfo) object;
105             values[0] = BigInteger.valueOf(psi.status.getStatus())
106                     .toByteArray();
107             values[1] = psi.statusString;
108             if (psi.failInfo != null) {
109                 // set the needed bit in the bit string
110                 boolean[] failInfoBoolArray = new boolean[PKIFailureInfo
111                         .getMaxValue()];
112                 failInfoBoolArray[psi.failInfo.getValue()] = true;
113                 values[2] = new BitString(failInfoBoolArray);
114             } else {
115                 values[2] = null;
116             }
117         }
118
119         protected Object getDecodedObject(BerInputStream in) {
120             Object[] values = (Object[]) in.content;
121
122             int failInfoValue = -1;
123             if (values[2] != null) {
124                 boolean[] failInfoBoolArray = ((BitString) values[2]).toBooleanArray();
125                 for (int i = 0; i < failInfoBoolArray.length; i++) {
126                     if (failInfoBoolArray[i]) {
127                         failInfoValue = i;
128                         break;
129                     }
130                 }
131             }
132             return new PKIStatusInfo(
133                     PKIStatus.getInstance(ASN1Integer.toIntValue(values[0])),
134                     (List)values[1],
135                     PKIFailureInfo.getInstance(failInfoValue));
136         }
137     };
138 }
139