From a2dbd9090392c765c3ded12ad82613d3f574a76d Mon Sep 17 00:00:00 2001
From: paulavidas <paulavidas@google.com>
Date: Mon, 15 Jul 2019 07:18:44 -0700
Subject: [PATCH] Add more tests.

PiperOrigin-RevId: 258156184
---
 .../cc/digital_signatures_cli_test.sh         | 104 +++++++++++++++---
 1 file changed, 90 insertions(+), 14 deletions(-)

diff --git a/examples/digital_signatures/cc/digital_signatures_cli_test.sh b/examples/digital_signatures/cc/digital_signatures_cli_test.sh
index 731df5579..9176f358c 100755
--- a/examples/digital_signatures/cc/digital_signatures_cli_test.sh
+++ b/examples/digital_signatures/cc/digital_signatures_cli_test.sh
@@ -4,7 +4,7 @@
 #### Tests for digital_signatures_cli binary.
 
 ROOT_DIR="$TEST_SRCDIR/tink"
-DIGITAL_SIGNATURES_CLI="$ROOT_DIR/examples/digital_signatures/cc/digital_signatures_cli"
+SIGNATURE_CLI="$ROOT_DIR/examples/digital_signatures/cc/digital_signatures_cli"
 
 PRIVATE_KEYSET_FILE="$TEST_TMPDIR/private_keyset.bin"
 PUBLIC_KEYSET_FILE="$TEST_TMPDIR/public_keyset.bin"
@@ -12,26 +12,102 @@ MESSAGE_FILE="$TEST_TMPDIR/message.txt"
 SIGNATURE_FILE="$TEST_TMPDIR/signature.bin"
 RESULT_FILE="$TEST_TMPDIR/result.txt"
 
+OTHER_PRIVATE_KEYSET_FILE="$TEST_TMPDIR/other_private_keyset.bin"
+OTHER_PUBLIC_KEYSET_FILE="$TEST_TMPDIR/other_public_keyset.bin"
+OTHER_MESSAGE_FILE="$TEST_TMPDIR/other_message.txt"
+
+echo "This is a message." > $MESSAGE_FILE
+echo "This is a different message." > $OTHER_MESSAGE_FILE
+
 #############################################################################
+#### Helper function that checks if values are equal.
 
-#### Genetate a private key and get a public key.
-$DIGITAL_SIGNATURES_CLI gen-private-key $PRIVATE_KEYSET_FILE
-$DIGITAL_SIGNATURES_CLI get-public-key $PRIVATE_KEYSET_FILE $PUBLIC_KEYSET_FILE
+assert_equal() {
+  if [ "$1" == "$2" ]; then
+    echo "+++ Success: values are equal."
+  else
+    echo "--- Failure: values are different. Expected: [$1], actual: [$2]."
+    exit 1
+  fi
+}
 
-#### Create a message.
-echo "This is a message." > $MESSAGE_FILE
+#############################################################################
+#### All good, everything should work.
+test_name="all_good"
+echo "+++ Starting test $test_name..."
+
+#### Generate a private key and get a public key.
+$SIGNATURE_CLI gen-private-key $PRIVATE_KEYSET_FILE || exit 1
+$SIGNATURE_CLI get-public-key $PRIVATE_KEYSET_FILE $PUBLIC_KEYSET_FILE || exit 1
 
 #### Sign the message.
-$DIGITAL_SIGNATURES_CLI sign $PRIVATE_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE
+$SIGNATURE_CLI sign $PRIVATE_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE || exit 1
 
 #### Verify the signature.
-$DIGITAL_SIGNATURES_CLI verify $PUBLIC_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE $RESULT_FILE
+$SIGNATURE_CLI verify $PUBLIC_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE $RESULT_FILE || exit 1
 
 #### Check that the signature is valid.
 RESULT=$(<$RESULT_FILE)
-if [ $RESULT == "valid" ]; then
-  echo "+++ Success: signature is valid."
-else
-  echo "--- Failure: signature is not valid."
-  exit 1
-fi
+assert_equal "valid" "$RESULT"
+
+#############################################################################
+#### Bad private key when getting the public key.
+test_name="get_public_key_with_bad_private_key"
+echo "+++ Starting test $test_name..."
+
+echo "abcd" >> $PRIVATE_KEYSET_FILE
+$SIGNATURE_CLI get-public-key $PRIVATE_KEYSET_FILE $PUBLIC_KEYSET_FILE
+
+EXIT_VALUE="$?"
+assert_equal 1 "$EXIT_VALUE"
+
+#############################################################################
+#### Different public key when verifying a signature.
+test_name="verify_with_different_public_key"
+echo "+++ Starting test $test_name..."
+
+$SIGNATURE_CLI gen-private-key $PRIVATE_KEYSET_FILE || exit 1
+$SIGNATURE_CLI gen-private-key $OTHER_PRIVATE_KEYSET_FILE || exit 1
+$SIGNATURE_CLI get-public-key $OTHER_PRIVATE_KEYSET_FILE $OTHER_PUBLIC_KEYSET_FILE || exit 1
+$SIGNATURE_CLI sign $PRIVATE_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE || exit 1
+$SIGNATURE_CLI verify $OTHER_PUBLIC_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE $RESULT_FILE || exit 1
+
+RESULT=$(<$RESULT_FILE)
+assert_equal "invalid" "$RESULT"
+
+#############################################################################
+#### Different message when verifying a signature.
+test_name="verify_with_different_message"
+echo "+++ Starting test $test_name..."
+
+$SIGNATURE_CLI gen-private-key $PRIVATE_KEYSET_FILE || exit 1
+$SIGNATURE_CLI get-public-key $PRIVATE_KEYSET_FILE $PUBLIC_KEYSET_FILE || exit 1
+$SIGNATURE_CLI sign $PRIVATE_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE || exit 1
+$SIGNATURE_CLI verify $PUBLIC_KEYSET_FILE $OTHER_MESSAGE_FILE $SIGNATURE_FILE $RESULT_FILE || exit 1
+
+RESULT=$(<$RESULT_FILE)
+assert_equal "invalid" "$RESULT"
+
+#############################################################################
+#### Sign with wrong key.
+test_name="sign_with_wrong_key"
+echo "+++ Starting test $test_name..."
+
+$SIGNATURE_CLI gen-private-key $PRIVATE_KEYSET_FILE || exit 1
+$SIGNATURE_CLI get-public-key $PRIVATE_KEYSET_FILE $PUBLIC_KEYSET_FILE || exit 1
+$SIGNATURE_CLI sign $PUBLIC_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE
+
+EXIT_VALUE="$?"
+assert_equal 1 "$EXIT_VALUE"
+
+#############################################################################
+#### Verify with wrong key.
+test_name="verify_with_wrong_key"
+echo "+++ Starting test $test_name..."
+
+$SIGNATURE_CLI gen-private-key $PRIVATE_KEYSET_FILE || exit 1
+$SIGNATURE_CLI sign $PRIVATE_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE || exit 1
+$SIGNATURE_CLI verify $PRIVATE_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE $RESULT_FILE
+
+EXIT_VALUE="$?"
+assert_equal 1 "$EXIT_VALUE"
-- 
GitLab