-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
6u29
-
x86
-
linux
FULL PRODUCT VERSION :
java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap32devifx-20110211b (SR12 FP3 +IZ94331))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc-32 j9vmap3223ifx-20101130 (JIT enabled)
J9VM - 20101129_69669_bHdSMr
JIT - 20100623_16197ifx1_r8
GC - 20100211_AA)
JCL - 20110208
ADDITIONAL OS VERSION INFORMATION :
uname -a
AIX saixu134 1 6 00C72D824C00
java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap32devifx-20110211b (SR12 FP3 +IZ94331))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc-32 j9vmap3223ifx-20101130 (JIT enabled)
J9VM - 20101129_69669_bHdSMr
JIT - 20100623_16197ifx1_r8
GC - 20100211_AA)
JCL - 20110208
A DESCRIPTION OF THE PROBLEM :
Getting below error while trying to run my UMAC.java program using java "1.6.0"
and the same program is running fine and producing desired result when ran through java version "1.5.0"
Initially only java "1.5.0" was there but due to change in cerificate from 1024 bytes to 2048 bytes we had to install java "1.6.0" at the same time keeping "1.5.0" for all the existing running codes
Error:
========
Exception in thread "main" java.lang.IllegalAccessError
at sun.security.util.DerInputStream.init(Unknown Source)
at sun.security.util.DerInputStream.<init>(Unknown Source)
at sun.security.rsa.RSAPublicKeyImpl.parseKeyBits(Unknown Source)
at sun.security.x509.X509Key.decode(X509Key.java:396)
at sun.security.x509.X509Key.decode(X509Key.java:408)
at sun.security.rsa.RSAPublicKeyImpl.<init>(Unknown Source)
at sun.security.rsa.RSAKeyFactory.generatePublic(Unknown Source)
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source)
at java.security.KeyFactory.generatePublic(KeyFactory.java:145)
at com.ibm.security.x509.X509Key.buildX509Key(X509Key.java:278)
at com.ibm.security.x509.X509Key.parse(X509Key.java:189)
at com.ibm.security.x509.X509Key.parse(X509Key.java:215)
at com.ibm.security.x509.CertificateX509Key.<init>(CertificateX509Key.java:112)
at com.ibm.security.x509.X509CertInfo.parse(X509CertInfo.java:966)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:236)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:222)
at com.ibm.security.x509.X509CertImpl.parse(X509CertImpl.java:2285)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:227)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:213)
at com.ibm.security.pkcs12.CertBag.decode(CertBag.java:599)
at com.ibm.security.pkcsutil.PKCSDerObject.decode(PKCSDerObject.java:251)
at com.ibm.security.pkcs12.CertBag.<init>(CertBag.java:76)
at com.ibm.security.pkcs12.BasicPFX.getCertificates(BasicPFX.java:1422)
at com.ibm.security.pkcs12.PFX.getCertificates(PFX.java:549)
at com.ibm.crypto.provider.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:414)
at UMAC.getSingedData(UMAC.java:116)
at SignedDataImpl.getSingedData(SignedDataImpl.java:23)
at Test2048.main(Test2048.java:13)
REGRESSION. Last worked in version 5.0
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
cd /rcssin1/common/scripts/uat/
export CLASSPATH=/opt/java64/6.0.0.265/jre/:/opt/java64/6.0.0.265/bin/:/oracle/oracle/flex10.2/db/jdk/bin:/rcssin1/common/scripts/uat/:/opt/java64/6.0.0.265/jre/lib/security.jar:/rcssin1/common/scripts/uat/rt.jar:/rcssin1/common/scripts/uat/jsse.jar:/rcssin1/common/scripts/uat/local_policy.jar:/rcssin1/common/scripts/uat/US_export_policy.jar
/opt/java64/6.0.0.265/bin/javac /rcssin1/common/scripts/uat/UMAC.java
/opt/java64/6.0.0.265/bin/javac /rcssin1/common/scripts/uat/Utilities.java
/opt/java64/6.0.0.265/bin/javac /rcssin1/common/scripts/uat/SignedDataImpl.java
/opt/java64/6.0.0.265/bin/javac /rcssin1/common/scripts/uat/Test2048.java
/opt/java64/6.0.0.265/bin/java Test2048
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Expected result is coming in java version "1.5.0" as shown below
Starting
reached here a
reached here b
reached here ba filePassword<[C@251c251c>
reached here ba filePassword<testing>
reached here ba dFilePassword<testing>
reached here bb
reached here c
ACTUAL -
Below error is coming in java version "1.6.0"
Starting
reached here a
reached here b
reached here ba filePassword<[C@50565056>
reached here ba filePassword<testing>
reached here ba dFilePassword<testing>
Exception in thread "main" java.lang.IllegalAccessError
at sun.security.util.DerInputStream.init(Unknown Source)
at sun.security.util.DerInputStream.<init>(Unknown Source)
at sun.security.rsa.RSAPublicKeyImpl.parseKeyBits(Unknown Source)
at sun.security.x509.X509Key.decode(X509Key.java:396)
at sun.security.x509.X509Key.decode(X509Key.java:408)
at sun.security.rsa.RSAPublicKeyImpl.<init>(Unknown Source)
at sun.security.rsa.RSAKeyFactory.generatePublic(Unknown Source)
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source)
at java.security.KeyFactory.generatePublic(KeyFactory.java:145)
at com.ibm.security.x509.X509Key.buildX509Key(X509Key.java:278)
at com.ibm.security.x509.X509Key.parse(X509Key.java:189)
at com.ibm.security.x509.X509Key.parse(X509Key.java:215)
at com.ibm.security.x509.CertificateX509Key.<init>(CertificateX509Key.java:112)
at com.ibm.security.x509.X509CertInfo.parse(X509CertInfo.java:966)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:236)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:222)
at com.ibm.security.x509.X509CertImpl.parse(X509CertImpl.java:2285)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:227)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:213)
at com.ibm.security.pkcs12.CertBag.decode(CertBag.java:599)
at com.ibm.security.pkcsutil.PKCSDerObject.decode(PKCSDerObject.java:251)
at com.ibm.security.pkcs12.CertBag.<init>(CertBag.java:76)
at com.ibm.security.pkcs12.BasicPFX.getCertificates(BasicPFX.java:1422)
at com.ibm.security.pkcs12.PFX.getCertificates(PFX.java:549)
at com.ibm.crypto.provider.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:414)
at UMAC.getSingedData(UMAC.java:119)
at SignedDataImpl.getSingedData(SignedDataImpl.java:23)
at Test2048.main(Test2048.java:12)
ERROR MESSAGES/STACK TRACES THAT OCCUR :
We are printing the trace at prompt only
as shown below its coming properly till "reached here ba dFilePassword<testing>"
but after that it seems that its failing at keystore.load
Log at prompt :
===============
Starting
reached here a
reached here b
reached here ba filePassword<[C@50565056>
reached here ba filePassword<testing>
reached here ba dFilePassword<testing>
Exception in thread "main" java.lang.IllegalAccessError
at sun.security.util.DerInputStream.init(Unknown Source)
at sun.security.util.DerInputStream.<init>(Unknown Source)
at sun.security.rsa.RSAPublicKeyImpl.parseKeyBits(Unknown Source)
at sun.security.x509.X509Key.decode(X509Key.java:396)
at sun.security.x509.X509Key.decode(X509Key.java:408)
at sun.security.rsa.RSAPublicKeyImpl.<init>(Unknown Source)
at sun.security.rsa.RSAKeyFactory.generatePublic(Unknown Source)
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source)
at java.security.KeyFactory.generatePublic(KeyFactory.java:145)
at com.ibm.security.x509.X509Key.buildX509Key(X509Key.java:278)
at com.ibm.security.x509.X509Key.parse(X509Key.java:189)
at com.ibm.security.x509.X509Key.parse(X509Key.java:215)
at com.ibm.security.x509.CertificateX509Key.<init>(CertificateX509Key.java:112)
at com.ibm.security.x509.X509CertInfo.parse(X509CertInfo.java:966)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:236)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:222)
at com.ibm.security.x509.X509CertImpl.parse(X509CertImpl.java:2285)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:227)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:213)
at com.ibm.security.pkcs12.CertBag.decode(CertBag.java:599)
at com.ibm.security.pkcsutil.PKCSDerObject.decode(PKCSDerObject.java:251)
at com.ibm.security.pkcs12.CertBag.<init>(CertBag.java:76)
at com.ibm.security.pkcs12.BasicPFX.getCertificates(BasicPFX.java:1422)
at com.ibm.security.pkcs12.PFX.getCertificates(PFX.java:549)
at com.ibm.crypto.provider.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:414)
at UMAC.getSingedData(UMAC.java:119)
at SignedDataImpl.getSingedData(SignedDataImpl.java:23)
at Test2048.main(Test2048.java:12)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
========================================================
/*********************************************************************
* FileName : UMAC.java *
* Program Details : For getting Signed data. *
* Invoked From : SignedDataImpl.java *
**********************************************************************/
package sfmsbr.bankapi;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Security;
import java.security.Signature;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.util.Date;
import java.util.Enumeration;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import com.ibm.misc.BASE64Decoder;
import com.ibm.misc.BASE64Encoder;
import sun.security.pkcs.ContentInfo;
import sun.security.pkcs.PKCS7;
import sun.security.pkcs.PKCS9Attribute;
import sun.security.pkcs.PKCS9Attributes;
import sun.security.pkcs.SignerInfo;
import com.ibm.security.util.DerOutputStream;
/*import sun.security.x509.AlgorithmId;*/
import com.ibm.security.x509.AlgorithmId;
/*import sun.security.x509.X500Name;*/
import com.ibm.security.x509.X500Name;
/*import com.ibm.jsse.IBMJSSEProvider;*/
import org.apache.harmony.security.asn1.DerInputStream;
import com.cs.common.Utilities;
import com.sun.net.ssl.internal.ssl.Provider;
/*import javax.net.ssl.*;*/
import sun.security.pkcs.*;
public class UMAC
{
private static String storetype = null;
private static String storepath = null;
private static char keyPassword[] = null;
private static char filePassword[] = null;
private static String alias = null;
private static X509Certificate x509 = null;
private static Certificate certs[] = null;
private static final String digestAlgorithm = "SHA256";
private static final String signingAlgorithm = "SHA256withRSA";
private static Key key = null;
private static KeyPair pair = null;
private static KeyStore keystore = null;
private static PrivateKey priv = null;
private static PublicKey pub = null;
private static String signedData = null;
File certificateFile;
private static String fileName = "";
private static final String ALGORITHM = "PBEWithSHA256AndDes";
private String characterEncoding;
private Cipher encryptCipher;
private Cipher decryptCipher;
private BASE64Encoder base64Encoder = new BASE64Encoder();
private BASE64Decoder base64Decoder = new BASE64Decoder();
/**
* Constructor to initialize the Parameters used
* @param s file name/path
* @param s1 is file password
* @param s2 is key password
* @param s3 is alias name
* @throws IOException
*/
public UMAC(String s, String s1, String s2, String s3) throws IOException
{
try {
String dkeyPassword = Utilities.decodeDBPwd(s2);
String dFilePassword = Utilities.decodeDBPwd(s1);
keyPassword = (new String(dkeyPassword)).toCharArray();
filePassword = (new String(dFilePassword)).toCharArray();
alias = s3;
fileName = s;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* method will prepare the digital signature for the message received as argument and returns the digital signature
* @param s the message to prepare signed data
* @return signed data prepard for the message received
* @throws NoSuchAlgorithmException
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws NoSuchProviderException
* @throws BadPaddingException
* @throws NoSuchPaddingException
* @throws Exception
*/
public String getSingedData(String s) throws NoSuchAlgorithmException, InvalidKeyException, IllegalBlockSizeException, NoSuchProviderException, BadPaddingException, NoSuchPaddingException, Exception
{
Security.addProvider(new Provider()); // addProvider(Provider provider).. Adds a provider to the next position available.
System.out.println("reached here a");
certificateFile = new File(fileName);
/*keystore = KeyStore.getInstance("pkcs12", "SunJSSE");*/
keystore = KeyStore.getInstance("pkcs12", "IBMJCE");
System.out.println("reached here b");
BASE64Encoder base64encoder = new BASE64Encoder();
System.out.println("reached here ba");
keystore.load(new FileInputStream(certificateFile), filePassword);
System.out.println("reached here bb");
Enumeration enumeration = keystore.aliases();
do {
if(!enumeration.hasMoreElements())
break;
String s1 = enumeration.nextElement().toString();
if(keystore.isKeyEntry(s1))
alias = s1;
} while(true);
System.out.println("reached here c");
pair = getPrivateKey(keystore, alias, keyPassword);
priv = pair.getPrivate();
String s2 = base64encoder.encode(priv.getEncoded());
if(keystore.isKeyEntry(alias))
{
certs = keystore.getCertificateChain(alias);
if(certs[0] instanceof X509Certificate)
x509 = (X509Certificate)certs[0];
if(certs[certs.length - 1] instanceof X509Certificate)
x509 = (X509Certificate)certs[certs.length - 1];
} else
if(keystore.isCertificateEntry(alias))
{
Certificate certificate = keystore.getCertificate(alias);
if(certificate instanceof X509Certificate)
{
x509 = (X509Certificate)certificate;
certs = (new Certificate[] {
x509
});
}
} else {
throw new Exception(alias + " Wrong alias, Please Check");
}
AlgorithmId aalgorithmid[] = {
AlgorithmId.get("SHA256")
};
byte abyte0[] = s.getBytes("UTF8");
System.ou
( This report has more than 16,000 characters and has been truncated. )
java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap32devifx-20110211b (SR12 FP3 +IZ94331))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc-32 j9vmap3223ifx-20101130 (JIT enabled)
J9VM - 20101129_69669_bHdSMr
JIT - 20100623_16197ifx1_r8
GC - 20100211_AA)
JCL - 20110208
ADDITIONAL OS VERSION INFORMATION :
uname -a
AIX saixu134 1 6 00C72D824C00
java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap32devifx-20110211b (SR12 FP3 +IZ94331))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc-32 j9vmap3223ifx-20101130 (JIT enabled)
J9VM - 20101129_69669_bHdSMr
JIT - 20100623_16197ifx1_r8
GC - 20100211_AA)
JCL - 20110208
A DESCRIPTION OF THE PROBLEM :
Getting below error while trying to run my UMAC.java program using java "1.6.0"
and the same program is running fine and producing desired result when ran through java version "1.5.0"
Initially only java "1.5.0" was there but due to change in cerificate from 1024 bytes to 2048 bytes we had to install java "1.6.0" at the same time keeping "1.5.0" for all the existing running codes
Error:
========
Exception in thread "main" java.lang.IllegalAccessError
at sun.security.util.DerInputStream.init(Unknown Source)
at sun.security.util.DerInputStream.<init>(Unknown Source)
at sun.security.rsa.RSAPublicKeyImpl.parseKeyBits(Unknown Source)
at sun.security.x509.X509Key.decode(X509Key.java:396)
at sun.security.x509.X509Key.decode(X509Key.java:408)
at sun.security.rsa.RSAPublicKeyImpl.<init>(Unknown Source)
at sun.security.rsa.RSAKeyFactory.generatePublic(Unknown Source)
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source)
at java.security.KeyFactory.generatePublic(KeyFactory.java:145)
at com.ibm.security.x509.X509Key.buildX509Key(X509Key.java:278)
at com.ibm.security.x509.X509Key.parse(X509Key.java:189)
at com.ibm.security.x509.X509Key.parse(X509Key.java:215)
at com.ibm.security.x509.CertificateX509Key.<init>(CertificateX509Key.java:112)
at com.ibm.security.x509.X509CertInfo.parse(X509CertInfo.java:966)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:236)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:222)
at com.ibm.security.x509.X509CertImpl.parse(X509CertImpl.java:2285)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:227)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:213)
at com.ibm.security.pkcs12.CertBag.decode(CertBag.java:599)
at com.ibm.security.pkcsutil.PKCSDerObject.decode(PKCSDerObject.java:251)
at com.ibm.security.pkcs12.CertBag.<init>(CertBag.java:76)
at com.ibm.security.pkcs12.BasicPFX.getCertificates(BasicPFX.java:1422)
at com.ibm.security.pkcs12.PFX.getCertificates(PFX.java:549)
at com.ibm.crypto.provider.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:414)
at UMAC.getSingedData(UMAC.java:116)
at SignedDataImpl.getSingedData(SignedDataImpl.java:23)
at Test2048.main(Test2048.java:13)
REGRESSION. Last worked in version 5.0
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
cd /rcssin1/common/scripts/uat/
export CLASSPATH=/opt/java64/6.0.0.265/jre/:/opt/java64/6.0.0.265/bin/:/oracle/oracle/flex10.2/db/jdk/bin:/rcssin1/common/scripts/uat/:/opt/java64/6.0.0.265/jre/lib/security.jar:/rcssin1/common/scripts/uat/rt.jar:/rcssin1/common/scripts/uat/jsse.jar:/rcssin1/common/scripts/uat/local_policy.jar:/rcssin1/common/scripts/uat/US_export_policy.jar
/opt/java64/6.0.0.265/bin/javac /rcssin1/common/scripts/uat/UMAC.java
/opt/java64/6.0.0.265/bin/javac /rcssin1/common/scripts/uat/Utilities.java
/opt/java64/6.0.0.265/bin/javac /rcssin1/common/scripts/uat/SignedDataImpl.java
/opt/java64/6.0.0.265/bin/javac /rcssin1/common/scripts/uat/Test2048.java
/opt/java64/6.0.0.265/bin/java Test2048
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Expected result is coming in java version "1.5.0" as shown below
Starting
reached here a
reached here b
reached here ba filePassword<[C@251c251c>
reached here ba filePassword<testing>
reached here ba dFilePassword<testing>
reached here bb
reached here c
ACTUAL -
Below error is coming in java version "1.6.0"
Starting
reached here a
reached here b
reached here ba filePassword<[C@50565056>
reached here ba filePassword<testing>
reached here ba dFilePassword<testing>
Exception in thread "main" java.lang.IllegalAccessError
at sun.security.util.DerInputStream.init(Unknown Source)
at sun.security.util.DerInputStream.<init>(Unknown Source)
at sun.security.rsa.RSAPublicKeyImpl.parseKeyBits(Unknown Source)
at sun.security.x509.X509Key.decode(X509Key.java:396)
at sun.security.x509.X509Key.decode(X509Key.java:408)
at sun.security.rsa.RSAPublicKeyImpl.<init>(Unknown Source)
at sun.security.rsa.RSAKeyFactory.generatePublic(Unknown Source)
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source)
at java.security.KeyFactory.generatePublic(KeyFactory.java:145)
at com.ibm.security.x509.X509Key.buildX509Key(X509Key.java:278)
at com.ibm.security.x509.X509Key.parse(X509Key.java:189)
at com.ibm.security.x509.X509Key.parse(X509Key.java:215)
at com.ibm.security.x509.CertificateX509Key.<init>(CertificateX509Key.java:112)
at com.ibm.security.x509.X509CertInfo.parse(X509CertInfo.java:966)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:236)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:222)
at com.ibm.security.x509.X509CertImpl.parse(X509CertImpl.java:2285)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:227)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:213)
at com.ibm.security.pkcs12.CertBag.decode(CertBag.java:599)
at com.ibm.security.pkcsutil.PKCSDerObject.decode(PKCSDerObject.java:251)
at com.ibm.security.pkcs12.CertBag.<init>(CertBag.java:76)
at com.ibm.security.pkcs12.BasicPFX.getCertificates(BasicPFX.java:1422)
at com.ibm.security.pkcs12.PFX.getCertificates(PFX.java:549)
at com.ibm.crypto.provider.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:414)
at UMAC.getSingedData(UMAC.java:119)
at SignedDataImpl.getSingedData(SignedDataImpl.java:23)
at Test2048.main(Test2048.java:12)
ERROR MESSAGES/STACK TRACES THAT OCCUR :
We are printing the trace at prompt only
as shown below its coming properly till "reached here ba dFilePassword<testing>"
but after that it seems that its failing at keystore.load
Log at prompt :
===============
Starting
reached here a
reached here b
reached here ba filePassword<[C@50565056>
reached here ba filePassword<testing>
reached here ba dFilePassword<testing>
Exception in thread "main" java.lang.IllegalAccessError
at sun.security.util.DerInputStream.init(Unknown Source)
at sun.security.util.DerInputStream.<init>(Unknown Source)
at sun.security.rsa.RSAPublicKeyImpl.parseKeyBits(Unknown Source)
at sun.security.x509.X509Key.decode(X509Key.java:396)
at sun.security.x509.X509Key.decode(X509Key.java:408)
at sun.security.rsa.RSAPublicKeyImpl.<init>(Unknown Source)
at sun.security.rsa.RSAKeyFactory.generatePublic(Unknown Source)
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source)
at java.security.KeyFactory.generatePublic(KeyFactory.java:145)
at com.ibm.security.x509.X509Key.buildX509Key(X509Key.java:278)
at com.ibm.security.x509.X509Key.parse(X509Key.java:189)
at com.ibm.security.x509.X509Key.parse(X509Key.java:215)
at com.ibm.security.x509.CertificateX509Key.<init>(CertificateX509Key.java:112)
at com.ibm.security.x509.X509CertInfo.parse(X509CertInfo.java:966)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:236)
at com.ibm.security.x509.X509CertInfo.<init>(X509CertInfo.java:222)
at com.ibm.security.x509.X509CertImpl.parse(X509CertImpl.java:2285)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:227)
at com.ibm.security.x509.X509CertImpl.<init>(X509CertImpl.java:213)
at com.ibm.security.pkcs12.CertBag.decode(CertBag.java:599)
at com.ibm.security.pkcsutil.PKCSDerObject.decode(PKCSDerObject.java:251)
at com.ibm.security.pkcs12.CertBag.<init>(CertBag.java:76)
at com.ibm.security.pkcs12.BasicPFX.getCertificates(BasicPFX.java:1422)
at com.ibm.security.pkcs12.PFX.getCertificates(PFX.java:549)
at com.ibm.crypto.provider.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:414)
at UMAC.getSingedData(UMAC.java:119)
at SignedDataImpl.getSingedData(SignedDataImpl.java:23)
at Test2048.main(Test2048.java:12)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
========================================================
/*********************************************************************
* FileName : UMAC.java *
* Program Details : For getting Signed data. *
* Invoked From : SignedDataImpl.java *
**********************************************************************/
package sfmsbr.bankapi;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Security;
import java.security.Signature;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.util.Date;
import java.util.Enumeration;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import com.ibm.misc.BASE64Decoder;
import com.ibm.misc.BASE64Encoder;
import sun.security.pkcs.ContentInfo;
import sun.security.pkcs.PKCS7;
import sun.security.pkcs.PKCS9Attribute;
import sun.security.pkcs.PKCS9Attributes;
import sun.security.pkcs.SignerInfo;
import com.ibm.security.util.DerOutputStream;
/*import sun.security.x509.AlgorithmId;*/
import com.ibm.security.x509.AlgorithmId;
/*import sun.security.x509.X500Name;*/
import com.ibm.security.x509.X500Name;
/*import com.ibm.jsse.IBMJSSEProvider;*/
import org.apache.harmony.security.asn1.DerInputStream;
import com.cs.common.Utilities;
import com.sun.net.ssl.internal.ssl.Provider;
/*import javax.net.ssl.*;*/
import sun.security.pkcs.*;
public class UMAC
{
private static String storetype = null;
private static String storepath = null;
private static char keyPassword[] = null;
private static char filePassword[] = null;
private static String alias = null;
private static X509Certificate x509 = null;
private static Certificate certs[] = null;
private static final String digestAlgorithm = "SHA256";
private static final String signingAlgorithm = "SHA256withRSA";
private static Key key = null;
private static KeyPair pair = null;
private static KeyStore keystore = null;
private static PrivateKey priv = null;
private static PublicKey pub = null;
private static String signedData = null;
File certificateFile;
private static String fileName = "";
private static final String ALGORITHM = "PBEWithSHA256AndDes";
private String characterEncoding;
private Cipher encryptCipher;
private Cipher decryptCipher;
private BASE64Encoder base64Encoder = new BASE64Encoder();
private BASE64Decoder base64Decoder = new BASE64Decoder();
/**
* Constructor to initialize the Parameters used
* @param s file name/path
* @param s1 is file password
* @param s2 is key password
* @param s3 is alias name
* @throws IOException
*/
public UMAC(String s, String s1, String s2, String s3) throws IOException
{
try {
String dkeyPassword = Utilities.decodeDBPwd(s2);
String dFilePassword = Utilities.decodeDBPwd(s1);
keyPassword = (new String(dkeyPassword)).toCharArray();
filePassword = (new String(dFilePassword)).toCharArray();
alias = s3;
fileName = s;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* method will prepare the digital signature for the message received as argument and returns the digital signature
* @param s the message to prepare signed data
* @return signed data prepard for the message received
* @throws NoSuchAlgorithmException
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws NoSuchProviderException
* @throws BadPaddingException
* @throws NoSuchPaddingException
* @throws Exception
*/
public String getSingedData(String s) throws NoSuchAlgorithmException, InvalidKeyException, IllegalBlockSizeException, NoSuchProviderException, BadPaddingException, NoSuchPaddingException, Exception
{
Security.addProvider(new Provider()); // addProvider(Provider provider).. Adds a provider to the next position available.
System.out.println("reached here a");
certificateFile = new File(fileName);
/*keystore = KeyStore.getInstance("pkcs12", "SunJSSE");*/
keystore = KeyStore.getInstance("pkcs12", "IBMJCE");
System.out.println("reached here b");
BASE64Encoder base64encoder = new BASE64Encoder();
System.out.println("reached here ba");
keystore.load(new FileInputStream(certificateFile), filePassword);
System.out.println("reached here bb");
Enumeration enumeration = keystore.aliases();
do {
if(!enumeration.hasMoreElements())
break;
String s1 = enumeration.nextElement().toString();
if(keystore.isKeyEntry(s1))
alias = s1;
} while(true);
System.out.println("reached here c");
pair = getPrivateKey(keystore, alias, keyPassword);
priv = pair.getPrivate();
String s2 = base64encoder.encode(priv.getEncoded());
if(keystore.isKeyEntry(alias))
{
certs = keystore.getCertificateChain(alias);
if(certs[0] instanceof X509Certificate)
x509 = (X509Certificate)certs[0];
if(certs[certs.length - 1] instanceof X509Certificate)
x509 = (X509Certificate)certs[certs.length - 1];
} else
if(keystore.isCertificateEntry(alias))
{
Certificate certificate = keystore.getCertificate(alias);
if(certificate instanceof X509Certificate)
{
x509 = (X509Certificate)certificate;
certs = (new Certificate[] {
x509
});
}
} else {
throw new Exception(alias + " Wrong alias, Please Check");
}
AlgorithmId aalgorithmid[] = {
AlgorithmId.get("SHA256")
};
byte abyte0[] = s.getBytes("UTF8");
System.ou
( This report has more than 16,000 characters and has been truncated. )