From: Joseph Sutton Date: Wed, 11 May 2022 02:05:34 +0000 (+1200) Subject: lib/util: Add test of data_blob_equal_const_time() X-Git-Tag: tevent-0.13.0~454 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a80d783a341fd8b88d73e04bf831b91984f87b73;p=thirdparty%2Fsamba.git lib/util: Add test of data_blob_equal_const_time() Ensure that it gives the correct results for comparing two data blobs. Signed-off-by: Joseph Sutton Reviewed-by: Andrew Bartlett --- diff --git a/lib/util/tests/data_blob.c b/lib/util/tests/data_blob.c index a3b2db6e604..e1e8129a259 100644 --- a/lib/util/tests/data_blob.c +++ b/lib/util/tests/data_blob.c @@ -76,6 +76,52 @@ static bool test_cmp(struct torture_context *tctx) return true; } +static bool test_equal_const_time(struct torture_context *tctx) +{ + const char *test_string = "foobarfoo"; + + DATA_BLOB null = data_blob_const(NULL, 0); + DATA_BLOB foobar = data_blob_const(test_string, 6); + DATA_BLOB bar = data_blob_const(test_string + 3, 3); + + /* These data blobs both contain 'foo', but at different addresses. */ + DATA_BLOB foo_same = data_blob_const(test_string, 3); + DATA_BLOB foo_other = data_blob_const(test_string + 6, 3); + + /* Test all equality combinations behave as expected. */ + torture_assert(tctx, data_blob_equal_const_time(&null, &null), "null == null"); + torture_assert(tctx, !data_blob_equal_const_time(&null, &foobar), "null != 'foobar'"); + torture_assert(tctx, !data_blob_equal_const_time(&null, &bar), "null != 'bar'"); + torture_assert(tctx, !data_blob_equal_const_time(&null, &foo_same), "null != 'foo'"); + torture_assert(tctx, !data_blob_equal_const_time(&null, &foo_other), "null != 'foo'"); + + torture_assert(tctx, !data_blob_equal_const_time(&foobar, &null), "'foobar' != null"); + torture_assert(tctx, data_blob_equal_const_time(&foobar, &foobar), "'foobar' == 'foobar'"); + torture_assert(tctx, !data_blob_equal_const_time(&foobar, &bar), "'foobar' != 'bar'"); + torture_assert(tctx, !data_blob_equal_const_time(&foobar, &foo_same), "'foobar' != 'foo'"); + torture_assert(tctx, !data_blob_equal_const_time(&foobar, &foo_other), "'foobar' != 'foo'"); + + torture_assert(tctx, !data_blob_equal_const_time(&foo_same, &null), "'foo' != null"); + torture_assert(tctx, !data_blob_equal_const_time(&foo_same, &foobar), "'foo' != 'foobar'"); + torture_assert(tctx, !data_blob_equal_const_time(&foo_same, &bar), "'foo' != 'bar'"); + torture_assert(tctx, data_blob_equal_const_time(&foo_same, &foo_same), "'foo' == 'foo'"); + torture_assert(tctx, data_blob_equal_const_time(&foo_same, &foo_other), "'foo' == 'foo'"); + + torture_assert(tctx, !data_blob_equal_const_time(&foo_other, &null), "'foo' != null"); + torture_assert(tctx, !data_blob_equal_const_time(&foo_other, &foobar), "'foo' != 'foobar'"); + torture_assert(tctx, !data_blob_equal_const_time(&foo_other, &bar), "'foo' != 'bar'"); + torture_assert(tctx, data_blob_equal_const_time(&foo_other, &foo_same), "'foo' == 'foo'"); + torture_assert(tctx, data_blob_equal_const_time(&foo_other, &foo_other), "'foo' == 'foo'"); + + torture_assert(tctx, !data_blob_equal_const_time(&bar, &null), "'bar' != null"); + torture_assert(tctx, !data_blob_equal_const_time(&bar, &foobar), "'bar' != 'foobar'"); + torture_assert(tctx, data_blob_equal_const_time(&bar, &bar), "'bar' == 'bar'"); + torture_assert(tctx, !data_blob_equal_const_time(&bar, &foo_same), "'bar' != 'foo'"); + torture_assert(tctx, !data_blob_equal_const_time(&bar, &foo_other), "'bar' != 'foo'"); + + return true; +} + static bool test_hex_string(struct torture_context *tctx) { DATA_BLOB a = data_blob_string_const("\xC\xA\xF\xE"); @@ -117,6 +163,7 @@ struct torture_suite *torture_local_util_data_blob(TALLOC_CTX *mem_ctx) torture_suite_add_simple_test(suite, "zero", test_zero);; torture_suite_add_simple_test(suite, "clear", test_clear); torture_suite_add_simple_test(suite, "cmp", test_cmp); + torture_suite_add_simple_test(suite, "equal_const_time", test_equal_const_time); torture_suite_add_simple_test(suite, "hex string", test_hex_string); torture_suite_add_simple_test(suite, "append_NULL_0", test_append_NULL_0); torture_suite_add_simple_test(suite, "append_empty_0", test_append_empty_0);