diff options
author | Holger Freyther <zecke@selfish.org> | 2007-04-02 15:59:35 +0000 |
---|---|---|
committer | Holger Freyther <zecke@selfish.org> | 2007-04-02 15:59:35 +0000 |
commit | 40896f4a8f30bc6459fd7147aa43f4ccb4cb2146 (patch) | |
tree | 1e55faa501faa675e5ce9ca08c6a47c551dd6543 /packages/shasum/files/main.c | |
parent | e7e153b6e9e35a376f1418a4239ad52a4716c40e (diff) |
packages/shasum: Add a sha256sum utility with little dependencies
To avoid weird requirements add a sha256sum tool to OpenEmbedded
directly. This will be part of the OE manifest and be guarded
by the monotone OE trust chain.
Diffstat (limited to 'packages/shasum/files/main.c')
-rw-r--r-- | packages/shasum/files/main.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/packages/shasum/files/main.c b/packages/shasum/files/main.c new file mode 100644 index 0000000000..0748a94f3a --- /dev/null +++ b/packages/shasum/files/main.c @@ -0,0 +1,60 @@ +#include <stdio.h> +#include <stdlib.h> + +#include "mhash_sha256.h" + +/* + * from driver.c of mhash + */ +static const char hexconvtab[] = "0123456789abcdef"; + +static char * +bin2hex(const unsigned char *old, const size_t oldlen, size_t * newlen) +{ + unsigned char *new = NULL; + int i, j; + + new = (char *) malloc(oldlen * 2 * sizeof(char) + 1); + if (!new) + return (new); + + for (i = j = 0; i < oldlen; i++) { + new[j++] = hexconvtab[old[i] >> 4]; + new[j++] = hexconvtab[old[i] & 15]; + } + new[j] = '\0'; + + if (newlen) + *newlen = oldlen * 2 * sizeof(char); + + return (new); +} + + +int main(int argc, char** argv) +{ + FILE *file; + size_t n; + SHA256_CTX ctx; + unsigned char buf[1024]; + byte output[33]; + + if ( argc <= 1 ) { + return EXIT_FAILURE; + } + + if ( (file=fopen(argv[1], "rb")) == NULL ) { + return EXIT_FAILURE; + } + + sha256_init(&ctx); + + while ( (n=fread( buf, 1, sizeof(buf), file)) > 0 ) + sha256_update(&ctx, buf, n ); + + sha256_final(&ctx); + sha256_digest(&ctx, output); + + printf("%s ?%s\n", bin2hex(output, 32, &n), argv[1]); + return EXIT_SUCCESS; +} |