hashcalc.c (2242B)
1 // $Id$ --*- c -*-- 2 3 // Copyright (C) 2005 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> 4 // 5 // This program is free software; you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation; version 2 of the License. 8 // 9 // This program is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with this program; if not, write to the Free Software 16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 18 19 #ifdef HAVE_CONFIG_H 20 # include <config.h> 21 #endif 22 23 #define ENSC_TESTSUITE 24 #define main Xmain 25 # include "../vhashify.c" 26 #undef main 27 28 #include "lib_internal/coreassert.h" 29 30 int main(int UNUSED argc, char *argv[]) 31 { 32 int fd = open(argv[1], O_NOFOLLOW|O_NONBLOCK|O_RDONLY|O_NOCTTY); 33 struct stat st; 34 off_t size; 35 struct { 36 volatile unsigned int canary0; 37 volatile unsigned int canary1; 38 HashPath d; 39 volatile unsigned int canary2; 40 volatile unsigned int canary3; 41 } __attribute__((__packed__)) d_path; 42 43 d_path.canary0 = 0x12345678; 44 d_path.canary1 = 0x21436587; 45 d_path.canary2 = 0x89abcdef; 46 d_path.canary3 = 0x98badcfe; 47 memset(d_path.d, 0x66, sizeof d_path.d); 48 49 ensc_crypto_init(); 50 global_info.hash_conf.method = ensc_crypto_hash_find(argv[2]); 51 52 assert(ensc_crypto_hashctx_init(&global_info.hash_context, 53 global_info.hash_conf.method)!=-1); 54 55 assert(fstat(fd, &st)!=-1); 56 57 // set members of st to defined values so that the hash (which is 58 // influenced by them) is predictable 59 size = st.st_size; 60 memset(&st, 0, sizeof st); 61 st.st_size = size; 62 63 assert(calculateHashFromFD(fd, d_path.d, &st)); 64 assert(d_path.canary0 == 0x12345678); 65 assert(d_path.canary1 == 0x21436587); 66 assert(d_path.canary2 == 0x89abcdef); 67 assert(d_path.canary3 == 0x98badcfe); 68 69 Vwrite(1, d_path.d, strlen(d_path.d)); 70 Vwrite(1, "\n", 1); 71 72 ensc_crypto_hashctx_free(&global_info.hash_context); 73 74 return 0; 75 }