Skip to content

Commit 3d66c26

Browse files
committed
256 bit NTRU parameters
1 parent 506875a commit 3d66c26

File tree

11 files changed

+94
-4
lines changed

11 files changed

+94
-4
lines changed

core/src/main/java/org/bouncycastle/asn1/bc/BCObjectIdentifiers.java

+2
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,8 @@ public interface BCObjectIdentifiers
376376
ASN1ObjectIdentifier ntruhps2048677 = pqc_kem_ntru.branch("2");
377377
ASN1ObjectIdentifier ntruhps4096821 = pqc_kem_ntru.branch("3");
378378
ASN1ObjectIdentifier ntruhrss701 = pqc_kem_ntru.branch("4");
379+
ASN1ObjectIdentifier ntruhps40961229 = pqc_kem_ntru.branch("5");
380+
ASN1ObjectIdentifier ntruhrss1373 = pqc_kem_ntru.branch("6");
379381

380382
/**
381383
* Kyber

core/src/main/java/org/bouncycastle/pqc/crypto/ntru/NTRUParameters.java

+13
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import org.bouncycastle.pqc.crypto.KEMParameters;
55
import org.bouncycastle.pqc.math.ntru.parameters.NTRUHPS2048509;
66
import org.bouncycastle.pqc.math.ntru.parameters.NTRUHPS2048677;
7+
import org.bouncycastle.pqc.math.ntru.parameters.NTRUHPS40961229;
78
import org.bouncycastle.pqc.math.ntru.parameters.NTRUHPS4096821;
9+
import org.bouncycastle.pqc.math.ntru.parameters.NTRUHRSS1373;
810
import org.bouncycastle.pqc.math.ntru.parameters.NTRUHRSS701;
911
import org.bouncycastle.pqc.math.ntru.parameters.NTRUParameterSet;
1012

@@ -27,11 +29,22 @@ public class NTRUParameters
2729
*/
2830
public static final NTRUParameters ntruhps4096821 = new NTRUParameters("ntruhps4096821", new NTRUHPS4096821());
2931

32+
/**
33+
* NTRU-HPS parameter set with n = 1229 and q = 4096.
34+
*/
35+
public static final NTRUParameters ntruhps40961229 = new NTRUParameters("ntruhps40961229", new NTRUHPS40961229());
36+
3037
/**
3138
* NTRU-HRSS parameter set with n = 701.
3239
*/
3340
public static final NTRUParameters ntruhrss701 = new NTRUParameters("ntruhrss701", new NTRUHRSS701());
3441

