static int uncrypt_wrapper(const char* input_path, const char* map_file, const std::string& status_file) { // The pipe has been created by the system server. unique_fd status_fd(open(status_file.c_str(), O_WRONLY | O_CREAT | O_SYNC, S_IRUSR | S_IWUSR)); if (!status_fd) { ALOGE("failed to open pipe \"%s\": %s", status_file.c_str(), strerror(errno)); return 1; } std::string package; if (input_path == nullptr) { if (!find_uncrypt_package(UNCRYPT_PATH_FILE, &package)) { android::base::WriteStringToFd("-1\n", status_fd.get()); return 1; } input_path = package.c_str(); } CHECK(map_file != nullptr); int status = uncrypt(input_path, map_file, status_fd.get()); if (status != 0) { android::base::WriteStringToFd("-1\n", status_fd.get()); return 1; } android::base::WriteStringToFd("100\n", status_fd.get()); return 0; }
int main(int argc, char** argv) { const char* input_path; const char* map_file; if (argc != 3 && argc != 1 && (argc == 2 && strcmp(argv[1], "--reboot") != 0)) { fprintf(stderr, "usage: %s [--reboot] [<transform_path> <map_file>]\n", argv[0]); return 2; } // When uncrypt is started with "--reboot", it wipes misc and reboots. // Otherwise it uncrypts the package and writes the block map. if (argc == 2) { if (read_fstab() == NULL) { return 1; } wipe_misc(); reboot_to_recovery(); } else { // The pipe has been created by the system server. int status_fd = open(status_file.c_str(), O_WRONLY | O_CREAT | O_SYNC, S_IRUSR | S_IWUSR); if (status_fd == -1) { ALOGE("failed to open pipe \"%s\": %s\n", status_file.c_str(), strerror(errno)); return 1; } if (argc == 3) { // when command-line args are given this binary is being used // for debugging. input_path = argv[1]; map_file = argv[2]; } else { std::string package; if (!find_uncrypt_package(package)) { android::base::WriteStringToFd("-1\n", status_fd); close(status_fd); return 1; } input_path = package.c_str(); map_file = cache_block_map.c_str(); } int status = uncrypt(input_path, map_file, status_fd); if (status != 0) { android::base::WriteStringToFd("-1\n", status_fd); close(status_fd); return 1; } android::base::WriteStringToFd("100\n", status_fd); close(status_fd); } return 0; }
static bool uncrypt_wrapper(const char* input_path, const char* map_file, const int socket) { // Initialize the uncrypt error to kUncryptErrorPlaceholder. log_uncrypt_error_code(kUncryptErrorPlaceholder); std::string package; if (input_path == nullptr) { if (!find_uncrypt_package(UNCRYPT_PATH_FILE, &package)) { write_status_to_socket(-1, socket); // Overwrite the error message. log_uncrypt_error_code(kUncryptPackageMissingError); return false; } input_path = package.c_str(); } CHECK(map_file != nullptr); auto start = std::chrono::system_clock::now(); int status = uncrypt(input_path, map_file, socket); std::chrono::duration<double> duration = std::chrono::system_clock::now() - start; int count = static_cast<int>(duration.count()); std::string uncrypt_message = android::base::StringPrintf("uncrypt_time: %d\n", count); if (status != 0) { // Log the time cost and error code if uncrypt fails. uncrypt_message += android::base::StringPrintf("uncrypt_error: %d\n", status); if (!android::base::WriteStringToFile(uncrypt_message, UNCRYPT_STATUS)) { PLOG(WARNING) << "failed to write to " << UNCRYPT_STATUS; } write_status_to_socket(-1, socket); return false; } if (!android::base::WriteStringToFile(uncrypt_message, UNCRYPT_STATUS)) { PLOG(WARNING) << "failed to write to " << UNCRYPT_STATUS; } write_status_to_socket(100, socket); return true; }
int auth(char login[][50]) { FILE *fichier = NULL; char nomfichier[50] = {'\0'}; int i2 = 0, iligne = 0, index; int i = 0, LenMdpLogin = 0, LenMdpSauv = 0; char sauvegarde[2][50] = {{'\0'},{'\0'}}; char caractere = '\0'; char buffer[4096] = {'\0'}; char ret[50] = {'\0'}; sprintf(nomfichier, "rs/sauvegarde/%s.RSCryptedSave", login[0]); fichier = fopen ((const char *) nomfichier, "r"); if (fichier == NULL) { return -1; } while (i2 < 2) { caractere = fgetc(fichier); while (caractere != '#') { buffer[iligne] = caractere; iligne++; caractere = fgetc(fichier); } uncrypt(buffer, ret); strcpy(sauvegarde[i2], ret); for(index = 0 ; index < 4096 ; index++) { buffer[index] = '\0'; } iligne = 0; i2++; } LenMdpLogin = strlen(login[1]); LenMdpSauv = strlen(sauvegarde[1]); if ( LenMdpLogin != LenMdpSauv) { fclose(fichier); return -2; } for ( i = 0 ; i < LenMdpLogin ; i++) { if (sauvegarde[1][i] == login[1][i]) {} else { fclose(fichier); return -2; } } fclose(fichier); return 2; }