Skip to content

Commit a018a23

Browse files
authored
Add additional secret key algorithms. (#759)
1 parent 05dae8f commit a018a23

3 files changed

Lines changed: 26 additions & 12 deletions

File tree

kse/src/main/java/org/kse/crypto/secretkey/SecretKeyType.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,17 @@
2626
public enum SecretKeyType {
2727
AES("AES", "AES", 128, 256, 64),
2828
ARC4("ARC4", "ARC4", 40, 2048, 8),
29+
ARIA("ARIA", "ARIA", 128, 256, 64),
2930
BLOWFISH("BLOWFISH", "Blowfish", 32, 448, 64),
3031
CAMELLIA("CAMELLIA", "Camellia", 128, 256, 64),
31-
CHACHA("CHACHA", "ChaCha", 128, 256, 128),
3232
CAST5("CAST5", "CAST-128", 40, 128, 8),
3333
CAST6("CAST6", "CAST-256", 128, 256, 32),
34+
CHACHA("CHACHA", "ChaCha", 128, 256, 128),
3435
DES("DES", "DES", 64, 64, 1),
3536
DESEDE("DESede", "DESEDE", 128, 192, 64),
37+
DSTU7624("DSTU7624", "DSTU 7624", 128, 512, 128), // key sizes are 128, 256, 512
3638
GOST_28147("GOST28147", "GOST 28147-89", 256, 256, 1),
39+
GOST_3412("GOST3412-2015", "GOST R 34.12-2015", 256, 256, 1),
3740
GRAIN_V1("Grainv1", "Grain v1", 80, 80, 1),
3841
GRAIN_128("Grain128", "Grain-128", 128, 128, 1),
3942
HC_128("HC128", "HC-128", 128, 128, 1),
@@ -49,22 +52,27 @@ public enum SecretKeyType {
4952
HMAC_SHA384("HMACSHA384", "HMac-SHA384", 384, 384, 1),
5053
HMAC_SHA512("HMACSHA512", "HMac-SHA512", 512, 512, 1),
5154
HMAC_TIGER("HMACTIGER", "HMac-Tiger", 192, 192, 1),
55+
IDEA("IDEA", "IDEA", 128, 128, 1),
5256
NOEKEON("NOEKEON", "NOEKEON", 128, 128, 1),
5357
RC2("RC2", "RC2", 8, 128, 8),
5458
RC5("RC5", "RC5", 8, 2040, 8),
5559
RC6("RC6", "RC6", 128, 256, 64),
5660
RIJNDAEL("RIJNDAEL", "Rijndael", 128, 256, 32),
5761
SALSA_20("SALSA20", "Salsa20", 128, 256, 128),
5862
SERPENT("Serpent", "Serpent", 128, 256, 64),
63+
TNEPRES("Tnepres", "Tnepres", 128, 256, 64),
5964
SEED("SEED", "SEED", 128, 128, 1),
6065
SKIPJACK("SKIPJACK", "Skipjack", 80, 80, 1),
66+
SM4("SM4", "SM4", 128, 128, 1),
6167
TEA("TEA", "TEA", 128, 128, 1),
6268
TWOFISH("Twofish", "Twofish", 128, 256, 64),
6369
THREEFISH_256("Threefish-256", "Threefish-256", 256, 256, 1),
6470
THREEFISH_512("Threefish-512", "Threefish-512", 512, 512, 1),
6571
THREEFISH_1024("Threefish-1024", "Threefish-1024", 1024, 1024, 1),
6672
XSALSA_20("XSALSA20", "XSalsa20", 128, 256, 128),
67-
XTEA("XTEA", "XTEA", 128, 128, 1);
73+
XTEA("XTEA", "XTEA", 128, 128, 1),
74+
ZUC_128("ZUC-128", "ZUC-128", 128, 128, 1),
75+
ZUC_256("ZUC-256", "ZUC-256", 256, 256, 1);
6876

6977
// Supported sets of secret key algorithms. Located here so that they can be
7078
// referenced by the KeyStoreType enum.

kse/src/main/java/org/kse/crypto/secretkey/SecretKeyUtil.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
import org.kse.crypto.KeyInfo;
3535
import org.kse.utilities.rng.RNG;
3636

37+
/**
38+
* Provides utility methods relating to secret keys.
39+
*/
3740
public final class SecretKeyUtil {
3841
private static ResourceBundle res = ResourceBundle.getBundle("org/kse/crypto/secretkey/resources");
3942

@@ -69,8 +72,12 @@ public static SecretKey generateSecretKey(SecretKeyType secretKeyType, int keySi
6972
public static KeyInfo getKeyInfo(SecretKey secretKey) {
7073
String algorithm = secretKey.getAlgorithm();
7174

72-
if (algorithm.equals("RC4")) {
75+
if ("RC4".equals(algorithm)) {
7376
algorithm = "ARC4"; // RC4 is trademarked so we never want to display it
77+
} else if ("ZUC128".equals(algorithm)) {
78+
algorithm = "ZUC-128"; // BC uses ZUC-128 for the key generator and ZUC128 for the algorithm
79+
} else if ("ZUC256".equals(algorithm)) {
80+
algorithm = "ZUC-256"; // BC uses ZUC-256 for the key generator and ZUC256 for the algorithm
7481
}
7582

7683
if (secretKey.getFormat().equals("RAW")) {

kse/src/test/java/org/kse/crypto/secretkey/SecretKeyUtilTest.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,20 @@
2323

2424
import javax.crypto.SecretKey;
2525

26-
import org.junit.jupiter.api.Test;
26+
import org.junit.jupiter.params.ParameterizedTest;
27+
import org.junit.jupiter.params.provider.EnumSource;
2728
import org.kse.crypto.CryptoException;
2829
import org.kse.crypto.CryptoTestsBase;
2930
import org.kse.crypto.KeyInfo;
3031

32+
/**
33+
* Unit tests for SecretKeyUtil.
34+
*/
3135
public class SecretKeyUtilTest extends CryptoTestsBase {
32-
@Test
33-
public void testAllSecretKeyTypes() throws CryptoException {
34-
for (SecretKeyType secretKeyType : SecretKeyType.values()) {
35-
testSecretKeyType(secretKeyType);
36-
}
37-
}
3836

39-
@Test
40-
private void testSecretKeyType(SecretKeyType secretKeyType) throws CryptoException {
37+
@ParameterizedTest
38+
@EnumSource(value = SecretKeyType.class)
39+
void testSecretKeyType(SecretKeyType secretKeyType) throws CryptoException {
4140
for (int keySize = secretKeyType.minSize(); keySize <= secretKeyType.maxSize(); keySize += secretKeyType
4241
.stepSize()) {
4342
SecretKey secretKey = SecretKeyUtil.generateSecretKey(secretKeyType, keySize);

0 commit comments

Comments
 (0)