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]); } } }