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 org.apache.harmony.security.x509;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class implements the values of Subject Alternative Name
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (OID is 2.5.29.17) and Issuer Alternative Name extensions
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (OID is 2.5.29.18).<br>
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * For more information about these extensions see RFC 3280
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * at http://www.ietf.org/rfc/rfc3280.txt
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
295c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilsonpublic final class AlternativeName extends ExtensionValue {
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // constants indicating which alternative name is presented
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // by this object
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final boolean ISSUER = false;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final boolean SUBJECT = true;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
365c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson    /** indicating which alternative name is presented by this object */
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private boolean which;
385c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson    /** the alternative names */
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private GeneralNames alternativeNames;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates the extension object on the base of its encoded form.
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param which specifies which alternative names are given
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * (Subject's or Issuer's)
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public AlternativeName(boolean which, byte[] encoding) throws IOException {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super(encoding);
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.which = which;
495c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson        this.alternativeNames = (GeneralNames) GeneralNames.ASN1.decode(encoding);
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns ASN.1 encoded form of this X.509 AlternativeName value.
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
555c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson    @Override public byte[] getEncoded() {
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (encoding == null) {
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            encoding = GeneralNames.ASN1.encode(alternativeNames);
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return encoding;
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
628216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes    @Override public void dumpValue(StringBuilder sb, String prefix) {
638216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes        sb.append(prefix).append((which) ? "Subject" : "Issuer").append(" Alternative Names [\n");
648216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes        alternativeNames.dumpValue(sb, prefix + "  ");
658216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes        sb.append(prefix).append("]\n");
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
68