Create binary versions of signature functions
[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 //! Check the authenticity of a message signature using a given public key
57 /*!
58  * \param key a public key to use to verify
59  * \param msg the message that has been signed
60  * \param sig the proposed valid signature in raw binary representation
61  *
62  * Returns 0 if the signature is valid, or -1 otherwise
63  *
64  */
65 extern int ast_check_signature_bin(struct ast_key *key, char *msg, unsigned char *sig);
66
67 /*!
68  * \param key a private key to use to create the signature
69  * \param msg the message to sign
70  * \param sig a pointer to a buffer of at least 256 bytes in which the
71  * mime64-like encoded signature will be stored
72  *
73  * Returns 0 on success or -1 on failure.
74  *
75  */
76 extern int ast_sign(struct ast_key *key, char *msg, char *sig);
77 /*!
78  * \param key a private key to use to create the signature
79  * \param msg the message to sign
80  * \param sig a pointer to a buffer of at least 128 bytes in which the
81  * raw encoded signature will be stored
82  *
83  * Returns 0 on success or -1 on failure.
84  *
85  */
86 extern int ast_sign_bin(struct ast_key *key, char *msg, unsigned char *sig);
87
88 #if defined(__cplusplus) || defined(c_plusplus)
89 }
90 #endif
91
92 #endif