2 * Copyright (C) 2005 Jan Hutter
3 * Copyright (C) 2005-2006 Martin Willi
5 * Hochschule fuer Technik Rapperswil
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 * @defgroup hasher hasher
26 typedef enum hash_algorithm_t hash_algorithm_t
;
27 typedef struct hasher_t hasher_t
;
32 * Algorithms to use for hashing.
34 enum hash_algorithm_t
{
35 /** not specified hash function */
37 /** preferred hash function, general purpose */
48 #define HASH_SIZE_MD2 16
49 #define HASH_SIZE_MD4 16
50 #define HASH_SIZE_MD5 16
51 #define HASH_SIZE_SHA1 20
52 #define HASH_SIZE_SHA256 32
53 #define HASH_SIZE_SHA384 48
54 #define HASH_SIZE_SHA512 64
57 * enum names for hash_algorithm_t.
59 extern enum_name_t
*hash_algorithm_names
;
62 * Generic interface for all hash functions.
66 * Hash data and write it in the buffer.
68 * If the parameter hash is NULL, no result is written back
69 * and more data can be appended to already hashed data.
70 * If not, the result is written back and the hasher is reset.
72 * The hash output parameter must hold at least
73 * hash_t.get_block_size() bytes.
75 * @param data data to hash
76 * @param hash pointer where the hash will be written
78 void (*get_hash
) (hasher_t
*this, chunk_t data
, u_int8_t
*hash
);
81 * Hash data and allocate space for the hash.
83 * If the parameter hash is NULL, no result is written back
84 * and more data can be appended to already hashed data.
85 * If not, the result is written back and the hasher is reset.
87 * @param data chunk with data to hash
88 * @param hash chunk which will hold allocated hash
90 void (*allocate_hash
) (hasher_t
*this, chunk_t data
, chunk_t
*hash
);
93 * Get the size of the resulting hash.
95 * @return hash size in bytes
97 size_t (*get_hash_size
) (hasher_t
*this);
100 * Resets the hashers state.
102 void (*reset
) (hasher_t
*this);
105 * Destroys a hasher object.
107 void (*destroy
) (hasher_t
*this);
111 * Conversion of ASN.1 OID to hash algorithm.
113 * @param oid ASN.1 OID
114 * @return hash algorithm, HASH_UNKNOWN if OID unsuported
116 hash_algorithm_t
hasher_algorithm_from_oid(int oid
);
119 * Conversion of hash algorithm into ASN.1 OID.
121 * @param alg hash algorithm
122 * @return ASN.1 OID, or OID_UNKNOW
124 int hasher_algorithm_to_oid(hash_algorithm_t alg
);
127 * Conversion of hash signature algorithm into ASN.1 OID.
129 * @param alg hash algorithm
130 * @return ASN.1 OID if, or OID_UNKNOW
132 int hasher_signature_algorithm_to_oid(hash_algorithm_t alg
);
134 #endif /** HASHER_H_ @}*/