Adding a timestamp to the RsaKeyPairFactory, to assist in key rotation.
diff --git a/src/main/java/io/mifos/core/lang/security/RsaKeyPairFactory.java b/src/main/java/io/mifos/core/lang/security/RsaKeyPairFactory.java
index effa243..3e9b173 100644
--- a/src/main/java/io/mifos/core/lang/security/RsaKeyPairFactory.java
+++ b/src/main/java/io/mifos/core/lang/security/RsaKeyPairFactory.java
@@ -15,6 +15,8 @@
  */
 package io.mifos.core.lang.security;
 
+import io.mifos.core.lang.DateConverter;
+
 import java.math.BigInteger;
 import java.security.KeyFactory;
 import java.security.KeyPair;
@@ -25,6 +27,8 @@
 import java.security.spec.InvalidKeySpecException;
 import java.security.spec.RSAPrivateKeySpec;
 import java.security.spec.RSAPublicKeySpec;
+import java.time.Clock;
+import java.time.LocalDateTime;
 
 @SuppressWarnings({"WeakerAccess", "unused"})
 public final class RsaKeyPairFactory {
@@ -45,26 +49,31 @@
       final RSAPrivateKeySpec rsaPrivateKeySpec =
           keyFactory.getKeySpec(keyPair.getPrivate(), RSAPrivateKeySpec.class);
 
+      final String timestamp = DateConverter.toIsoString(LocalDateTime.now(Clock.systemUTC()));
+      final String timestampWithoutNanos = timestamp.substring(0, timestamp.indexOf("."));
+      final String urlSafeTimeStamp = timestampWithoutNanos.replace(':', '_');
       final RSAPublicKey publicKey = (RSAPublicKey) keyFactory.generatePublic(rsaPublicKeySpec);
       final RSAPrivateKey privateKey = (RSAPrivateKey) keyFactory.generatePrivate(rsaPrivateKeySpec);
 
-      return new KeyPairHolder(publicKey, privateKey);
+      return new KeyPairHolder(urlSafeTimeStamp, publicKey, privateKey);
     } catch (final NoSuchAlgorithmException | InvalidKeySpecException e) {
       throw new IllegalStateException("RSA problem.");
     }
   }
 
   public static class KeyPairHolder {
-
+    private final String timestamp;
     private final RSAPublicKey publicKey;
     private final RSAPrivateKey privateKey;
 
-    public KeyPairHolder(final RSAPublicKey publicKey, final RSAPrivateKey privateKey) {
+    public KeyPairHolder(final String timestamp, final RSAPublicKey publicKey, final RSAPrivateKey privateKey) {
       super();
+      this.timestamp = timestamp;
       this.publicKey = publicKey;
       this.privateKey = privateKey;
     }
 
+
     public RSAPublicKey publicKey() {
       return publicKey;
     }
@@ -73,6 +82,10 @@
       return privateKey;
     }
 
+    public String getTimestamp() {
+      return timestamp;
+    }
+
     public BigInteger getPublicKeyMod() {
       return publicKey.getModulus();
     }
@@ -89,4 +102,4 @@
       return privateKey.getPrivateExponent();
     }
   }
-}
+}
\ No newline at end of file
diff --git a/src/test/java/io/mifos/core/lang/security/RsaKeyPairFactoryTest.java b/src/test/java/io/mifos/core/lang/security/RsaKeyPairFactoryTest.java
index 9626f08..f8aedb1 100644
--- a/src/test/java/io/mifos/core/lang/security/RsaKeyPairFactoryTest.java
+++ b/src/test/java/io/mifos/core/lang/security/RsaKeyPairFactoryTest.java
@@ -28,6 +28,7 @@
   public void shouldCreateRsaKeys() throws Exception {
     final RsaKeyPairFactory.KeyPairHolder keyPairHolder = RsaKeyPairFactory.createKeyPair();
     Assert.assertNotNull(keyPairHolder);
+    Assert.assertNotNull(keyPairHolder.getTimestamp());
     Assert.assertNotNull(keyPairHolder.publicKey());
     Assert.assertNotNull(keyPairHolder.privateKey());
   }