JCE: add HmacSHA224 support to KeyGenerator implementation
parent
9e025b75ce
commit
aa49b15cdb
|
@ -134,6 +134,7 @@ The JCE provider currently supports the following algorithms:
|
||||||
KeyGenerator
|
KeyGenerator
|
||||||
AES
|
AES
|
||||||
HmacSHA1
|
HmacSHA1
|
||||||
|
HmacSHA224
|
||||||
HmacSHA256
|
HmacSHA256
|
||||||
HmacSHA384
|
HmacSHA384
|
||||||
HmacSHA512
|
HmacSHA512
|
||||||
|
|
|
@ -23,6 +23,7 @@ package com.wolfssl.provider.jce;
|
||||||
|
|
||||||
import com.wolfssl.wolfcrypt.Fips;
|
import com.wolfssl.wolfcrypt.Fips;
|
||||||
import com.wolfssl.wolfcrypt.Aes;
|
import com.wolfssl.wolfcrypt.Aes;
|
||||||
|
import com.wolfssl.wolfcrypt.Sha224;
|
||||||
import com.wolfssl.wolfcrypt.Sha256;
|
import com.wolfssl.wolfcrypt.Sha256;
|
||||||
import com.wolfssl.wolfcrypt.Sha384;
|
import com.wolfssl.wolfcrypt.Sha384;
|
||||||
import com.wolfssl.wolfcrypt.Sha512;
|
import com.wolfssl.wolfcrypt.Sha512;
|
||||||
|
@ -45,6 +46,7 @@ public class WolfCryptKeyGenerator extends KeyGeneratorSpi {
|
||||||
WC_INVALID,
|
WC_INVALID,
|
||||||
WC_AES,
|
WC_AES,
|
||||||
WC_HMAC_SHA1,
|
WC_HMAC_SHA1,
|
||||||
|
WC_HMAC_SHA224,
|
||||||
WC_HMAC_SHA256,
|
WC_HMAC_SHA256,
|
||||||
WC_HMAC_SHA384,
|
WC_HMAC_SHA384,
|
||||||
WC_HMAC_SHA512
|
WC_HMAC_SHA512
|
||||||
|
@ -54,7 +56,6 @@ public class WolfCryptKeyGenerator extends KeyGeneratorSpi {
|
||||||
private String algString = null;
|
private String algString = null;
|
||||||
|
|
||||||
private int keySizeBits = 0;
|
private int keySizeBits = 0;
|
||||||
private AlgorithmParameterSpec algoParams = null;
|
|
||||||
private SecureRandom random = null;
|
private SecureRandom random = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -75,6 +76,10 @@ public class WolfCryptKeyGenerator extends KeyGeneratorSpi {
|
||||||
/* SunJCE default key size for HmacSHA1 is 64 bytes */
|
/* SunJCE default key size for HmacSHA1 is 64 bytes */
|
||||||
this.keySizeBits = (Sha512.DIGEST_SIZE * 8);
|
this.keySizeBits = (Sha512.DIGEST_SIZE * 8);
|
||||||
break;
|
break;
|
||||||
|
case WC_HMAC_SHA224:
|
||||||
|
this.algString = "HmacSHA224";
|
||||||
|
this.keySizeBits = (Sha224.DIGEST_SIZE * 8);
|
||||||
|
break;
|
||||||
case WC_HMAC_SHA256:
|
case WC_HMAC_SHA256:
|
||||||
this.algString = "HmacSHA256";
|
this.algString = "HmacSHA256";
|
||||||
this.keySizeBits = (Sha256.DIGEST_SIZE * 8);
|
this.keySizeBits = (Sha256.DIGEST_SIZE * 8);
|
||||||
|
@ -222,6 +227,7 @@ public class WolfCryptKeyGenerator extends KeyGeneratorSpi {
|
||||||
switch (this.algoType) {
|
switch (this.algoType) {
|
||||||
case WC_AES:
|
case WC_AES:
|
||||||
case WC_HMAC_SHA1:
|
case WC_HMAC_SHA1:
|
||||||
|
case WC_HMAC_SHA224:
|
||||||
case WC_HMAC_SHA256:
|
case WC_HMAC_SHA256:
|
||||||
case WC_HMAC_SHA384:
|
case WC_HMAC_SHA384:
|
||||||
case WC_HMAC_SHA512:
|
case WC_HMAC_SHA512:
|
||||||
|
@ -259,6 +265,20 @@ public class WolfCryptKeyGenerator extends KeyGeneratorSpi {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* KeyGenerator(HmacSHA224) class, called by WolfCryptProvider.
|
||||||
|
*/
|
||||||
|
public static final class wcHMACSha224KeyGenerator
|
||||||
|
extends WolfCryptKeyGenerator {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for wcHMACSha224KeyGenerator.
|
||||||
|
*/
|
||||||
|
public wcHMACSha224KeyGenerator() {
|
||||||
|
super(AlgoType.WC_HMAC_SHA224);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* KeyGenerator(HmacSHA256) class, called by WolfCryptProvider.
|
* KeyGenerator(HmacSHA256) class, called by WolfCryptProvider.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -201,16 +201,30 @@ public final class WolfCryptProvider extends Provider {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* KeyGenerator */
|
/* KeyGenerator */
|
||||||
|
if (FeatureDetect.AesEnabled()) {
|
||||||
put("KeyGenerator.AES",
|
put("KeyGenerator.AES",
|
||||||
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcAESKeyGenerator");
|
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcAESKeyGenerator");
|
||||||
|
}
|
||||||
|
if (FeatureDetect.HmacShaEnabled()) {
|
||||||
put("KeyGenerator.HmacSHA1",
|
put("KeyGenerator.HmacSHA1",
|
||||||
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcHMACSha1KeyGenerator");
|
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcHMACSha1KeyGenerator");
|
||||||
|
}
|
||||||
|
if (FeatureDetect.HmacSha224Enabled()) {
|
||||||
|
put("KeyGenerator.HmacSHA224",
|
||||||
|
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcHMACSha224KeyGenerator");
|
||||||
|
}
|
||||||
|
if (FeatureDetect.HmacSha256Enabled()) {
|
||||||
put("KeyGenerator.HmacSHA256",
|
put("KeyGenerator.HmacSHA256",
|
||||||
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcHMACSha256KeyGenerator");
|
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcHMACSha256KeyGenerator");
|
||||||
|
}
|
||||||
|
if (FeatureDetect.HmacSha384Enabled()) {
|
||||||
put("KeyGenerator.HmacSHA384",
|
put("KeyGenerator.HmacSHA384",
|
||||||
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcHMACSha384KeyGenerator");
|
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcHMACSha384KeyGenerator");
|
||||||
|
}
|
||||||
|
if (FeatureDetect.HmacSha512Enabled()) {
|
||||||
put("KeyGenerator.HmacSHA512",
|
put("KeyGenerator.HmacSHA512",
|
||||||
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcHMACSha512KeyGenerator");
|
"com.wolfssl.provider.jce.WolfCryptKeyGenerator$wcHMACSha512KeyGenerator");
|
||||||
|
}
|
||||||
|
|
||||||
/* KeyPairGenerator */
|
/* KeyPairGenerator */
|
||||||
if (FeatureDetect.RsaKeyGenEnabled()) {
|
if (FeatureDetect.RsaKeyGenEnabled()) {
|
||||||
|
|
|
@ -42,6 +42,7 @@ import javax.crypto.SecretKey;
|
||||||
|
|
||||||
import com.wolfssl.wolfcrypt.Fips;
|
import com.wolfssl.wolfcrypt.Fips;
|
||||||
import com.wolfssl.wolfcrypt.Aes;
|
import com.wolfssl.wolfcrypt.Aes;
|
||||||
|
import com.wolfssl.wolfcrypt.Sha224;
|
||||||
import com.wolfssl.wolfcrypt.Sha256;
|
import com.wolfssl.wolfcrypt.Sha256;
|
||||||
import com.wolfssl.wolfcrypt.Sha384;
|
import com.wolfssl.wolfcrypt.Sha384;
|
||||||
import com.wolfssl.wolfcrypt.Sha512;
|
import com.wolfssl.wolfcrypt.Sha512;
|
||||||
|
@ -52,6 +53,7 @@ public class WolfCryptKeyGeneratorTest {
|
||||||
private static String[] keyAlgorithms = {
|
private static String[] keyAlgorithms = {
|
||||||
"AES",
|
"AES",
|
||||||
"HmacSHA1",
|
"HmacSHA1",
|
||||||
|
"HmacSHA224",
|
||||||
"HmacSHA256",
|
"HmacSHA256",
|
||||||
"HmacSHA384",
|
"HmacSHA384",
|
||||||
"HmacSHA512"
|
"HmacSHA512"
|
||||||
|
@ -121,6 +123,14 @@ public class WolfCryptKeyGeneratorTest {
|
||||||
testKeyGenerationDefaultKeySize("HmacSHA1", Sha512.DIGEST_SIZE * 8);
|
testKeyGenerationDefaultKeySize("HmacSHA1", Sha512.DIGEST_SIZE * 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHmacSHA224KeyGeneration()
|
||||||
|
throws NoSuchProviderException, NoSuchAlgorithmException {
|
||||||
|
|
||||||
|
testKeyGeneration("HmacSHA224", new int[] { 224 });
|
||||||
|
testKeyGenerationDefaultKeySize("HmacSHA224", Sha224.DIGEST_SIZE * 8);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHmacSHA256KeyGeneration()
|
public void testHmacSHA256KeyGeneration()
|
||||||
throws NoSuchProviderException, NoSuchAlgorithmException {
|
throws NoSuchProviderException, NoSuchAlgorithmException {
|
||||||
|
|
Loading…
Reference in New Issue