|
20 | 20 |
|
21 | 21 | package com.mysql.cj.protocol; |
22 | 22 |
|
| 23 | +import java.io.BufferedReader; |
23 | 24 | import java.io.IOException; |
24 | 25 | import java.io.InputStream; |
| 26 | +import java.io.StringReader; |
25 | 27 | import java.net.MalformedURLException; |
26 | 28 | import java.net.Socket; |
27 | 29 | import java.net.URL; |
@@ -276,14 +278,39 @@ public static RSAPrivateKey decodeRSAPrivateKey(String key) throws RSAException |
276 | 278 | throw ExceptionFactory.createException(RSAException.class, "Key parameter is null"); |
277 | 279 | } |
278 | 280 |
|
279 | | - String keyData = key.replace("-----BEGIN PRIVATE KEY-----", "").replaceAll("\\R", "").replace("-----END PRIVATE KEY-----", ""); |
280 | | - byte[] decodedKeyData = Base64.getDecoder().decode(keyData); |
| 281 | + StringBuilder keyData = new StringBuilder(); |
| 282 | + |
| 283 | + try { |
| 284 | + BufferedReader br = new BufferedReader(new StringReader(key)); |
| 285 | + String line; |
| 286 | + boolean insideKey = false; |
| 287 | + while ((line = br.readLine()) != null) { |
| 288 | + line = line.trim(); |
| 289 | + if (line.equals("-----BEGIN PRIVATE KEY-----")) { |
| 290 | + insideKey = true; |
| 291 | + continue; |
| 292 | + } |
| 293 | + if (line.equals("-----END PRIVATE KEY-----")) { |
| 294 | + break; |
| 295 | + } |
| 296 | + if (insideKey) { |
| 297 | + keyData.append(line); |
| 298 | + } |
| 299 | + } |
| 300 | + } catch (IOException e) { |
| 301 | + } |
| 302 | + |
| 303 | + if (keyData.length() == 0) { |
| 304 | + throw new IllegalArgumentException("No valid unencrypted PKCS#8 key block found"); |
| 305 | + } |
| 306 | + |
| 307 | + byte[] decodedKeyData = Base64.getDecoder().decode(keyData.toString()); |
281 | 308 |
|
282 | 309 | try { |
283 | 310 | KeyFactory keyFactory = KeyFactory.getInstance("RSA"); |
284 | 311 | return (RSAPrivateKey) keyFactory.generatePrivate(new PKCS8EncodedKeySpec(decodedKeyData)); |
285 | 312 | } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { |
286 | | - throw ExceptionFactory.createException(RSAException.class, "Unable to decode private key", e); |
| 313 | + throw ExceptionFactory.createException(RSAException.class, "Unable to decode PKCS#8 private key", e); |
287 | 314 | } |
288 | 315 | } |
289 | 316 |
|
|
0 commit comments