From 9fabd6d18bce526fcd8b0532ba648f568e837824 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Tue, 9 Jul 2019 11:52:23 -0700 Subject: [PATCH 01/13] Adding a validate version error handling as discussed in issue #113 --- aws-encryption-sdk-java.iml | 215 ++++++++++++++++++ .../model/CiphertextHeaders.java | 3 + 2 files changed, 218 insertions(+) create mode 100644 aws-encryption-sdk-java.iml diff --git a/aws-encryption-sdk-java.iml b/aws-encryption-sdk-java.iml new file mode 100644 index 000000000..032917a6e --- /dev/null +++ b/aws-encryption-sdk-java.iml @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java index 57517fea3..276941e0e 100644 --- a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java +++ b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java @@ -179,6 +179,9 @@ public Boolean isComplete() { */ private int parseVersion(final byte[] b, final int off) throws ParseException { version_ = PrimitivesParser.parseByte(b, off); + if(CiphertextType.deserialize(version_) == null) { + throw new BadCiphertextException("Invalid version type."); + } return 1; } From 63feeda4229d4d116b876ce0298814eab4bd9676 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Thu, 11 Jul 2019 13:53:32 -0700 Subject: [PATCH 02/13] Issue #113. Error handling version number. --- .../com/amazonaws/encryptionsdk/model/CiphertextHeaders.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java index 276941e0e..913690875 100644 --- a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java +++ b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java @@ -30,6 +30,7 @@ import com.amazonaws.encryptionsdk.internal.Constants; import com.amazonaws.encryptionsdk.internal.EncryptionContextSerializer; import com.amazonaws.encryptionsdk.internal.PrimitivesParser; +import com.amazonaws.encryptionsdk.internal.VersionInfo; /** * This class implements the headers for the message (ciphertext) produced by @@ -179,7 +180,7 @@ public Boolean isComplete() { */ private int parseVersion(final byte[] b, final int off) throws ParseException { version_ = PrimitivesParser.parseByte(b, off); - if(CiphertextType.deserialize(version_) == null) { + if(CiphertextType.deserialize(version_).getValue() != Byte.parseByte(VersionInfo.VERSION_NUM, 16)) { throw new BadCiphertextException("Invalid version type."); } return 1; From 3e3da826a2a4f5bf07b859580042a3b9de261b51 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Thu, 11 Jul 2019 14:19:13 -0700 Subject: [PATCH 03/13] Added an IDE artifact to the .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index adb8c2a84..2eaa90537 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ target/ .classpath /bin/ .idea/ +.iml/ \ No newline at end of file From a479e24721acadde85161783e6bf570739918805 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Thu, 11 Jul 2019 14:26:03 -0700 Subject: [PATCH 04/13] Added an IDE artifact to the .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2eaa90537..df8764d3e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ target/ .classpath /bin/ .idea/ -.iml/ \ No newline at end of file +*.iml/ \ No newline at end of file From 411d0c8ec22f06bab197c707e7bfec016ce05854 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Fri, 12 Jul 2019 14:16:27 -0700 Subject: [PATCH 05/13] Added the correct version of the CipherTeext as part of the error. *.iml is in the .gitignore --- .gitignore | 2 +- .../com/amazonaws/encryptionsdk/model/CiphertextHeaders.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index df8764d3e..1da07539c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ target/ .classpath /bin/ .idea/ -*.iml/ \ No newline at end of file +*.iml \ No newline at end of file diff --git a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java index 913690875..a3bf35205 100644 --- a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java +++ b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java @@ -180,7 +180,7 @@ public Boolean isComplete() { */ private int parseVersion(final byte[] b, final int off) throws ParseException { version_ = PrimitivesParser.parseByte(b, off); - if(CiphertextType.deserialize(version_).getValue() != Byte.parseByte(VersionInfo.VERSION_NUM, 16)) { + if(CiphertextType.deserialize(version_).getValue() != VersionInfo.CURRENT_CIPHERTEXT_VERSION ) { throw new BadCiphertextException("Invalid version type."); } return 1; From e2bbc3b029f6d8099a2104bb56c81503c322b93b Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Fri, 12 Jul 2019 14:27:49 -0700 Subject: [PATCH 06/13] Changed the value for the appropriate version number. Using Current_CipherText_Version. Added .iml to the gitignore --- aws-encryption-sdk-java.iml | 215 ------------------------------------ 1 file changed, 215 deletions(-) delete mode 100644 aws-encryption-sdk-java.iml diff --git a/aws-encryption-sdk-java.iml b/aws-encryption-sdk-java.iml deleted file mode 100644 index 032917a6e..000000000 --- a/aws-encryption-sdk-java.iml +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From afec681c45a3ab33d9e4e14bc8fb4435d0eec830 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Mon, 15 Jul 2019 09:54:25 -0700 Subject: [PATCH 07/13] Added a test for the Invalid Version Type. --- .../model/CiphertextHeadersTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java b/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java index 20bbec39d..2794e8748 100644 --- a/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java +++ b/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java @@ -314,6 +314,24 @@ private void readUptoNonceLen(final ByteBuffer headerBuff) { headerBuff.get(); } + @Test(expected = BadCiphertextException.class) + public void invalidVersion(){ + final Map encryptionContext = new HashMap(1); + encryptionContext.put("ENC", "CiphertextHeader Streaming Test"); + + final CiphertextHeaders ciphertextHeaders = createCiphertextHeaders(encryptionContext); + final byte[] headerBytes = ciphertextHeaders.toByteArray(); + final ByteBuffer headerBuff = ByteBuffer.wrap(headerBytes); + + readUptoType(headerBuff); + + //set version to invalid value of 0. + headerBuff.put((byte) 0); + + final CiphertextHeaders reconstructedHeaders = new CiphertextHeaders(); + reconstructedHeaders.deserialize(headerBuff.array(), 0); + } + @Test(expected = BadCiphertextException.class) public void invalidType() { final Map encryptionContext = new HashMap(1); From 531a8718898bb58ac439b07e6950eaeb6a391980 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Mon, 15 Jul 2019 20:50:09 -0700 Subject: [PATCH 08/13] Cleaning up the code in the parseVersion function. --- .../com/amazonaws/encryptionsdk/model/CiphertextHeaders.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java index a3bf35205..7b1595537 100644 --- a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java +++ b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java @@ -180,7 +180,7 @@ public Boolean isComplete() { */ private int parseVersion(final byte[] b, final int off) throws ParseException { version_ = PrimitivesParser.parseByte(b, off); - if(CiphertextType.deserialize(version_).getValue() != VersionInfo.CURRENT_CIPHERTEXT_VERSION ) { + if (CiphertextType.deserialize(version_).getValue() != VersionInfo.CURRENT_CIPHERTEXT_VERSION ) { throw new BadCiphertextException("Invalid version type."); } return 1; From 2031e39aa81fec2f2bb4967c0f0ee3302833c781 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Sun, 21 Jul 2019 13:23:15 -0700 Subject: [PATCH 09/13] Cleaned up CiphertextHeaders --- .../com/amazonaws/encryptionsdk/model/CiphertextHeaders.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java index 7b1595537..d3409fda9 100644 --- a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java +++ b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java @@ -180,7 +180,7 @@ public Boolean isComplete() { */ private int parseVersion(final byte[] b, final int off) throws ParseException { version_ = PrimitivesParser.parseByte(b, off); - if (CiphertextType.deserialize(version_).getValue() != VersionInfo.CURRENT_CIPHERTEXT_VERSION ) { + if (CiphertextType.deserialize(version_).getValue() != VersionInfo.CURRENT_CIPHERTEXT_VERSION) { throw new BadCiphertextException("Invalid version type."); } return 1; From 444146a20c5131bffe818b95db39b35e68b36a80 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Wed, 24 Jul 2019 16:47:28 -0700 Subject: [PATCH 10/13] There was a bug in the parseVersion code. Before it was converting the version to a ciphertext type and deserialzing it when all it needed to do was compare the bytes. --- .../com/amazonaws/encryptionsdk/model/CiphertextHeaders.java | 2 +- .../amazonaws/encryptionsdk/model/CiphertextHeadersTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java index d3409fda9..d957e0eac 100644 --- a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java +++ b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java @@ -180,7 +180,7 @@ public Boolean isComplete() { */ private int parseVersion(final byte[] b, final int off) throws ParseException { version_ = PrimitivesParser.parseByte(b, off); - if (CiphertextType.deserialize(version_).getValue() != VersionInfo.CURRENT_CIPHERTEXT_VERSION) { + if (version_ != VersionInfo.CURRENT_CIPHERTEXT_VERSION) { throw new BadCiphertextException("Invalid version type."); } return 1; diff --git a/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java b/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java index 2794e8748..1e66e4f03 100644 --- a/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java +++ b/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java @@ -323,9 +323,9 @@ public void invalidVersion(){ final byte[] headerBytes = ciphertextHeaders.toByteArray(); final ByteBuffer headerBuff = ByteBuffer.wrap(headerBytes); - readUptoType(headerBuff); + readUptoVersion(headerBuff); - //set version to invalid value of 0. + //set version to invalid type of 0. headerBuff.put((byte) 0); final CiphertextHeaders reconstructedHeaders = new CiphertextHeaders(); From 0a4653e15ab88e6e14e875992ce33038de872fb2 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Wed, 24 Jul 2019 22:20:15 -0700 Subject: [PATCH 11/13] There was a bug with the test I wrote. With the conditions that I passed to parseVersion it would never throw the error because the value was the same as CURRENT_CIPHERTEXT_VERSION. The test would pass but the error would not be thrown. It is now fixed and it throws the right error when it receives a wrong version. --- .../amazonaws/encryptionsdk/model/CiphertextHeadersTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java b/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java index 1e66e4f03..d279d7e96 100644 --- a/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java +++ b/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java @@ -329,7 +329,7 @@ public void invalidVersion(){ headerBuff.put((byte) 0); final CiphertextHeaders reconstructedHeaders = new CiphertextHeaders(); - reconstructedHeaders.deserialize(headerBuff.array(), 0); + reconstructedHeaders.deserialize(headerBuff.array(), 1); } @Test(expected = BadCiphertextException.class) From da3f6de654a2e92cfec1f561983f1969b1c6be20 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Fri, 26 Jul 2019 08:36:46 -0700 Subject: [PATCH 12/13] Fixed typo in error message. --- .../com/amazonaws/encryptionsdk/model/CiphertextHeaders.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java index d957e0eac..5e3b90886 100644 --- a/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java +++ b/src/main/java/com/amazonaws/encryptionsdk/model/CiphertextHeaders.java @@ -181,7 +181,7 @@ public Boolean isComplete() { private int parseVersion(final byte[] b, final int off) throws ParseException { version_ = PrimitivesParser.parseByte(b, off); if (version_ != VersionInfo.CURRENT_CIPHERTEXT_VERSION) { - throw new BadCiphertextException("Invalid version type."); + throw new BadCiphertextException("Invalid version "); } return 1; } From 8be7db88144142e4489a2c5a764ad5c34f9dd616 Mon Sep 17 00:00:00 2001 From: Jose Corella Date: Wed, 14 Aug 2019 11:50:42 -0700 Subject: [PATCH 13/13] Modified my test in the invalidVersion Test. Before it would overwrite the byte that didn't contain the version type. However, test still passed because the previous version of the test would offset to where the byte was changed. That has been fixed and the test now overrides the byte that holds the version number. --- .../amazonaws/encryptionsdk/model/CiphertextHeadersTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java b/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java index d279d7e96..47216e59c 100644 --- a/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java +++ b/src/test/java/com/amazonaws/encryptionsdk/model/CiphertextHeadersTest.java @@ -323,13 +323,11 @@ public void invalidVersion(){ final byte[] headerBytes = ciphertextHeaders.toByteArray(); final ByteBuffer headerBuff = ByteBuffer.wrap(headerBytes); - readUptoVersion(headerBuff); - //set version to invalid type of 0. headerBuff.put((byte) 0); final CiphertextHeaders reconstructedHeaders = new CiphertextHeaders(); - reconstructedHeaders.deserialize(headerBuff.array(), 1); + reconstructedHeaders.deserialize(headerBuff.array(), 0); } @Test(expected = BadCiphertextException.class)