From: <gel...@mx...> - 2003-02-07 15:06:49
|
gelderen 03/02/07 10:14:55 Modified: jce/src/cryptix.jce.provider.elgamal ElGamalCipher.java Log: Fix: Attempt to decrypt with wrong key can produce an ArrayIndexOutofBoundsException. Submitted-By: Kevin Dana <kd...@ag...> Revision Changes Path 1.9 +21 -14 projects/jce/src/cryptix.jce.provider.elgamal/ElGamalCipher.java Index: ElGamalCipher.java =================================================================== RCS file: /home/cryptix-cvs/cvsroot/projects/jce/src/cryptix.jce.provider.elgamal/ElGamalCipher.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- ElGamalCipher.java 15 Jan 2003 21:07:50 -0000 1.8 +++ ElGamalCipher.java 7 Feb 2003 15:14:55 -0000 1.9 @@ -1,4 +1,4 @@ -/* $Id: ElGamalCipher.java,v 1.8 2003/01/15 21:07:50 gelderen Exp $ +/* $Id: ElGamalCipher.java,v 1.9 2003/02/07 15:14:55 gelderen Exp $ * * Copyright (C) 1995-2000 The Cryptix Foundation Limited. * All rights reserved. @@ -42,7 +42,8 @@ * Expirimental ElGamal implementation. * * @author Paul Waserbrot (pw...@cr...) - * @version $Revision: 1.8 $ + * @author Kevin Dana, Agorics Inc. (Agorics mod: 16273) + * @version $Revision: 1.9 $ */ public final class ElGamalCipher extends CipherSpi { @@ -391,19 +392,25 @@ throws BadPaddingException { int bt = input[inOffset + 1]; int padLen = 1; - switch (bt) { - case 0x00: - for (;; padLen++) - if (input[inOffset + padLen + 1] != (byte)0x00) break; - break; - case 0x01: - case 0x02: - for (;; padLen++) - if (input[inOffset + padLen] == (byte)0x00) break; - break; - default: - throw new BadPaddingException("Wrong block type!"); + try { + switch (bt) { + case 0x00: + for (;; padLen++) + if (input[inOffset + padLen + 1] != (byte)0x00) break; + break; + case 0x01: + case 0x02: + for (;; padLen++) + if (input[inOffset + padLen] == (byte)0x00) break; + break; + default: + throw new BadPaddingException("Wrong block type!"); + } + } catch (ArrayIndexOutOfBoundsException ex) { + throw new BadPaddingException( + "Cannot unpad: padding incorrect for PKCS#1 block type "+bt); } + padLen++; int len = inputLen - inOffset - padLen; |