From 31458eb486649e2f8b6bff6803043dffd903613c Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Wed, 25 Dec 2013 01:04:29 +0000 Subject: JCE policy fix git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1553342 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/poi/poifs/crypt/CryptoFunctions.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/java/org/apache/poi/poifs') diff --git a/src/java/org/apache/poi/poifs/crypt/CryptoFunctions.java b/src/java/org/apache/poi/poifs/crypt/CryptoFunctions.java index 33876fc975..42ca434198 100644 --- a/src/java/org/apache/poi/poifs/crypt/CryptoFunctions.java +++ b/src/java/org/apache/poi/poifs/crypt/CryptoFunctions.java @@ -22,12 +22,14 @@ import java.security.GeneralSecurityException; import java.security.MessageDigest; import java.security.Provider; import java.security.Security; +import java.security.spec.AlgorithmParameterSpec; import java.util.Arrays; import javax.crypto.Cipher; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.RC2ParameterSpec; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.util.LittleEndian; @@ -188,8 +190,13 @@ public class CryptoFunctions { if (vec == null) { cipher.init(cipherMode, key); } else { - IvParameterSpec iv = new IvParameterSpec(vec); - cipher.init(cipherMode, key, iv); + AlgorithmParameterSpec aps; + if (cipherAlgorithm == CipherAlgorithm.rc2) { + aps = new RC2ParameterSpec(key.getEncoded().length*8, vec); + } else { + aps = new IvParameterSpec(vec); + } + cipher.init(cipherMode, key, aps); } return cipher; } catch (GeneralSecurityException e) { -- cgit v1.2.3