1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Written by Daniel Richards <kyhwana@world-net.co.nz> 6/7/2002 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * hash.c: This app uses libtomcrypt to hash either stdin or a file 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * This file is Public Domain. No rights are reserved. 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Compile with 'gcc hashsum.c -o hashsum -ltomcrypt' 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * This example isn't really big enough to warrent splitting into 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * more functions ;) 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/ 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <tomcrypt.h> 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint errno; 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid register_algs(); 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint main(int argc, char **argv) 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int idx, x, z; 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long w; 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char hash_buffer[MAXBLOCKSIZE]; 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project hash_state md; 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* You need to register algorithms before using them */ 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_algs(); 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (argc < 2) { 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf("usage: ./hash algorithm file [file ...]\n"); 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf("Algorithms:\n"); 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; hash_descriptor[x].name != NULL; x++) { 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf(" %s (%d)\n", hash_descriptor[x].name, hash_descriptor[x].ID); 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_SUCCESS); 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project idx = find_hash(argv[1]); 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (idx == -1) { 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nInvalid hash specified on command line.\n"); 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return -1; 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (argc == 2) { 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project hash_descriptor[idx].init(&md); 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project do { 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project x = fread(hash_buffer, 1, sizeof(hash_buffer), stdin); 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project hash_descriptor[idx].process(&md, hash_buffer, x); 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } while (x == sizeof(hash_buffer)); 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project hash_descriptor[idx].done(&md, hash_buffer); 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < (int)hash_descriptor[idx].hashsize; x++) { 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf("%02x",hash_buffer[x]); 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf(" (stdin)\n"); 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (z = 2; z < argc; z++) { 53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project w = sizeof(hash_buffer); 54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((errno = hash_file(idx,argv[z],hash_buffer,&w)) != CRYPT_OK) { 55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf("File hash error: %s\n", error_to_string(errno)); 56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < (int)hash_descriptor[idx].hashsize; x++) { 58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf("%02x",hash_buffer[x]); 59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf(" %s\n", argv[z]); 61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return EXIT_SUCCESS; 65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid register_algs(void) 68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err; 70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef TIGER 72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&tiger_desc); 73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MD2 75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&md2_desc); 76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MD4 78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&md4_desc); 79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MD5 81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&md5_desc); 82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SHA1 84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&sha1_desc); 85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SHA224 87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&sha224_desc); 88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SHA256 90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&sha256_desc); 91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SHA384 93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&sha384_desc); 94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SHA512 96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&sha512_desc); 97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RIPEMD128 99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&rmd128_desc); 100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RIPEMD160 102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&rmd160_desc); 103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef WHIRLPOOL 105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&whirlpool_desc); 106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef CHC_HASH 108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash(&chc_desc); 109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = chc_register(register_cipher(&aes_enc_desc))) != CRYPT_OK) { 110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf("chc_register error: %s\n", error_to_string(err)); 111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/demos/hashsum.c,v $ */ 118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.2 $ */ 119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2005/05/05 14:35:56 $ */ 120