asn1bitstring.java

来自「一个非常好的ssh客户端实现」· Java 代码 · 共 80 行

JAVA
80
字号
/****************************************************************************** * * Copyright (c) 1999-2003 AppGate Network Security AB. All Rights Reserved. *  * This file contains Original Code and/or Modifications of Original Code as * defined in and that are subject to the MindTerm Public Source License, * Version 2.0, (the 'License'). You may not use this file except in compliance * with the License. *  * You should have received a copy of the MindTerm Public Source License * along with this software; see the file LICENSE.  If not, write to * AppGate Network Security AB, Otterhallegatan 2, SE-41118 Goteborg, SWEDEN * *****************************************************************************/package com.mindbright.asn1;public class ASN1BitString extends ASN1String {    public ASN1BitString() {	super(ASN1.TAG_BITSTRING);    }    public int getBitCount() {	return ((value.length - 1) * 8) - value[0];    }    public byte[] getBitArray() {	byte[] ba = new byte[value.length - 1];	System.arraycopy(value, 1, ba, 0, ba.length);	return ba;    }    public void setBitArray(byte[] bitArray, int off, int bitCount) {	int    unusedBits = (8 - (bitCount % 8)) % 8;	int    byteCount  = ((bitCount / 8) + 1);	byte[] derEnc     = new byte[byteCount + 1];	derEnc[0] = (byte)unusedBits;	System.arraycopy(bitArray, off, derEnc, 1, byteCount);	setRaw(derEnc);    }    public boolean[] getBooleanArray() {	int       bitCount = ((value.length - 1) * 8) - value[0];	boolean[] bits     = new boolean[bitCount];	for(int i = 0; i < bitCount; i++) {	    int m = 0x80 >>> (i % 8);	    bits[i] = ((((int)value[(i / 8) + 1] & 0xff) & m) == m);	}	return bits;    }    public void setBooleanArray(boolean[] bits) {	int    bitCount   = bits.length;	int    unusedBits = (8 - (bitCount % 8)) % 8;	int    byteCount  = ((bitCount / 8) + 1);	byte[] derEnc     = new byte[byteCount + 1];	derEnc[0] = (byte)unusedBits;	for(int i = 0; i < bitCount; i++) {	    int m = 0x80 >>> (i % 8);	    derEnc[(i / 8) + 1] |= (bits[i] ? m : 0x00);	}	setRaw(derEnc);    }    public String toPrintableString() {        for (int i=0; i<value.length; i++) {            if (value[i] < 10 || value[i] > 127)                return "0x" + com.mindbright.util.HexDump.toString(value);        }        return new String(value);    }}

⌨️ 快捷键说明

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