char * hash_result(struct hash *hash) { unsigned char sum[16]; hash_result_as_bytes(hash, sum); return format_hash_as_string(sum, hash_input_size(hash)); }
/* Return the hash result as a hex string. Caller frees. */ char * hash_result(struct mdfour *md) { unsigned char sum[16]; hash_result_as_bytes(md, sum); return format_hash_as_string(sum, (unsigned) md->totalN); }
bool manifest_dump(const char *manifest_path, FILE *stream) { struct manifest *mf = NULL; gzFile f = NULL; bool ret = false; int fd = open(manifest_path, O_RDONLY | O_BINARY); if (fd == -1) { fprintf(stderr, "No such manifest file: %s\n", manifest_path); goto out; } f = gzdopen(fd, "rb"); if (!f) { fprintf(stderr, "Failed to dzopen manifest file\n"); close(fd); goto out; } mf = read_manifest(f); if (!mf) { fprintf(stderr, "Error reading manifest file\n"); goto out; } fprintf(stream, "Magic: %c%c%c%c\n", (MAGIC >> 24) & 0xFF, (MAGIC >> 16) & 0xFF, (MAGIC >> 8) & 0xFF, MAGIC & 0xFF); fprintf(stream, "Version: %u\n", mf->version); fprintf(stream, "Hash size: %u\n", (unsigned)mf->hash_size); fprintf(stream, "Reserved field: %u\n", (unsigned)mf->reserved); fprintf(stream, "File paths (%u):\n", (unsigned)mf->n_files); for (unsigned i = 0; i < mf->n_files; ++i) { fprintf(stream, " %u: %s\n", i, mf->files[i]); } fprintf(stream, "File infos (%u):\n", (unsigned)mf->n_file_infos); for (unsigned i = 0; i < mf->n_file_infos; ++i) { char *hash; fprintf(stream, " %u:\n", i); fprintf(stream, " Path index: %u\n", mf->file_infos[i].index); hash = format_hash_as_string(mf->file_infos[i].hash, -1); fprintf(stream, " Hash: %s\n", hash); free(hash); fprintf(stream, " Size: %u\n", mf->file_infos[i].size); fprintf(stream, " Mtime: %lld\n", (long long)mf->file_infos[i].mtime); fprintf(stream, " Ctime: %lld\n", (long long)mf->file_infos[i].ctime); } fprintf(stream, "Results (%u):\n", (unsigned)mf->n_objects); for (unsigned i = 0; i < mf->n_objects; ++i) { char *hash; fprintf(stream, " %u:\n", i); fprintf(stream, " File info indexes:"); for (unsigned j = 0; j < mf->objects[i].n_file_info_indexes; ++j) { fprintf(stream, " %u", mf->objects[i].file_info_indexes[j]); } fprintf(stream, "\n"); hash = format_hash_as_string(mf->objects[i].hash.hash, -1); fprintf(stream, " Hash: %s\n", hash); free(hash); fprintf(stream, " Size: %u\n", (unsigned)mf->objects[i].hash.size); } ret = true; out: if (mf) { free_manifest(mf); } if (f) { gzclose(f); } return ret; }