Skip to content

Commit 20e323f

Browse files
committed
updated HQC to always generate 256 bit secrets
1 parent 91df749 commit 20e323f

File tree

6 files changed

+17
-7
lines changed

6 files changed

+17
-7
lines changed

core/src/main/java/org/bouncycastle/pqc/crypto/hqc/HQCKEMExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public byte[] extractSecret(byte[] encapsulation)
3030

3131
engine.decaps(session_key, encapsulation, sk);
3232

33-
return Arrays.copyOfRange(session_key, 0, key.getParameters().getK());
33+
return Arrays.copyOfRange(session_key, 0, 32);
3434
}
3535

3636
public int getEncapsulationLength()

core/src/main/java/org/bouncycastle/pqc/crypto/hqc/HQCKEMGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,6 @@ public SecretWithEncapsulation generateEncapsulated(AsymmetricKeyParameter recip
3636

3737
byte[] cipherText = Arrays.concatenate(u, v, salt);
3838

39-
return new SecretWithEncapsulationImpl(Arrays.copyOfRange(K, 0, key.getParameters().getK()), cipherText);
39+
return new SecretWithEncapsulationImpl(Arrays.copyOfRange(K, 0, 32), cipherText);
4040
}
4141
}

core/src/main/java/org/bouncycastle/pqc/crypto/hqc/HQCParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ HQCEngine getEngine()
118118

119119
public int getSessionKeySize()
120120
{
121-
return k * 8;
121+
return 32 * 8;
122122
}
123123

124124
public String getName()

prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/hqc/HQCCipherSpi.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ protected byte[] engineWrap(
251251

252252
Wrapper kWrap = WrapUtil.getWrapper(kemParameterSpec.getKeyAlgorithmName());
253253

254-
KeyParameter keyParameter = new KeyParameter(secEnc.getSecret());
254+
KeyParameter keyParameter = new KeyParameter(WrapUtil.trimSecret(kemParameterSpec.getKeyAlgorithmName(), secEnc.getSecret()));
255255

256256
kWrap.init(true, keyParameter);
257257

@@ -268,7 +268,7 @@ protected byte[] engineWrap(
268268
return rv;
269269
}
270270
catch (IllegalArgumentException e)
271-
{
271+
{ e.printStackTrace();
272272
throw new IllegalBlockSizeException("unable to generate KTS secret: " + e.getMessage());
273273
}
274274
catch (DestroyFailedException e)
@@ -296,7 +296,7 @@ protected Key engineUnwrap(
296296

297297
Wrapper kWrap = WrapUtil.getWrapper(kemParameterSpec.getKeyAlgorithmName());
298298

299-
KeyParameter keyParameter = new KeyParameter(secret);
299+
KeyParameter keyParameter = new KeyParameter(WrapUtil.trimSecret(kemParameterSpec.getKeyAlgorithmName(), secret));
300300

301301
Arrays.clear(secret);
302302

prov/src/main/java/org/bouncycastle/pqc/jcajce/provider/util/WrapUtil.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,16 @@ else if (keyAlgorithmName.equalsIgnoreCase("ARIA-KWP"))
9191
return kWrap;
9292
}
9393

94+
public static byte[] trimSecret(String algName, byte[] secret)
95+
{
96+
if (algName.equals("SEED"))
97+
{
98+
return Arrays.copyOfRange(secret, 0, 16);
99+
}
100+
101+
return secret;
102+
}
103+
94104
private static byte[] makeKeyBytes(KTSParameterSpec ktsSpec, byte[] secret)
95105
throws InvalidKeyException
96106
{

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public void testGenerateAES()
123123
SecretKeyWithEncapsulation secEnc1 = (SecretKeyWithEncapsulation)keyGen.generateKey();
124124

125125
assertEquals("AES", secEnc1.getAlgorithm());
126-
assertEquals(16, secEnc1.getEncoded().length);
126+
assertEquals(32, secEnc1.getEncoded().length);
127127

128128
keyGen.init(new KEMExtractSpec(kp.getPrivate(), secEnc1.getEncapsulation(), "AES"));
129129

0 commit comments

Comments
 (0)