package net.tomp2p.message;
import io.netty.buffer.ByteBuf;
import java.io.IOException;
import java.util.Arrays;
public class RSASignatureCodec implements SignatureCodec {
// 1024 bits by default
public static final int SIGNATURE_SIZE = 128;
private final byte[] encodedData;
/**
* Create a signature codec using an already existing signature (encoded)
*
* @param encodedData the encoded signature
* @throws IOException
*/
public RSASignatureCodec(byte[] encodedData) throws IOException {
if (encodedData.length != signatureSize()) {
throw new IOException("RSA signature has size " + signatureSize() + " received: " + encodedData.length);
}
this.encodedData = encodedData;
}
/**
* Create a signature codec from a buffer
*
* @param buf the buffer containing the signature at its reader index
*/
public RSASignatureCodec(ByteBuf buf) {
encodedData = new byte[signatureSize()];
buf.readBytes(encodedData);
}
@Override
public byte[] encode() {
// no decoding necessary
return encodedData;
}
@Override
public SignatureCodec write(ByteBuf buf) {
buf.writeBytes(encodedData);
return this;
}
@Override
public int hashCode() {
return Arrays.hashCode(encodedData);
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof RSASignatureCodec)) {
return false;
}
if (obj == this) {
return true;
}
RSASignatureCodec s = (RSASignatureCodec) obj;
return Arrays.equals(s.encodedData, encodedData);
}
@Override
public int signatureSize() {
return SIGNATURE_SIZE;
}
}