From b539a3e67f53166e4323dae9293b3c75a35c00eb Mon Sep 17 00:00:00 2001 From: Marek Urbaniak <8502071+marekoid@users.noreply.github.com> Date: Mon, 30 Mar 2020 19:03:21 +0100 Subject: [PATCH 1/3] Add precondition check util --- .../client/crypto/nacl/SecretBoxOpener.java | 14 +++++------ .../client/util/internal/Preconditions.java | 23 +++++++++++++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/pusher/client/util/internal/Preconditions.java diff --git a/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java b/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java index fb2ecb04..5bf212bc 100644 --- a/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java +++ b/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java @@ -24,6 +24,9 @@ a copy of this software and associated documentation files (the "Software"), package com.pusher.client.crypto.nacl; +import static com.pusher.client.util.internal.Preconditions.checkArgument; +import static com.pusher.client.util.internal.Preconditions.checkNotNull; + import java.util.Arrays; public class SecretBoxOpener { @@ -33,19 +36,14 @@ public class SecretBoxOpener { private byte[] key; public SecretBoxOpener(byte[] key) { - // TODO: add a a little preconditions lib/class for that - if (key == null) throw new IllegalArgumentException("null key passed"); - if (key.length != 32) { - throw new IllegalArgumentException("key should be 32B, is: " + key.length + "B"); - } + checkNotNull(key, "null key passed"); + checkArgument(key.length == 32, "key should be 32B, is: " + key.length + "B"); this.key = key; } public byte[] open(byte box[], byte nonce[]) throws AuthenticityException { - if (key == null) { - throw new IllegalStateException("key has been cleared, create new instance"); - } + checkNotNull(key, "key has been cleared, create new instance"); byte subKey[] = new byte[32]; byte counter[] = new byte[16]; diff --git a/src/main/java/com/pusher/client/util/internal/Preconditions.java b/src/main/java/com/pusher/client/util/internal/Preconditions.java new file mode 100644 index 00000000..9841efe4 --- /dev/null +++ b/src/main/java/com/pusher/client/util/internal/Preconditions.java @@ -0,0 +1,23 @@ +package com.pusher.client.util.internal; + +public class Preconditions { + + public static void checkArgument(boolean expression, Object errorMessage) { + if (!expression) { + throw new IllegalArgumentException(String.valueOf(errorMessage)); + } + } + + public static void checkState(boolean expression, Object errorMessage) { + if (!expression) { + throw new IllegalStateException(String.valueOf(errorMessage)); + } + } + + public static T checkNotNull(T reference, Object errorMessage) { + if (reference == null) { + throw new NullPointerException(String.valueOf(errorMessage)); + } + return reference; + } +} From dbdea4e53d468051462e3e7480e7a0a5368d174d Mon Sep 17 00:00:00 2001 From: Marek Urbaniak <8502071+marekoid@users.noreply.github.com> Date: Tue, 31 Mar 2020 11:41:38 +0100 Subject: [PATCH 2/3] Alter precondition failure massage Per feedback: https://github.com/pusher/pusher-websocket-java/pull/240/files#r400806116 --- .../java/com/pusher/client/crypto/nacl/SecretBoxOpener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java b/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java index 5bf212bc..32048f73 100644 --- a/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java +++ b/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java @@ -37,7 +37,8 @@ public class SecretBoxOpener { public SecretBoxOpener(byte[] key) { checkNotNull(key, "null key passed"); - checkArgument(key.length == 32, "key should be 32B, is: " + key.length + "B"); + checkArgument(key.length == 32, "key length should be 32 bytes, but is " + + key.length + " bytes"); this.key = key; } From bb925cd1710e95e7e2e89f69544ce3eb738455d4 Mon Sep 17 00:00:00 2001 From: Marek Urbaniak <8502071+marekoid@users.noreply.github.com> Date: Tue, 31 Mar 2020 12:03:10 +0100 Subject: [PATCH 3/3] Use "must" instead of "should" for precondition failure Per feedback: https://github.com/pusher/pusher-websocket-java/pull/240#discussion_r400816216 --- .../java/com/pusher/client/crypto/nacl/SecretBoxOpener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java b/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java index 32048f73..dd5f8a8b 100644 --- a/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java +++ b/src/main/java/com/pusher/client/crypto/nacl/SecretBoxOpener.java @@ -37,7 +37,7 @@ public class SecretBoxOpener { public SecretBoxOpener(byte[] key) { checkNotNull(key, "null key passed"); - checkArgument(key.length == 32, "key length should be 32 bytes, but is " + + checkArgument(key.length == 32, "key length must be 32 bytes, but is " + key.length + " bytes"); this.key = key;