You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ml...@apache.org on 2006/11/23 13:32:35 UTC
svn commit: r478549 - in
/harmony/enhanced/classlib/trunk/modules/security/src:
main/java/common/org/apache/harmony/security/x509/tsp/
test/impl/java/org/apache/harmony/security/tests/x509/tsp/
Author: mloenko
Date: Thu Nov 23 04:32:33 2006
New Revision: 478549
URL: http://svn.apache.org/viewvc?view=rev&rev=478549
Log:
applied patch for HARMONY-2260
[classlib][security] Add time-stamp protocol implementation to org.apache.harmony.security.x509 package
Added:
harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/
harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/MessageImprint.java (with props)
harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIFailureInfo.java (with props)
harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatus.java (with props)
harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatusInfo.java (with props)
harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TSTInfo.java (with props)
harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampReq.java (with props)
harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampResp.java (with props)
harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/
harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/PKIStatusInfoTest.java (with props)
harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TSTInfoTest.java (with props)
harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampReqTest.java (with props)
harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampRespTest.java (with props)
Added: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/MessageImprint.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/MessageImprint.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/MessageImprint.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/MessageImprint.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.harmony.security.x509.tsp;
+
+import org.apache.harmony.security.asn1.ASN1OctetString;
+import org.apache.harmony.security.asn1.ASN1Sequence;
+import org.apache.harmony.security.asn1.ASN1Type;
+import org.apache.harmony.security.asn1.BerInputStream;
+import org.apache.harmony.security.x509.AlgorithmIdentifier;
+
+/**
+ * As defined in Time-Stamp Protocol (TSP)
+ * (http://www.ietf.org/rfc/rfc3161.txt)
+ *
+ * MessageImprint ::= SEQUENCE {
+ * hashAlgorithm AlgorithmIdentifier,
+ * hashedMessage OCTET STRING
+ * }
+ *
+ */
+public class MessageImprint {
+ private final AlgorithmIdentifier algId;
+ private final byte [] hashedMessage;
+
+ public MessageImprint(AlgorithmIdentifier algId, byte [] hashedMessage){
+ this.algId = algId;
+ this.hashedMessage = hashedMessage;
+ }
+
+ public static final ASN1Sequence ASN1 = new ASN1Sequence(new ASN1Type[] {
+ AlgorithmIdentifier.ASN1,
+ ASN1OctetString.getInstance()}) {
+
+ protected Object getDecodedObject(BerInputStream in) {
+ Object[] values = (Object[]) in.content;
+ return new MessageImprint(
+ (AlgorithmIdentifier)values[0],
+ (byte[])values[1]);
+ }
+
+ protected void getValues(Object object, Object[] values) {
+ MessageImprint mi = (MessageImprint) object;
+ values[0] = mi.algId;
+ values[1] = mi.hashedMessage;
+ }
+ };
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/MessageImprint.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIFailureInfo.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIFailureInfo.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIFailureInfo.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIFailureInfo.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.harmony.security.x509.tsp;
+
+import java.security.InvalidParameterException;
+
+/**
+ Corresponds to PKIFailureInfo structure.
+ See RFC 3161 -
+ Internet X.509 Public Key Infrastructure
+ Time-Stamp Protocol (TSP)
+ http://www.ietf.org/rfc/rfc3161.txt)
+
+ PKIFailureInfo ::= BIT STRING {
+ badAlg (0),
+ -- unrecognized or unsupported Algorithm Identifier
+ badRequest (2),
+ -- transaction not permitted or supported
+ badDataFormat (5),
+ -- the data submitted has the wrong format
+ timeNotAvailable (14),
+ -- the TSA's time source is not available
+ unacceptedPolicy (15),
+ -- the requested TSA policy is not supported by the TSA
+ unacceptedExtension (16),
+ -- the requested extension is not supported by the TSA
+ addInfoNotAvailable (17)
+ -- the additional information requested could not be understood
+ -- or is not available
+ systemFailure (25)
+ -- the request cannot be handled due to system failure }
+
+ The value of PKIFailureInfo can take only one of the values,
+ so it is represenred by an integer here.
+ */
+public enum PKIFailureInfo {
+ /**
+ * Unrecognized algorithm ID
+ */
+ BAD_ALG(0),
+
+ /**
+ * Transaction is not supported
+ */
+ BAD_REQUEST(2),
+
+ /**
+ * Data format is wrong
+ */
+ BAD_DATA_FORMAT(5),
+
+ /**
+ * TSA cannot use the time source
+ */
+ TIME_NOT_AVAILABLE(14),
+
+ /**
+ * The policy is not supported
+ */
+ UNACCEPTED_POLICY(15),
+
+ /**
+ * The extension is not supported
+ */
+ UNACCEPTED_EXTENSION(16),
+
+ /**
+ * The requested additional info is not available
+ */
+ ADD_INFO_NOT_AVAILABLE(17),
+
+ /**
+ * System failure has occured
+ */
+ SYSTEM_FAILURE(25);
+
+
+ private final int value;
+
+ private static int maxValue;
+
+ PKIFailureInfo(int value) {
+ this.value = value;
+ }
+
+ /**
+ * @return int value of the failure
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ * @return maximum of values in the enum
+ */
+ public static int getMaxValue() {
+ if (maxValue == 0) {
+ for (PKIFailureInfo cur : values())
+ if (cur.value > maxValue) {
+ maxValue = cur.value;
+ }
+ }
+ return maxValue;
+ }
+
+ /**
+ * @param value
+ * @return
+ */
+ public static PKIFailureInfo getInstance(int value) {
+ for (PKIFailureInfo info : values()){
+ if (value == info.value) {
+ return info;
+ }
+ }
+ throw new InvalidParameterException("Unknown PKIFailureInfo value");
+ }
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIFailureInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatus.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatus.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatus.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatus.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.harmony.security.x509.tsp;
+
+import java.security.InvalidParameterException;
+
+/**
+ Corresponds to PKIStatus structure.
+ See RFC 3161 -
+ Internet X.509 Public Key Infrastructure
+ Time-Stamp Protocol (TSP)
+ http://www.ietf.org/rfc/rfc3161.txt)
+
+ PKIStatus ::= INTEGER {
+ granted (0),
+ -- when the PKIStatus contains the value zero a TimeStampToken, as
+ requested, is present.
+ grantedWithMods (1),
+ -- when the PKIStatus contains the value one a TimeStampToken,
+ with modifications, is present.
+ rejection (2),
+ waiting (3),
+ revocationWarning (4),
+ -- this message contains a warning that a revocation is
+ -- imminent
+ revocationNotification (5)
+ -- notification that a revocation has occurred }
+ */
+public enum PKIStatus {
+ /**
+ * TimeStampToken is present as requested
+ */
+ GRANTED(0),
+ /**
+ * TimeStampToken is present with modifications
+ */
+ GRANTED_WITH_MODS(1),
+ /**
+ * rejected
+ */
+ REJECTION(2),
+ /**
+ * waiting
+ */
+ WAITING(3),
+ /**
+ * revocation time comes soon
+ */
+ REVOCATION_WARNING(4),
+ /**
+ * revoked
+ */
+ REVOCATION_NOTIFICATION(5);
+
+ private final int status;
+ PKIStatus(int status) {
+ this.status = status;
+ }
+
+ /**
+ * @return int value of the status
+ */
+ public int getStatus(){
+ return status;
+ }
+
+ public static PKIStatus getInstance(int status) {
+ for (PKIStatus curStatus : values()) {
+ if (status == curStatus.status) {
+ return curStatus;
+ }
+ }
+ throw new InvalidParameterException("Unknown PKIStatus value");
+ }
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatus.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatusInfo.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatusInfo.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatusInfo.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatusInfo.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.harmony.security.x509.tsp;
+
+import java.math.BigInteger;
+import java.util.List;
+
+import org.apache.harmony.security.asn1.ASN1BitString;
+import org.apache.harmony.security.asn1.ASN1Integer;
+import org.apache.harmony.security.asn1.ASN1Sequence;
+import org.apache.harmony.security.asn1.ASN1SequenceOf;
+import org.apache.harmony.security.asn1.ASN1StringType;
+import org.apache.harmony.security.asn1.ASN1Type;
+import org.apache.harmony.security.asn1.BerInputStream;
+import org.apache.harmony.security.asn1.BitString;
+
+
+/**
+ * As defined in Time-Stamp Protocol (TSP)
+ * (http://www.ietf.org/rfc/rfc3161.txt)
+ *
+ * PKIStatusInfo ::= SEQUENCE {
+ * status PKIStatus,
+ * statusString PKIFreeText OPTIONAL,
+ * failInfo PKIFailureInfo OPTIONAL
+ * }
+ *
+ */
+public class PKIStatusInfo {
+
+ private final PKIStatus status;
+
+ private final List statusString;
+
+ private final PKIFailureInfo failInfo;
+
+ public PKIStatusInfo(PKIStatus pKIStatus, List statusString,
+ PKIFailureInfo failInfo) {
+ this.status = pKIStatus;
+ this.statusString = statusString;
+ this.failInfo = failInfo;
+ }
+
+ public String toString(){
+ StringBuffer res = new StringBuffer();
+ res.append("-- PKIStatusInfo:");
+ res.append("\nPKIStatus : ");
+ res.append(status);
+ res.append("\nstatusString: ");
+ res.append(statusString);
+ res.append("\nfailInfo: ");
+ res.append(failInfo);
+ res.append("\n-- PKIStatusInfo End\n");
+ return res.toString();
+ }
+
+ /**
+ * @return Returns the failInfo.
+ */
+ public PKIFailureInfo getFailInfo() {
+ return failInfo;
+ }
+
+ /**
+ * @return Returns the pKIStatus.
+ */
+ public PKIStatus getStatus() {
+ return status;
+ }
+
+ /**
+ * @return Returns the statusString.
+ */
+ public List getStatusString() {
+ return statusString;
+ }
+
+ public static final ASN1Sequence ASN1 = new ASN1Sequence(new ASN1Type[] {
+ ASN1Integer.getInstance(), // status
+ new ASN1SequenceOf(ASN1StringType.UTF8STRING), // statusString
+ ASN1BitString.getInstance() }) { // failInfo
+ {
+ setOptional(1);
+ setOptional(2);
+ }
+
+ protected void getValues(Object object, Object[] values) {
+ PKIStatusInfo psi = (PKIStatusInfo) object;
+ values[0] = BigInteger.valueOf(psi.status.getStatus())
+ .toByteArray();
+ values[1] = psi.statusString;
+ if (psi.failInfo != null) {
+ // set the needed bit in the bit string
+ boolean[] failInfoBoolArray = new boolean[PKIFailureInfo
+ .getMaxValue()];
+ failInfoBoolArray[psi.failInfo.getValue()] = true;
+ values[2] = new BitString(failInfoBoolArray);
+ } else {
+ values[2] = null;
+ }
+ }
+
+ protected Object getDecodedObject(BerInputStream in) {
+ Object[] values = (Object[]) in.content;
+
+ int failInfoValue = -1;
+ if (values[2] != null) {
+ boolean[] failInfoBoolArray = (values[2] == null) ? null
+ : ((BitString) values[2]).toBooleanArray();
+ for (int i = 0; i < failInfoBoolArray.length; i++) {
+ if (failInfoBoolArray[i]) {
+ failInfoValue = i;
+ break;
+ }
+ }
+ }
+ return new PKIStatusInfo(
+ PKIStatus.getInstance(ASN1Integer.toIntValue(values[0])),
+ (List)values[1],
+ PKIFailureInfo.getInstance(failInfoValue));
+ }
+ };
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/PKIStatusInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TSTInfo.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TSTInfo.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TSTInfo.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TSTInfo.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,306 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.harmony.security.x509.tsp;
+
+import java.math.BigInteger;
+import java.util.Date;
+
+import org.apache.harmony.security.asn1.ASN1Boolean;
+import org.apache.harmony.security.asn1.ASN1Explicit;
+import org.apache.harmony.security.asn1.ASN1GeneralizedTime;
+import org.apache.harmony.security.asn1.ASN1Implicit;
+import org.apache.harmony.security.asn1.ASN1Integer;
+import org.apache.harmony.security.asn1.ASN1Oid;
+import org.apache.harmony.security.asn1.ASN1Sequence;
+import org.apache.harmony.security.asn1.ASN1Type;
+import org.apache.harmony.security.asn1.BerInputStream;
+import org.apache.harmony.security.asn1.ObjectIdentifier;
+import org.apache.harmony.security.internal.nls.Messages;
+import org.apache.harmony.security.x509.Extensions;
+import org.apache.harmony.security.x509.GeneralName;
+
+/**
+ * As defined in Time-Stamp Protocol (TSP)
+ * (http://www.ietf.org/rfc/rfc3161.txt)
+ *
+ * TSTInfo ::= SEQUENCE {
+ * version INTEGER { v1(1) },
+ * policy TSAPolicyId,
+ * messageImprint MessageImprint,
+ * -- MUST have the same value as the similar field in
+ * -- TimeStampReq
+ * serialNumber INTEGER,
+ * -- Time-Stamping users MUST be ready to accommodate integers
+ * -- up to 160 bits.
+ * genTime GeneralizedTime,
+ * accuracy Accuracy OPTIONAL,
+ * ordering BOOLEAN DEFAULT FALSE,
+ * nonce INTEGER OPTIONAL,
+ * -- MUST be present if the similar field was present
+ * -- in TimeStampReq. In that case it MUST have the same value.
+ * tsa [0] GeneralName OPTIONAL,
+ * extensions [1] IMPLICIT Extensions OPTIONAL
+ * }
+ *
+ * TSAPolicyId ::= OBJECT IDENTIFIER
+ *
+ * "tsa [0] GeneralName OPTIONAL" is EXPLICIT and the word EXPLICIT is omitted.
+ */
+public class TSTInfo {
+
+ private final int version;
+
+ private final String policy;
+
+ private final MessageImprint messageImprint;
+
+ private final BigInteger serialNumber;
+
+ private final Date genTime;
+
+ private final int [] accuracy;
+
+ private final Boolean ordering;
+
+ private final BigInteger nonce;
+
+ private final GeneralName tsa;
+
+ private final Extensions extensions;
+
+ public TSTInfo(int version, String policy, MessageImprint messageImprint,
+ BigInteger serialNumber, Date genTime, int[] accuracy,
+ Boolean ordering, BigInteger nonce, GeneralName tsa,
+ Extensions extensions) {
+ this.version = version;
+ this.policy = policy;
+ this.messageImprint = messageImprint;
+ this.serialNumber = serialNumber;
+ this.genTime = genTime;
+ this.accuracy = accuracy;
+ this.ordering = ordering;
+ this.nonce = nonce;
+ this.tsa = tsa;
+ this.extensions = extensions;
+ }
+
+ public String toString() {
+ StringBuffer res = new StringBuffer();
+ res.append("-- TSTInfo:");
+ res.append("\nversion: ");
+ res.append(version);
+ res.append("\npolicy: ");
+ res.append(policy);
+ res.append("\nmessageImprint: ");
+ res.append(messageImprint);
+ res.append("\nserialNumber: ");
+ res.append(serialNumber);
+ res.append("\ngenTime: ");
+ res.append(genTime);
+ res.append("\naccuracy: ");
+ if (accuracy != null) {
+ res.append(accuracy[0] + " sec, " + accuracy[1] + " millis, "
+ + accuracy[2] + " micros");
+ }
+ res.append("\nordering: ");
+ res.append(ordering);
+ res.append("\nnonce: ");
+ res.append(nonce);
+ res.append("\ntsa: ");
+ res.append(tsa);
+ res.append("\nextensions: ");
+ res.append(extensions);
+ res.append("\n-- TSTInfo End\n");
+ return res.toString();
+ }
+
+ /**
+ * @return Returns the accuracy.
+ */
+ public int[] getAccuracy() {
+ return accuracy;
+ }
+
+ /**
+ * @return Returns the extensions.
+ */
+ public Extensions getExtensions() {
+ return extensions;
+ }
+
+ /**
+ * @return Returns the genTime.
+ */
+ public Date getGenTime() {
+ return genTime;
+ }
+
+ /**
+ * @return Returns the messageImprint.
+ */
+ public MessageImprint getMessageImprint() {
+ return messageImprint;
+ }
+
+ /**
+ * @return Returns the nonce.
+ */
+ public BigInteger getNonce() {
+ return nonce;
+ }
+
+ /**
+ * @return Returns the ordering.
+ */
+ public Boolean getOrdering() {
+ return ordering;
+ }
+
+ /**
+ * @return Returns the policy.
+ */
+ public String getPolicy() {
+ return policy;
+ }
+
+ /**
+ * @return Returns the serialNumber.
+ */
+ public BigInteger getSerialNumber() {
+ return serialNumber;
+ }
+
+ /**
+ * @return Returns the tsa.
+ */
+ public GeneralName getTsa() {
+ return tsa;
+ }
+
+ /**
+ * @return Returns the version.
+ */
+ public int getVersion() {
+ return version;
+ }
+
+ /**
+ Accuracy ::= SEQUENCE {
+ seconds INTEGER OPTIONAL,
+ millis [0] INTEGER (1..999) OPTIONAL,
+ micros [1] INTEGER (1..999) OPTIONAL }
+ */
+ public static final ASN1Sequence ACCURACY
+ = new ASN1Sequence(new ASN1Type[] {
+ ASN1Integer.getInstance(),
+ ASN1Integer.getInstance(),
+ ASN1Integer.getInstance()
+ }) {
+ {
+ setOptional(0);
+ setOptional(1);
+ setOptional(2);
+ }
+
+ protected Object getDecodedObject(BerInputStream in) {
+ Object[] values = (Object[]) in.content;
+
+ int [] accuracy = new int [3];
+ for (int i = 0; i < 3; i++) {
+ if (values[i] != null) {
+ accuracy[i] = ASN1Integer.toIntValue(values[i]);
+ if (i > 0 && (accuracy[i] < 0 || accuracy[i] > 999)) {
+ throw new RuntimeException(
+ // Msg: "Time-stamp accuracy value is incorrect: {}"
+ Messages.getString("security.1A3", accuracy[i]));
+ }
+ }
+ }
+ return accuracy;
+ }
+
+ protected void getValues(Object object, Object[] values) {
+ int [] accuracy = (int []) object;
+ for (int i = 0; i < 3; i++) {
+ if (i > 0 && (accuracy[i] < 0 || accuracy[i] > 999)) {
+ throw new RuntimeException(
+ // Msg: "Time-stamp accuracy value is incorrect: {0}"
+ Messages.getString("security.1A3", accuracy[i]));
+ }
+ values[i] = BigInteger.valueOf(accuracy[i]).toByteArray();
+ }
+ }
+ };
+
+ public static final ASN1Sequence ASN1 = new ASN1Sequence(new ASN1Type[] {
+ ASN1Integer.getInstance(), // version
+ ASN1Oid.getInstance(), // policy
+ MessageImprint.ASN1, // messageImprint
+ ASN1Integer.getInstance(), // serialNumber
+ ASN1GeneralizedTime.getInstance(), // genTime
+ ACCURACY, // accuracy
+ ASN1Boolean.getInstance(), // ordering
+ ASN1Integer.getInstance(), // nonce
+ new ASN1Explicit(0, GeneralName.ASN1), // tsa
+ new ASN1Implicit(1, Extensions.ASN1) }) {// extensions
+ {
+ setOptional(5);
+ setDefault(Boolean.FALSE, 6);
+ setOptional(7);
+ setOptional(8);
+ setOptional(9);
+ }
+
+ protected Object getDecodedObject(BerInputStream in) {
+ Object[] values = (Object[]) in.content;
+
+ BigInteger nonce = (values[7] == null) ? null : new BigInteger(
+ (byte[]) values[7]);
+
+ return new TSTInfo(
+ ASN1Integer.toIntValue(values[0]),
+ ObjectIdentifier.toString((int[]) values[1]),
+ (MessageImprint) values[2],
+ new BigInteger((byte[]) values[3]),
+ (Date) values[4],
+ (int []) values[5],
+ (Boolean) values[6],
+ nonce,
+ (GeneralName) values[8],
+ (Extensions) values[9]);
+ }
+
+ protected void getValues(Object object, Object[] values) {
+ TSTInfo info = (TSTInfo) object;
+
+ values[0] = ASN1Integer.fromIntValue(info.version);
+ values[1] = ObjectIdentifier.toIntArray(info.policy);
+ values[2] = info.messageImprint;
+ values[3] = info.serialNumber.toByteArray();
+ values[4] = info.genTime;
+ values[5] = info.accuracy;
+ values[6] = info.ordering;
+ values[7] = (info.nonce == null) ? null : info.nonce.toByteArray();
+ values[8] = info.tsa;
+ values[9] = info.extensions;
+ }
+ };
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TSTInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampReq.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampReq.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampReq.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampReq.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,215 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.harmony.security.x509.tsp;
+
+import java.math.BigInteger;
+
+import org.apache.harmony.security.asn1.ASN1Boolean;
+import org.apache.harmony.security.asn1.ASN1Implicit;
+import org.apache.harmony.security.asn1.ASN1Integer;
+import org.apache.harmony.security.asn1.ASN1Oid;
+import org.apache.harmony.security.asn1.ASN1Sequence;
+import org.apache.harmony.security.asn1.ASN1Type;
+import org.apache.harmony.security.asn1.BerInputStream;
+import org.apache.harmony.security.asn1.ObjectIdentifier;
+import org.apache.harmony.security.x509.Extensions;
+
+/**
+ * As defined in Time-Stamp Protocol (TSP)
+ * (http://www.ietf.org/rfc/rfc3161.txt)
+ *
+ * TimeStampReq ::= SEQUENCE {
+ * version INTEGER { v1(1) },
+ * messageImprint MessageImprint,
+ * --a hash algorithm OID and the hash value of the data to be
+ * --time-stamped
+ * reqPolicy TSAPolicyId OPTIONAL,
+ * nonce INTEGER OPTIONAL,
+ * certReq BOOLEAN DEFAULT FALSE,
+ * extensions [0] IMPLICIT Extensions OPTIONAL
+ * }
+ *
+ * TSAPolicyId ::= OBJECT IDENTIFIER
+ */
+public class TimeStampReq {
+ private final int version;
+
+ private final MessageImprint messageImprint;
+
+ private final String reqPolicy;
+
+ private final BigInteger nonce;
+
+ private final Boolean certReq;
+
+ private final Extensions extensions;
+
+ private byte [] encoding;
+
+ public TimeStampReq(int version, MessageImprint messageImprint,
+ String reqPolicy, BigInteger nonce, Boolean certReq,
+ Extensions extensions) {
+ this.version = version;
+ this.messageImprint = messageImprint;
+ this.reqPolicy = reqPolicy;
+ this.nonce = nonce;
+ this.certReq = certReq;
+ this.extensions = extensions;
+ }
+
+ private TimeStampReq(int version, MessageImprint messageImprint,
+ String reqPolicy, BigInteger nonce, Boolean certReq,
+ Extensions extensions, byte [] encoding) {
+ this (version, messageImprint, reqPolicy, nonce, certReq, extensions);
+ this.encoding = encoding;
+ }
+
+ public String toString() {
+ StringBuffer res = new StringBuffer();
+ res.append("-- TimeStampReq:");
+ res.append("\nversion : ");
+ res.append(version);
+ res.append("\nmessageImprint: ");
+ res.append(messageImprint);
+ res.append("\nreqPolicy: ");
+ res.append(reqPolicy);
+ res.append("\nnonce: ");
+ res.append(nonce);
+ res.append("\ncertReq: ");
+ res.append(certReq);
+ res.append("\nextensions: ");
+ res.append(extensions);
+ res.append("\n-- TimeStampReq End\n");
+ return res.toString();
+ }
+
+ /**
+ * Returns ASN.1 encoded form of this TimeStampReq.
+ * @return a byte array containing ASN.1 encoded form.
+ */
+ public byte [] getEncoded(){
+ if (encoding == null) {
+ encoding = ASN1.encode(this);
+ }
+ return encoding;
+ }
+
+ /**
+ * @return Returns the certReq.
+ */
+ public Boolean getCertReq() {
+ return certReq;
+ }
+
+ /**
+ * @return Returns the extensions.
+ */
+ public Extensions getExtensions() {
+ return extensions;
+ }
+
+ /**
+ * @return Returns the messageImprint.
+ */
+ public MessageImprint getMessageImprint() {
+ return messageImprint;
+ }
+
+ /**
+ * @return Returns the nonce.
+ */
+ public BigInteger getNonce() {
+ return nonce;
+ }
+
+ /**
+ * @return Returns the reqPolicy.
+ */
+ public String getReqPolicy() {
+ return reqPolicy;
+ }
+
+ /**
+ * @return Returns the version.
+ */
+ public int getVersion() {
+ return version;
+ }
+
+ public static final ASN1Sequence ASN1 = new ASN1Sequence(new ASN1Type[] {
+ ASN1Integer.getInstance(), // version
+ MessageImprint.ASN1, // messageImprint
+ ASN1Oid.getInstance(), // reqPolicy
+ ASN1Integer.getInstance(), // nonce
+ ASN1Boolean.getInstance(), // certReq
+ new ASN1Implicit(0, Extensions.ASN1)}) {// extensions
+
+ {
+ setDefault(Boolean.FALSE, 4);
+ setOptional(2);
+ setOptional(3);
+ setOptional(5);
+ }
+
+ protected Object getDecodedObject(BerInputStream in) {
+ Object[] values = (Object[]) in.content;
+
+ String objID = (values[2] == null) ? null : ObjectIdentifier
+ .toString((int[]) values[2]);
+ BigInteger nonce = (values[3] == null) ? null : new BigInteger(
+ (byte[]) values[3]);
+
+ if (values[5] == null) {
+ return new TimeStampReq(
+ ASN1Integer.toIntValue(values[0]),
+ (MessageImprint) values[1],
+ objID,
+ nonce,
+ (Boolean) values[4],
+ null,
+ in.getEncoded()
+ );
+ } else {
+ return new TimeStampReq(
+ ASN1Integer.toIntValue(values[0]),
+ (MessageImprint) values[1],
+ objID,
+ nonce,
+ (Boolean) values[4],
+ (Extensions) values[5],
+ in.getEncoded()
+ );
+ }
+ }
+
+ protected void getValues(Object object, Object[] values) {
+ TimeStampReq req = (TimeStampReq) object;
+ values[0] = ASN1Integer.fromIntValue(req.version);
+ values[1] = req.messageImprint;
+ values[2] = (req.reqPolicy == null) ? null : ObjectIdentifier
+ .toIntArray(req.reqPolicy);
+ values[3] = (req.nonce == null) ? null : req.nonce.toByteArray();
+ values[4] = (req.certReq == null) ? Boolean.FALSE : req.certReq;
+ values[5] = req.extensions;
+ }
+ };
+
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampReq.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampResp.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampResp.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampResp.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampResp.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.harmony.security.x509.tsp;
+
+import org.apache.harmony.security.asn1.ASN1Sequence;
+import org.apache.harmony.security.asn1.ASN1Type;
+import org.apache.harmony.security.asn1.BerInputStream;
+import org.apache.harmony.security.pkcs7.ContentInfo;
+
+/**
+ * As defined in Time-Stamp Protocol (TSP)
+ * (http://www.ietf.org/rfc/rfc3161.txt)
+ *
+ * TimeStampResp ::= SEQUENCE {
+ * status PKIStatusInfo,
+ * timeStampToken TimeStampToken OPTIONAL
+ * }
+ *
+ */
+public class TimeStampResp {
+
+ private final PKIStatusInfo status;
+
+ private final ContentInfo timeStampToken;
+
+ public TimeStampResp(PKIStatusInfo status, ContentInfo timeStampToken) {
+ this.status = status;
+ this.timeStampToken = timeStampToken;
+ }
+
+ public String toString(){
+ StringBuffer res = new StringBuffer();
+ res.append("-- TimeStampResp:");
+ res.append("\nstatus: ");
+ res.append(status);
+ res.append("\ntimeStampToken: ");
+ res.append(timeStampToken);
+ res.append("\n-- TimeStampResp End\n");
+ return res.toString();
+ }
+
+ /**
+ * @return Returns the status.
+ */
+ public PKIStatusInfo getStatus() {
+ return status;
+ }
+
+ /**
+ * @return Returns the timeStampToken.
+ */
+ public ContentInfo getTimeStampToken() {
+ return timeStampToken;
+ }
+
+ public static final ASN1Sequence ASN1 = new ASN1Sequence(new ASN1Type[] {
+ PKIStatusInfo.ASN1, // status
+ ContentInfo.ASN1}) { // timeStampToken
+
+ {
+ setOptional(1);
+ }
+
+ protected Object getDecodedObject(BerInputStream in) {
+ Object[] values = (Object[]) in.content;
+ return new TimeStampResp(
+ (PKIStatusInfo) values[0],
+ (ContentInfo) values[1]);
+ }
+
+ protected void getValues(Object object, Object[] values) {
+ TimeStampResp resp = (TimeStampResp) object;
+
+ values[0] = resp.status;
+ values[1] = resp.timeStampToken;
+ }
+ };
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/security/x509/tsp/TimeStampResp.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/PKIStatusInfoTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/PKIStatusInfoTest.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/PKIStatusInfoTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/PKIStatusInfoTest.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.security.tests.x509.tsp;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.harmony.security.x509.tsp.PKIFailureInfo;
+import org.apache.harmony.security.x509.tsp.PKIStatus;
+import org.apache.harmony.security.x509.tsp.PKIStatusInfo;
+
+import junit.framework.TestCase;
+
+public class PKIStatusInfoTest extends TestCase {
+
+ /**
+ * @throws IOException
+ * @tests 'org.apache.harmony.security.x509.tsp.PKIStatusInfo.getEncoded()'
+ */
+ public void testGetEncoded() throws IOException {
+ ArrayList statusStr = new ArrayList(2);
+ statusStr.add("one");
+ statusStr.add("two");
+ PKIStatusInfo info = new PKIStatusInfo(PKIStatus.REJECTION, statusStr,
+ PKIFailureInfo.BAD_DATA_FORMAT);
+ byte [] encoding = PKIStatusInfo.ASN1.encode(info);
+ PKIStatusInfo decoded = (PKIStatusInfo) PKIStatusInfo.ASN1
+ .decode(encoding);
+
+ assertEquals(info.getStatus(), decoded.getStatus());
+ List decodedStString = decoded.getStatusString();
+ assertNotNull(decodedStString);
+ assertEquals("one", decodedStString.get(0));
+ assertEquals("two", decodedStString.get(1));
+ assertEquals(info.getFailInfo(), decoded.getFailInfo());
+ }
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/PKIStatusInfoTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TSTInfoTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TSTInfoTest.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TSTInfoTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TSTInfoTest.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.security.tests.x509.tsp;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.security.x501.Name;
+import org.apache.harmony.security.x509.AlgorithmIdentifier;
+import org.apache.harmony.security.x509.Extension;
+import org.apache.harmony.security.x509.Extensions;
+import org.apache.harmony.security.x509.GeneralName;
+import org.apache.harmony.security.x509.tsp.MessageImprint;
+import org.apache.harmony.security.x509.tsp.TSTInfo;
+
+public class TSTInfoTest extends TestCase {
+
+ /**
+ * @throws IOException
+ * @tests 'org.apache.harmony.security.x509.tsp.TSTInfo.getEncoded()'
+ */
+ public void testGetEncoded() throws IOException {
+ // Unizeto CETRUM policy
+ String policy = "1.2.3.4.5";
+ // SHA1 OID as defined in RFC 3161
+ String sha1 = "1.3.14.3.2.26";
+ MessageImprint msgImprint = new MessageImprint(new AlgorithmIdentifier(
+ sha1), new byte[20]);
+ Date genTime = new Date();
+ BigInteger nonce = BigInteger.valueOf(1234567890L);
+ int[] accuracy = new int[] { 1, 0, 0 };
+ GeneralName tsa = new GeneralName(new Name("CN=AnAuthority"));
+ Extensions exts = new Extensions();
+ // Time-Stamping extension OID: as defined in RFC 3161
+ int[] timeStampingExtOID = new int[] { 1, 3, 6, 1, 5, 5, 7, 3, 8 };
+ byte[] timeStampingExtValue = new byte[] { (byte) 1, (byte) 2, (byte) 3 };
+ Extension ext = new Extension(timeStampingExtOID, true,
+ timeStampingExtValue);
+ exts.addExtension(ext);
+
+ TSTInfo info = new TSTInfo(1, policy, msgImprint, BigInteger.TEN,
+ genTime, accuracy, Boolean.FALSE, nonce, tsa, exts);
+
+ byte[] encoding = TSTInfo.ASN1.encode(info);
+ TSTInfo decoded = (TSTInfo) TSTInfo.ASN1.decode(encoding);
+
+ assertEquals("Decoded version is incorrect", info.getVersion(), decoded
+ .getVersion());
+ assertEquals("Decoded policy is incorrect", policy, decoded.getPolicy());
+ assertTrue("Decoded messageImprint is incorrect", Arrays.equals(
+ MessageImprint.ASN1.encode(msgImprint), MessageImprint.ASN1
+ .encode(decoded.getMessageImprint())));
+ assertEquals("Decoded serialNumber is incorrect", BigInteger.TEN,
+ decoded.getSerialNumber());
+ assertEquals("Decoded genTime is incorrect", genTime, decoded
+ .getGenTime());
+ assertTrue("Decoded accuracy is incorrect", Arrays.equals(accuracy,
+ decoded.getAccuracy()));
+ assertFalse("Decoded ordering is incorrect", decoded.getOrdering()
+ .booleanValue());
+ assertEquals("Decoded nonce is incorrect", nonce, decoded.getNonce());
+ assertEquals("Decoded tsa is incorrect", tsa, decoded.getTsa());
+ assertEquals("Decoded extensions is incorrect", exts, decoded
+ .getExtensions());
+ }
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TSTInfoTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampReqTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampReqTest.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampReqTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampReqTest.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.security.tests.x509.tsp;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.Arrays;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.security.x509.AlgorithmIdentifier;
+import org.apache.harmony.security.x509.Extension;
+import org.apache.harmony.security.x509.Extensions;
+import org.apache.harmony.security.x509.tsp.MessageImprint;
+import org.apache.harmony.security.x509.tsp.TimeStampReq;
+
+public class TimeStampReqTest extends TestCase {
+
+ /**
+ * @throws IOException
+ * @tests 'org.apache.harmony.security.x509.tsp.TimeStampReq.getEncoded()'
+ */
+ public void testTimeStampReq() throws IOException {
+ // SHA1 OID
+ MessageImprint msgImprint = new MessageImprint(new AlgorithmIdentifier(
+ "1.3.14.3.2.26"), new byte[20]);
+ String reqPolicy = "1.2.3.4.5";
+ BigInteger nonce = BigInteger.valueOf(1234567890L);
+ Extensions exts = new Extensions();
+ int[] extOID = new int[] { 1, 2, 3, 2, 1 };
+ byte[] extValue = new byte[] { (byte) 1, (byte) 2, (byte) 3 };
+ Extension ext = new Extension(extOID, false, extValue);
+ exts.addExtension(ext);
+
+ TimeStampReq req = new TimeStampReq(1, msgImprint, reqPolicy,
+ nonce, Boolean.FALSE, exts);
+ byte[] encoding = req.getEncoded();
+ TimeStampReq decoded = (TimeStampReq) TimeStampReq.ASN1
+ .decode(encoding);
+ assertEquals("Decoded version is incorrect", req.getVersion(), decoded
+ .getVersion());
+ assertTrue("Decoded messageImprint is incorrect", Arrays.equals(
+ MessageImprint.ASN1.encode(msgImprint), MessageImprint.ASN1
+ .encode(decoded.getMessageImprint())));
+ assertEquals("Decoded reqPolicy is incorrect", reqPolicy, decoded
+ .getReqPolicy());
+ assertEquals("Decoded nonce is incorrect", nonce, decoded.getNonce());
+ assertFalse("Decoded certReq is incorrect", decoded.getCertReq()
+ .booleanValue());
+ assertEquals("Decoded extensions is incorrect", exts, decoded
+ .getExtensions());
+ }
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampReqTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampRespTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampRespTest.java?view=auto&rev=478549
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampRespTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampRespTest.java Thu Nov 23 04:32:33 2006
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.security.tests.x509.tsp;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.security.asn1.ASN1Integer;
+import org.apache.harmony.security.asn1.ASN1OctetString;
+import org.apache.harmony.security.pkcs7.ContentInfo;
+import org.apache.harmony.security.pkcs7.SignedData;
+import org.apache.harmony.security.pkcs7.SignerInfo;
+import org.apache.harmony.security.x501.Name;
+import org.apache.harmony.security.x509.AlgorithmIdentifier;
+import org.apache.harmony.security.x509.Extension;
+import org.apache.harmony.security.x509.Extensions;
+import org.apache.harmony.security.x509.GeneralName;
+import org.apache.harmony.security.x509.tsp.MessageImprint;
+import org.apache.harmony.security.x509.tsp.PKIFailureInfo;
+import org.apache.harmony.security.x509.tsp.PKIStatus;
+import org.apache.harmony.security.x509.tsp.PKIStatusInfo;
+import org.apache.harmony.security.x509.tsp.TSTInfo;
+import org.apache.harmony.security.x509.tsp.TimeStampResp;
+
+public class TimeStampRespTest extends TestCase {
+
+ /**
+ * @throws IOException
+ * @tests 'org.apache.harmony.security.x509.tsp.TimeStampResp.getEncoded()'
+ */
+ public void testGetEncoded() throws IOException {
+ String statusString = "statusString";
+ PKIStatusInfo status = new PKIStatusInfo(PKIStatus.REJECTION,
+ Collections.singletonList(statusString),
+ PKIFailureInfo.BAD_REQUEST);
+
+
+ // creating TimeStampToken
+ String policy = "1.2.3.4.5";
+ String sha1 = "1.3.14.3.2.26";
+ MessageImprint msgImprint = new MessageImprint(new AlgorithmIdentifier(
+ sha1), new byte[20]);
+ Date genTime = new Date();
+ BigInteger nonce = BigInteger.valueOf(1234567890L);
+ // accuracy is 1 second
+ int[] accuracy = new int[] { 1, 0, 0 };
+ GeneralName tsa = new GeneralName(new Name("CN=AnAuthority"));
+ Extensions exts = new Extensions();
+ // Time-Stamping extension OID: as defined in RFC 3161
+ int[] timeStampingExtOID = new int[] { 1, 3, 6, 1, 5, 5, 7, 3, 8 };
+ byte[] timeStampingExtValue = new byte[] { (byte) 1, (byte) 2, (byte) 3 };
+ Extension ext = new Extension(timeStampingExtOID, true,
+ timeStampingExtValue);
+ exts.addExtension(ext);
+
+ TSTInfo tSTInfo = new TSTInfo(1, policy, msgImprint, BigInteger.TEN,
+ genTime, accuracy, Boolean.FALSE, nonce, tsa, exts);
+
+ Object[] issuerAndSerialNumber = new Object[] { new Name("CN=issuer"),
+ ASN1Integer.fromIntValue(12345) };
+ // SHA1withDSA OID
+ String sha1dsa = "1.2.840.10040.4.3";
+ SignerInfo sigInfo = new SignerInfo(1, issuerAndSerialNumber,
+ new AlgorithmIdentifier(sha1), null, new AlgorithmIdentifier(
+ sha1dsa), new byte[20], null);
+ // TSTInfo OID according to RFC 3161
+ int[] tSTInfoOid = new int[] { 1, 2, 840, 113549, 1, 9, 16, 1, 4 };
+ ContentInfo tSTInfoEncoded = new ContentInfo(tSTInfoOid,
+ ASN1OctetString.getInstance().encode(
+ TSTInfo.ASN1.encode(tSTInfo)));
+ SignedData tokenContent = new SignedData(1, Collections
+ .singletonList(new AlgorithmIdentifier(sha1)), tSTInfoEncoded,
+ null, null, Collections.singletonList(sigInfo));
+ ContentInfo timeStampToken = new ContentInfo(ContentInfo.SIGNED_DATA,
+ tokenContent);
+
+ TimeStampResp response = new TimeStampResp(status, timeStampToken);
+
+ byte [] encoding = TimeStampResp.ASN1.encode(response);
+ TimeStampResp decoded = (TimeStampResp) TimeStampResp.ASN1
+ .decode(encoding);
+
+ // deeper checks are performed in the corresponding unit tests
+ assertTrue("Decoded status is incorrect", Arrays.equals(
+ PKIStatusInfo.ASN1.encode(status), PKIStatusInfo.ASN1
+ .encode(decoded.getStatus())));
+ assertTrue("Decoded timeStampToken is incorrect", Arrays.equals(
+ timeStampToken.getEncoded(), decoded.getTimeStampToken()
+ .getEncoded()));
+ }
+}
+
Propchange: harmony/enhanced/classlib/trunk/modules/security/src/test/impl/java/org/apache/harmony/security/tests/x509/tsp/TimeStampRespTest.java
------------------------------------------------------------------------------
svn:eol-style = native