⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bertaggedobjectparser.java

📁 java 文件下载器。可自定义
💻 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 + -