From 5a953bf1012fcb4c69d3e13bffa7eeb4dd1912bf Mon Sep 17 00:00:00 2001 From: Casey Marshall Date: Wed, 28 Mar 2007 18:25:07 +0000 Subject: [PATCH] ClientHandshake.java (RSAGen.implRun): check keyEncipherment bit of the certificate... 2007-03-28 Casey Marshall * gnu/javax/net/ssl/provider/ClientHandshake.java (RSAGen.implRun): check keyEncipherment bit of the certificate, and just pass the public key to the cipher. From-SVN: r123307 --- libjava/classpath/ChangeLog | 6 ++++++ .../net/ssl/provider/ClientHandshake.java | 8 +++++++- .../ClientHandshake$GenCertVerify.class | Bin 2856 -> 2856 bytes .../ssl/provider/ClientHandshake$RSAGen.class | Bin 3440 -> 3763 bytes 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog index 376c072852d..caa611a55cd 100644 --- a/libjava/classpath/ChangeLog +++ b/libjava/classpath/ChangeLog @@ -1,3 +1,9 @@ +2007-03-28 Casey Marshall + + * gnu/javax/net/ssl/provider/ClientHandshake.java (RSAGen.implRun): + check keyEncipherment bit of the certificate, and just pass the public + key to the cipher. + 2007-03-27 Casey Marshall PR classpath/31302: diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/ClientHandshake.java b/libjava/classpath/gnu/javax/net/ssl/provider/ClientHandshake.java index 059b165a67d..a8780084508 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/ClientHandshake.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/ClientHandshake.java @@ -1082,7 +1082,13 @@ outer_loop: Cipher rsa = Cipher.getInstance("RSA"); java.security.cert.Certificate cert = engine.session().getPeerCertificates()[0]; - rsa.init(Cipher.ENCRYPT_MODE, cert); + if (cert instanceof X509Certificate) + { + boolean[] keyUsage = ((X509Certificate) cert).getKeyUsage(); + if (keyUsage != null && !keyUsage[2]) + throw new InvalidKeyException("certificate's keyUsage does not permit keyEncipherment"); + } + rsa.init(Cipher.ENCRYPT_MODE, cert.getPublicKey()); encryptedPreMasterSecret = rsa.doFinal(preMasterSecret); // Generate our session keys, because we can. diff --git a/libjava/classpath/lib/gnu/javax/net/ssl/provider/ClientHandshake$GenCertVerify.class b/libjava/classpath/lib/gnu/javax/net/ssl/provider/ClientHandshake$GenCertVerify.class index 51a1a2b9508b9485178006cc90e8cb8026aaa38e..c614ed58477223762e42fd638c17940d6c814afb 100644 GIT binary patch delta 85 zcmZ1>wnA(}GN))711n1u11C!yg9uAJgAz+3g9=N^wnA(}GN)()11n1i11C!ag9u9`gAz+Lg9=OBsIw`Rl}^`U?k z?o{>6ZZ%{mC`7+N8jdpLnj=z<*sI_;24tLIaGF0PXHX!DlMI5KclGW+s0GNMVO3G_ zj=!V-Y1SwR;fr(=9c{WERAEfeW~3`sBQfO9FOCsc_?pz*P*H zopM#dh`==rQG$r7_o@0Gf2h5uTOo}pa08>}qC70!6u5<$+3XmUZVTMOg!$7^C*2dc zk4e*$I=~*9)2Ur69JGJ(?QCtWbGgbErr1E99AK5EKW!pf`U&9}3Q89dwxBn8J|o*> zUpJ2Q4=8NO>U)PHAKkpv!Z8b{O57#$$el;6g>!E)NQe9wTH;)Sznp;K1o$k}Te$xJ zcI{YGT;So!nFNemxI2p!3Tv6Q=oQSlow2 zUWYGyE57k<_|6-!#J4jiZ)6pGC$ea!oR+86kxh4kp8Of6@CXbOh~Y7wz=mn+JS9Gb zIgy9wctJTp>

WsqzvsLOVqrd`(4FB8?Ph`R-*Gkx(REYtjPKq4KHl$ZuB((;s-D4?K- zczmG(A&gDL;!R-CF!m4V%)j7}k#V)vW1EbXT|W8XZA*T z)mbw<=Y{