00001 /* 00002 * Copyright (c) 2002 - 2010, Netherlands Forensic Institute 00003 * 00004 * All rights reserved. 00005 * 00006 * Redistribution and use in source and binary forms, with or without 00007 * modification, are permitted provided that the following conditions 00008 * are met: 00009 * 1. Redistributions of source code must retain the above copyright 00010 * notice, this list of conditions and the following disclaimer. 00011 * 2. Redistributions in binary form must reproduce the above copyright 00012 * notice, this list of conditions and the following disclaimer in the 00013 * documentation and/or other materials provided with the distribution. 00014 * 3. Neither the name of the Institute nor the names of its contributors 00015 * may be used to endorse or promote products derived from this software 00016 * without specific prior written permission. 00017 00018 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 00019 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00021 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 00022 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00023 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00024 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00025 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00026 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00027 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00028 * SUCH DAMAGE. 00029 */ 00030 00031 #ifndef __rdd_hashcontainer_h__ 00032 #define __rdd_hashcontainer_h__ 00033 00034 #include <stdint.h> 00035 00036 #ifdef HAVE_CONFIG_H 00037 #include "config.h" 00038 #endif 00039 00040 #ifdef HAVE_OPENSSL 00041 #include <openssl/md5.h> 00042 #include <openssl/sha.h> 00043 #endif /* HAVE_OPENSSL */ 00044 00045 00046 #define RDD_MAX_DIGEST_LENGTH SHA512_DIGEST_LENGTH /* bytes */ 00047 00048 static const char RDD_MD5[] = "MD5"; 00049 static const char RDD_SHA1[] = "SHA1"; 00050 static const char RDD_SHA256[] = "SHA256"; 00051 static const char RDD_SHA384[] = "SHA384"; 00052 static const char RDD_SHA512[] = "SHA512"; 00053 00054 typedef struct _RDD_HASH_CONTAINER 00055 { 00056 int md5present; 00057 uint8_t md5hash[MD5_DIGEST_LENGTH]; 00058 int sha1present; 00059 uint8_t sha1hash[SHA_DIGEST_LENGTH]; 00060 int sha256present; 00061 uint8_t sha256hash[SHA256_DIGEST_LENGTH]; 00062 int sha384present; 00063 uint8_t sha384hash[SHA384_DIGEST_LENGTH]; 00064 int sha512present; 00065 uint8_t sha512hash[SHA512_DIGEST_LENGTH]; 00066 } RDD_HASH_CONTAINER; 00067 00068 00075 int rdd_new_hashcontainer(RDD_HASH_CONTAINER ** self); 00076 00085 int rdd_set_hash(RDD_HASH_CONTAINER * self, const char * hash_type, const uint8_t * hash); 00086 00096 int rdd_get_hash(RDD_HASH_CONTAINER * self, const char * hash_type, uint8_t * hash); 00097 00107 int rdd_hash_present(RDD_HASH_CONTAINER * self, const char * hash_type, int * present); 00108 #endif /* __rdd_hashcontainer_h__ */