Skip to content

Commit cc08081

Browse files
authored
added sig check on signing private keys (#194)
1 parent 77fd038 commit cc08081

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

providers/bc/src/main/java/R5ArtifactParser.java

+42-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.security.PrivateKey;
1313
import java.security.PublicKey;
1414
import java.security.Security;
15+
import java.security.Signature;
1516
import java.security.cert.CertificateFactory;
1617
import java.security.cert.X509Certificate;
1718
import java.security.spec.PKCS8EncodedKeySpec;
@@ -41,6 +42,8 @@
4142
import org.bouncycastle.cert.DeltaCertificateTool;
4243
import org.bouncycastle.cert.X509CertificateHolder;
4344
import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder;
45+
import org.bouncycastle.jcajce.interfaces.MLDSAPrivateKey;
46+
import org.bouncycastle.jcajce.interfaces.SLHDSAPrivateKey;
4447
import org.bouncycastle.jce.provider.BouncyCastleProvider;
4548
import org.bouncycastle.operator.ContentVerifierProvider;
4649
import org.bouncycastle.operator.OperatorCreationException;
@@ -49,6 +52,7 @@
4952
import org.bouncycastle.pqc.crypto.mlkem.MLKEMPrivateKeyParameters;
5053
import org.bouncycastle.pqc.crypto.util.PrivateKeyFactory;
5154
import org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider;
55+
import org.bouncycastle.util.Strings;
5256
import org.bouncycastle.util.io.Streams;
5357
import org.bouncycastle.util.io.pem.PemReader;
5458

@@ -238,7 +242,11 @@ else if (zipName.endsWith("_priv.der"))
238242

239243
privateKey = (PrivateKey)keyFact.generatePrivate(new PKCS8EncodedKeySpec(derData));
240244
privateKeys.put(zipName, privateKey);
241-
System.err.println(zipName);
245+
246+
if (privateKey instanceof SLHDSAPrivateKey || privateKey instanceof MLDSAPrivateKey)
247+
{
248+
doSigCheck(privateKey);
249+
}
242250
}
243251
catch (Exception e)
244252
{
@@ -298,6 +306,34 @@ else if (zipName.endsWith("_ciphertext.bin"))
298306
checkCertificates(producer, certificates, ignored, privateKeys, cipherTexts);
299307
}
300308

309+
public static void doSigCheck(PrivateKey privKey)
310+
throws Exception
311+
{
312+
Signature sig = Signature.getInstance(privKey.getAlgorithm(), "BC");
313+
314+
sig.initSign(privKey);
315+
316+
sig.update(Strings.toByteArray("abc"));
317+
318+
byte[] genSig = sig.sign();
319+
320+
if (privKey instanceof MLDSAPrivateKey)
321+
{
322+
sig.initVerify(((MLDSAPrivateKey)privKey).getPublicKey());
323+
}
324+
else
325+
{
326+
sig.initVerify(((SLHDSAPrivateKey)privKey).getPublicKey());
327+
}
328+
329+
sig.update(Strings.toByteArray("abc"));
330+
331+
if (!sig.verify(genSig))
332+
{
333+
throw new IllegalStateException("sig failed to verify");
334+
}
335+
}
336+
301337
public static void processArtifacts(String producer, String dirName)
302338
throws Exception
303339
{
@@ -366,6 +402,11 @@ else if (fileName.endsWith("_priv.der"))
366402

367403
privateKey = (PrivateKey)keyFact.generatePrivate(new PKCS8EncodedKeySpec(derData));
368404
privateKeys.put(fileName, privateKey);
405+
406+
if (privateKey instanceof SLHDSAPrivateKey || privateKey instanceof MLDSAPrivateKey)
407+
{
408+
doSigCheck(privateKey);
409+
}
369410
}
370411
catch (Exception e)
371412
{

0 commit comments

Comments
 (0)