blob: c5a73ab46ef479a8a6f1fc4483e85a16eb1cb685 [file] [log] [blame]
package org.bouncycastle.pqc.crypto.test;
import java.text.ParseException;
import junit.framework.TestCase;
import org.bouncycastle.crypto.digests.SHA256Digest;
import org.bouncycastle.crypto.digests.SHA512Digest;
import org.bouncycastle.pqc.crypto.xmss.NullPRNG;
import org.bouncycastle.pqc.crypto.xmss.XMSSMT;
import org.bouncycastle.pqc.crypto.xmss.XMSSMTParameters;
import org.bouncycastle.pqc.crypto.xmss.XMSSMTSignature;
import org.bouncycastle.pqc.crypto.xmss.XMSSParameters;
import org.bouncycastle.pqc.crypto.xmss.XMSSReducedSignature;
import org.bouncycastle.pqc.crypto.xmss.XMSSUtil;
/**
* Test cases for XMSSReducedSignature class.
*
*/
public class XMSSReducedSignatureTest extends TestCase {
public void testSignatureParsingSHA256() {
XMSSMTParameters params = new XMSSMTParameters(8, 2, new SHA256Digest(), new NullPRNG());
XMSSMT mt = new XMSSMT(params);
mt.generateKeys();
byte[] message = new byte[1024];
byte[] sig1 = mt.sign(message);
XMSSMTSignature sig2 = null;
try {
sig2 = new XMSSMTSignature.Builder(params).withSignature(sig1).build();
} catch (ParseException e) {
e.printStackTrace();
}
XMSSReducedSignature reducedSignature1 = sig2.getReducedSignatures().get(0);
byte[] reducedSignatureBinary = reducedSignature1.toByteArray();
XMSSReducedSignature reducedSignature2 = null;
try {
reducedSignature2 = new XMSSReducedSignature.Builder(new XMSSParameters(4, new SHA256Digest(), new NullPRNG())).withReducedSignature(reducedSignatureBinary).build();
} catch (ParseException e) {
e.printStackTrace();
}
assertTrue(XMSSUtil.compareByteArray(reducedSignatureBinary, reducedSignature2.toByteArray()));
}
public void testSignatureParsingSHA512() {
XMSSMTParameters params = new XMSSMTParameters(4, 2, new SHA512Digest(), new NullPRNG());
XMSSMT mt = new XMSSMT(params);
mt.generateKeys();
byte[] message = new byte[1024];
byte[] sig1 = mt.sign(message);
XMSSMTSignature sig2 = null;
try {
sig2 = new XMSSMTSignature.Builder(params).withSignature(sig1).build();
} catch (ParseException e) {
e.printStackTrace();
}
XMSSReducedSignature reducedSignature1 = sig2.getReducedSignatures().get(0);
byte[] reducedSignatureBinary = reducedSignature1.toByteArray();
XMSSReducedSignature reducedSignature2 = null;
try {
reducedSignature2 = new XMSSReducedSignature.Builder(new XMSSParameters(2, new SHA512Digest(), new NullPRNG())).withReducedSignature(reducedSignatureBinary).build();
} catch (ParseException e) {
e.printStackTrace();
}
assertTrue(XMSSUtil.compareByteArray(reducedSignatureBinary, reducedSignature2.toByteArray()));
}
public void testConstructor() {
XMSSReducedSignature sig = null;
try {
sig = new XMSSReducedSignature.Builder(new XMSSParameters(4, new SHA512Digest(), new NullPRNG())).build();
} catch (ParseException ex) {
ex.printStackTrace();
}
byte[] sigByte = sig.toByteArray();
/* check everything is 0 */
for (int i = 0; i < sigByte.length; i++) {
assertEquals(0x00, sigByte[i]);
}
}
}