Bug 6322 - Implementation of SHA1 in Asterisk (plus dialplan function to use it)
[asterisk/asterisk.git] / include / asterisk / sha1.h
1 /*\r
2  *  sha1.h\r
3  *\r
4  *  Description:\r
5  *      This is the header file for code which implements the Secure\r
6  *      Hashing Algorithm 1 as defined in FIPS PUB 180-1 published\r
7  *      April 17, 1995.\r
8  *\r
9  *      Many of the variable names in this code, especially the\r
10  *      single character names, were used because those were the names\r
11  *      used in the publication.\r
12  *\r
13  *      Please read the file sha1.c for more information.\r
14  *\r
15  */\r
16 \r
17 \r
18 #ifndef _SHA1_H_\r
19 #define _SHA1_H_\r
20 \r
21 \r
22 \r
23 #if defined(__OpenBSD__) || defined( __FreeBSD__)\r
24 #include <inttypes.h>\r
25 #else\r
26 #include <stdint.h>\r
27 #endif\r
28 \r
29 /*\r
30  * If you do not have the ISO standard stdint.h header file, then you\r
31  * must typdef the following:\r
32  *    name              meaning\r
33  *  uint32_t         unsigned 32 bit integer\r
34  *  uint8_t          unsigned 8 bit integer (i.e., unsigned char)\r
35  *  int_least16_t    integer of >= 16 bits\r
36  *\r
37  */\r
38 \r
39 #ifndef _SHA_enum_\r
40 #define _SHA_enum_\r
41 enum\r
42 {\r
43     shaSuccess = 0,\r
44     shaNull,            /* Null pointer parameter */\r
45     shaInputTooLong,    /* input data too long */\r
46     shaStateError       /* called Input after Result */\r
47 };\r
48 #endif\r
49 #define SHA1HashSize 20\r
50 \r
51 /*\r
52  *  This structure will hold context information for the SHA-1\r
53  *  hashing operation\r
54  */\r
55 typedef struct SHA1Context\r
56 {\r
57     uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest  */\r
58 \r
59     uint32_t Length_Low;            /* Message length in bits      */\r
60     uint32_t Length_High;           /* Message length in bits      */\r
61 \r
62                                /* Index into message block array   */\r
63     int_least16_t Message_Block_Index;\r
64     uint8_t Message_Block[64];      /* 512-bit message blocks      */\r
65 \r
66     int Computed;               /* Is the digest computed?         */\r
67     int Corrupted;             /* Is the message digest corrupted? */\r
68 } SHA1Context;\r
69 \r
70 /*\r
71  *  Function Prototypes\r
72  */\r
73 \r
74 \r
75 int SHA1Reset(  SHA1Context *);\r
76 int SHA1Input(  SHA1Context *,\r
77                 const uint8_t *,\r
78                 unsigned int);\r
79 int SHA1Result( SHA1Context *,\r
80                 uint8_t Message_Digest[SHA1HashSize]);\r
81 \r
82 #endif\r