4aac31b1df846e99c86a27cb9e1b243982301ca3
[asterisk/asterisk.git] / include / asterisk / crypto.h
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Provide cryptographic signature routines
5  * 
6  * Copyright (C) 1999, Mark Spencer
7  *
8  * Mark Spencer <markster@linux-support.net>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14 #ifndef _ASTERISK_CRYPTO_H
15 #define _ASTERISK_CRYPTO_H
16
17 #include <asterisk/channel.h>
18 #include <asterisk/file.h>
19
20 #if defined(__cplusplus) || defined(c_plusplus)
21 extern "C" {
22 #endif
23
24 #define AST_KEY_PUBLIC  (1 << 0)
25 #define AST_KEY_PRIVATE (1 << 1)
26
27 struct ast_key;
28
29 //! Retrieve a key
30 /*! 
31  * \param name of the key we are retrieving
32  * \param int type of key (AST_KEY_PUBLIC or AST_KEY_PRIVATE)
33  *
34  * Returns the key on success or NULL on failure
35  */
36 extern struct ast_key *ast_key_get(char *key, int type);
37
38 //! Initialize keys (that is, retrieve pass codes for all private keys)
39 /*!
40  * \param fd a file descriptor for I/O for passwords
41  *
42  */
43 extern int ast_key_init(int fd);
44
45 //! Check the authenticity of a message signature using a given public key
46 /*!
47  * \param key a public key to use to verify
48  * \param msg the message that has been signed
49  * \param sig the proposed valid signature in mime64-like encoding
50  *
51  * Returns 0 if the signature is valid, or -1 otherwise
52  *
53  */
54 extern int ast_check_signature(struct ast_key *key, char *msg, char *sig);
55
56 /*!
57  * \param key a private key to use to create the signature
58  * \param msg the message to sign
59  * \param sig a pointer to a buffer of at least 256 bytes in which the
60  * mime64-like encoded signature will be stored
61  *
62  * Returns 0 on success or -1 on failure.
63  *
64  */
65 extern int ast_sign(struct ast_key *key, char *msg, char *sig);
66
67 #if defined(__cplusplus) || defined(c_plusplus)
68 }
69 #endif
70
71 #endif