tMove sha512 functions to sha512.c - synk - synchronize files between hosts
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 061a8d1893ef222177f12dcd1d0f9ec84ca572c0
 (DIR) parent 8c80e23c0813a078879f506afca68141a9c060a7
 (HTM) Author: Willy <willyatmailoodotorg>
       Date:   Wed, 24 Aug 2016 08:45:27 +0200
       
       Move sha512 functions to sha512.c
       
       Diffstat:
         M sha512.c                            |      60 +++++++++++++++++++++++++++++++
         M sha512.h                            |       4 ++++
         M synk.c                              |      61 -------------------------------
       
       3 files changed, 64 insertions(+), 61 deletions(-)
       ---
 (DIR) diff --git a/sha512.c b/sha512.c
       t@@ -245,6 +245,66 @@ int sha512_done(sha512_state * md, unsigned char *out)
            return 0;
        }
        
       +/*
       + * Return 0 is two sha512 hashes match together, 1 otherwise.
       + * Hashes MUST be 64 byte long, and not NULL.
       + */
       +int
       +sha512_compare(unsigned char *h1, unsigned char *h2)
       +{
       +        int i;
       +        for (i=0; i<64; i++) {
       +                if (h1[i] != h2[i])
       +                        return 1;
       +        }
       +
       +        return 0;
       +}
       +
       +/*
       + * Format a sha512 hash (64 bits long) as an hexadecimal string (128 char)
       + * A pointer to this char is statically allocated, so multiple calls to this
       + * function will overwrite the converted value.
       + */
       +char *
       +sha512_format(unsigned char *hash)
       +{
       +        int i;
       +        static char fmt[128] = "";
       +
       +        for (i=0; i<64; i++) {
       +                snprintf(fmt+i, 2, "%02x\n", hash[i]);
       +        }
       +
       +        return fmt;
       +}
       +
       +/*
       + * Generate sha512 hash from stream, and store it in hash, which must
       + * be able to store 64 bytes.
       + */
       +int
       +sha512(FILE *stream, unsigned char *hash)
       +{
       +        sha512_state md;
       +        size_t len = 0;
       +        unsigned char buf[128];
       +
       +        if (sha512_init(&md) != 0) {
       +                perror("sha512_init");
       +                return 1;
       +        }
       +
       +        while ((len = fread(buf, 128, 1, stream)) > 0) {
       +                if (sha512_process(&md, buf, len) != 0) {
       +                        return 1;
       +                }
       +        }
       +
       +        return sha512_done(&md, hash);
       +}
       +
       +
        /* $Source: /cvs/libtom/libtomcrypt/src/hashes/sha2/sha512.c,v $ */
        /* $Revision: 1.10 $ */
        /* $Date: 2007/05/12 14:25:28 $ */
 (DIR) diff --git a/sha512.h b/sha512.h
       t@@ -1,3 +1,4 @@
       +#include <stdio.h>
        #include <stddef.h>
        #include <stdint.h>
        
       t@@ -11,3 +12,6 @@ typedef struct sha512_state {
        int sha512_init(sha512_state * md);
        int sha512_process(sha512_state * md, const unsigned char *in, unsigned long inlen);
        int sha512_done(sha512_state * md, unsigned char *hash);
       +int sha512_compare(unsigned char *h1, unsigned char *h2);
       +int sha512(FILE *stream, unsigned char *hash);
       +char *sha512_format(unsigned char *hash);
 (DIR) diff --git a/synk.c b/synk.c
       t@@ -38,9 +38,6 @@ enum {
        const char *rsync_cmd[] = { "rsync", "-azEq", "--delete", NULL };
        
        void  usage(char *name);
       -int   sha512(FILE *stream, unsigned char *hash);
       -int   sha512_compare(unsigned char *h1, unsigned char *h2);
       -char *sha512_format(unsigned char *hash);
        long  gettimestamp(const char *path);
        int   handleclient(int cfd, struct in_addr inet);
        int   server(in_addr_t host, in_port_t port);
       t@@ -54,64 +51,6 @@ usage(char *name)
        }
        
        /*
       - * Generate sha512 hash from stream, and store it in hash, which must
       - * be able to store 64 bytes.
       - */
       -int
       -sha512(FILE *stream, unsigned char *hash)
       -{
       -        sha512_state md;
       -        size_t len = 0;
       -        unsigned char buf[128];
       -
       -        if (sha512_init(&md) != 0) {
       -                perror("sha512_init");
       -                return 1;
       -        }
       -
       -        while ((len = fread(buf, 128, 1, stream)) > 0) {
       -                if (sha512_process(&md, buf, len) != 0) {
       -                        return 1;
       -                }
       -        }
       -
       -        return sha512_done(&md, hash);
       -}
       -
       -/*
       - * Return 0 is two sha512 hashes match together, 1 otherwise.
       - * Hashes MUST be 64 byte long, and not NULL.
       - */
       -int
       -sha512_compare(unsigned char *h1, unsigned char *h2)
       -{
       -        int i;
       -        for (i=0; i<64; i++) {
       -                if (h1[i] != h2[i])
       -                        return 1;
       -        }
       -
       -        return 0;
       -}
       -
       -/*
       - * Format a sha512 hash (64 bits long) as an hexadecimal string (128 char)
       - * A pointer to this char is statically allocated, so multiple calls to this
       - * function will overwrite the converted value.
       - */
       -char *
       -sha512_format(unsigned char *hash)
       -{
       -        int i;
       -        static char fmt[128] = "";
       -
       -        for (i=0; i<64; i++) {
       -                snprintf(fmt+i, 2, "%02x\n", hash[i]);
       -        }
       -
       -        return fmt;
       -}
       -/*
         * Returns the UNIX timestamp for the given file, or -1 in case stat(2)
         * is in error.
         */