summaryrefslogtreecommitdiffstats
path: root/security-utils
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2019-05-03 15:18:54 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2019-05-03 15:19:17 +0200
commit217b558f7c175e70afc6df0e15620556ce801958 (patch)
tree526ea7b2c50f8477c3d213886d183eb86a39cfea /security-utils
parentbcd18d57c73f4d3f04cf794e9e1e684a39d49218 (diff)
Add toPem(PublicKey)
Diffstat (limited to 'security-utils')
-rw-r--r--security-utils/src/main/java/com/yahoo/security/KeyUtils.java10
-rw-r--r--security-utils/src/test/java/com/yahoo/security/KeyUtilsTest.java54
2 files changed, 28 insertions, 36 deletions
diff --git a/security-utils/src/main/java/com/yahoo/security/KeyUtils.java b/security-utils/src/main/java/com/yahoo/security/KeyUtils.java
index 783afb7ac1d..416d05d6ea2 100644
--- a/security-utils/src/main/java/com/yahoo/security/KeyUtils.java
+++ b/security-utils/src/main/java/com/yahoo/security/KeyUtils.java
@@ -160,6 +160,16 @@ public class KeyUtils {
}
}
+ public static String toPem(PublicKey publicKey) {
+ try (StringWriter stringWriter = new StringWriter(); JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter)) {
+ pemWriter.writeObject(publicKey);
+ pemWriter.flush();
+ return stringWriter.toString();
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
private static byte[] getPkcs1Bytes(PrivateKey privateKey) throws IOException{
byte[] privBytes = privateKey.getEncoded();
PrivateKeyInfo pkInfo = PrivateKeyInfo.getInstance(privBytes);
diff --git a/security-utils/src/test/java/com/yahoo/security/KeyUtilsTest.java b/security-utils/src/test/java/com/yahoo/security/KeyUtilsTest.java
index eba6fad9bd8..dc0c0a126ea 100644
--- a/security-utils/src/test/java/com/yahoo/security/KeyUtilsTest.java
+++ b/security-utils/src/test/java/com/yahoo/security/KeyUtilsTest.java
@@ -17,34 +17,6 @@ import static org.junit.Assert.assertThat;
*/
public class KeyUtilsTest {
- private static final String rsaPemPublicKey = "-----BEGIN PUBLIC KEY-----\n" +
- "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsKL8jvIEy2peLtEvyhWW\n" +
- "b/O/9RHTfPXjeXahXmVrXE4zY5CJ6Mf1PFkwQ8K8S35YhSbOZM4aYhF9V8F4jwyW\n" +
- "nX6qWUMrWVHOuS32fkjdNo0z/KxCbG5nRIWLuv/PkHNuIJqMCbwn6Qud5a+wxeLg\n" +
- "LqlroCtUJKAGj4YlZ5i8oMdCqfHKl/DMwcks5XxtIArz6GcM2z8fOB3NRexj32MU\n" +
- "LH7ybWhCDx/RSqGQYJ8sWEFIK4HSmYqwqIQpFAm/ixISkeWBL6ikgqchZNMf7xyn\n" +
- "yJxjCHgtkxANsQhHj2kgAzLDeBsuM+/WRhBGa+LRvEcuu/zZv9+7eVhpaYJveLVd\n" +
- "cwPewW/8liBmKIzj/QPCn7ZlVRk094TZD6TCER4+JFW9mo0vFD8S9o0zhMlckzCF\n" +
- "4ZNNgyP9tI8Wecq25A+sUY5/WZNLi+mka/GnfPt97GrhM0YHb1M6t4nh1R437Nwh\n" +
- "rUHR/YDazbBvLk5T71GgfQfn44L9SwsqEYaHvdZAfV0IZJBtDo/yCe/yvgtHTymB\n" +
- "eBrRMpBU5recPtW8bgEWlHl6Qyduw9EBJjNYxvBpgV/D/tNBcau0aGxmhwpBevet\n" +
- "ekV6XA2miC7rWu2Wrq2l5LjXEgZOD5PNN2vQS2Cdet9JHYWbVbK3mBLgoChcC5Xo\n" +
- "/QHLU4RydI0i0+Z2/tjGsGsCAwEAAQ==\n" +
- "-----END PUBLIC KEY-----\n";
-
- /** Generated from the private key above with {@code openssl ec -pubout -in private_key.pem -out public_key.pem} */
- private static final String ecPemPublicKey = "-----BEGIN PUBLIC KEY-----\n" +
- "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuKVFA8dXk43kVfYKzkUqhEY2rDT9\n" +
- "z/4jKSTHwbYR8wdsOSrJGVEUPbS2nguIJ64OJH7gFnxM6sxUVj+Nm2HlXw==\n" +
- "-----END PUBLIC KEY-----\n";
-
- /** Generated with {@code openssl ecparam -name prime256v1 -genkey -noout -out private_key.pem} */
- private static final String ecPemPrivateKey = "-----BEGIN EC PRIVATE KEY-----\n" +
- "MHcCAQEEIJUmbIX8YFLHtpRgkwqDDE3igU9RG6JD9cYHWAZii9j7oAoGCCqGSM49\n" +
- "AwEHoUQDQgAEuKVFA8dXk43kVfYKzkUqhEY2rDT9z/4jKSTHwbYR8wdsOSrJGVEU\n" +
- "PbS2nguIJ64OJH7gFnxM6sxUVj+Nm2HlXw==\n" +
- "-----END EC PRIVATE KEY-----\n";
-
@Test
public void can_extract_public_key_from_rsa_private() {
KeyPair keyPair = KeyUtils.generateKeypair(KeyAlgorithm.RSA);
@@ -67,6 +39,7 @@ public class KeyUtilsTest {
assertThat(pem, containsString("END RSA PRIVATE KEY"));
PrivateKey deserializedKey = KeyUtils.fromPemEncodedPrivateKey(pem);
assertEquals(keyPair.getPrivate(), deserializedKey);
+ assertEquals(KeyAlgorithm.RSA.getAlgorithmName(), deserializedKey.getAlgorithm());
}
@Test
@@ -77,20 +50,29 @@ public class KeyUtilsTest {
assertThat(pem, containsString("END EC PRIVATE KEY"));
PrivateKey deserializedKey = KeyUtils.fromPemEncodedPrivateKey(pem);
assertEquals(keyPair.getPrivate(), deserializedKey);
+ assertEquals(KeyAlgorithm.EC.getAlgorithmName(), deserializedKey.getAlgorithm());
}
@Test
- public void can_deserialize_rsa_publickey_in_pem_format() {
- PublicKey publicKey = KeyUtils.fromPemEncodedPublicKey(rsaPemPublicKey);
- assertEquals(KeyAlgorithm.RSA.getAlgorithmName(), publicKey.getAlgorithm());
+ public void can_serialize_and_deserialize_rsa_publickey_using_pem_format() {
+ KeyPair keyPair = KeyUtils.generateKeypair(KeyAlgorithm.RSA);
+ String pem = KeyUtils.toPem(keyPair.getPublic());
+ assertThat(pem, containsString("BEGIN PUBLIC KEY"));
+ assertThat(pem, containsString("END PUBLIC KEY"));
+ PublicKey deserializedKey = KeyUtils.fromPemEncodedPublicKey(pem);
+ assertEquals(keyPair.getPublic(), deserializedKey);
+ assertEquals(KeyAlgorithm.RSA.getAlgorithmName(), deserializedKey.getAlgorithm());
}
@Test
- public void can_deserialize_ec_keys_in_pem_format() {
- PublicKey publicKey = KeyUtils.fromPemEncodedPublicKey(ecPemPublicKey);
- PrivateKey privateKey = KeyUtils.fromPemEncodedPrivateKey(ecPemPrivateKey);
- assertEquals(KeyAlgorithm.EC.getAlgorithmName(), publicKey.getAlgorithm());
- assertEquals(KeyAlgorithm.EC.getAlgorithmName(), privateKey.getAlgorithm());
+ public void can_serialize_and_deserialize_ec_publickey_using_pem_format() {
+ KeyPair keyPair = KeyUtils.generateKeypair(KeyAlgorithm.EC);
+ String pem = KeyUtils.toPem(keyPair.getPublic());
+ assertThat(pem, containsString("BEGIN PUBLIC KEY"));
+ assertThat(pem, containsString("END PUBLIC KEY"));
+ PublicKey deserializedKey = KeyUtils.fromPemEncodedPublicKey(pem);
+ assertEquals(keyPair.getPublic(), deserializedKey);
+ assertEquals(KeyAlgorithm.EC.getAlgorithmName(), deserializedKey.getAlgorithm());
}
}