001package org.apache.commons.ssl.org.bouncycastle.asn1.cms;
002
003import java.io.IOException;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1SequenceParser;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObjectParser;
009import org.apache.commons.ssl.org.bouncycastle.asn1.x509.AlgorithmIdentifier;
010
011/**
012 * Parser for <a href="http://tools.ietf.org/html/rfc5652#section-6.1">RFC 5652</a> EncryptedContentInfo object.
013 * <p>
014 * <pre>
015 * EncryptedContentInfo ::= SEQUENCE {
016 *     contentType ContentType,
017 *     contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
018 *     encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL 
019 * }
020 * </pre>
021 */
022public class EncryptedContentInfoParser
023{
024    private ASN1ObjectIdentifier    _contentType;
025    private AlgorithmIdentifier     _contentEncryptionAlgorithm;
026    private ASN1TaggedObjectParser _encryptedContent;
027
028    public EncryptedContentInfoParser(
029        ASN1SequenceParser  seq) 
030        throws IOException
031    {
032        _contentType = (ASN1ObjectIdentifier)seq.readObject();
033        _contentEncryptionAlgorithm = AlgorithmIdentifier.getInstance(seq.readObject().toASN1Primitive());
034        _encryptedContent = (ASN1TaggedObjectParser)seq.readObject();
035    }
036    
037    public ASN1ObjectIdentifier getContentType()
038    {
039        return _contentType;
040    }
041    
042    public AlgorithmIdentifier getContentEncryptionAlgorithm()
043    {
044        return _contentEncryptionAlgorithm;
045    }
046
047    public ASN1Encodable getEncryptedContent(
048        int  tag) 
049        throws IOException
050    {
051        return _encryptedContent.getObjectParser(tag, false);
052    }
053}