diff options
| author | flysha <flysha@live.com> | 2016-10-21 07:44:00 +0800 |
|---|---|---|
| committer | flysha <flysha@live.com> | 2016-10-21 07:44:00 +0800 |
| commit | 337c96fc067ae5908d4cf5c8a188aa37588044ac (patch) | |
| tree | 7a374ff62e9c769ef7ba824a5cdde9e5270f3076 /toolsrc/src | |
| parent | 2b8bdeb0441c9fb83fc79bf10a761d1bf11cd287 (diff) | |
| download | vcpkg-337c96fc067ae5908d4cf5c8a188aa37588044ac.tar.gz vcpkg-337c96fc067ae5908d4cf5c8a188aa37588044ac.zip | |
Switch to using CertUtil to generate hash.
Diffstat (limited to 'toolsrc/src')
| -rw-r--r-- | toolsrc/src/commands_hash.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index 672e24a24..20e960d02 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -9,14 +9,24 @@ namespace fs = std::tr2::sys; namespace vcpkg { - void file_hash_sha512(fs::path const & path, char const * hash) + void file_hash_sha512(fs::path const & path, std::wstring const & hashType) { - auto cmd_line = Strings::format("Powershell -Command (Get-FileHash %s -Algorithm %s).Hash.ToLower()", - Strings::utf16_to_utf8(path.c_str()), - hash); - auto ec_data = System::cmd_execute_and_capture_output(Strings::utf8_to_utf16(cmd_line)); - Checks::check_exit(ec_data.exit_code == 0, "Running command:\n %s\n failed", cmd_line); - System::print(ec_data.output.c_str()); + auto cmd_line = Strings::wformat(LR"(CertUtil.exe -hashfile "%s" %s)", + path.c_str(), hashType.c_str()); + auto ec_data = System::cmd_execute_and_capture_output(cmd_line); + Checks::check_exit(ec_data.exit_code == 0, "Running command:\n %s\n failed", Strings::utf16_to_utf8(cmd_line)); + + std::string const & output = ec_data.output; + + auto start = output.find_first_of("\r\n"); + Checks::check_exit(start != std::string::npos, "Unexpected output format from command: %s", Strings::utf16_to_utf8(cmd_line)); + + auto end = output.find_first_of("\r\n", start + 1); + Checks::check_exit(end != std::string::npos, "Unexpected output format from command: %s", Strings::utf16_to_utf8(cmd_line)); + + auto hash = output.substr(start, end - start); + hash.erase(std::remove_if(hash.begin(), hash.end(), isspace), hash.end()); + System::println(hash.c_str()); } void hash_command(const vcpkg_cmd_arguments& args) @@ -28,11 +38,11 @@ namespace vcpkg if (args.command_arguments.size() == 1) { - file_hash_sha512(args.command_arguments[0], "SHA512"); + file_hash_sha512(args.command_arguments[0], L"SHA512"); } if (args.command_arguments.size() == 2) { - file_hash_sha512(args.command_arguments[0], args.command_arguments[1].c_str()); + file_hash_sha512(args.command_arguments[0], Strings::utf8_to_utf16(args.command_arguments[1])); } exit(EXIT_SUCCESS); |
