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.pkcs;
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.DERBitString;
024    import org.apache.geronimo.crypto.asn1.DERObject;
025    import org.apache.geronimo.crypto.asn1.DERSequence;
026    import org.apache.geronimo.crypto.asn1.x509.AlgorithmIdentifier;
027    
028    /**
029     * PKCS10 Certification request object.
030     * <pre>
031     * CertificationRequest ::= SEQUENCE {
032     *   certificationRequestInfo  CertificationRequestInfo,
033     *   signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
034     *   signature                 BIT STRING
035     * }
036     * </pre>
037     */
038    public class CertificationRequest
039        extends ASN1Encodable
040    {
041        protected CertificationRequestInfo reqInfo = null;
042        protected AlgorithmIdentifier sigAlgId = null;
043        protected DERBitString sigBits = null;
044    
045        protected CertificationRequest()
046        {
047        }
048    
049        public CertificationRequest(
050            CertificationRequestInfo requestInfo,
051            AlgorithmIdentifier     algorithm,
052            DERBitString            signature)
053        {
054            this.reqInfo = requestInfo;
055            this.sigAlgId = algorithm;
056            this.sigBits = signature;
057        }
058    
059        public CertificationRequest(
060            ASN1Sequence seq)
061        {
062            reqInfo = CertificationRequestInfo.getInstance(seq.getObjectAt(0));
063            sigAlgId = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
064            sigBits = (DERBitString)seq.getObjectAt(2);
065        }
066    
067        public CertificationRequestInfo getCertificationRequestInfo()
068        {
069            return reqInfo;
070        }
071    
072        public AlgorithmIdentifier getSignatureAlgorithm()
073        {
074            return sigAlgId;
075        }
076    
077        public DERBitString getSignature()
078        {
079            return sigBits;
080        }
081    
082        public DERObject toASN1Object()
083        {
084            // Construct the CertificateRequest
085            ASN1EncodableVector  v = new ASN1EncodableVector();
086    
087            v.add(reqInfo);
088            v.add(sigAlgId);
089            v.add(sigBits);
090    
091            return new DERSequence(v);
092        }
093    }