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 */
017
018 package org.apache.geronimo.crypto.asn1.x509;
019
020 import org.apache.geronimo.crypto.asn1.ASN1Encodable;
021 import org.apache.geronimo.crypto.asn1.ASN1EncodableVector;
022 import org.apache.geronimo.crypto.asn1.ASN1Sequence;
023 import org.apache.geronimo.crypto.asn1.ASN1TaggedObject;
024 import org.apache.geronimo.crypto.asn1.DERObject;
025 import org.apache.geronimo.crypto.asn1.DERSequence;
026 import org.apache.geronimo.crypto.asn1.DERTaggedObject;
027
028 /**
029 * The Holder object.
030 * <pre>
031 * Holder ::= SEQUENCE {
032 * baseCertificateID [0] IssuerSerial OPTIONAL,
033 * -- the issuer and serial number of
034 * -- the holder's Public Key Certificate
035 * entityName [1] GeneralNames OPTIONAL,
036 * -- the name of the claimant or role
037 * objectDigestInfo [2] ObjectDigestInfo OPTIONAL
038 * -- used to directly authenticate the holder,
039 * -- for example, an executable
040 * }
041 * </pre>
042 */
043 public class Holder
044 extends ASN1Encodable
045 {
046 IssuerSerial baseCertificateID;
047 GeneralNames entityName;
048 ObjectDigestInfo objectDigestInfo;
049
050 public static Holder getInstance(
051 Object obj)
052 {
053 if (obj instanceof Holder)
054 {
055 return (Holder)obj;
056 }
057 else if (obj instanceof ASN1Sequence)
058 {
059 return new Holder((ASN1Sequence)obj);
060 }
061
062 throw new IllegalArgumentException("unknown object in factory");
063 }
064
065 public Holder(
066 ASN1Sequence seq)
067 {
068 for (int i = 0; i != seq.size(); i++)
069 {
070 ASN1TaggedObject tObj = (ASN1TaggedObject)seq.getObjectAt(i);
071
072 switch (tObj.getTagNo())
073 {
074 case 0:
075 baseCertificateID = IssuerSerial.getInstance(tObj, false);
076 break;
077 case 1:
078 entityName = GeneralNames.getInstance(tObj, false);
079 break;
080 case 2:
081 objectDigestInfo = ObjectDigestInfo.getInstance(tObj, false);
082 break;
083 default:
084 throw new IllegalArgumentException("unknown tag in Holder");
085 }
086 }
087 }
088
089 public Holder(
090 IssuerSerial baseCertificateID)
091 {
092 this.baseCertificateID = baseCertificateID;
093 }
094
095 public Holder(
096 GeneralNames entityName)
097 {
098 this.entityName = entityName;
099 }
100
101 public IssuerSerial getBaseCertificateID()
102 {
103 return baseCertificateID;
104 }
105
106 public GeneralNames getEntityName()
107 {
108 return entityName;
109 }
110
111 public ObjectDigestInfo getObjectDigestInfo()
112 {
113 return objectDigestInfo;
114 }
115
116 public DERObject toASN1Object()
117 {
118 ASN1EncodableVector v = new ASN1EncodableVector();
119
120 if (baseCertificateID != null)
121 {
122 v.add(new DERTaggedObject(false, 0, baseCertificateID));
123 }
124
125 if (entityName != null)
126 {
127 v.add(new DERTaggedObject(false, 1, entityName));
128 }
129
130 if (objectDigestInfo != null)
131 {
132 v.add(new DERTaggedObject(false, 2, objectDigestInfo));
133 }
134
135 return new DERSequence(v);
136 }
137 }