blob: 9176f358c4b7a51a3d45f687430cce5eb69d5954 [file] [log] [blame]
#!/bin/bash
#############################################################################
#### Tests for digital_signatures_cli binary.
ROOT_DIR="$TEST_SRCDIR/tink"
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"
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.
assert_equal() {
if [ "$1" == "$2" ]; then
echo "+++ Success: values are equal."
else
echo "--- Failure: values are different. Expected: [$1], actual: [$2]."
exit 1
fi
}
#############################################################################
#### 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.
$SIGNATURE_CLI sign $PRIVATE_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE || exit 1
#### Verify the signature.
$SIGNATURE_CLI verify $PUBLIC_KEYSET_FILE $MESSAGE_FILE $SIGNATURE_FILE $RESULT_FILE || exit 1
#### Check that the signature is valid.
RESULT=$(<$RESULT_FILE)
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"