| 146 | } |
| 147 | |
| 148 | int command_hash(int argc, char** argv) { |
| 149 | if (argc != 3) { |
| 150 | printf("Invalid hash arguments.\n"); |
| 151 | return 1; |
| 152 | } |
| 153 | |
| 154 | const char* input_file_path = argv[2]; |
| 155 | |
| 156 | size_t len = 0; |
| 157 | auto input = read_file(input_file_path, len); |
| 158 | |
| 159 | rc4::FastHash64 hasher(rc4::key_gen_hash_key()); |
| 160 | auto start = static_cast<const char*>(input.get()); |
| 161 | |
| 162 | auto ptr = reinterpret_cast<const uint64_t*>(start); |
| 163 | while (reinterpret_cast<const char*>(ptr + 1) <= start + len) { |
| 164 | hasher.feed(*ptr); |
| 165 | ++ptr; |
| 166 | } |
| 167 | |
| 168 | auto cptr = reinterpret_cast<const char*>(ptr); |
| 169 | if (cptr < start + len) { |
| 170 | uint64_t v = 0; |
| 171 | std::copy(cptr, start + len, reinterpret_cast<char*>(&v)); |
| 172 | hasher.feed(v); |
| 173 | } |
| 174 | |
| 175 | printf("%llx\n", static_cast<unsigned long long>(hasher.get())); |
| 176 | return 0; |
| 177 | } |
| 178 | |
| 179 | std::unordered_map<std::string, CommandHandler> commands = { |
| 180 | {"encrypt_predefined_rc4", command_encrypt_predefined_rc4}, |
nothing calls this directly
no test coverage detected