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