Bug 6322 - Implementation of SHA1 in Asterisk (plus dialplan function to use it)
[asterisk/asterisk.git] / funcs / func_sha1.c
1 /*\r
2  * Asterisk -- An open source telephony toolkit.\r
3  *\r
4  * Copyright (C) 2006, Digium, Inc.\r
5  * Copyright (C) 2006, Claude Patry\r
6  *\r
7  * See http://www.asterisk.org for more information about\r
8  * the Asterisk project. Please do not directly contact\r
9  * any of the maintainers of this project for assistance;\r
10  * the project provides a web site, mailing lists and IRC\r
11  * channels for your use.\r
12  *\r
13  * This program is free software, distributed under the terms of\r
14  * the GNU General Public License Version 2. See the LICENSE file\r
15  * at the top of the source tree.\r
16  */\r
17 \r
18 /*! \file\r
19  *\r
20  * \brief SHA1 digest related dialplan functions\r
21  * \r
22  * \author Claude Patry <cpatry@gmail.com>\r
23  */\r
24 \r
25 #include <stdlib.h>\r
26 #include <string.h>\r
27 #include <sys/types.h>\r
28 \r
29 #include "asterisk.h"\r
30 \r
31 /* ASTERISK_FILE_VERSION(__FILE__, "$Revision: 8403 $") */\r
32 \r
33 #include "asterisk/channel.h"\r
34 #include "asterisk/pbx.h"\r
35 #include "asterisk/logger.h"\r
36 #include "asterisk/utils.h"\r
37 #include "asterisk/app.h"\r
38 \r
39 static char *builtin_function_sha1(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) \r
40 {\r
41         if (ast_strlen_zero(data)) {\r
42                 ast_log(LOG_WARNING, "Syntax: SHA1(<data>) - missing argument!\n");\r
43                 return NULL;\r
44         }\r
45 \r
46         if (len >= 41)\r
47                 ast_sha1_hash(buf, data);\r
48         else {\r
49                 ast_log(LOG_ERROR, "Insufficient space to produce SHA1 hash result (%d < 41)\n", len);\r
50                 *buf = '\0';\r
51         }\r
52         return buf;\r
53 }\r
54 \r
55 \r
56 #ifndef BUILTIN_FUNC\r
57 static\r
58 #endif\r
59 struct ast_custom_function sha1_function = {\r
60         .name = "SHA1",\r
61         .synopsis = "Computes a SHA1 digest",\r
62         .syntax = "SHA1(<data>)",\r
63         .read = builtin_function_sha1,\r
64         .desc = "Generate a SHA1 digest via the SHA1 algorythm.\n"\r
65         " Example:  Set(sha1hash=${SHA1(junky)})\n"\r
66         " Sets the asterisk variable sha1hash to the string '60fa5675b9303eb62f99a9cd47f9f5837d18f9a0'\n"\r
67         " which is known as his hash\n",\r
68 };\r