package org.bouncycastle.pqc.crypto.test; import java.text.ParseException; import junit.framework.TestCase; import org.bouncycastle.crypto.digests.SHA256Digest; 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.XMSSUtil; /** * Test cases for XMSS^MT signature class. */ public class XMSSMTSignatureTest extends TestCase { public void testSignatureParsingSHA256() { int totalHeight = 6; int layers = 3; byte[] message = new byte[1024]; XMSSMTParameters params = new XMSSMTParameters(totalHeight, layers, new SHA256Digest(), new NullPRNG()); XMSSMT xmssMT = new XMSSMT(params); xmssMT.generateKeys(); byte[] signature1 = xmssMT.sign(message); XMSSMTSignature mtSignature = null; try { mtSignature = new XMSSMTSignature.Builder(params).withSignature(signature1).build(); byte[] signature2 = mtSignature.toByteArray(); assertTrue(XMSSUtil.compareByteArray(signature1, signature2)); } catch (ParseException e) { e.printStackTrace(); fail(); } } public void testConstructor() { XMSSMTParameters params = new XMSSMTParameters(20, 10, new SHA256Digest(), new NullPRNG()); XMSSMTSignature sig = null; try { sig = new XMSSMTSignature.Builder(params).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]); } } }