Skip to content

Commit 66f21aa

Browse files
author
gefeili
committed
Fix the issue and add test for #1985
1 parent 7cf6f5b commit 66f21aa

30 files changed

+63
-4513
lines changed

prov/src/main/java/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java

+25-27
Original file line numberDiff line numberDiff line change
@@ -634,11 +634,11 @@ else if (paddingName.equals("TBCPADDING"))
634634
protected void engineInit(
635635
int opmode,
636636
Key key,
637-
AlgorithmParameterSpec params,
637+
final AlgorithmParameterSpec paramSpec,
638638
SecureRandom random)
639639
throws InvalidKeyException, InvalidAlgorithmParameterException
640640
{
641-
CipherParameters param = null;
641+
CipherParameters param;
642642

643643
this.pbeSpec = null;
644644
this.pbeAlgorithm = null;
@@ -656,7 +656,7 @@ protected void engineInit(
656656
//
657657
// for RC5-64 we must have some default parameters
658658
//
659-
if (params == null && (baseEngine != null && baseEngine.getAlgorithmName().startsWith("RC5-64")))
659+
if (paramSpec == null && (baseEngine != null && baseEngine.getAlgorithmName().startsWith("RC5-64")))
660660
{
661661
throw new InvalidAlgorithmParameterException("RC5 requires an RC5ParametersSpec to be passed in.");
662662
}
@@ -676,9 +676,9 @@ protected void engineInit(
676676
throw new InvalidKeyException("PKCS12 requires a SecretKey/PBEKey");
677677
}
678678

679-
if (params instanceof PBEParameterSpec)
679+
if (paramSpec instanceof PBEParameterSpec)
680680
{
681-
pbeSpec = (PBEParameterSpec)params;
681+
pbeSpec = (PBEParameterSpec)paramSpec;
682682
}
683683

684684
if (k instanceof PBEKey && pbeSpec == null)
@@ -727,9 +727,9 @@ else if (key instanceof PBKDF1Key)
727727
{
728728
PBKDF1Key k = (PBKDF1Key)key;
729729

730-
if (params instanceof PBEParameterSpec)
730+
if (paramSpec instanceof PBEParameterSpec)
731731
{
732-
pbeSpec = (PBEParameterSpec)params;
732+
pbeSpec = (PBEParameterSpec)paramSpec;
733733
}
734734
if (k instanceof PBKDF1KeyWithParameters && pbeSpec == null)
735735
{
@@ -746,9 +746,9 @@ else if (key instanceof PBKDF2Key)
746746
{
747747
PBKDF2Key k = (PBKDF2Key)key;
748748

749-
if (param instanceof PBEParameterSpec)
749+
if (paramSpec instanceof PBEParameterSpec)
750750
{
751-
pbeSpec = (PBEParameterSpec)param;
751+
pbeSpec = (PBEParameterSpec)paramSpec;
752752
}
753753
if (k instanceof PBKDF2KeyWithParameters && pbeSpec == null)
754754
{
@@ -776,12 +776,12 @@ else if (key instanceof BCPBEKey)
776776

777777
if (k.getParam() != null)
778778
{
779-
param = adjustParameters(params, k.getParam());
779+
param = adjustParameters(paramSpec, k.getParam());
780780
}
781-
else if (params instanceof PBEParameterSpec)
781+
else if (paramSpec instanceof PBEParameterSpec)
782782
{
783-
pbeSpec = (PBEParameterSpec)params;
784-
param = PBE.Util.makePBEParameters(k, params, cipher.getUnderlyingCipher().getAlgorithmName());
783+
pbeSpec = (PBEParameterSpec)paramSpec;
784+
param = PBE.Util.makePBEParameters(k, paramSpec, cipher.getUnderlyingCipher().getAlgorithmName());
785785
}
786786
else
787787
{
@@ -796,7 +796,7 @@ else if (params instanceof PBEParameterSpec)
796796
else if (key instanceof PBEKey)
797797
{
798798
PBEKey k = (PBEKey)key;
799-
pbeSpec = (PBEParameterSpec)params;
799+
pbeSpec = (PBEParameterSpec)paramSpec;
800800
if (k instanceof PKCS12KeyWithParameters && pbeSpec == null)
801801
{
802802
pbeSpec = new PBEParameterSpec(k.getSalt(), k.getIterationCount());
@@ -821,19 +821,17 @@ else if (!(key instanceof RepeatedSecretKeySpec))
821821
param = null;
822822
}
823823

824-
// AlgorithmParameterSpec params;
825-
// if (params instanceof PBEParameterSpec)
826-
// {
827-
// params = ((PBEParameterSpec)params).getParameterSpec();
828-
// if (((IvParameterSpec)params).getIV().length == 0)
829-
// {
830-
// params = new IvParameterSpec(((ParametersWithIV)param).getIV());
831-
// }
832-
// }
833-
// else
834-
// {
835-
// params = params;
836-
// }
824+
AlgorithmParameterSpec params = paramSpec;
825+
if (paramSpec instanceof PBEParameterSpec)
826+
{
827+
params = ((PBEParameterSpec)paramSpec).getParameterSpec();
828+
// If params.getIv() returns an empty byte array, ivParam will be assigned an IV generated by PBE.Util.makePBEParameters
829+
// according to RFC 7292. This behavior is intended for Jasypt users who choose to use NoIvGenerator.
830+
if (params instanceof IvParameterSpec && ((IvParameterSpec)params).getIV().length == 0)
831+
{
832+
params = paramSpec;
833+
}
834+
}
837835

838836
if (params instanceof AEADParameterSpec)
839837
{

prov/src/test/java/org/bouncycastle/jcajce/provider/test/jasypt/AlreadyInitializedException.java

-42
This file was deleted.

0 commit comments

Comments
 (0)