[java-support] branch master updated: Relax DataSealer requirement for data expiration.
Scott Cantor
cantor.2 at osu.edu
Tue Jun 30 14:31:11 UTC 2020
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch master
in repository java-support.
View the commit online:
http://git.shibboleth.net/view/?p=java-support.git;a=commit;h=03b8dc97f7da4af03376380d0e79f8d3f342d34b
The following commit(s) were added to refs/heads/master by this push:
new 03b8dc9 Relax DataSealer requirement for data expiration.
03b8dc9 is described below
commit 03b8dc97f7da4af03376380d0e79f8d3f342d34b
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Jun 30 10:31:03 2020 -0400
Relax DataSealer requirement for data expiration.
---
.../utilities/java/support/security/DataSealer.java | 21 +++++++++++++++++----
.../java/support/security/DataSealerTest.java | 11 ++++++++++-
2 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java b/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java
index 7d61a4c..2bc88fd 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/security/DataSealer.java
@@ -56,6 +56,8 @@ import org.slf4j.LoggerFactory;
/**
* Applies a MAC to time-limited information and encrypts with a symmetric key.
+ *
+ * TODO: make final
*/
public class DataSealer extends AbstractInitializableComponent {
@@ -269,7 +271,7 @@ public class DataSealer extends AbstractInitializableComponent {
new DataInputStream(new GZIPInputStream(new ByteArrayInputStream(decryptedBytes)))) {
final long decodedExpirationTime = dataInputStream.readLong();
- if (System.currentTimeMillis() > decodedExpirationTime) {
+ if (decodedExpirationTime > 0 && System.currentTimeMillis() > decodedExpirationTime) {
log.debug("Unwrapped data has expired");
throw new DataExpiredException("Unwrapped data has expired");
}
@@ -295,6 +297,17 @@ public class DataSealer extends AbstractInitializableComponent {
}
}
+ /**
+ * Equivalent to {@link #wrap(String, Instant)} with expiration set to "never".
+ *
+ * @param data the data to wrap
+ * @return the encoded blob
+ * @throws DataSealerException if the wrapping operation fails
+ */
+ @Nonnull public String wrap(@Nonnull @NotEmpty final String data) throws DataSealerException {
+ return wrap(data, null);
+ }
+
/**
* Encodes data into an AEAD-encrypted blob, gzip(exp|data)
*
@@ -308,11 +321,11 @@ public class DataSealer extends AbstractInitializableComponent {
* (in length-prefixed UTF-8 format), which identifies the key used. Finally the result is base64-encoded.</p>
*
* @param data the data to wrap
- * @param exp expiration time
+ * @param exp expiration time or null for none
* @return the encoded blob
* @throws DataSealerException if the wrapping operation fails
*/
- @Nonnull public String wrap(@Nonnull @NotEmpty final String data, @Nonnull final Instant exp)
+ @Nonnull public String wrap(@Nonnull @NotEmpty final String data, @Nullable final Instant exp)
throws DataSealerException {
if (data == null || data.length() == 0) {
@@ -335,7 +348,7 @@ public class DataSealer extends AbstractInitializableComponent {
final GZIPOutputStream compressedStream = new GZIPOutputStream(byteStream);
final DataOutputStream dataStream = new DataOutputStream(compressedStream)) {
- dataStream.writeLong(exp.toEpochMilli());
+ dataStream.writeLong(exp != null ? exp.toEpochMilli() : 0);
int count = 0;
int start = 0;
diff --git a/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java b/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java
index afd6271..ca79fff 100644
--- a/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java
+++ b/src/test/java/net/shibboleth/utilities/java/support/security/DataSealerTest.java
@@ -104,10 +104,19 @@ public class DataSealerTest {
sealer.initialize();
return sealer;
}
-
+
@Test public void encodeDecode() throws DataSealerException, ComponentInitializationException {
final DataSealer sealer = createDataSealer();
+ final String encoded = sealer.wrap(THE_DATA);
+ final StringBuffer alias = new StringBuffer();
+ Assert.assertEquals(sealer.unwrap(encoded, alias), THE_DATA);
+ Assert.assertEquals(alias.toString(), "secret1");
+ }
+
+ @Test public void encodeDecodeWithExp() throws DataSealerException, ComponentInitializationException {
+ final DataSealer sealer = createDataSealer();
+
final String encoded = sealer.wrap(THE_DATA, Instant.now().plusSeconds(50));
final StringBuffer alias = new StringBuffer();
Assert.assertEquals(sealer.unwrap(encoded, alias), THE_DATA);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list