001 /** 002 * 003 * Licensed to the Apache Software Foundation (ASF) under one or more 004 * contributor license agreements. See the NOTICE file distributed with 005 * this work for additional information regarding copyright ownership. 006 * The ASF licenses this file to You under the Apache License, Version 2.0 007 * (the "License"); you may not use this file except in compliance with 008 * the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 020 package org.apache.geronimo.util.asn1.x509; 021 022 import java.util.Enumeration; 023 import java.util.Vector; 024 025 import org.apache.geronimo.util.asn1.ASN1Encodable; 026 import org.apache.geronimo.util.asn1.ASN1EncodableVector; 027 import org.apache.geronimo.util.asn1.ASN1Sequence; 028 import org.apache.geronimo.util.asn1.DERInteger; 029 import org.apache.geronimo.util.asn1.DERObject; 030 import org.apache.geronimo.util.asn1.DERSequence; 031 032 /** 033 * <code>NoticeReference</code> class, used in 034 * <code>CertificatePolicies</code> X509 V3 extensions 035 * (in policy qualifiers). 036 * 037 * <pre> 038 * NoticeReference ::= SEQUENCE { 039 * organization DisplayText, 040 * noticeNumbers SEQUENCE OF INTEGER } 041 * 042 * </pre> 043 * 044 * @see PolicyQualifierInfo 045 * @see PolicyInformation 046 */ 047 public class NoticeReference 048 extends ASN1Encodable 049 { 050 DisplayText organization; 051 ASN1Sequence noticeNumbers; 052 053 /** 054 * Creates a new <code>NoticeReference</code> instance. 055 * 056 * @param orgName a <code>String</code> value 057 * @param numbers a <code>Vector</code> value 058 */ 059 public NoticeReference (String orgName, Vector numbers) 060 { 061 organization = new DisplayText(orgName); 062 063 Object o = numbers.elementAt(0); 064 065 ASN1EncodableVector av = new ASN1EncodableVector(); 066 if (o instanceof Integer) { 067 Enumeration it = numbers.elements(); 068 069 while (it.hasMoreElements()) { 070 Integer nm = (Integer) it.nextElement(); 071 DERInteger di = new DERInteger(nm.intValue()); 072 av.add (di); 073 } 074 } 075 076 noticeNumbers = new DERSequence(av); 077 } 078 079 /** 080 * Creates a new <code>NoticeReference</code> instance. 081 * 082 * @param orgName a <code>String</code> value 083 * @param numbers an <code>ASN1EncodableVector</code> value 084 */ 085 public NoticeReference (String orgName, ASN1Sequence numbers) 086 { 087 organization = new DisplayText (orgName); 088 noticeNumbers = numbers; 089 } 090 091 /** 092 * Creates a new <code>NoticeReference</code> instance. 093 * 094 * @param displayTextType an <code>int</code> value 095 * @param orgName a <code>String</code> value 096 * @param numbers an <code>ASN1EncodableVector</code> value 097 */ 098 public NoticeReference (int displayTextType, 099 String orgName, ASN1Sequence numbers) 100 { 101 organization = new DisplayText(displayTextType, 102 orgName); 103 noticeNumbers = numbers; 104 } 105 106 /** 107 * Creates a new <code>NoticeReference</code> instance. 108 * <p>Useful for reconstructing a <code>NoticeReference</code> 109 * instance from its encodable/encoded form. 110 * 111 * @param as an <code>ASN1Sequence</code> value obtained from either 112 * calling @{link toASN1Object()} for a <code>NoticeReference</code> 113 * instance or from parsing it from a DER-encoded stream. 114 */ 115 public NoticeReference (ASN1Sequence as) 116 { 117 organization = DisplayText.getInstance(as.getObjectAt(0)); 118 noticeNumbers = (ASN1Sequence) as.getObjectAt(1); 119 } 120 121 public static NoticeReference getInstance (Object as) 122 { 123 if (as instanceof NoticeReference) 124 { 125 return (NoticeReference)as; 126 } 127 else if (as instanceof ASN1Sequence) 128 { 129 return new NoticeReference((ASN1Sequence)as); 130 } 131 132 throw new IllegalArgumentException("unknown object in getInstance."); 133 } 134 135 /** 136 * Describe <code>toASN1Object</code> method here. 137 * 138 * @return a <code>DERObject</code> value 139 */ 140 public DERObject toASN1Object() 141 { 142 ASN1EncodableVector av = new ASN1EncodableVector(); 143 av.add (organization); 144 av.add (noticeNumbers); 145 return new DERSequence (av); 146 } 147 }