Skip to content

Commit 96a59e6

Browse files
author
gefeili
committed
Refactor in verifySignatureCore
1 parent 2504593 commit 96a59e6

File tree

1 file changed

+3
-21
lines changed

1 file changed

+3
-21
lines changed

core/src/main/java/org/bouncycastle/pqc/crypto/snova/SnovaSigner.java

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public class SnovaSigner
1616
private SnovaEngine engine;
1717
private SecureRandom random;
1818
private final SHAKEDigest digest = new SHAKEDigest(256);
19-
2019
private SnovaPublicKeyParameters pubKey;
2120
private SnovaPrivateKeyParameters privKey;
2221

@@ -104,8 +103,7 @@ public static void createSignedHash(
104103
byte[] digest, int bytesDigest,
105104
byte[] ptPublicKeySeed, int seedLengthPublic,
106105
byte[] arraySalt, int bytesSalt,
107-
byte[] signedHashOut, int bytesHash
108-
)
106+
byte[] signedHashOut, int bytesHash)
109107
{
110108
// Initialize SHAKE256 XOF
111109
SHAKEDigest shake = new SHAKEDigest(256);
@@ -385,20 +383,15 @@ public boolean verifySignatureCore(byte[] digest, byte[] signature, PublicKey pk
385383
final int lsq = params.getLsq();
386384
final int m = params.getM();
387385
final int n = params.getN();
388-
final int v = params.getV();
389386
final int o = params.getO();
390387
int bytesSignature = ((n * lsq) + 1) >>> 1;
391388

392-
// Extract salt from signature
393-
byte[] ptSalt = Arrays.copyOfRange(signature, bytesSignature, bytesSignature + bytesSalt);
394-
//byte[] signatureBody = Arrays.copyOf(signature, signature.length - bytesSalt);
395-
396389
// Step 1: Regenerate signed hash using public key seed, digest and salt
397390
byte[] signedHash = new byte[bytesHash];
398391
SHAKEDigest shake = new SHAKEDigest(256);
399392
shake.update(pkx.publicKeySeed, 0, pkx.publicKeySeed.length);
400393
shake.update(digest, 0, digest.length);
401-
shake.update(ptSalt, 0, ptSalt.length);
394+
shake.update(signature, bytesSignature, bytesSalt);
402395
shake.doFinal(signedHash, 0, bytesHash);
403396

404397
// Handle odd-length adjustment (if needed)
@@ -412,14 +405,7 @@ public boolean verifySignatureCore(byte[] digest, byte[] signature, PublicKey pk
412405
byte[] decodedSig = new byte[n * lsq];
413406
GF16Utils.decode(signature, 0, decodedSig, 0, decodedSig.length);
414407

415-
for (int i = 0; i < n; i++)
416-
{
417-
for (int row = 0; row < l; row++)
418-
{
419-
System.arraycopy(decodedSig, i * lsq + row * l,
420-
signatureGF16Matrix[i][row], 0, l);
421-
}
422-
}
408+
MapGroup1.fillAlpha(decodedSig, 0, signatureGF16Matrix, decodedSig.length);
423409

424410
// Step 3: Evaluate signature using public key
425411
byte[][][] computedHashMatrix = new byte[m][l][l];
@@ -447,7 +433,6 @@ private void evaluation(byte[][][] hashMatrix, MapGroup1 map1, byte[][][][] p22,
447433
final int m = params.getM();
448434
final int alpha = params.getAlpha();
449435
final int n = params.getN();
450-
final int v = params.getV();
451436
final int l = params.getL();
452437

453438
byte[][][][][] Left = new byte[m][alpha][n][l][l];
@@ -515,7 +500,6 @@ private void evaluation(byte[][][] hashMatrix, MapGroup1 map1, byte[][][][] p22,
515500
}
516501
}
517502

518-
// Helper method to get appropriate P matrix based on indices
519503
private byte[] getPMatrix(MapGroup1 map1, byte[][][][] p22, int mi, int ni, int nj)
520504
{
521505
final int v = params.getV();
@@ -637,7 +621,6 @@ private void multiplyGF16Matrices(byte[] a, byte[] b, byte[][] result)
637621
private int performGaussianElimination(byte[][] Gauss, byte[] solution, int size)
638622
{
639623
final int cols = size + 1;
640-
byte tGF16;
641624

642625
for (int i = 0; i < size; i++)
643626
{
@@ -723,5 +706,4 @@ private int iPrime(int mi, int alpha)
723706
// Implement index calculation based on SNOVA specification
724707
return (mi + alpha) % params.getO();
725708
}
726-
727709
}

0 commit comments

Comments
 (0)