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]

Reply via email to