com.fitbur.bouncycastle.util.encoders.HexEncoder Maven / Gradle / Ivy
package com.fitbur.bouncycastle.util.encoders;
import java.io.IOException;
import java.io.OutputStream;
/**
* A streaming Hex encoder.
*/
public class HexEncoder
implements Encoder
{
protected final byte[] encodingTable =
{
(byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7',
(byte)'8', (byte)'9', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f'
};
/*
* set up the com.fitburcoding table.
*/
protected final byte[] com.fitburcodingTable = new byte[128];
protected void initialiseDecodingTable()
{
for (int i = 0; i < com.fitburcodingTable.length; i++)
{
com.fitburcodingTable[i] = (byte)0xff;
}
for (int i = 0; i < encodingTable.length; i++)
{
com.fitburcodingTable[encodingTable[i]] = (byte)i;
}
com.fitburcodingTable['A'] = com.fitburcodingTable['a'];
com.fitburcodingTable['B'] = com.fitburcodingTable['b'];
com.fitburcodingTable['C'] = com.fitburcodingTable['c'];
com.fitburcodingTable['D'] = com.fitburcodingTable['d'];
com.fitburcodingTable['E'] = com.fitburcodingTable['e'];
com.fitburcodingTable['F'] = com.fitburcodingTable['f'];
}
public HexEncoder()
{
initialiseDecodingTable();
}
/**
* encode the input data producing a Hex output stream.
*
* @return the number of bytes produced.
*/
public int encode(
byte[] data,
int off,
int length,
OutputStream out)
throws IOException
{
for (int i = off; i < (off + length); i++)
{
int v = data[i] & 0xff;
out.write(encodingTable[(v >>> 4)]);
out.write(encodingTable[v & 0xf]);
}
return length * 2;
}
private static boolean ignore(
char c)
{
return c == '\n' || c =='\r' || c == '\t' || c == ' ';
}
/**
* com.fitburcode the Hex encoded byte data writing it to the given output stream,
* whitespace characters will be ignored.
*
* @return the number of bytes produced.
*/
public int com.fitburcode(
byte[] data,
int off,
int length,
OutputStream out)
throws IOException
{
byte b1, b2;
int outLen = 0;
int end = off + length;
while (end > off)
{
if (!ignore((char)data[end - 1]))
{
break;
}
end--;
}
int i = off;
while (i < end)
{
while (i < end && ignore((char)data[i]))
{
i++;
}
b1 = com.fitburcodingTable[data[i++]];
while (i < end && ignore((char)data[i]))
{
i++;
}
b2 = com.fitburcodingTable[data[i++]];
if ((b1 | b2) < 0)
{
throw new IOException("invalid characters encountered in Hex data");
}
out.write((b1 << 4) | b2);
outLen++;
}
return outLen;
}
/**
* com.fitburcode the Hex encoded String data writing it to the given output stream,
* whitespace characters will be ignored.
*
* @return the number of bytes produced.
*/
public int com.fitburcode(
String data,
OutputStream out)
throws IOException
{
byte b1, b2;
int length = 0;
int end = data.length();
while (end > 0)
{
if (!ignore(data.charAt(end - 1)))
{
break;
}
end--;
}
int i = 0;
while (i < end)
{
while (i < end && ignore(data.charAt(i)))
{
i++;
}
b1 = com.fitburcodingTable[data.charAt(i++)];
while (i < end && ignore(data.charAt(i)))
{
i++;
}
b2 = com.fitburcodingTable[data.charAt(i++)];
if ((b1 | b2) < 0)
{
throw new IOException("invalid characters encountered in Hex string");
}
out.write((b1 << 4) | b2);
length++;
}
return length;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy