This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

javax.crypto not working properly; on linux ;-)


Hello list

Is there some active development on javax.crypto? Is this question better placed at the gnu classpath list (is there a list at all? I don't really understand the page)?

On windows it doesn't work at all. On linux I have problems as well. These two method bodies do exactly the same:

{
   File inFile = new File("test.mpg");
   File outFile = new File("test.enc");
   Cipher cipher = createCipher("helloWorld", Cipher.ENCRYPT_MODE);
		
   FileInputStream inputStream = new FileInputStream(inFile);
   FileOutputStream outputStream = new FileOutputStream(outFile);
   byte[] ba = new byte[1024 * 1024]; // 1mb
		
   while(true)
   {
      int len = inputStream.read(ba);
      if(len < 0) break;
      outputStream.write(cipher.update(ba, 0, len));
   }
   outputStream.write(cipher.doFinal());
		
   outputStream.flush();
   outputStream.close();
   inputStream.close();
}

{
File inFile = new File("test.mpg");
File outFile = new File("test.enc");
Cipher cipher = createCipher("helloWorld", Cipher.ENCRYPT_MODE);

FileInputStream inputStream = new FileInputStream(inFile);
CipherOutputStream outputStream = new CipherOutputStream(new FileOutputStream(outFile), cipher);
byte[] ba = new byte[1024 * 1024]; // 1mb

while(true)
{
int len = inputStream.read(ba);
if(len < 0) break;
outputStream.write(ba, 0, len);
}

outputStream.flush();
outputStream.close();
inputStream.close();
}


private static Cipher createCipher(String password, int mode) throws Exception
{
byte[] baKey = MessageDigest.getInstance("MD5").digest(password.getBytes());
SecretKey secretKey = new SecretKeySpec(baKey, "AES");


   Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
   cipher.init(mode, secretKey);

   return cipher;
}


Only the first one works with GNU classpath. The second gives:


Exception in thread "main" java.lang.NullPointerException
   at gnu.javax.crypto.jce.cipher.CipherAdapter.engineUpdate(CryptTest-lin)
   at javax.crypto.Cipher.update(CryptTest-lin)
   at javax.crypto.Cipher.update(CryptTest-lin)
   at javax.crypto.CipherOutputStream.process(CryptTest-lin)
   at javax.crypto.CipherOutputStream.write(CryptTest-lin)
   at CryptTest.main(CryptTest-lin)


According decrypting doesn't work at all. Using CipherInputStream results in:


Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at gnu.javax.crypto.pad.PKCS7.unpad(CryptTest-lin)
at gnu.javax.crypto.jce.cipher.CipherAdapter.engineDoFinal(CryptTest-lin)
at javax.crypto.Cipher.doFinal(CryptTest-lin)
at javax.crypto.Cipher.doFinal(CryptTest-lin)
at javax.crypto.CipherInputStream.nextBlock(CryptTest-lin)
at javax.crypto.CipherInputStream.read(CryptTest-lin)
at javax.crypto.CipherInputStream.read(CryptTest-lin)
at CryptTest.main(CryptTest-lin)


Working direct with the cipher results in:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at gnu.javax.crypto.pad.PKCS7.unpad(CryptTest-lin)
at gnu.javax.crypto.jce.cipher.CipherAdapter.engineDoFinal(CryptTest-lin)
at javax.crypto.Cipher.doFinal(CryptTest-lin)
at javax.crypto.Cipher.doFinal(CryptTest-lin)
at CryptTest.main(CryptTest-lin)



I checked the GNU classpath CVS. CipherInputStream, CipherOutputStream and Cipher are all pretty old so I guess they're all up to date in the latest GCJ source.


So, my questions:
- Is there someone actively maintaining javax.crypto?
- Is there someone who could guide me fixing it?
- Are there already patches/fixex I could backport for GCJ?


thanks Marco


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]