Skip to content

Commit c65a94d

Browse files
author
Dave Syer
committed
Add tests for bad keys
1 parent b780803 commit c65a94d

File tree

4 files changed

+56
-2
lines changed

4 files changed

+56
-2
lines changed

src/main/java/org/springframework/security/rsa/crypto/RsaKeyHelper.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,16 @@ class RsaKeyHelper {
6262
's', 'a' };
6363

6464
static KeyPair parseKeyPair(String pemData) {
65-
Matcher m = PEM_DATA.matcher(pemData.replaceAll("\n", "").trim());
65+
Matcher m = PEM_DATA.matcher(pemData.replaceAll("\n *", "").trim());
6666

6767
if (!m.matches()) {
6868
try {
69-
return new KeyPair(extractPublicKey(pemData), null);
69+
RSAPublicKey publicValue = extractPublicKey(pemData);
70+
if (publicValue == null) {
71+
throw new IllegalArgumentException(
72+
"String is not PEM encoded data, nor a public key encoded for ssh");
73+
}
74+
return new KeyPair(publicValue, null);
7075
} catch (Exception e) {
7176
throw new IllegalArgumentException(
7277
"String is not PEM encoded data, nor a public key encoded for ssh");

src/test/java/org/springframework/security/rsa/crypto/RsaKeyHelperTests.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,26 @@ public void parsePrivateKey() throws Exception {
3737
assertEquals("RSA", result.getPrivate().getAlgorithm());
3838
}
3939

40+
@Test
41+
public void parseSpaceyKey() throws Exception {
42+
String pem = StreamUtils.copyToString(new ClassPathResource("/spacey.pem", getClass()).getInputStream(),
43+
Charset.forName("UTF-8"));
44+
KeyPair result = RsaKeyHelper.parseKeyPair(pem);
45+
assertTrue(result.getPrivate().getEncoded().length > 0);
46+
assertEquals("RSA", result.getPrivate().getAlgorithm());
47+
}
48+
49+
@Test
50+
public void parseBadKey() throws Exception {
51+
// ssh-keygen -m pem -b 1024 -f src/test/resources/fake.pem
52+
String pem = StreamUtils.copyToString(new ClassPathResource("/bad.pem", getClass()).getInputStream(),
53+
Charset.forName("UTF-8"));
54+
try {
55+
RsaKeyHelper.parseKeyPair(pem);
56+
throw new IllegalStateException("Expected IllegalArgumentException");
57+
} catch (IllegalArgumentException e) {
58+
assertTrue(e.getMessage().contains("PEM"));
59+
}
60+
}
61+
4062
}

src/test/resources/bad.pem

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEowIBAAKCAQEAwClFgrRa/PUHPIJr9gvIPL6g6Rjp/TVZmVNOf2fL96DYbkj5

src/test/resources/spacey.pem

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEowIBAAKCAQEAwClFgrRa/PUHPIJr9gvIPL6g6Rjp/TVZmVNOf2fL96DYbkj5
3+
4YbrwfKwjoTjk1M6gLQpOA4Blocx6zN5OnICnVGlVM9xymWxTxxCfc2tE2Fai9I1wchULCChhwm/UU5ZNi3KpXinlyamSYw+lMQkZ8gTXCgOEvs2j9E1quF4pvy1BZKvbD8tUnUQlyiKRnI6gOxQL8B6OAYPRdaa9FVNmrs1B4eDPG918L2f1pT090P1n+tw
4+
iejNgQvtSD78/A88qt89OhzscsufALTrBjycn89kkfBd0zbVLF0W6+ZVLZrf97/y
5+
LCoGSCcZL9LFPNvNqxOnleviDco7aOs4stQ9jQIDAQABAoIBAQC1TbthyN0YUe+T
6+
7dIDAbbZaVrU00biOtXgzjMADmTprP7Hf18UpIIIKfzfWw6FUD+gc1t4oe5pogE9
7+
UwGMXUmOORxu2pMYTb5vT9CEdexYnsAZsCo8PdD9GYSNrmquQef2MFpEqYQmHrdC
8+
KWpaXn2i1ak+iCRPUGp4YwHpynZVxfE8z/AIsPn6NPDh6SnCXb1rTgQe2UCfXm93
9+
UJe5F/OR2kQi5KFO+dxLmCOBCwr6SGCLH+VotGpuxCVRUd9sJ/d4QpDZEgjuf7Ug
10+
eQHfgMDS/tc09B9rl0dwKnEa31kcQ9X9KLkKP+w0Pqhh0Emny20eg9jS6XNayg61
11+
p/LQtW9BAoGBAO5veKMIcXfZmuh11WIIhdhLKkNtYyt5NDmrV8/IVScLFvjB0ftt
12+
8PAtXo/ekOHkyITyIumQ9l4VCvacNw7DyV9FYk4WvrvVYOCL8aZi+O5+12NT67eO
13+
Rr/voGlRoV05X7+inc90qbbYJ8lRmLSqvzmsm98mkuhw/FKGRhVZIfAJAoGBAM5R
14+
I5vK6cJxOwXQOEGOd5/8B9JMFXyuendXo/N2/NxSQsbx4pc3v2rv/eGJYaY7Nx/y
15+
2M/vdWYkpG59PAS3k2TrCA/0SGmyVqY+c8BomKisU5VaBlIPfGuec9tDPgWCp8Ur
16+
3Jjt/2sVoa0vMkqymUqMb9HyH9tdI9oyh7EOOrplAoGAR6DlNNUMgVy11K/Rcqns
17+
y5WJFMh/ykeXENwQfTNJoXkLZZ+UXVwhzYVTqxTJoZMBSi8TnecWnBzmNj+nqp/W
18+
lvBZH+xlUDhB6jMgXUPOVJd2TTigz3vGdVKfdgQ33bGmugM4NWJuuacmDKyem2fQ
19+
GptoGBmWeI24v3HnC/LC50ECgYAz0iN8hRnz0db+Xc9TgAJB997LDnszJuvxv9yZ
20+
UWCvwiWtrKG6U7FLnd4J4STayPLOnoOgrsexETEP43rIwIdQCMysnTH3AmlLNlKC
21+
mIMHksknsUX3JJaevVziTOBuJ+QV3S96ZgUKk5NZWYprQrLIC8AmXodr5NgVfS2h
22+
5i4QFQKBgFfbYHiMw5AAUQrBNkrAjLd1wIaO/6qS3w4OsCWKowhfaJLEXAbIRV7s
23+
vAtgtlCovdasVj4RRLXFf+73naVTQjBZI+3jWHHyFk3+Zy86mQCSGv9WuDVV1IhS
24+
h8InTVvK8wgdgX7qiw3pvU0roqNW4/j4j8OqJO3Zt4KO2iX8htsO
25+
-----END RSA PRIVATE KEY-----

0 commit comments

Comments
 (0)