116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.asn1;
216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.io.IOException;
416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
5bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro/**
6bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * Carrier class for a DER encoding OCTET STRING
7bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro */
816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class DEROctetString
916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    extends ASN1OctetString
1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{
1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    /**
12bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro     * Base constructor.
13bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro     *
1416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * @param string the octets making up the octet string.
1516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     */
1616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public DEROctetString(
1716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        byte[]  string)
1816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
1916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        super(string);
2016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
22bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro    /**
23bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro     * Constructor from the encoding of an ASN.1 object.
24bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro     *
25bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro     * @param obj the object to be encoded.
26bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro     */
2716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public DEROctetString(
2816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        ASN1Encodable obj)
2916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        throws IOException
3016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
3116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        super(obj.toASN1Primitive().getEncoded(ASN1Encoding.DER));
3216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
3316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
3416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    boolean isConstructed()
3516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
3616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        return false;
3716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
3816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
3916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    int encodedLength()
4016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
4116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        return 1 + StreamUtil.calculateBodyLength(string.length) + string.length;
4216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
4316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
4416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    void encode(
4516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        ASN1OutputStream out)
4616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        throws IOException
4716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
4816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        out.writeEncoded(BERTags.OCTET_STRING, string);
4916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
5016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
5116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    static void encode(
5216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        DEROutputStream derOut,
5316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        byte[]          bytes)
5416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        throws IOException
5516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
5616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        derOut.writeEncoded(BERTags.OCTET_STRING, bytes);
5716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
5816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro}
59