View Javadoc
1   /*
2    * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.  Oracle designates this
8    * particular file as subject to the "Classpath" exception as provided
9    * by Oracle in the LICENSE file that accompanied this code.
10   *
11   * This code is distributed in the hope that it will be useful, but WITHOUT
12   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14   * version 2 for more details (a copy is included in the LICENSE file that
15   * accompanied this code).
16   *
17   * You should have received a copy of the GNU General Public License version
18   * 2 along with this work; if not, write to the Free Software Foundation,
19   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20   *
21   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22   * or visit www.oracle.com if you need additional information or have any
23   * questions.
24   */
25  
26  package sun.security.x509;
27  
28  import java.io.IOException;
29  
30  import sun.security.util.*;
31  
32  /**
33   * @author      Ram Marti
34   */
35  
36  public final class AccessDescription {
37  
38      private int myhash = -1;
39  
40      private ObjectIdentifier accessMethod;
41  
42      private GeneralName accessLocation;
43  
44      public static final ObjectIdentifier Ad_OCSP_Id =
45          ObjectIdentifier.newInternal(new int[] {1, 3, 6, 1, 5, 5, 7, 48, 1});
46  
47      public static final ObjectIdentifier Ad_CAISSUERS_Id =
48          ObjectIdentifier.newInternal(new int[] {1, 3, 6, 1, 5, 5, 7, 48, 2});
49  
50      public static final ObjectIdentifier Ad_TIMESTAMPING_Id =
51          ObjectIdentifier.newInternal(new int[] {1, 3, 6, 1, 5, 5, 7, 48, 3});
52  
53      public static final ObjectIdentifier Ad_CAREPOSITORY_Id =
54          ObjectIdentifier.newInternal(new int[] {1, 3, 6, 1, 5, 5, 7, 48, 5});
55  
56      public AccessDescription(ObjectIdentifier accessMethod, GeneralName accessLocation) {
57          this.accessMethod = accessMethod;
58          this.accessLocation = accessLocation;
59      }
60  
61      public AccessDescription(DerValue derValue) throws IOException {
62          DerInputStream derIn = derValue.getData();
63          accessMethod = derIn.getOID();
64          accessLocation = new GeneralName(derIn.getDerValue());
65      }
66  
67      public ObjectIdentifier getAccessMethod() {
68          return accessMethod;
69      }
70  
71      public GeneralName getAccessLocation() {
72          return accessLocation;
73      }
74  
75      public void encode(DerOutputStream out) throws IOException {
76          DerOutputStream tmp = new DerOutputStream();
77          tmp.putOID(accessMethod);
78          accessLocation.encode(tmp);
79          out.write(DerValue.tag_Sequence, tmp);
80      }
81  
82      public int hashCode() {
83          if (myhash == -1) {
84              myhash = accessMethod.hashCode() + accessLocation.hashCode();
85          }
86          return myhash;
87      }
88  
89      public boolean equals(Object obj) {
90          if (obj == null || (!(obj instanceof AccessDescription))) {
91              return false;
92          }
93          AccessDescription that = (AccessDescription)obj;
94  
95          if (this == that) {
96              return true;
97          }
98          return (accessMethod.equals((Object)that.getAccessMethod()) &&
99              accessLocation.equals(that.getAccessLocation()));
100     }
101 
102     public String toString() {
103         String method = null;
104         if (accessMethod.equals((Object)Ad_CAISSUERS_Id)) {
105             method = "caIssuers";
106         } else if (accessMethod.equals((Object)Ad_CAREPOSITORY_Id)) {
107             method = "caRepository";
108         } else if (accessMethod.equals((Object)Ad_TIMESTAMPING_Id)) {
109             method = "timeStamping";
110         } else if (accessMethod.equals((Object)Ad_OCSP_Id)) {
111             method = "ocsp";
112         } else {
113             method = accessMethod.toString();
114         }
115         return ("\n   accessMethod: " + method +
116                 "\n   accessLocation: " + accessLocation.toString() + "\n");
117     }
118 }