Home | History | Annotate | Download | only in x509
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 /**
     19 * @author Alexander Y. Kleymenov
     20 * @version $Revision$
     21 */
     22 
     23 package org.apache.harmony.security.x509;
     24 
     25 import org.apache.harmony.security.asn1.ASN1Explicit;
     26 import org.apache.harmony.security.asn1.ASN1Sequence;
     27 import org.apache.harmony.security.asn1.ASN1Type;
     28 import org.apache.harmony.security.asn1.BerInputStream;
     29 import org.apache.harmony.security.x501.DirectoryString;
     30 
     31 /**
     32  * The class encapsulates the ASN.1 DER encoding/decoding work
     33  * with the following structure which is a subpart of GeneralName
     34  * (as specified in RFC 3280 -
     35  *  Internet X.509 Public Key Infrastructure.
     36  *  Certificate and Certificate Revocation List (CRL) Profile.
     37  *  http://www.ietf.org/rfc/rfc3280.txt):
     38  *
     39  * <pre>
     40  *   EDIPartyName ::= SEQUENCE {
     41  *        nameAssigner            [0]     DirectoryString OPTIONAL,
     42  *        partyName               [1]     DirectoryString
     43  *   }
     44  *
     45  *   DirectoryString ::= CHOICE {
     46  *        teletexString             TeletexString   (SIZE (1..MAX)),
     47  *        printableString           PrintableString (SIZE (1..MAX)),
     48  *        universalString           UniversalString (SIZE (1..MAX)),
     49  *        utf8String              UTF8String      (SIZE (1..MAX)),
     50  *        bmpString               BMPString       (SIZE (1..MAX))
     51  *   }
     52  * </pre>
     53  */
     54 public final class EDIPartyName {
     55     /** the value of nameAssigner field of the structure */
     56     private final String nameAssigner;
     57     /** the value of partyName field of the structure */
     58     private final String partyName;
     59     /** the ASN.1 encoded form of EDIPartyName */
     60     private byte[] encoding;
     61 
     62     private EDIPartyName(String nameAssigner, String partyName, byte[] encoding) {
     63         this.nameAssigner = nameAssigner;
     64         this.partyName = partyName;
     65         this.encoding = encoding;
     66     }
     67 
     68     /**
     69      * Returns ASN.1 encoded form of this X.509 EDIPartyName value.
     70      */
     71     public byte[] getEncoded() {
     72         if (encoding == null) {
     73             encoding = ASN1.encode(this);
     74         }
     75         return encoding;
     76     }
     77 
     78     /**
     79      * ASN.1 DER X.509 EDIPartyName encoder/decoder class.
     80      */
     81     public static final ASN1Sequence ASN1 = new ASN1Sequence(
     82             new ASN1Type[] {
     83                 new ASN1Explicit(0, DirectoryString.ASN1),
     84                 new ASN1Explicit(1, DirectoryString.ASN1)
     85             }) {
     86         {
     87             setOptional(0);
     88         }
     89 
     90         @Override protected Object getDecodedObject(BerInputStream in) {
     91             Object[] values = (Object[]) in.content;
     92             return new EDIPartyName((String) values[0], (String) values[1],
     93                     in.getEncoded());
     94         }
     95 
     96         @Override protected void getValues(Object object, Object[] values) {
     97             EDIPartyName epn = (EDIPartyName) object;
     98             values[0] = epn.nameAssigner;
     99             values[1] = epn.partyName;
    100         }
    101     };
    102 }
    103