vshost-util-vserver

Build script and sources for util-vserver.
git clone https://ccx.te2000.cz/git/vshost-util-vserver
Log | Files | Refs

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 }