|
1 | 1 | /* |
2 | | - * Copyright (c) 2001, 2021, Oracle and/or its affiliates. All rights reserved. |
| 2 | + * Copyright (c) 2001, 2025, Oracle and/or its affiliates. All rights reserved. |
3 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 | 4 | * |
5 | 5 | * This code is free software; you can redistribute it and/or modify it |
|
21 | 21 | * questions. |
22 | 22 | */ |
23 | 23 |
|
24 | | -import java.io.BufferedInputStream; |
25 | 24 | import java.io.ByteArrayInputStream; |
26 | 25 | import java.io.ByteArrayOutputStream; |
27 | 26 | import java.io.IOException; |
28 | | -import java.io.InputStream; |
29 | | -import java.security.KeyFactory; |
30 | | -import java.security.KeyStore; |
31 | | -import java.security.KeyStoreException; |
32 | | -import java.security.NoSuchProviderException; |
33 | | -import java.security.PrivateKey; |
34 | | -import java.security.UnrecoverableKeyException; |
| 27 | +import java.security.*; |
35 | 28 | import java.security.cert.Certificate; |
36 | | -import java.security.cert.CertificateFactory; |
37 | | -import java.security.spec.KeySpec; |
38 | | -import java.security.spec.PKCS8EncodedKeySpec; |
39 | | -import java.util.Base64; |
| 29 | +import java.security.cert.X509Certificate; |
40 | 30 |
|
41 | 31 | /* |
42 | 32 | * @test |
43 | 33 | * @bug 8048621 8133090 8167371 8236671 |
| 34 | + * @enablePreview |
44 | 35 | * @summary Test basic operations with keystores (jks, jceks, pkcs12) |
45 | 36 | * @author Yu-Ching Valerie PENG |
46 | 37 | */ |
47 | 38 | public class TestKeyStoreBasic { |
48 | 39 |
|
49 | | - private static final String PRIVATE_KEY_PKCS8_BASE64 = "" |
50 | | - + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCpyz97liuWPDYcLH9TX8BiT78o" |
51 | | - + "lCmAfmevvch6ncXUVuCzbdaKuKXwn4EVbDszsVJLoK5zdtP+X3iDhutj+IgKmLhuczF3M9VIcWr+" |
52 | | - + "JJUyTH4+3h/RT8cjCDZOmk9iXkb5ifruVsLqzb9g+Vp140Oz7leikne7KmclHvTfvFd0WDI7Gb9v" |
53 | | - + "o4f5rT717BXJ/n+M6pNk8DLpLiEu6eziYvXRv5x+t5Go3x0eCXdaxEQUf2j876Wfr2qHRJK7lDfF" |
54 | | - + "e1DDsMg/KpKGiILYZ+g2qtVMZSxtp5BZEtfB5qV/IE5kWO+mCIAGpXSZIdbERR6pZUq8GLEe1T9e" |
55 | | - + "+sO6H24w2F19AgMBAAECggEBAId/12187dO6wUPCjumuJA1QrrBnbKdKONyai36uoc1Od4s5QFj7" |
56 | | - + "+hEIeS7rbGNYQuBvnkgusAbzkW0FIpxpHce3EJez/emux6pEOKoP77BwMt9gy+txyu0+BHi91FQg" |
57 | | - + "AGvrnQDO5EYVY4Cz/WjOsJzKu8zVLg+DS0Toa2qRFwmUe9mVAXPNOCZ3Oae/Q6tCDsaINNw0fmjj" |
58 | | - + "jn6uohPbS+n6xENG3FkQXB36getXy310xTGED2J27cmAQH6gLR6Kl2iROzNPbbpBqbuemI9kbcld" |
59 | | - + "EwBS1jRfZWeaPstYA1niVrE9UgUBzemnoh4TDkG076sYthHMr5QFGjPswnwtJ4ECgYEA0sURQ5+v" |
60 | | - + "baH4tdaemI3qpnknXTlzSpuZZmAoyvY0Id0mlduwKwmZ3Y5989wHfnnhFfyNO4IkTKjI2Wp97qP5" |
61 | | - + "4eqUNpA7FtNU7KUzMcFDTtwtNZuRYMrKlqo2lLbA+gVrAYpYZFL4b7tcwtX4DnYorDsmude6W8sG" |
62 | | - + "4Mx2VdFJC9UCgYEAzjsdXCYH5doWUHb0dvn9ID7IikffEMRM720MRjrnnnVbpzx6ACntkPDNZg7p" |
63 | | - + "TRE/mx7iBz81ZaUWE+V0wd0JvCHEdpAz3mksyvDFhU4Bgs6xzf2pSul5muhsx3hHcvvPezz5Bnxs" |
64 | | - + "faJlzkxfwotyGmvWN15GA/pyfsZjsbbTpwkCgYAO6NnbysQCIV8SnegCKqfatt9N/O5m7LLhRxQb" |
65 | | - + "p2bwrlA4cZ34rWkw/w9x3LK7A6wkfgUPnJkswxPSLXJTG05l6M4rPfCwIKr1Qopojp9QSMr569NQ" |
66 | | - + "4YeLOOc7heIIzbFQHpU6I5Rncv2Q2sn9W+ZsqJKIuvX34FjQNiZ406EzMQKBgHSxOGS61D84DuZK" |
67 | | - + "2Ps1awhC3kB4eHzJRms3vflDPWoJJ+pSKwpKrzUTPHXiPBqyhtYkPGszVeiE6CAr9sv3YZnFVaBs" |
68 | | - + "6hyQUJsob+uE/w/gGvXe8VsFDx0bJOodYfhrCbTHBHWqE81nBcocpxayxsayfAzqWB3KKd0YLrMR" |
69 | | - + "K2PZAoGAcZa8915R2m0KZ6HVJUt/JDR85jCbN71kcVDFY2XSFkOJvOdFoHNfRckfLzjq9Y2MSSTV" |
70 | | - + "+QDWbDo2doUQCejJUTaN8nP79tfyir24X5uVPvQaeVoGTKYb+LfUqK0F60lStmjuddIGSZH55y3v" |
71 | | - + "+9XjmxbVERtd1lqgQg3VlmKlEXY="; |
| 40 | + private static final String PRIVATE_KEY_PKCS8_BASE64 = """ |
| 41 | + -----BEGIN PRIVATE KEY----- |
| 42 | + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCpyz97liuWPDYcLH9TX8BiT78o |
| 43 | + lCmAfmevvch6ncXUVuCzbdaKuKXwn4EVbDszsVJLoK5zdtP+X3iDhutj+IgKmLhuczF3M9VIcWr+ |
| 44 | + JJUyTH4+3h/RT8cjCDZOmk9iXkb5ifruVsLqzb9g+Vp140Oz7leikne7KmclHvTfvFd0WDI7Gb9v |
| 45 | + o4f5rT717BXJ/n+M6pNk8DLpLiEu6eziYvXRv5x+t5Go3x0eCXdaxEQUf2j876Wfr2qHRJK7lDfF |
| 46 | + e1DDsMg/KpKGiILYZ+g2qtVMZSxtp5BZEtfB5qV/IE5kWO+mCIAGpXSZIdbERR6pZUq8GLEe1T9e |
| 47 | + +sO6H24w2F19AgMBAAECggEBAId/12187dO6wUPCjumuJA1QrrBnbKdKONyai36uoc1Od4s5QFj7 |
| 48 | + +hEIeS7rbGNYQuBvnkgusAbzkW0FIpxpHce3EJez/emux6pEOKoP77BwMt9gy+txyu0+BHi91FQg |
| 49 | + AGvrnQDO5EYVY4Cz/WjOsJzKu8zVLg+DS0Toa2qRFwmUe9mVAXPNOCZ3Oae/Q6tCDsaINNw0fmjj |
| 50 | + jn6uohPbS+n6xENG3FkQXB36getXy310xTGED2J27cmAQH6gLR6Kl2iROzNPbbpBqbuemI9kbcld |
| 51 | + EwBS1jRfZWeaPstYA1niVrE9UgUBzemnoh4TDkG076sYthHMr5QFGjPswnwtJ4ECgYEA0sURQ5+v |
| 52 | + baH4tdaemI3qpnknXTlzSpuZZmAoyvY0Id0mlduwKwmZ3Y5989wHfnnhFfyNO4IkTKjI2Wp97qP5 |
| 53 | + 4eqUNpA7FtNU7KUzMcFDTtwtNZuRYMrKlqo2lLbA+gVrAYpYZFL4b7tcwtX4DnYorDsmude6W8sG |
| 54 | + 4Mx2VdFJC9UCgYEAzjsdXCYH5doWUHb0dvn9ID7IikffEMRM720MRjrnnnVbpzx6ACntkPDNZg7p |
| 55 | + TRE/mx7iBz81ZaUWE+V0wd0JvCHEdpAz3mksyvDFhU4Bgs6xzf2pSul5muhsx3hHcvvPezz5Bnxs |
| 56 | + faJlzkxfwotyGmvWN15GA/pyfsZjsbbTpwkCgYAO6NnbysQCIV8SnegCKqfatt9N/O5m7LLhRxQb |
| 57 | + p2bwrlC4cZ34rWkw/w9x3LK7A6wkfgUPnJkswxPSLXJTG05l6M4rPfCwIKr1Qopojp9QSMr569NQ |
| 58 | + 4YeLOOc7heIIzbFQHpU6I5Rncv2Q2sn9W+ZsqJKIuvX34FjQNiZ406EzMQKBgHSxOGS61D84DuZK |
| 59 | + 2Ps1awhC3kB4eHzJRms3vflDPWoJJ+pSKwpKrzUTPHXiPBqyhtYkPGszVeiE6CAr9sv3YZnFVaBs |
| 60 | + 6hyQUJsob+uE/w/gGvXe8VsFDx0bJOodYfhrCbTHBHWqE81nBcocpxayxsayfAzqWB3KKd0YLrMR |
| 61 | + K2PZAoGAcZa8915R2m0KZ6HVJUt/JDR85jCbN71kcVDFY2XSFkOJvOdFoHNfRckfLzjq9Y2MSSTV |
| 62 | + +QDWbDo2doUQCejJUTaN8nP79tfyir24X5uVPvQaeVoGTKYb+LfUqK0F60lStmjuddIGSZH55y3v |
| 63 | + +9XjmxbVERtd1lqgQg3VlmKlEXY= |
| 64 | + -----END PRIVATE KEY----- |
| 65 | + """; |
72 | 66 |
|
73 | 67 | /* |
74 | 68 | * Certificate: |
@@ -132,20 +126,9 @@ public void run() throws Exception { |
132 | 126 |
|
133 | 127 | public void runTest(String provider) throws Exception { |
134 | 128 |
|
135 | | - // load private key |
136 | | - // all keystore types should support private keys |
137 | | - KeySpec spec = new PKCS8EncodedKeySpec( |
138 | | - Base64.getMimeDecoder().decode(PRIVATE_KEY_PKCS8_BASE64)); |
139 | | - PrivateKey privateKey = KeyFactory.getInstance("RSA") |
140 | | - .generatePrivate(spec); |
141 | | - |
142 | | - // load x509 certificate |
143 | | - Certificate cert; |
144 | | - try (InputStream is = new BufferedInputStream( |
145 | | - new ByteArrayInputStream(CERTIFICATE.getBytes()))) { |
146 | | - cert = CertificateFactory.getInstance("X.509") |
147 | | - .generateCertificate(is); |
148 | | - } |
| 129 | + PEMDecoder pemDecoder = PEMDecoder.of(); |
| 130 | + PrivateKey privateKey = pemDecoder.decode(PRIVATE_KEY_PKCS8_BASE64, PrivateKey.class); |
| 131 | + Certificate cert = pemDecoder.decode(CERTIFICATE, X509Certificate.class); |
149 | 132 |
|
150 | 133 | int numEntries = 5; |
151 | 134 | String type = null; |
|
0 commit comments