Make crypto loading optional
[asterisk/asterisk.git] / include / asterisk / crypto.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2005, Digium, Inc.
5  *
6  * Mark Spencer <markster@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*
20  * Provide cryptographic signature routines
21  */
22
23 #ifndef _ASTERISK_CRYPTO_H
24 #define _ASTERISK_CRYPTO_H
25
26 #include "asterisk/channel.h"
27 #include "asterisk/file.h"
28
29 #if defined(__cplusplus) || defined(c_plusplus)
30 extern "C" {
31 #endif
32
33 #define AST_KEY_PUBLIC  (1 << 0)
34 #define AST_KEY_PRIVATE (1 << 1)
35
36 struct ast_key;
37
38 /*! Retrieve a key */
39 /*! 
40  * \param name of the key we are retrieving
41  * \param int type of key (AST_KEY_PUBLIC or AST_KEY_PRIVATE)
42  *
43  * Returns the key on success or NULL on failure
44  */
45 extern struct ast_key *(*ast_key_get)(const char *key, int type);
46
47 /*! Check the authenticity of a message signature using a given public key */
48 /*!
49  * \param key a public key to use to verify
50  * \param msg the message that has been signed
51  * \param sig the proposed valid signature in mime64-like encoding
52  *
53  * Returns 0 if the signature is valid, or -1 otherwise
54  *
55  */
56 extern int (*ast_check_signature)(struct ast_key *key, const char *msg, const char *sig);
57
58 /*! Check the authenticity of a message signature using a given public key */
59 /*!
60  * \param key a public key to use to verify
61  * \param msg the message that has been signed
62  * \param sig the proposed valid signature in raw binary representation
63  *
64  * Returns 0 if the signature is valid, or -1 otherwise
65  *
66  */
67 extern int (*ast_check_signature_bin)(struct ast_key *key, const char *msg, int msglen, const unsigned char *sig);
68
69 /*!
70  * \param key a private key to use to create the signature
71  * \param msg the message to sign
72  * \param sig a pointer to a buffer of at least 256 bytes in which the
73  * mime64-like encoded signature will be stored
74  *
75  * Returns 0 on success or -1 on failure.
76  *
77  */
78 extern int (*ast_sign)(struct ast_key *key, char *msg, char *sig);
79 /*!
80  * \param key a private key to use to create the signature
81  * \param msg the message to sign
82  * \param sig a pointer to a buffer of at least 128 bytes in which the
83  * raw encoded signature will be stored
84  *
85  * Returns 0 on success or -1 on failure.
86  *
87  */
88 extern int (*ast_sign_bin)(struct ast_key *key, const char *msg, int msglen, unsigned char *sig);
89
90 /*!
91  * \param key a private key to use to encrypt
92  * \param src the message to encrypt
93  * \param srclen the length of the message to encrypt
94  * \param dst a pointer to a buffer of at least srclen * 1.5 bytes in which the encrypted
95  * answer will be stored
96  *
97  * Returns length of encrypted data on success or -1 on failure.
98  *
99  */
100 extern int (*ast_encrypt_bin)(unsigned char *dst, const unsigned char *src, int srclen, struct ast_key *key);
101
102 /*!
103  * \param key a private key to use to decrypt
104  * \param src the message to decrypt
105  * \param srclen the length of the message to decrypt
106  * \param dst a pointer to a buffer of at least srclen bytes in which the decrypted
107  * answer will be stored
108  *
109  * Returns length of decrypted data on success or -1 on failure.
110  *
111  */
112 extern int (*ast_decrypt_bin)(unsigned char *dst, const unsigned char *src, int srclen, struct ast_key *key);
113 #if defined(__cplusplus) || defined(c_plusplus)
114 }
115 #endif
116
117 #endif /* _ASTERISK_CRYPTO_H */