{
this.encoded = (byte[]) encoded.clone();
DERReader der = new DERReader(encoded);
// Extension ::= SEQUENCE {
DERValue val = der.read();
if (Configuration.DEBUG)
log.fine("read val tag == " + val.getTag() + " len == " + val.getLength());
if (!val.isConstructed())
throw new IOException("malformed Extension");
// extnID OBJECT IDENTIFIER,
val = der.read();
if (val.getTag() != DER.OBJECT_IDENTIFIER)
throw new IOException("expecting OBJECT IDENTIFIER");
oid = (OID) val.getValue();
if (Configuration.DEBUG)
log.fine("read oid == " + oid);
// critical BOOLEAN DEFAULT FALSE,
val = der.read();
if (val.getTag() == DER.BOOLEAN)
{
critical = ((Boolean) val.getValue()).booleanValue();
val = der.read();
}
else
critical = false;
if (Configuration.DEBUG)
log.fine("is critical == " + critical);
// extnValue OCTET STRING }
if (val.getTag() != DER.OCTET_STRING)
throw new IOException("expecting OCTET STRING");
byte[] encval = (byte[]) val.getValue();
isSupported = true;
if (oid.equals(AuthorityKeyIdentifier.ID))
{
value = new AuthorityKeyIdentifier(encval);
}