1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.security.cert; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.PublicKey; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The implementation of the result of the PKIX certification path validation. 24f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see CertPathValidator 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see CertPathValidator#validate(CertPath, CertPathParameters) 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class PKIXCertPathValidatorResult implements CertPathValidatorResult { 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // A trust anchor used during validation of certification path 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final TrustAnchor trustAnchor; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Valid policy tree resulting from PKIX 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // certification path validation algorithm 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final PolicyNode policyTree; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Public key of the subject (target) certificate 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final PublicKey subjectPublicKey; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code PKIXCertPathValidatorResult} with the specified 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * trust anchor, the valid policy tree and the subject public key. 40f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param trustAnchor 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the trust anchor describing the certification authority (CA) 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that served as trust anchor for the certification path. 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param policyTree 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the valid policy tree from the validation. 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param subjectPublicKey 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the subject public key from the validation. 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PKIXCertPathValidatorResult(TrustAnchor trustAnchor, 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PolicyNode policyTree, PublicKey subjectPublicKey) { 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.trustAnchor = trustAnchor; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.policyTree = policyTree; 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.subjectPublicKey = subjectPublicKey; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.trustAnchor == null) { 55897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes throw new NullPointerException("trustAnchor == null"); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.subjectPublicKey == null) { 58897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes throw new NullPointerException("subjectPublicKey == null"); 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the valid policy tree from the validation. 64f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the valid policy tree from the validation. 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PolicyNode getPolicyTree() { 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return policyTree; 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the subject public key from the validation. 73f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the subject public key from the validation. 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PublicKey getPublicKey() { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return subjectPublicKey; 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the trust anchor describing the certification authority (CA) that 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * served as trust anchor for this certification path. 83f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the trust anchor. 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TrustAnchor getTrustAnchor() { 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return trustAnchor; 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Clones this {@code PKIXCertPathValidatorResult} instance. 92f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the cloned instance. 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object clone() { 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return super.clone(); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CloneNotSupportedException e) { 99fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes throw new AssertionError(e); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a string representation for this {@code 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * PKIXCertPathValidatorResult} instance. 106f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a string representation for this {@code 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * PKIXCertPathValidatorResult} instance. 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 1112f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes StringBuilder sb = new StringBuilder(super.toString()); 112f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(": [\n Trust Anchor: "); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(trustAnchor.toString()); 114f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append("\n Policy Tree: "); 115f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(policyTree == null ? "no valid policy tree\n" 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : policyTree.toString()); 117f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append("\n Subject Public Key: "); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(subjectPublicKey.toString()); 119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append("\n]"); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 123