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 package org.apache.geronimo.util.asn1.x509;
020
021 import java.util.Enumeration;
022
023 import org.apache.geronimo.util.asn1.ASN1Encodable;
024 import org.apache.geronimo.util.asn1.ASN1EncodableVector;
025 import org.apache.geronimo.util.asn1.ASN1OctetString;
026 import org.apache.geronimo.util.asn1.ASN1Sequence;
027 import org.apache.geronimo.util.asn1.ASN1TaggedObject;
028 import org.apache.geronimo.util.asn1.DERObject;
029 import org.apache.geronimo.util.asn1.DEROctetString;
030 import org.apache.geronimo.util.asn1.DERSequence;
031
032 /**
033 * The DigestInfo object.
034 * <pre>
035 * DigestInfo::=SEQUENCE{
036 * digestAlgorithm AlgorithmIdentifier,
037 * digest OCTET STRING }
038 * </pre>
039 */
040 public class DigestInfo
041 extends ASN1Encodable
042 {
043 private byte[] digest;
044 private AlgorithmIdentifier algId;
045
046 public static DigestInfo getInstance(
047 ASN1TaggedObject obj,
048 boolean explicit)
049 {
050 return getInstance(ASN1Sequence.getInstance(obj, explicit));
051 }
052
053 public static DigestInfo getInstance(
054 Object obj)
055 {
056 if (obj instanceof DigestInfo)
057 {
058 return (DigestInfo)obj;
059 }
060 else if (obj instanceof ASN1Sequence)
061 {
062 return new DigestInfo((ASN1Sequence)obj);
063 }
064
065 throw new IllegalArgumentException("unknown object in factory");
066 }
067
068 public DigestInfo(
069 AlgorithmIdentifier algId,
070 byte[] digest)
071 {
072 this.digest = digest;
073 this.algId = algId;
074 }
075
076 public DigestInfo(
077 ASN1Sequence obj)
078 {
079 Enumeration e = obj.getObjects();
080
081 algId = AlgorithmIdentifier.getInstance(e.nextElement());
082 digest = ((ASN1OctetString)e.nextElement()).getOctets();
083 }
084
085 public AlgorithmIdentifier getAlgorithmId()
086 {
087 return algId;
088 }
089
090 public byte[] getDigest()
091 {
092 return digest;
093 }
094
095 public DERObject toASN1Object()
096 {
097 ASN1EncodableVector v = new ASN1EncodableVector();
098
099 v.add(algId);
100 v.add(new DEROctetString(digest));
101
102 return new DERSequence(v);
103 }
104 }