3 int hash_memory(int hash, const unsigned char *data, unsigned long len, unsigned char *dst, unsigned long *outlen)
10 _ARGCHK(outlen != NULL);
12 if ((err = hash_is_valid(hash)) != CRYPT_OK) {
16 if (*outlen < hash_descriptor[hash].hashsize) {
17 return CRYPT_BUFFER_OVERFLOW;
19 *outlen = hash_descriptor[hash].hashsize;
21 hash_descriptor[hash].init(&md);
22 hash_descriptor[hash].process(&md, data, len);
23 hash_descriptor[hash].done(&md, dst);
27 int hash_filehandle(int hash, FILE *in, unsigned char *dst, unsigned long *outlen)
33 unsigned char buf[512];
38 _ARGCHK(outlen != NULL);
41 if ((err = hash_is_valid(hash)) != CRYPT_OK) {
45 if (*outlen < hash_descriptor[hash].hashsize) {
46 return CRYPT_BUFFER_OVERFLOW;
48 *outlen = hash_descriptor[hash].hashsize;
50 hash_descriptor[hash].init(&md);
52 x = fread(buf, 1, sizeof(buf), in);
53 hash_descriptor[hash].process(&md, buf, x);
54 } while (x == sizeof(buf));
55 hash_descriptor[hash].done(&md, dst);
58 zeromem(buf, sizeof(buf));
64 int hash_file(int hash, const char *fname, unsigned char *dst, unsigned long *outlen)
71 _ARGCHK(fname != NULL);
73 _ARGCHK(outlen != NULL);
75 if ((err = hash_is_valid(hash)) != CRYPT_OK) {
79 in = fopen(fname, "rb");
81 return CRYPT_INVALID_ARG;
84 if ((err = hash_filehandle(hash, in, dst, outlen)) != CRYPT_OK) {