I meant fuck this email group! Get Outlook for Android<https://aka.ms/ghei36>
________________________________ From: wei jiang <[email protected]> Sent: Friday, March 22, 2019 10:47:14 PM To: James Developers List Subject: Re: [james-project] 03/04: JAMES-2671 Calculate the length of encrypted content duck this email group! stop sending emails to me! Get Outlook for Android<https://aka.ms/ghei36> ________________________________ From: [email protected] <[email protected]> Sent: Friday, March 22, 2019 10:18:47 AM To: [email protected] Subject: [james-project] 03/04: JAMES-2671 Calculate the length of encrypted content This is an automated email from the ASF dual-hosted git repository. rouazana pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 775d84f98520903673f164f8d24c45a447f5ee70 Author: Antoine Duprat <[email protected]> AuthorDate: Mon Mar 4 14:31:48 2019 +0100 JAMES-2671 Calculate the length of encrypted content --- .../james/blob/objectstorage/AESPayloadCodec.java | 10 +++--- .../blob/objectstorage/DefaultPayloadCodec.java | 6 ++-- .../blob/objectstorage/ObjectStorageBlobsDAO.java | 1 - .../apache/james/blob/objectstorage/Payload.java | 41 ++++++++++++++++++++++ .../james/blob/objectstorage/PayloadCodec.java | 2 -- .../blob/objectstorage/AESPayloadCodecTest.java | 11 +++--- .../objectstorage/DefaultPayloadCodecTest.java | 6 ++-- 7 files changed, 59 insertions(+), 18 deletions(-) diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java index ee60dd4..b92f73a 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java @@ -25,11 +25,12 @@ import java.io.OutputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.security.GeneralSecurityException; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicLong; import org.apache.commons.io.IOUtils; import org.apache.james.blob.objectstorage.crypto.CryptoConfig; import org.apache.james.blob.objectstorage.crypto.PBKDF2StreamingAeadFactory; -import org.jclouds.io.Payload; import org.jclouds.io.Payloads; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,11 +49,12 @@ public class AESPayloadCodec implements PayloadCodec { public Payload write(InputStream is) { PipedInputStream snk = new PipedInputStream(); try { + AtomicLong length = new AtomicLong(); PipedOutputStream src = new PipedOutputStream(snk); OutputStream outputStream = streamingAead.newEncryptingStream(src, PBKDF2StreamingAeadFactory.EMPTY_ASSOCIATED_DATA); Thread copyThread = new Thread(() -> { try (OutputStream stream = outputStream) { - IOUtils.copy(is, stream); + length.addAndGet(IOUtils.copy(is, stream)); } catch (IOException e) { throw new RuntimeException("Stream copy failure ", e); } @@ -61,7 +63,7 @@ public class AESPayloadCodec implements PayloadCodec { LOGGER.error("Unable to encrypt payload's input stream",e) ); copyThread.start(); - return Payloads.newInputStreamPayload(snk); + return new Payload(Payloads.newInputStreamPayload(snk), Optional.of(length.get())); } catch (IOException | GeneralSecurityException e) { throw new RuntimeException("Unable to build payload for object storage, failed to " + "encrypt", e); @@ -71,7 +73,7 @@ public class AESPayloadCodec implements PayloadCodec { @Override public InputStream read(Payload payload) throws IOException { try { - return streamingAead.newDecryptingStream(payload.openStream(), PBKDF2StreamingAeadFactory.EMPTY_ASSOCIATED_DATA); + return streamingAead.newDecryptingStream(payload.getPayload().openStream(), PBKDF2StreamingAeadFactory.EMPTY_ASSOCIATED_DATA); } catch (GeneralSecurityException e) { throw new IOException("Incorrect crypto setup", e); } diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java index bd56c49..6f56b26 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java @@ -21,18 +21,18 @@ package org.apache.james.blob.objectstorage; import java.io.IOException; import java.io.InputStream; +import java.util.Optional; -import org.jclouds.io.Payload; import org.jclouds.io.Payloads; public class DefaultPayloadCodec implements PayloadCodec { @Override public Payload write(InputStream is) { - return Payloads.newInputStreamPayload(is); + return new Payload(Payloads.newInputStreamPayload(is), Optional.empty()); } @Override public InputStream read(Payload payload) throws IOException { - return payload.openStream(); + return payload.getPayload().openStream(); } } diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java index d441e68..d870912 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java @@ -34,7 +34,6 @@ import org.apache.james.blob.objectstorage.swift.SwiftTempAuthObjectStorage; import org.jclouds.blobstore.domain.Blob; import org.jclouds.blobstore.options.CopyOptions; import org.jclouds.domain.Location; -import org.jclouds.io.Payload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/Payload.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/Payload.java new file mode 100644 index 0000000..3813072 --- /dev/null +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/Payload.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.apache.james.blob.objectstorage; + +import java.util.Optional; + +public class Payload { + + private final org.jclouds.io.Payload payload; + private final Optional<Long> length; + + public Payload(org.jclouds.io.Payload payload, Optional<Long> length) { + this.payload = payload; + this.length = length; + } + + public org.jclouds.io.Payload getPayload() { + return payload; + } + + public Optional<Long> getLength() { + return length; + } +} diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java index 5e1cfc5..debb9fb 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java @@ -22,8 +22,6 @@ package org.apache.james.blob.objectstorage; import java.io.IOException; import java.io.InputStream; -import org.jclouds.io.Payload; - public interface PayloadCodec { Payload write(InputStream is); diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/AESPayloadCodecTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/AESPayloadCodecTest.java index 62b7507..3127916 100644 --- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/AESPayloadCodecTest.java +++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/AESPayloadCodecTest.java @@ -26,10 +26,10 @@ import java.io.ByteArrayInputStream; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; +import java.util.Optional; import org.apache.commons.io.IOUtils; import org.apache.james.blob.objectstorage.crypto.CryptoConfig; -import org.jclouds.io.Payload; import org.jclouds.io.Payloads; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Test; @@ -50,7 +50,7 @@ class AESPayloadCodecTest implements PayloadCodecContract { @Test void aesCodecShouldEncryptPayloadContentWhenWriting() throws Exception { Payload payload = codec().write(expected()); - byte[] bytes = IOUtils.toByteArray(payload.openStream()); + byte[] bytes = IOUtils.toByteArray(payload.getPayload().openStream()); // authenticated encryption uses a random salt for the authentication // header all we can say for sure is that the output is not the same as // the input. @@ -59,7 +59,7 @@ class AESPayloadCodecTest implements PayloadCodecContract { @Test void aesCodecShouldDecryptPayloadContentWhenReading() throws Exception { - Payload payload = Payloads.newInputStreamPayload(new ByteArrayInputStream(ENCRYPTED_BYTES)); + Payload payload = new Payload(Payloads.newInputStreamPayload(new ByteArrayInputStream(ENCRYPTED_BYTES)), Optional.empty()); InputStream actual = codec().read(payload); @@ -69,7 +69,7 @@ class AESPayloadCodecTest implements PayloadCodecContract { @Test void aesCodecShouldRaiseExceptionWhenUnderliyingInputStreamFails() throws Exception { Payload payload = - Payloads.newInputStreamPayload(new FilterInputStream(new ByteArrayInputStream(ENCRYPTED_BYTES)) { + new Payload(Payloads.newInputStreamPayload(new FilterInputStream(new ByteArrayInputStream(ENCRYPTED_BYTES)) { private int readCount = 0; @Override @@ -81,7 +81,8 @@ class AESPayloadCodecTest implements PayloadCodecContract { return super.read(b, off, len); } } - }); + }), + Optional.empty()); int i = ENCRYPTED_BYTES.length / 2; byte[] bytes = new byte[i]; InputStream is = codec().read(payload); diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DefaultPayloadCodecTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DefaultPayloadCodecTest.java index eed9869..9f43983 100644 --- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DefaultPayloadCodecTest.java +++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DefaultPayloadCodecTest.java @@ -22,8 +22,8 @@ package org.apache.james.blob.objectstorage; import static org.assertj.core.api.Assertions.assertThat; import java.io.InputStream; +import java.util.Optional; -import org.jclouds.io.Payload; import org.jclouds.io.Payloads; import org.junit.jupiter.api.Test; @@ -37,12 +37,12 @@ class DefaultPayloadCodecTest implements PayloadCodecContract { void defaultCodecShouldNotChangePayloadContentWhenWriting() throws Exception { Payload payload = codec().write(expected()); - assertThat(payload.openStream()).hasSameContentAs(expected()); + assertThat(payload.getPayload().openStream()).hasSameContentAs(expected()); } @Test void defaultCodecShouldNotChangePayloadContentWhenReading() throws Exception { - Payload payload = Payloads.newInputStreamPayload(expected()); + Payload payload = new Payload(Payloads.newInputStreamPayload(expected()), Optional.empty()); InputStream actual = codec().read(payload); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
