// Make this a proper scanner that feeds into bison be_node_t * be_decode(const char *str, uint64_t size){ be_node_t *node = NULL; if(node == NULL) return node; bencode_parse(&node, str, size); return node; }
int main(int argc, char *argv[]) { char *benstring; unsigned char *hash; char *infostr; bencode_val *benval; bencode_val *info; size_t benstringlen; size_t infostrlen; size_t hashlen; int i; parseargs(argc, argv); openfile(); benstring = freadall(in, &benstringlen); benval = bencode_parse(benstring, benstringlen); if(benval == NULL) { fprintf(stderr, "Failed to parse bencoding.\n"); exit(EXIT_FAILURE); } info = bencode_dict_get((bencode_dict *)benval, "info"); if(info == NULL) { fprintf(stderr, "Failed to find info segment of file.\n"); exit(EXIT_FAILURE); } infostr = bencode_val_string(info, &infostrlen); hash = sha1(infostr, infostrlen, &hashlen); for(i = 0; i < hashlen; i++) printf("%.2hhX", hash[i]); puts(""); free(infostr); free(hash); free(benstring); bencode_free_recursive(benval); exit(EXIT_SUCCESS); }