@@ -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