summaryrefslogtreecommitdiff
path: root/gtests
diff options
context:
space:
mode:
authorJohn M. Schanck <jschanck@mozilla.com>2023-05-17 16:59:04 +0000
committerJohn M. Schanck <jschanck@mozilla.com>2023-05-17 16:59:04 +0000
commitfe079e35fb06df3a88ab51c361b95bad410702d7 (patch)
tree2da8f4830df0fa60f47dece550b8738b53615199 /gtests
parent5dd4021a38686b0b1d4f62aa727f908a267c0a51 (diff)
downloadnss-hg-fe079e35fb06df3a88ab51c361b95bad410702d7.tar.gz
Bug 1831983 - Add a constant time select function. r=mtHEADmaster
Differential Revision: https://phabricator.services.mozilla.com/D177803
Diffstat (limited to 'gtests')
-rw-r--r--gtests/util_gtest/manifest.mn1
-rw-r--r--gtests/util_gtest/util_gtest.gyp1
-rw-r--r--gtests/util_gtest/util_select_unittest.cc55
3 files changed, 57 insertions, 0 deletions
diff --git a/gtests/util_gtest/manifest.mn b/gtests/util_gtest/manifest.mn
index 87ebdfb33..279e276ec 100644
--- a/gtests/util_gtest/manifest.mn
+++ b/gtests/util_gtest/manifest.mn
@@ -13,6 +13,7 @@ CPPSRCS = \
util_memcmpzero_unittest.cc \
util_pkcs11uri_unittest.cc \
util_secasn1d_unittest.cc \
+ util_select_unittest.cc \
util_utf8_unittest.cc \
$(NULL)
diff --git a/gtests/util_gtest/util_gtest.gyp b/gtests/util_gtest/util_gtest.gyp
index e924df04f..df1a095dc 100644
--- a/gtests/util_gtest/util_gtest.gyp
+++ b/gtests/util_gtest/util_gtest.gyp
@@ -17,6 +17,7 @@
'util_memcmpzero_unittest.cc',
'util_pkcs11uri_unittest.cc',
'util_secasn1d_unittest.cc',
+ 'util_select_unittest.cc',
'util_utf8_unittest.cc',
],
'dependencies': [
diff --git a/gtests/util_gtest/util_select_unittest.cc b/gtests/util_gtest/util_select_unittest.cc
new file mode 100644
index 000000000..f62357c9b
--- /dev/null
+++ b/gtests/util_gtest/util_select_unittest.cc
@@ -0,0 +1,55 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "gtest/gtest.h"
+#include "scoped_ptrs_util.h"
+
+namespace nss_test {
+
+class SelectTest : public ::testing::Test {
+ protected:
+ void test_select(std::vector<uint8_t> &dest, const std::vector<uint8_t> &src0,
+ const std::vector<uint8_t> &src1, unsigned char b) {
+ EXPECT_EQ(src0.size(), src1.size());
+ EXPECT_GE(dest.size(), src0.size());
+ return NSS_SecureSelect(dest.data(), src0.data(), src1.data(), src0.size(),
+ b);
+ };
+};
+
+TEST_F(SelectTest, TestSelectZero) {
+ std::vector<uint8_t> dest(32, 255);
+ std::vector<uint8_t> src0(32, 0);
+ std::vector<uint8_t> src1(32, 1);
+ test_select(dest, src0, src1, 0);
+ EXPECT_EQ(dest, src0);
+}
+
+TEST_F(SelectTest, TestSelectOne) {
+ std::vector<uint8_t> dest(32, 255);
+ std::vector<uint8_t> src0(32, 0);
+ std::vector<uint8_t> src1(32, 1);
+ test_select(dest, src0, src1, 1);
+ EXPECT_EQ(dest, src1);
+}
+
+TEST_F(SelectTest, TestSelect170) {
+ std::vector<uint8_t> dest(32, 255);
+ std::vector<uint8_t> src0(32, 0);
+ std::vector<uint8_t> src1(32, 1);
+ test_select(dest, src0, src1, 170);
+ EXPECT_EQ(dest, src1);
+}
+
+TEST_F(SelectTest, TestSelect255) {
+ std::vector<uint8_t> dest(32, 255);
+ std::vector<uint8_t> src0(32, 0);
+ std::vector<uint8_t> src1(32, 1);
+ test_select(dest, src0, src1, 255);
+ EXPECT_EQ(dest, src1);
+}
+
+} // namespace nss_test