1
1
package org .bouncycastle .pqc .crypto .slhdsa ;
2
2
3
+ import org .bouncycastle .crypto .CryptoServicesRegistrar ;
3
4
import org .bouncycastle .crypto .Digest ;
5
+ import org .bouncycastle .crypto .NativeServices ;
4
6
import org .bouncycastle .crypto .digests .SHA256Digest ;
5
7
import org .bouncycastle .crypto .digests .SHA512Digest ;
6
8
import org .bouncycastle .crypto .generators .MGF1BytesGenerator ;
13
15
import org .bouncycastle .util .Pack ;
14
16
15
17
class SLHDSASha2Engine
16
- extends SLHDSAEngine
18
+ extends SLHDSAEngine
17
19
{
18
20
private final HMac treeHMac ;
19
21
private final MGF1BytesGenerator mgf1 ;
@@ -27,7 +29,21 @@ class SLHDSASha2Engine
27
29
private Memoable msgMemo ;
28
30
private Memoable sha256Memo ;
29
31
30
- public SLHDSASha2Engine (int n , int w , int d , int a , int k , int h )
32
+
33
+ public static SLHDSAEngine newInstance (int n , int w , int d , int a , int k , int h )
34
+ {
35
+ if (CryptoServicesRegistrar .hasEnabledService (NativeServices .SLHDSA_SHA256 ))
36
+ {
37
+ if (n == 16 )
38
+ {
39
+ return new SLHDSASha2NativeEngine (n , w , d , a , k , h );
40
+ }
41
+ }
42
+ return new SLHDSASha2Engine (n , w , d , a , k , h );
43
+ }
44
+
45
+
46
+ private SLHDSASha2Engine (int n , int w , int d , int a , int k , int h )
31
47
{
32
48
super (n , w , d , a , k , h );
33
49
if (n == 16 )
@@ -55,13 +71,13 @@ void init(byte[] pkSeed)
55
71
56
72
msgDigest .update (pkSeed , 0 , pkSeed .length );
57
73
msgDigest .update (padding , 0 , bl - N ); // toByte(0, 64 - n)
58
- msgMemo = ((Memoable )msgDigest ).copy ();
74
+ msgMemo = ((Memoable ) msgDigest ).copy ();
59
75
60
76
msgDigest .reset ();
61
77
62
78
sha256 .update (pkSeed , 0 , pkSeed .length );
63
79
sha256 .update (padding , 0 , 64 - pkSeed .length ); // toByte(0, 64 - n)
64
- sha256Memo = ((Memoable )sha256 ).copy ();
80
+ sha256Memo = ((Memoable ) sha256 ).copy ();
65
81
66
82
sha256 .reset ();
67
83
}
@@ -70,7 +86,7 @@ public byte[] F(byte[] pkSeed, ADRS adrs, byte[] m1)
70
86
{
71
87
byte [] compressedADRS = compressedADRS (adrs );
72
88
73
- ((Memoable )sha256 ).reset (sha256Memo );
89
+ ((Memoable ) sha256 ).reset (sha256Memo );
74
90
75
91
sha256 .update (compressedADRS , 0 , compressedADRS .length );
76
92
sha256 .update (m1 , 0 , m1 .length );
@@ -83,7 +99,7 @@ public byte[] H(byte[] pkSeed, ADRS adrs, byte[] m1, byte[] m2)
83
99
{
84
100
byte [] compressedADRS = compressedADRS (adrs );
85
101
86
- ((Memoable )msgDigest ).reset (msgMemo );
102
+ ((Memoable ) msgDigest ).reset (msgMemo );
87
103
88
104
msgDigest .update (compressedADRS , 0 , compressedADRS .length );
89
105
@@ -138,7 +154,7 @@ public byte[] T_l(byte[] pkSeed, ADRS adrs, byte[] m)
138
154
{
139
155
byte [] compressedADRS = compressedADRS (adrs );
140
156
141
- ((Memoable )msgDigest ).reset (msgMemo );
157
+ ((Memoable ) msgDigest ).reset (msgMemo );
142
158
143
159
msgDigest .update (compressedADRS , 0 , compressedADRS .length );
144
160
msgDigest .update (m , 0 , m .length );
@@ -151,7 +167,7 @@ byte[] PRF(byte[] pkSeed, byte[] skSeed, ADRS adrs)
151
167
{
152
168
int n = skSeed .length ;
153
169
154
- ((Memoable )sha256 ).reset (sha256Memo );
170
+ ((Memoable ) sha256 ).reset (sha256Memo );
155
171
156
172
byte [] compressedADRS = compressedADRS (adrs );
157
173
0 commit comments