📄 derbitstring.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 + -