#include <ode/secure-erase.h>
#include <ode/internal-encryption.h>
#include <ode/external-encryption.h>
+#include <ode/extension-encryption.h>
extern char** environ;
std::cout << "Usage: " << name << " [Option]" << std::endl
<< std::endl
<< "Options :" << std::endl
- << " -m, --mount=internal|external mount" << std::endl
- << " -u, --umount=internal|external umount" << std::endl
- << " -e, --encrypt=internal|external encrypt" << std::endl
- << " -d, --decrypt=internal|external decrypt" << std::endl
- << " -p, --changepw=internal|external change password" << std::endl
- << " -s, --state=internal|external get state" << std::endl
- << " -w, --waitmnt=internal|external wait for mount"<< std::endl
- << " -r, --erase=FILE|DIRECTORY secure-erase" << std::endl
- << " -c, --clean=DIRECTORY secure-clean" << std::endl
- << " -h, --help show this" << std::endl
+ << " -m, --mount=internal|external|extension mount" << std::endl
+ << " -u, --umount=internal|external|extension umount" << std::endl
+ << " -e, --encrypt=internal|external encrypt" << std::endl
+ << " -d, --decrypt=internal|external decrypt" << std::endl
+ << " -f, --format=extension format and setup encryption" << std::endl
+ << " -p, --changepw=internal|external|extension change password" << std::endl
+ << " -s, --state=internal|external|extension get state" << std::endl
+ << " -w, --waitmnt=internal|external|extension wait for mount"<< std::endl
+ << " -r, --erase=FILE|DIRECTORY secure-erase" << std::endl
+ << " -c, --clean=DIRECTORY secure-clean" << std::endl
+ << " -h, --help show this" << std::endl
<< std::endl;
return -1;
return password;
}
-static inline void printSelectableStorage()
+static inline void printSelectableStorage(bool internal = true,
+ bool external = true,
+ bool extension = true)
{
- std::cerr << "Just choose one among followings :" << std::endl
- << "internal, external" << std::endl;
+ bool firstDone = false;
+ std::cerr << "Just choose one among followings :" << std::endl;
+
+ if (internal) {
+ std::cerr << "internal";
+ firstDone = true;
+ }
+ if (external) {
+ if (firstDone) {
+ std::cerr << ", ";
+ }
+ std::cerr << "external";
+ firstDone = true;
+ }
+ if (extension) {
+ if (firstDone) {
+ std::cerr << ", ";
+ }
+ std::cerr << "extension";
+ firstDone = true;
+ }
+
+ std::cerr << std::endl;
}
static inline int mount(const std::string name)
} else {
std::cerr << "Password setting failed" << std::endl;
}
+ } else if (name == "extension") {
+ std::string password = getPassword();
+ ret = ode_extension_encryption_mount(password.c_str());
} else {
printSelectableStorage();
return -1;
ret = ode_internal_encryption_umount();
} else if (name == "external") {
ret = ode_external_encryption_umount();
+ } else if (name == "extension") {
+ ret = ode_extension_encryption_umount();
} else {
printSelectableStorage();
return -1;
}
ret = ode_external_encryption_encrypt(password.c_str(), options);
} else {
- printSelectableStorage();
+ printSelectableStorage(true, true, false);
return -1;
}
ode_external_encryption_clean_password(password.c_str());
}
} else {
- printSelectableStorage();
+ printSelectableStorage(true, true, false);
+ return -1;
+ }
+
+ if (ret != 0) {
+ std::cerr << "Error : " << ret <<std::endl;
+ }
+
+ return ret;
+}
+
+
+static inline int format_storage(const std::string name)
+{
+ int ret;
+
+ if (name == "extension") {
+ bool result = false;
+ ode_extension_encryption_is_password_initialized(&result);
+
+ if (!result) {
+ std::cout << "New ";
+ std::string password = getPassword();
+ ode_extension_encryption_init_password(password.c_str());
+ }
+
+ result = false;
+ std::cout << "Confirm ";
+ std::string password = getPassword();
+ ode_extension_encryption_verify_password(password.c_str(), &result);
+
+ if (!result) {
+ std::cerr << "Confirm password doesn't match" << std::endl;
+ return -1;
+ }
+
+ ret = ode_extension_encryption_format(password.c_str());
+ } else {
+ printSelectableStorage(false, false, true);
return -1;
}
ret = ode_internal_encryption_change_password(oldPW.c_str(), newPW.c_str());
} else if (name == "external") {
ret = ode_external_encryption_change_password(oldPW.c_str(), newPW.c_str());
+ } else if (name == "extension") {
+ ret = ode_extension_encryption_change_password(oldPW.c_str(), newPW.c_str());
} else {
printSelectableStorage();
return -1;
ret = ode_internal_encryption_get_state(&state);
} else if (name == "external") {
ret = ode_external_encryption_get_state(&state);
+ } else if (name == "extension") {
+ ret = ode_extension_encryption_get_state(&state);
} else {
printSelectableStorage();
return -1;
}
std::cout << std::endl;
-
return ret;
}
} else if (name == "external") {
std::cout << "Wait for external storage mount..." << std::endl;
ret = ode_external_encryption_set_mount_event_cb(mount_event_cb, &mtx);
+ } else if (name == "extension") {
+ std::cout << "Wait for extension storage mount..." << std::endl;
+ ret = ode_extension_encryption_set_mount_event_cb(mount_event_cb, &mtx);
} else {
printSelectableStorage();
return -1;
return ret;
}
+
static inline int erase(const std::string name)
{
int ret;
{"umount", required_argument, 0, 'u'},
{"encrypt", required_argument, 0, 'e'},
{"decrypt", required_argument, 0, 'd'},
+ {"format", required_argument, 0, 'f'},
{"state", required_argument, 0, 's'},
{"waitmnt", required_argument, 0, 'w'},
{"erase", required_argument, 0, 'r'},
return EXIT_SUCCESS;
}
- while ((opt = getopt_long(argc, argv, "m:u:e:d:p:s:w:r:c:h", options, &index)) != -1) {
+ while ((opt = getopt_long(argc, argv, "m:u:e:d:f:p:s:w:r:c:h", options, &index)) != -1) {
switch (opt) {
case 'm':
ret = mount(optarg);
case 'd':
ret = decrypt_storage(optarg);
break;
+ case 'f':
+ ret = format_storage(optarg);
+ break;
case 'p':
ret = change_password(optarg);
break;