42+
/**
43+
* NTRU-HRSS parameter set with n = 1373.
44+
*/
45+
// TODO
46+
// public static final NTRUParameters ntruhrss1373 = new NTRUParameters("ntruhrss1373", new NTRUHRSS1373());
47+
3548
private final String name;
3649
/**
3750
* Currently selected parameter set

core/src/main/java/org/bouncycastle/pqc/crypto/util/PublicKeyFactory.java

+2
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,9 @@ public class PublicKeyFactory
188188
converters.put(BCObjectIdentifiers.ntruhps2048509, new NtruConverter());
189189
converters.put(BCObjectIdentifiers.ntruhps2048677, new NtruConverter());
190190
converters.put(BCObjectIdentifiers.ntruhps4096821, new NtruConverter());
191+
converters.put(BCObjectIdentifiers.ntruhps40961229, new NtruConverter());
191192
converters.put(BCObjectIdentifiers.ntruhrss701, new NtruConverter());
193+
converters.put(BCObjectIdentifiers.ntruhrss1373, new NtruConverter());
192194
converters.put(BCObjectIdentifiers.falcon_512, new FalconConverter());
193195
converters.put(BCObjectIdentifiers.falcon_1024, new FalconConverter());
194196
converters.put(BCObjectIdentifiers.kyber512, new KyberConverter());

core/src/main/java/org/bouncycastle/pqc/crypto/util/Utils.java

+4
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,16 @@ class Utils
203203
ntruOids.put(NTRUParameters.ntruhps2048509, BCObjectIdentifiers.ntruhps2048509);
204204
ntruOids.put(NTRUParameters.ntruhps2048677, BCObjectIdentifiers.ntruhps2048677);
205205
ntruOids.put(NTRUParameters.ntruhps4096821, BCObjectIdentifiers.ntruhps4096821);
206+
ntruOids.put(NTRUParameters.ntruhps40961229, BCObjectIdentifiers.ntruhps40961229);
206207
ntruOids.put(NTRUParameters.ntruhrss701, BCObjectIdentifiers.ntruhrss701);
208+
// ntruOids.put(NTRUParameters.ntruhrss1373, BCObjectIdentifiers.ntruhrss1373);
207209

208210
ntruParams.put(BCObjectIdentifiers.ntruhps2048509, NTRUParameters.ntruhps2048509);
209211
ntruParams.put(BCObjectIdentifiers.ntruhps2048677, NTRUParameters.ntruhps2048677);
210212
ntruParams.put(BCObjectIdentifiers.ntruhps4096821, NTRUParameters.ntruhps4096821);
213+
ntruParams.put(BCObjectIdentifiers.ntruhps40961229, NTRUParameters.ntruhps40961229);
211214
ntruParams.put(BCObjectIdentifiers.ntruhrss701, NTRUParameters.ntruhrss701);
215+
// ntruParams.put(BCObjectIdentifiers.ntruhrss1373, NTRUParameters.ntruhrss1373);
212216

213217
falconOids.put(FalconParameters.falcon_512, BCObjectIdentifiers.falcon_512);
214218
falconOids.put(FalconParameters.falcon_1024, BCObjectIdentifiers.falcon_1024);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.bouncycastle.pqc.math.ntru.parameters;
2+
3+
import org.bouncycastle.pqc.math.ntru.HPS4096Polynomial;
4+
import org.bouncycastle.pqc.math.ntru.Polynomial;
5+
6+
/**
7+
* NTRU-HPS parameter set with n = 1229 and q = 4096.
8+
*
9+
* @see NTRUHPSParameterSet
10+
*/
11+
public class NTRUHPS40961229
12+
extends NTRUHPSParameterSet
13+
{
14+
public NTRUHPS40961229()
15+
{
16+
super(
17+
1229,
18+
12,
19+
32,
20+
32,
21+
32 // Category 5 (local model)
22+
);
23+
}
24+
25+
@Override
26+
public Polynomial createPolynomial()
27+
{
28+
return new HPS4096Polynomial(this);
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.bouncycastle.pqc.math.ntru.parameters;
2+
3+
4+
/**
5+
* NTRU-HRSS parameter set with n = 701.
6+
*
7+
* @see NTRUHRSSParameterSet
8+
*/
9+
public class NTRUHRSS1373
10+
extends NTRUHRSSParameterSet
11+
{
12+
public NTRUHRSS1373()
13+
{
14+
super(
15+
1373,
16+
14,
17+
32,
18+
32,
19+
32 // Category 5 (local model) - KATs based on 256 bit
20+
);
21+
}
22+
}

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

+2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ public void testParameters()
1414
assertEquals(256, NTRUParameters.ntruhps2048509.getSessionKeySize());
1515
assertEquals(256, NTRUParameters.ntruhps2048677.getSessionKeySize());
1616
assertEquals(256, NTRUParameters.ntruhps4096821.getSessionKeySize());
17+
assertEquals(256, NTRUParameters.ntruhps40961229.getSessionKeySize());
1718

1819
assertEquals(256, NTRUParameters.ntruhrss701.getSessionKeySize());
20+
// assertEquals(256, NTRUParameters.ntruhrss1373.getSessionKeySize());
1921
}
2022

2123
public void testHpsParameters()

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

+12-3
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,27 @@ public class NTRUTest
3636
NTRUParameters.ntruhps2048509,
3737
NTRUParameters.ntruhps2048677,
3838
NTRUParameters.ntruhps4096821,
39-
NTRUParameters.ntruhrss701
39+
NTRUParameters.ntruhps40961229,
40+
NTRUParameters.ntruhrss701,
41+
// NTRUParameters.ntruhrss1373
4042
};
43+
4144
private final String[] katBase = {
4245
"ntruhps2048509",
4346
"ntruhps2048677",
4447
"ntruhps4096821",
45-
"ntruhrss701"
48+
"ntruhps40961229",
49+
"ntruhrss701",
50+
// "ntruhrss1373"
4651
};
52+
4753
private final String[] katFiles = {
4854
"PQCkemKAT_935.rsp",
4955
"PQCkemKAT_1234.rsp",
5056
"PQCkemKAT_1590.rsp",
51-
"PQCkemKAT_1450.rsp"
57+
"PQCkemKAT_2366.rsp",
58+
"PQCkemKAT_1450.rsp",
59+
"PQCkemKAT_2983.rsp"
5260
};
5361

