| 1 | /* This Source Code Form is subject to the terms of the Mozilla Public |
| 2 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
| 3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| 4 | |
| 5 | #ifndef _HASHT_H_ |
| 6 | #define _HASHT_H_ |
| 7 | |
| 8 | #include "prtypes.h" |
| 9 | |
| 10 | /* Opaque objects */ |
| 11 | typedef struct SECHashObjectStr SECHashObject; |
| 12 | typedef struct HASHContextStr HASHContext; |
| 13 | |
| 14 | /* |
| 15 | * The hash functions the security library supports |
| 16 | * NOTE the order must match the definition of SECHashObjects[]! |
| 17 | */ |
| 18 | typedef enum { |
| 19 | HASH_AlgNULL = 0, |
| 20 | HASH_AlgMD2 = 1, |
| 21 | HASH_AlgMD5 = 2, |
| 22 | HASH_AlgSHA1 = 3, |
| 23 | HASH_AlgSHA256 = 4, |
| 24 | HASH_AlgSHA384 = 5, |
| 25 | HASH_AlgSHA512 = 6, |
| 26 | HASH_AlgSHA224 = 7, |
| 27 | HASH_AlgSHA3_224 = 8, |
| 28 | HASH_AlgSHA3_256 = 9, |
| 29 | HASH_AlgSHA3_384 = 10, |
| 30 | HASH_AlgSHA3_512 = 11, |
| 31 | HASH_AlgTOTAL |
| 32 | } HASH_HashType; |
| 33 | |
| 34 | /* |
| 35 | * Number of bytes each hash algorithm produces |
| 36 | */ |
| 37 | #define MD2_LENGTH 16 |
| 38 | #define MD5_LENGTH 16 |
| 39 | #define SHA1_LENGTH 20 |
| 40 | #define SHA224_LENGTH 28 |
| 41 | #define SHA256_LENGTH 32 |
| 42 | #define SHA384_LENGTH 48 |
| 43 | #define SHA512_LENGTH 64 |
| 44 | #define SHA3_224_LENGTH 28 |
| 45 | #define SHA3_256_LENGTH 32 |
| 46 | #define SHA3_384_LENGTH 48 |
| 47 | #define SHA3_512_LENGTH 64 |
| 48 | #define HASH_LENGTH_MAX SHA512_LENGTH |
| 49 | |
| 50 | /* |
| 51 | * Structure to hold hash computation info and routines |
| 52 | */ |
| 53 | struct SECHashObjectStr { |
| 54 | unsigned int length; /* hash output length (in bytes) */ |
| 55 | void *(*create)(void); |
| 56 | void *(*clone)(void *); |
| 57 | void (*destroy)(void *, PRBool); |
| 58 | void (*begin)(void *); |
| 59 | void (*update)(void *, const unsigned char *, unsigned int); |
| 60 | void (*end)(void *, unsigned char *, unsigned int *, unsigned int); |
| 61 | unsigned int blocklength; /* hash input block size (in bytes) */ |
| 62 | HASH_HashType type; |
| 63 | void (*end_raw)(void *, unsigned char *, unsigned int *, unsigned int); |
| 64 | }; |
| 65 | |
| 66 | struct HASHContextStr { |
| 67 | const struct SECHashObjectStr *hashobj; |
| 68 | void *hash_context; |
| 69 | }; |
| 70 | |
| 71 | #endif /* _HASHT_H_ */ |
| 72 | |