Skip to content

Commit 6af9858

Browse files
committed
[refactor] PKey.read to use BC fully when reading public keys
1 parent e60ec45 commit 6af9858

File tree

11 files changed

+114
-11
lines changed

11 files changed

+114
-11
lines changed

src/main/java/org/jruby/ext/openssl/PKey.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public static IRubyObject read(final ThreadContext context, IRubyObject recv, IR
156156
// d2i_PUBKEY_bio
157157
try {
158158
pubKey = org.jruby.ext.openssl.impl.PKey.readPublicKey(input);
159-
} catch (IOException|GeneralSecurityException e) {
159+
} catch (IOException e) {
160160
debugStackTrace(runtime, "PKey readPublicKey", e); /* ignore */
161161
}
162162
// PEM_read_bio_PUBKEY

src/main/java/org/jruby/ext/openssl/impl/PKey.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@
2727
***** END LICENSE BLOCK *****/
2828
package org.jruby.ext.openssl.impl;
2929

30+
import java.io.ByteArrayInputStream;
3031
import java.io.IOException;
32+
import java.io.InputStreamReader;
33+
import java.io.Reader;
3134
import java.math.BigInteger;
3235

3336
import java.security.KeyFactory;
@@ -51,6 +54,7 @@
5154
import java.security.spec.X509EncodedKeySpec;
5255
import javax.crypto.spec.DHParameterSpec;
5356

57+
import org.bouncycastle.asn1.ASN1Encodable;
5458
import org.bouncycastle.asn1.ASN1EncodableVector;
5559
import org.bouncycastle.asn1.ASN1Encoding;
5660
import org.bouncycastle.asn1.ASN1InputStream;
@@ -69,6 +73,8 @@
6973
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
7074
import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
7175
import org.bouncycastle.jcajce.provider.asymmetric.util.KeyUtil;
76+
import org.bouncycastle.openssl.PEMParser;
77+
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
7278

7379
import org.jruby.ext.openssl.SecurityHelper;
7480

@@ -132,17 +138,12 @@ public static KeyPair readPrivateKey(final Type type, final PrivateKeyInfo keyIn
132138
}
133139

134140
// d2i_PUBKEY_bio
135-
public static PublicKey readPublicKey(byte[] input) throws IOException, NoSuchAlgorithmException {
136-
PublicKey key = null;
137-
try {
138-
key = readRSAPublicKey(input);
139-
} catch (InvalidKeySpecException e) { /* ignore */ }
140-
if (key == null) {
141-
try {
142-
key = readDSAPublicKey(input);
143-
} catch (InvalidKeySpecException e) { /* ignore */ }
141+
public static PublicKey readPublicKey(byte[] input) throws IOException {
142+
try (Reader in = new InputStreamReader(new ByteArrayInputStream(input))) {
143+
Object pemObject = new PEMParser(in).readObject();
144+
SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfo.getInstance(pemObject);
145+
return new JcaPEMKeyConverter().getPublicKey(publicKeyInfo);
144146
}
145-
return key;
146147
}
147148

148149
// d2i_RSAPrivateKey_bio
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-----BEGIN EC PRIVATE KEY-----
2+
MHcCAQEEIFZpgytOAXPVreqGsHPdD9pojw30bnlqfUAqFZ3V3/qeoAoGCCqGSM49
3+
AwEHoUQDQgAE7JbAf3pWEEPje6NG+4dGOwIZnNwRFIe7DnQ4xFWKPrL5tVWlBh7N
4+
DFhjGNhiyO+aQjbcx9uWV74ifq7i21Bemg==
5+
-----END EC PRIVATE KEY-----
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7JbAf3pWEEPje6NG+4dGOwIZnNwR
3+
FIe7DnQ4xFWKPrL5tVWlBh7NDFhjGNhiyO+aQjbcx9uWV74ifq7i21Bemg==
4+
-----END PUBLIC KEY-----
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-----BEGIN EC PRIVATE KEY-----
2+
MHQCAQEEIMTine3s8tT+8bswDM4/z8o+wIYGb9PQPrw8x6Nu6QDdoAcGBSuBBAAK
3+
oUQDQgAEy8wuv6+fXodLPLfhxm132y1R8m4dkng7tHe7N+sULV2Eth6AxEXQfd+E
4+
4nuceR21UNCvQKqxiYwCzVwIKcHe/A==
5+
-----END EC PRIVATE KEY-----
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEy8wuv6+fXodLPLfhxm132y1R8m4dkng7
3+
tHe7N+sULV2Eth6AxEXQfd+E4nuceR21UNCvQKqxiYwCzVwIKcHe/A==
4+
-----END PUBLIC KEY-----
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-----BEGIN EC PRIVATE KEY-----
2+
MIHcAgEBBEIB0/+ffxEj7j62xvGaB5pvzk888e412ESO/EK/K0QlS9dSF8+Rj1rG
3+
zqpRB8fvDnoe8xdmkW/W5GKzojMyv7YQYumgBwYFK4EEACOhgYkDgYYABAEw74Yw
4+
aTbPY6TtWmxx6LJDzCX2nKWCPnKdZcEH9Ncu8g5RjRBRq2yacja3OoS6nA2YeDng
5+
reBJxZr376P6Ns6XcQFWDA6K/MCTrEBCsPxXZNxd8KR9vMGWhgNtWRrcKzwJfQkr
6+
suyehZkbbYyFnAWyARKHZuV7VUXmeEmRS/f93MPqVA==
7+
-----END EC PRIVATE KEY-----
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBMO+GMGk2z2Ok7VpsceiyQ8wl9pyl
3+
gj5ynWXBB/TXLvIOUY0QUatsmnI2tzqEupwNmHg54K3gScWa9++j+jbOl3EBVgwO
4+
ivzAk6xAQrD8V2TcXfCkfbzBloYDbVka3Cs8CX0JK7LsnoWZG22MhZwFsgESh2bl
5+
e1VF5nhJkUv3/dzD6lQ=
6+
-----END PUBLIC KEY-----
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEpAIBAAKCAQEA4GzZTLU48c4WbyvHi+QKrB71x+T0eq5hqDbQqnlYjhD1Ika7
3+
io1iplsdJWJuyxfYbUkb2Ol0fj4koZ/GS6lgCZr4+8UHbr1qf0Eu5HZSpszs2YxY
4+
8U5RHnrpw67co7hlgAR9HbyNf5XIYgLV9ldHH/eazwnc3F/hgNsV0xjScVilejgo
5+
cJ4zcsyymvW8t42lteM7bI867ZuJhGop/V+Y0HFyrMsPoQyLuCUpr6ulOfrkr7ZO
6+
dhAIG8r1HcjOp/AUjM15vfXcbUZjkM/VloifX1YitU3upMGJ8/DpFGffMOImrn5r
7+
6BT494V8rRyN2qvQoAkLJpqZ0avLxwiR2lgVQQIDAQABAoIBAEH0Ozgr2fxWEInD
8+
V/VooypKPvjr9F1JejGxSkmPN9MocKIOH3dsbZ1uEXa3ItBUxan4XlK06SNgp+tH
9+
xULfF/Y6sQlsse59hBq50Uoa69dRShn1AP6JgZVvkduMPBNxUYL5zrs6emsQXb9Q
10+
DglDRQfEAJ7vyxSIqQDxYcyT8uSUF70dqFe+E9B2VE3D6ccHc98k41pJrAFAUFH1
11+
wwvDhfyYr7/Ultut9wzpZvU1meF3Vna3GOUHfxrG6wu1G+WIWHGjouzThsc1qiVI
12+
BtMCJxuCt5fOXRbU4STbMqhB6sZHiOh6J/dZU6JwRYt+IS8FB6kCNFSEWZWQledJ
13+
XqtYSQECgYEA9nmnFTRj3fTBq9zMXfCRujkSy6X2bOb39ftNXzHFuc+I6xmv/3Bs
14+
P9tDdjueP/SnCb7i/9hXkpEIcxjrjiqgcvD2ym1hE4q+odMzRAXYMdnmzI34SVZE
15+
U5hYJcYsXNKrTTleba7QgqdORmyJ9FwqLO40udvmrZMY223XDwgRkOkCgYEA6RkO
16+
5wjjrWWp/G1YN3KXZTS1m2/eGrUThohXKAfAjbWWiouNLW2msXrxEWsPRL6xKiHu
17+
X9cwZwzi3MstAgk+bphUGUVUkGKNDjWHJA25tDYjbPtkd6xbL4eCHsKpNL3HNYr9
18+
N0CIvgn7qjaHRBem0iK7T6keY4axaSVddEwYapkCgYEA13K5qaB1F4Smcpt8DTWH
19+
vPe8xUUaZlFzOJLmLCsuwmB2N8Ppg2j7RspcaxJsH021YaB5ftjWm+ipMSr8ZPY/
20+
8JlPsNzxuYpTXtNmAbT2KYVm6THEch61dTk6/DIBf1YrpUJbl5by7vJeStL/uBmE
21+
SGgksL5XIyzs0opuLdaIvFkCgYAyBLWE8AxjFfCvAQuwAj/ocLITo6KmWnrRIIqL
22+
RXaVMgUWv7FQsTnW1cnK8g05tC2yG8vZ9wQk6Mf5lwOWb0NdWgSZ0528ydj41pWk
23+
L+nMeN2LMjqxz2NVxJ8wWJcUgTCxFZ0WcRumo9/D+6V1ABpE9zz4cBLcSnfhVypB
24+
nV6T6QKBgQCSZNCQ9HPxjAgYcsqc5sjNwuN1GHQZSav3Tye3k6zHENe1lsteT9K8
25+
xciGIuhybKZBvB4yImIIHCtnH+AS+mHAGqHarjNDMfvjOq0dMibPx4+bkIiHdBIH
26+
Xz+j5kmntvFiUnzr0Z/Tcqo+r8FvyCo1YWgwqGP8XoFrswD7gy7cZw==
27+
-----END RSA PRIVATE KEY-----
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4GzZTLU48c4WbyvHi+QK
3+
rB71x+T0eq5hqDbQqnlYjhD1Ika7io1iplsdJWJuyxfYbUkb2Ol0fj4koZ/GS6lg
4+
CZr4+8UHbr1qf0Eu5HZSpszs2YxY8U5RHnrpw67co7hlgAR9HbyNf5XIYgLV9ldH
5+
H/eazwnc3F/hgNsV0xjScVilejgocJ4zcsyymvW8t42lteM7bI867ZuJhGop/V+Y
6+
0HFyrMsPoQyLuCUpr6ulOfrkr7ZOdhAIG8r1HcjOp/AUjM15vfXcbUZjkM/Vloif
7+
X1YitU3upMGJ8/DpFGffMOImrn5r6BT494V8rRyN2qvQoAkLJpqZ0avLxwiR2lgV
8+
QQIDAQAB
9+
-----END PUBLIC KEY-----

0 commit comments

Comments
 (0)