summaryrefslogtreecommitdiff
path: root/libfscrypt/tests/fscrypt_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libfscrypt/tests/fscrypt_test.cpp')
-rw-r--r--libfscrypt/tests/fscrypt_test.cpp138
1 files changed, 138 insertions, 0 deletions
diff --git a/libfscrypt/tests/fscrypt_test.cpp b/libfscrypt/tests/fscrypt_test.cpp
new file mode 100644
index 00000000..677f0f22
--- /dev/null
+++ b/libfscrypt/tests/fscrypt_test.cpp
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <linux/fs.h>
+
+#include <fscrypt/fscrypt.h>
+
+#include <gtest/gtest.h>
+
+using namespace android::fscrypt;
+
+/* modes not supported by upstream kernel, so not in <linux/fs.h> */
+#define FS_ENCRYPTION_MODE_AES_256_HEH 126
+#define FS_ENCRYPTION_MODE_PRIVATE 127
+
+TEST(fscrypt, ParseOptions) {
+ EncryptionOptions options;
+ std::string options_string;
+
+ EXPECT_FALSE(ParseOptions("", &options));
+ EXPECT_FALSE(ParseOptions("blah", &options));
+
+ EXPECT_TRUE(ParseOptions("software", &options));
+ EXPECT_EQ(1, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_XTS, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_CTS, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_4, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("aes-256-xts:aes-256-cts:v1", options_string);
+
+ EXPECT_TRUE(ParseOptions("aes-256-xts", &options));
+ EXPECT_EQ(1, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_XTS, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_CTS, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_4, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("aes-256-xts:aes-256-cts:v1", options_string);
+
+ EXPECT_TRUE(ParseOptions("adiantum", &options));
+ EXPECT_EQ(1, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_ADIANTUM, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_ADIANTUM, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_16 | FS_POLICY_FLAG_DIRECT_KEY, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("adiantum:adiantum:v1", options_string);
+
+ EXPECT_TRUE(ParseOptions("adiantum:aes-256-heh", &options));
+ EXPECT_EQ(1, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_ADIANTUM, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_HEH, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_16, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("adiantum:aes-256-heh:v1", options_string);
+
+ EXPECT_TRUE(ParseOptions("ice", &options));
+ EXPECT_EQ(1, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_PRIVATE, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_CTS, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_4, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("ice:aes-256-cts:v1", options_string);
+
+ EXPECT_FALSE(ParseOptions("ice:blah", &options));
+
+ EXPECT_TRUE(ParseOptions("ice:aes-256-cts", &options));
+ EXPECT_EQ(1, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_PRIVATE, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_CTS, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_4, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("ice:aes-256-cts:v1", options_string);
+
+ EXPECT_TRUE(ParseOptions("ice:aes-256-heh", &options));
+ EXPECT_EQ(1, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_PRIVATE, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_HEH, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_16, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("ice:aes-256-heh:v1", options_string);
+
+ EXPECT_TRUE(ParseOptions("ice:adiantum", &options));
+ EXPECT_EQ(1, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_PRIVATE, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_ADIANTUM, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_16 | FS_POLICY_FLAG_DIRECT_KEY, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("ice:adiantum:v1", options_string);
+
+ EXPECT_TRUE(ParseOptions("aes-256-xts:aes-256-cts", &options));
+ EXPECT_EQ(1, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_XTS, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_CTS, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_4, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("aes-256-xts:aes-256-cts:v1", options_string);
+
+ EXPECT_TRUE(ParseOptions("aes-256-xts:aes-256-cts:v1", &options));
+ EXPECT_EQ(1, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_XTS, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_CTS, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_4, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("aes-256-xts:aes-256-cts:v1", options_string);
+
+ EXPECT_TRUE(ParseOptions("aes-256-xts:aes-256-cts:v2", &options));
+ EXPECT_EQ(2, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_XTS, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_CTS, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_16, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("aes-256-xts:aes-256-cts:v2", options_string);
+
+ EXPECT_TRUE(ParseOptions("aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized", &options));
+ EXPECT_EQ(2, options.version);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_XTS, options.contents_mode);
+ EXPECT_EQ(FS_ENCRYPTION_MODE_AES_256_CTS, options.filenames_mode);
+ EXPECT_EQ(FS_POLICY_FLAGS_PAD_16 | FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64, options.flags);
+ EXPECT_TRUE(OptionsToString(options, &options_string));
+ EXPECT_EQ("aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized", options_string);
+
+ EXPECT_FALSE(ParseOptions("aes-256-xts:aes-256-cts:v2:", &options));
+ EXPECT_FALSE(ParseOptions("aes-256-xts:aes-256-cts:v2:foo", &options));
+ EXPECT_FALSE(ParseOptions("aes-256-xts:aes-256-cts:blah", &options));
+ EXPECT_FALSE(ParseOptions("aes-256-xts:aes-256-cts:vblah", &options));
+}