5462
public void testPrivInfoGeneration()
@@ -76,6 +84,7 @@ public void testPQCgenKAT_kem()
7684
for (int i = 0; i < this.params.length; i++)
7785
{
7886
NTRUParameters param = params[i];
87+
7988
InputStream src = TestResourceFinder.findTestResource("pqc/crypto/ntru/" + katBase[i], katFiles[i]);
8089
List<NTRUKAT> kats = NTRUKAT.getKAT(src);
8190

prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyPairGeneratorSpi.java

+2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ public class NTRUKeyPairGeneratorSpi
2828
parameters.put(NTRUParameterSpec.ntruhps2048509.getName(), NTRUParameters.ntruhps2048509);
2929
parameters.put(NTRUParameterSpec.ntruhps2048677.getName(), NTRUParameters.ntruhps2048677);
3030
parameters.put(NTRUParameterSpec.ntruhps4096821.getName(), NTRUParameters.ntruhps4096821);
31+
parameters.put(NTRUParameterSpec.ntruhps40961229.getName(), NTRUParameters.ntruhps40961229);
3132
parameters.put(NTRUParameterSpec.ntruhrss701.getName(), NTRUParameters.ntruhrss701);
33+
// parameters.put(NTRUParameterSpec.ntruhrss1373.getName(), NTRUParameters.ntruhrss1373);
3234
}
3335

3436
NTRUKeyGenerationParameters param;

prov/src/main/java/org/bouncycastle/pqc/jcajce/spec/NTRUParameterSpec.java

+2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ public class NTRUParameterSpec
1313
public static final NTRUParameterSpec ntruhps2048509 = new NTRUParameterSpec(NTRUParameters.ntruhps2048509);
1414
public static final NTRUParameterSpec ntruhps2048677 = new NTRUParameterSpec(NTRUParameters.ntruhps2048677);
1515
public static final NTRUParameterSpec ntruhps4096821 = new NTRUParameterSpec(NTRUParameters.ntruhps4096821);
16+
public static final NTRUParameterSpec ntruhps40961229 = new NTRUParameterSpec(NTRUParameters.ntruhps40961229);
1617
public static final NTRUParameterSpec ntruhrss701 = new NTRUParameterSpec(NTRUParameters.ntruhrss701);
18+
// public static final NTRUParameterSpec ntruhrss1373 = new NTRUParameterSpec(NTRUParameters.ntruhrss1373);
1719

1820
private static Map parameters = new HashMap();
1921

prov/src/test/java/org/bouncycastle/pqc/jcajce/provider/test/NTRUKeyPairGeneratorTest.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ public void testKeyPairEncoding()
4040
NTRUParameterSpec.ntruhps2048509,
4141
NTRUParameterSpec.ntruhps2048677,
4242
NTRUParameterSpec.ntruhps4096821,
43-
NTRUParameterSpec.ntruhrss701
43+
NTRUParameterSpec.ntruhps40961229,
44+
NTRUParameterSpec.ntruhrss701,
45+
// NTRUParameterSpec.ntruhrss1373
4446
};
4547
kf = KeyFactory.getInstance("NTRU", "BC");
4648

0 commit comments

Comments
 (0)