Skip to content

Commit 4c6ec22

Browse files
committed
added LMSTest, HSSTest, added support for use of 1 level HSS keys in LMSSigner
1 parent f6f6a6c commit 4c6ec22

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

core/src/main/java/org/bouncycastle/pqc/crypto/lms/LMSSigner.java

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,41 @@ public void init(boolean forSigning, CipherParameters param)
1515
{
1616
if (forSigning)
1717
{
18-
privKey = (LMSPrivateKeyParameters)param;
18+
if (param instanceof HSSPrivateKeyParameters)
19+
{
20+
HSSPrivateKeyParameters hssPriv = (HSSPrivateKeyParameters)param;
21+
if (hssPriv.getL() == 1)
22+
{
23+
privKey = hssPriv.getRootKey();
24+
}
25+
else
26+
{
27+
throw new IllegalArgumentException("only a single level HSS key can be used with LMS");
28+
}
29+
}
30+
else
31+
{
32+
privKey = (LMSPrivateKeyParameters)param;
33+
}
1934
}
2035
else
2136
{
22-
pubKey = (LMSPublicKeyParameters)param;
37+
if (param instanceof HSSPublicKeyParameters)
38+
{
39+
HSSPublicKeyParameters hssPub = (HSSPublicKeyParameters)param;
40+
if (hssPub.getL() == 1)
41+
{
42+
pubKey = hssPub.getLMSPublicKey();
43+
}
44+
else
45+
{
46+
throw new IllegalArgumentException("only a single level HSS key can be used with LMS");
47+
}
48+
}
49+
else
50+
{
51+
pubKey = (LMSPublicKeyParameters)param;
52+
}
2353
}
2454
}
2555

core/src/test/java/org/bouncycastle/pqc/crypto/test/AllTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public static Test suite()
1919
{
2020
TestSuite suite = new TestSuite("Lightweight PQ Crypto Tests");
2121

22+
suite.addTestSuite(LMSTest.class);
23+
suite.addTestSuite(HSSTest.class);
2224
suite.addTestSuite(XMSSMTPrivateKeyTest.class);
2325
suite.addTestSuite(XMSSMTPublicKeyTest.class);
2426
suite.addTestSuite(XMSSMTSignatureTest.class);

core/src/test/java/org/bouncycastle/pqc/crypto/test/LMSTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.bouncycastle.crypto.AsymmetricCipherKeyPairGenerator;
99
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
1010
import org.bouncycastle.pqc.crypto.ExhaustedPrivateKeyException;
11+
import org.bouncycastle.pqc.crypto.lms.HSSPrivateKeyParameters;
1112
import org.bouncycastle.pqc.crypto.lms.LMOtsParameters;
1213
import org.bouncycastle.pqc.crypto.lms.LMSKeyGenerationParameters;
1314
import org.bouncycastle.pqc.crypto.lms.LMSKeyPairGenerator;
@@ -158,7 +159,7 @@ public void testKeyGenAndSignTwoSigsWithShard()
158159
PrivateKeyInfo pInfo = PrivateKeyInfoFactory.createPrivateKeyInfo(kp.getPrivate());
159160
AsymmetricKeyParameter pKey = PrivateKeyFactory.createKey(pInfo.getEncoded());
160161

161-
signer.init(false, ((LMSPrivateKeyParameters)pKey).getPublicKey());
162+
signer.init(false, ((HSSPrivateKeyParameters)pKey).getPublicKey());
162163

163164
assertTrue(signer.verifySignature(msg1, sig1));
164165
}

0 commit comments

Comments
 (0)