[utilities COMMIT] in /java-support/trunk/src: main/java/net/shibboleth/utilities/java/support/security/DataSealer.ja...

noreply at shibboleth.net noreply at shibboleth.net
Thu Feb 26 18:21:07 EST 2015


Author: scantor
Date: Thu Feb 26 18:21:05 2015
New Revision: 766

URL: http://svn.shibboleth.net/view/utilities?rev=766&view=rev
Log:
IDP-616 - expose the key alias used to decrypt data

Modified:
    java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java
    java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java

Modified: java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java?rev=766&r1=765&r2=766&view=diff
==============================================================================
--- java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java (original)
+++ java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java Thu Feb 26 18:21:05 2015
@@ -29,6 +29,7 @@
 import java.util.zip.GZIPOutputStream;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.crypto.SecretKey;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
@@ -118,10 +119,27 @@
      * Decrypts and verifies an encrypted bundle created with {@link #wrap(String, long)}.
      * 
      * @param wrapped the encoded blob
+     * 
      * @return the decrypted data, if it's unexpired
      * @throws DataSealerException if the data cannot be unwrapped and verified
      */
     @Nonnull public String unwrap(@Nonnull @NotEmpty final String wrapped) throws DataSealerException {
+
+        return unwrap(wrapped, null);
+    }
+    
+    /**
+     * Decrypts and verifies an encrypted bundle created with {@link #wrap(String, long)}, optionally
+     * returning the label of the key used to encrypt the data.
+     * 
+     * @param wrapped the encoded blob
+     * @param keyUsed a buffer to receive the alias of the key used to encrypt the data
+     * 
+     * @return the decrypted data, if it's unexpired
+     * @throws DataSealerException if the data cannot be unwrapped and verified
+     */
+    @Nonnull public String unwrap(@Nonnull @NotEmpty final String wrapped, @Nullable final StringBuffer keyUsed)
+            throws DataSealerException {
 
         try {
             final byte[] in = Base64Support.decode(wrapped);
@@ -132,7 +150,10 @@
             // Extract alias of key, and load if necessary.
             final String keyAlias = inputDataStream.readUTF();
             log.trace("Data was encrypted by key named '{}'", keyAlias);
-            final SecretKey keyUsed = keyStrategy.getKey(keyAlias);
+            if (keyUsed != null) {
+                keyUsed.append(keyAlias);
+            }
+            final SecretKey key = keyStrategy.getKey(keyAlias);
             
             final GCMBlockCipher cipher = new GCMBlockCipher(new AESEngine());
             
@@ -142,7 +163,7 @@
             inputDataStream.readFully(iv);
 
             final AEADParameters aeadParams =
-                    new AEADParameters(new KeyParameter(keyUsed.getEncoded()), 128, iv, keyAlias.getBytes());
+                    new AEADParameters(new KeyParameter(key.getEncoded()), 128, iv, keyAlias.getBytes());
             cipher.init(false, aeadParams);
 
             // Data can't be any bigger than the original minus IV.

Modified: java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java?rev=766&r1=765&r2=766&view=diff
==============================================================================
--- java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java (original)
+++ java-support/trunk/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java Thu Feb 26 18:21:05 2015
@@ -99,17 +99,23 @@
     @Test public void encodeDecode() throws DataSealerException, ComponentInitializationException {
         final DataSealer sealer = createDataSealer();
 
-        String encoded = sealer.wrap(THE_DATA, System.currentTimeMillis() + 50000);
-        Assert.assertEquals(sealer.unwrap(encoded), THE_DATA);
+        final String encoded = sealer.wrap(THE_DATA, System.currentTimeMillis() + 50000);
+        final StringBuffer alias = new StringBuffer(); 
+        Assert.assertEquals(sealer.unwrap(encoded, alias), THE_DATA);
+        Assert.assertEquals(alias.toString(), "secret1");
     }
 
     @Test public void encodeDecodeSecondKey() throws DataSealerException, ComponentInitializationException {
         final DataSealer sealer = createDataSealer();
         final DataSealer sealer2 = createDataSealer2();
 
-        String encoded = sealer.wrap(THE_DATA, System.currentTimeMillis() + 50000);
-        Assert.assertEquals(sealer.unwrap(encoded), THE_DATA);
-        Assert.assertEquals(sealer2.unwrap(encoded), THE_DATA);

[... 11 lines stripped ...]


More information about the commits mailing list