FileDocCategorySizeDatePackage
BERTaggedObject.javaAPI DocAndroid 1.5 API3429Wed May 06 22:41:06 BST 2009org.bouncycastle.asn1

BERTaggedObject

public class BERTaggedObject extends DERTaggedObject
BER TaggedObject - in ASN.1 nottation this is any object proceeded by a [n] where n is some number - these are assume to follow the construction rules (as with sequences).

Fields Summary
Constructors Summary
public BERTaggedObject(int tagNo, DEREncodable obj)

param
tagNo the tag number for this object.
param
obj the tagged object.

        super(tagNo, obj);
    
public BERTaggedObject(boolean explicit, int tagNo, DEREncodable obj)

param
explicit true if an explicitly tagged object.
param
tagNo the tag number for this object.
param
obj the tagged object.

        super(explicit, tagNo, obj);
    
public BERTaggedObject(int tagNo)
create an implicitly tagged object that contains a zero length sequence.

        super(false, tagNo, new BERSequence());
    
Methods Summary
voidencode(DEROutputStream out)

        if (out instanceof ASN1OutputStream || out instanceof BEROutputStream)
        {
            out.write(CONSTRUCTED | TAGGED | tagNo);
            out.write(0x80);

            if (!empty)
            {
                if (!explicit)
                {
                    if (obj instanceof ASN1OctetString)
                    {
                        Enumeration  e;

                        if (obj instanceof BERConstructedOctetString)
                        {
                            e = ((BERConstructedOctetString)obj).getObjects();
                        }
                        else
                        {
                            ASN1OctetString             octs = (ASN1OctetString)obj;
                            BERConstructedOctetString   berO = new BERConstructedOctetString(octs.getOctets());

                            e = berO.getObjects();
                        }

                        while (e.hasMoreElements())
                        {
                            out.writeObject(e.nextElement());
                        }
                    }
                    else if (obj instanceof ASN1Sequence)
                    {
                        Enumeration  e = ((ASN1Sequence)obj).getObjects();

                        while (e.hasMoreElements())
                        {
                            out.writeObject(e.nextElement());
                        }
                    }
                    else if (obj instanceof ASN1Set)
                    {
                        Enumeration  e = ((ASN1Set)obj).getObjects();

                        while (e.hasMoreElements())
                        {
                            out.writeObject(e.nextElement());
                        }
                    }
                    else
                    {
                        throw new RuntimeException("not implemented: " + obj.getClass().getName());
                    }
                }
                else
                {
                    out.writeObject(obj);
                }
            }

            out.write(0x00);
            out.write(0x00);
        }
        else
        {
            super.encode(out);
        }