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

📄 derbitstring.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:   DERBitString.java

package org.bouncycastle.asn1;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

// Referenced classes of package org.bouncycastle.asn1:
//			ASN1Object, ASN1OctetString, ASN1OutputStream, ASN1TaggedObject, 
//			DEROutputStream, DERString, DEREncodable, DERObject

public class DERBitString extends ASN1Object
	implements DERString
{

	private static final char table[] = {
		'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
		'A', 'B', 'C', 'D', 'E', 'F'
	};
	protected byte data[];
	protected int padBits;

	protected static int getPadBits(int bitString)
	{
		int val = 0;
		for (int i = 3; i >= 0; i--)
		{
			if (i != 0)
			{
				if (bitString >> i * 8 == 0)
					continue;
				val = bitString >> i * 8 & 0xff;
				break;
			}
			if (bitString == 0)
				continue;
			val = bitString & 0xff;
			break;
		}

		if (val == 0)
			return 7;
		int bits;
		for (bits = 1; ((val <<= 1) & 0xff) != 0; bits++);
		return 8 - bits;
	}

	protected static byte[] getBytes(int bitString)
	{
		int bytes = 4;
		for (int i = 3; i >= 1 && (bitString & 255 << i * 8) == 0; i--)
			bytes--;

		byte result[] = new byte[bytes];
		for (int i = 0; i < bytes; i++)
			result[i] = (byte)(bitString >> i * 8 & 0xff);

		return result;
	}

	public static DERBitString getInstance(Object obj)
	{
		if (obj == null || (obj instanceof DERBitString))
			return (DERBitString)obj;
		if (obj instanceof ASN1OctetString)
		{
			byte bytes[] = ((ASN1OctetString)obj).getOctets();
			int padBits = bytes[0];
			byte data[] = new byte[bytes.length - 1];
			System.arraycopy(bytes, 1, data, 0, bytes.length - 1);
			return new DERBitString(data, padBits);
		}
		if (obj instanceof ASN1TaggedObject)
			return getInstance(((ASN1TaggedObject)obj).getObject());
		else
			throw new IllegalArgumentException((new StringBuilder()).append("illegal object in getInstance: ").append(obj.getClass().getName()).toString());
	}

	public static DERBitString getInstance(ASN1TaggedObject obj, boolean explicit)
	{
		return getInstance(obj.getObject());
	}

	protected DERBitString(byte data, int padBits)
	{
		this.data = new byte[1];
		this.data[0] = data;
		this.padBits = padBits;
	}

	public DERBitString(byte data[], int padBits)
	{
		this.data = data;
		this.padBits = padBits;
	}

	public DERBitString(byte data[])
	{
		this(data, 0);
	}

	public DERBitString(DEREncodable obj)
	{
		try
		{
			ByteArrayOutputStream bOut = new ByteArrayOutputStream();
			DEROutputStream dOut = new DEROutputStream(bOut);
			dOut.writeObject(obj);
			dOut.close();
			data = bOut.toByteArray();
			padBits = 0;
		}
		catch (IOException e)
		{
			throw new IllegalArgumentException((new StringBuilder()).append("Error processing object : ").append(e.toString()).toString());
		}
	}

	public byte[] getBytes()
	{
		return data;
	}

	public int getPadBits()
	{
		return padBits;
	}

	public int intValue()
	{
		int value = 0;
		for (int i = 0; i != data.length && i != 4; i++)
			value |= (data[i] & 0xff) << 8 * i;

		return value;
	}

	void encode(DEROutputStream out)
		throws IOException
	{
		byte bytes[] = new byte[getBytes().length + 1];
		bytes[0] = (byte)getPadBits();
		System.arraycopy(getBytes(), 0, bytes, 1, bytes.length - 1);
		out.writeEncoded(3, bytes);
	}

	public int hashCode()
	{
		int value = 0;
		for (int i = 0; i != data.length; i++)
			value ^= (data[i] & 0xff) << i % 4;

		return value;
	}

	protected boolean asn1Equals(DERObject o)
	{
		if (!(o instanceof DERBitString))
			return false;
		DERBitString other = (DERBitString)o;
		if (data.length != other.data.length)
			return false;
		for (int i = 0; i != data.length; i++)
			if (data[i] != other.data[i])
				return false;

		return padBits == other.padBits;
	}

	public String getString()
	{
		StringBuffer buf = new StringBuffer("#");
		ByteArrayOutputStream bOut = new ByteArrayOutputStream();
		ASN1OutputStream aOut = new ASN1OutputStream(bOut);
		try
		{
			aOut.writeObject(this);
		}
		catch (IOException e)
		{
			throw new RuntimeException("internal error encoding BitString");
		}
		byte string[] = bOut.toByteArray();
		for (int i = 0; i != string.length; i++)
		{
			buf.append(table[string[i] >>> 4 & 0xf]);
			buf.append(table[string[i] & 0xf]);
		}

		return buf.toString();
	}

	public String toString()
	{
		return getString();
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -