📄 bertaggedobjectparser.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: BERTaggedObjectParser.java
package org.bouncycastle.asn1;
import java.io.IOException;
import java.io.InputStream;
// Referenced classes of package org.bouncycastle.asn1:
// ASN1EncodableVector, ASN1ObjectParser, ASN1StreamParser, ASN1TaggedObjectParser,
// BEROctetStringParser, BERSequence, BERSequenceParser, BERSetParser,
// BERTaggedObject, DEREncodable, DEROctetString, DERSequence,
// DERSet, DERTaggedObject, DefiniteLengthInputStream, IndefiniteLengthInputStream,
// DERObject
public class BERTaggedObjectParser
implements ASN1TaggedObjectParser
{
private int _baseTag;
private int _tagNumber;
private InputStream _contentStream;
private boolean _indefiniteLength;
protected BERTaggedObjectParser(int baseTag, int tagNumber, InputStream contentStream)
{
_baseTag = baseTag;
_tagNumber = tagNumber;
_contentStream = contentStream;
_indefiniteLength = contentStream instanceof IndefiniteLengthInputStream;
}
public boolean isConstructed()
{
return (_baseTag & 0x20) != 0;
}
public int getTagNo()
{
return _tagNumber;
}
public DEREncodable getObjectParser(int tag, boolean isExplicit)
throws IOException
{
if (isExplicit)
return (new ASN1StreamParser(_contentStream)).readObject();
switch (tag)
{
case 17: // '\021'
if (_indefiniteLength)
return new BERSetParser(new ASN1ObjectParser(_baseTag, _tagNumber, _contentStream));
else
return (new DERSet(loadVector(_contentStream))).parser();
case 16: // '\020'
if (_indefiniteLength)
return new BERSequenceParser(new ASN1ObjectParser(_baseTag, _tagNumber, _contentStream));
else
return (new DERSequence(loadVector(_contentStream))).parser();
case 4: // '\004'
if (_indefiniteLength || isConstructed())
return new BEROctetStringParser(new ASN1ObjectParser(_baseTag, _tagNumber, _contentStream));
else
return (new DEROctetString(((DefiniteLengthInputStream)_contentStream).toByteArray())).parser();
}
throw new RuntimeException("implicit tagging not implemented");
}
private ASN1EncodableVector loadVector(InputStream in)
throws IOException
{
ASN1StreamParser aIn = new ASN1StreamParser(in);
ASN1EncodableVector v = new ASN1EncodableVector();
for (DEREncodable obj = aIn.readObject(); obj != null; obj = aIn.readObject())
v.add(obj.getDERObject());
return v;
}
private ASN1EncodableVector rLoadVector(InputStream in)
{
return loadVector(in);
IOException e;
e;
throw new IllegalStateException(e.getMessage());
}
public DERObject getDERObject()
{
if (_indefiniteLength)
{
ASN1EncodableVector v = rLoadVector(_contentStream);
if (v.size() > 1)
return new BERTaggedObject(false, _tagNumber, new BERSequence(v));
if (v.size() == 1)
return new BERTaggedObject(true, _tagNumber, v.get(0));
else
return new BERTaggedObject(false, _tagNumber, new BERSequence());
}
if (isConstructed())
{
ASN1EncodableVector v = rLoadVector(_contentStream);
if (v.size() == 1)
return new DERTaggedObject(true, _tagNumber, v.get(0));
else
return new DERTaggedObject(false, _tagNumber, new DERSequence(v));
}
return new DERTaggedObject(false, _tagNumber, new DEROctetString(((DefiniteLengthInputStream)_contentStream).toByteArray()));
IOException e;
e;
throw new IllegalStateException(e.getMessage());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -