From cdd4268b4aebf985aec4db626c173573ce2c6594 Mon Sep 17 00:00:00 2001 From: Biju Kunjummen Date: Fri, 2 Feb 2018 10:03:39 -0800 Subject: [PATCH] Adds additional test for encyptor with RSA private key (#315) --- .../context/encrypt/EncryptorFactory.java | 2 +- .../context/encrypt/KeyFormatException.java | 7 +++ .../encrypt/EncryptorFactoryTests.java | 47 +++++++++++++++++++ .../resources/example-test-rsa-private-key | 27 +++++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/EncryptorFactoryTests.java create mode 100644 spring-cloud-context/src/test/resources/example-test-rsa-private-key diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/EncryptorFactory.java b/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/EncryptorFactory.java index 7e306ea9..948c749c 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/EncryptorFactory.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/EncryptorFactory.java @@ -37,7 +37,7 @@ public class EncryptorFactory { encryptor = new RsaSecretEncryptor(data); } catch (IllegalArgumentException e) { - throw new KeyFormatException(); + throw new KeyFormatException(e); } } diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/KeyFormatException.java b/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/KeyFormatException.java index 08e6fa47..9a609972 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/KeyFormatException.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/context/encrypt/KeyFormatException.java @@ -17,4 +17,11 @@ package org.springframework.cloud.context.encrypt; @SuppressWarnings("serial") public class KeyFormatException extends RuntimeException { + public KeyFormatException() { + super(); + } + + public KeyFormatException(Throwable t) { + super(t); + } } \ No newline at end of file diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/EncryptorFactoryTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/EncryptorFactoryTests.java new file mode 100644 index 00000000..545e8d01 --- /dev/null +++ b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/EncryptorFactoryTests.java @@ -0,0 +1,47 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.bootstrap.encrypt; + +import org.junit.Test; +import org.springframework.cloud.context.encrypt.EncryptorFactory; +import org.springframework.core.io.ClassPathResource; +import org.springframework.security.crypto.encrypt.TextEncryptor; +import org.springframework.util.StreamUtils; + +import java.nio.charset.Charset; + +import static org.junit.Assert.assertEquals; + +/** + * @author Biju Kunjummen + */ +public class EncryptorFactoryTests { + + @Test + public void testWithRsaPrivateKey() throws Exception { + String key = StreamUtils.copyToString( + new ClassPathResource("/example-test-rsa-private-key").getInputStream(), + Charset.forName("ASCII")); + //RSA private key needs to be with no new lines + //-----BEGIN RSA PRIVATE KEY-----MIIEowI....iX8htsO-----END RSA PRIVATE KEY----- + String keyNoNewLines = key.replaceAll("\\n", ""); + TextEncryptor encryptor = new EncryptorFactory().create(keyNoNewLines); + String toEncrypt = "sample text to encrypt"; + String encrypted = encryptor.encrypt(toEncrypt); + + assertEquals(toEncrypt, encryptor.decrypt(encrypted)); + } +} diff --git a/spring-cloud-context/src/test/resources/example-test-rsa-private-key b/spring-cloud-context/src/test/resources/example-test-rsa-private-key new file mode 100644 index 00000000..53ee7a10 --- /dev/null +++ b/spring-cloud-context/src/test/resources/example-test-rsa-private-key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAwClFgrRa/PUHPIJr9gvIPL6g6Rjp/TVZmVNOf2fL96DYbkj5 +4YbrwfKwjoTjk1M6gLQpOA4Blocx6zN5OnICnVGlVM9xymWxTxxCfc2tE2Fai9I1 +wchULCChhwm/UU5ZNi3KpXinlyamSYw+lMQkZ8gTXCgOEvs2j9E1quF4pvy1BZKv +bD8tUnUQlyiKRnI6gOxQL8B6OAYPRdaa9FVNmrs1B4eDPG918L2f1pT090P1n+tw +iejNgQvtSD78/A88qt89OhzscsufALTrBjycn89kkfBd0zbVLF0W6+ZVLZrf97/y +LCoGSCcZL9LFPNvNqxOnleviDco7aOs4stQ9jQIDAQABAoIBAQC1TbthyN0YUe+T +7dIDAbbZaVrU00biOtXgzjMADmTprP7Hf18UpIIIKfzfWw6FUD+gc1t4oe5pogE9 +UwGMXUmOORxu2pMYTb5vT9CEdexYnsAZsCo8PdD9GYSNrmquQef2MFpEqYQmHrdC +KWpaXn2i1ak+iCRPUGp4YwHpynZVxfE8z/AIsPn6NPDh6SnCXb1rTgQe2UCfXm93 +UJe5F/OR2kQi5KFO+dxLmCOBCwr6SGCLH+VotGpuxCVRUd9sJ/d4QpDZEgjuf7Ug +eQHfgMDS/tc09B9rl0dwKnEa31kcQ9X9KLkKP+w0Pqhh0Emny20eg9jS6XNayg61 +p/LQtW9BAoGBAO5veKMIcXfZmuh11WIIhdhLKkNtYyt5NDmrV8/IVScLFvjB0ftt +8PAtXo/ekOHkyITyIumQ9l4VCvacNw7DyV9FYk4WvrvVYOCL8aZi+O5+12NT67eO +Rr/voGlRoV05X7+inc90qbbYJ8lRmLSqvzmsm98mkuhw/FKGRhVZIfAJAoGBAM5R +I5vK6cJxOwXQOEGOd5/8B9JMFXyuendXo/N2/NxSQsbx4pc3v2rv/eGJYaY7Nx/y +2M/vdWYkpG59PAS3k2TrCA/0SGmyVqY+c8BomKisU5VaBlIPfGuec9tDPgWCp8Ur +3Jjt/2sVoa0vMkqymUqMb9HyH9tdI9oyh7EOOrplAoGAR6DlNNUMgVy11K/Rcqns +y5WJFMh/ykeXENwQfTNJoXkLZZ+UXVwhzYVTqxTJoZMBSi8TnecWnBzmNj+nqp/W +lvBZH+xlUDhB6jMgXUPOVJd2TTigz3vGdVKfdgQ33bGmugM4NWJuuacmDKyem2fQ +GptoGBmWeI24v3HnC/LC50ECgYAz0iN8hRnz0db+Xc9TgAJB997LDnszJuvxv9yZ +UWCvwiWtrKG6U7FLnd4J4STayPLOnoOgrsexETEP43rIwIdQCMysnTH3AmlLNlKC +mIMHksknsUX3JJaevVziTOBuJ+QV3S96ZgUKk5NZWYprQrLIC8AmXodr5NgVfS2h +5i4QFQKBgFfbYHiMw5AAUQrBNkrAjLd1wIaO/6qS3w4OsCWKowhfaJLEXAbIRV7s +vAtgtlCovdasVj4RRLXFf+73naVTQjBZI+3jWHHyFk3+Zy86mQCSGv9WuDVV1IhS +h8InTVvK8wgdgX7qiw3pvU0roqNW4/j4j8OqJO3Zt4KO2iX8htsO +-----END RSA PRIVATE KEY-----