Rewrote crypto library init/uninit. Added silc_crypto_init
[silc.git] / lib / silccrypt / silcpk_i.h
1 /*
2
3   silcpk_i.h
4
5   Author: Pekka Riikonen <priikone@silcnet.org>
6
7   Copyright (C) 2005, 2007 Pekka Riikonen
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; version 2 of the License.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18 */
19
20 #ifndef SILCPK_I_H
21 #define SILCPK_I_H
22
23 /* Public and private key file headers */
24 #define SILC_PKCS_PUBLIC_KEYFILE_BEGIN "-----BEGIN SILC PUBLIC KEY-----\n"
25 #define SILC_PKCS_PUBLIC_KEYFILE_END "\n-----END SILC PUBLIC KEY-----\n"
26 #define SILC_PKCS_PRIVATE_KEYFILE_BEGIN "-----BEGIN SILC PRIVATE KEY-----\n"
27 #define SILC_PKCS_PRIVATE_KEYFILE_END "\n-----END SILC PRIVATE KEY-----\n"
28
29 const SilcPKCSAlgorithm *
30 silc_pkcs_silc_get_algorithm(const struct SilcPKCSObjectStruct *pkcs,
31                              void *public_key);
32 SilcBool
33 silc_pkcs_silc_import_public_key_file(const struct SilcPKCSObjectStruct *pkcs,
34                                       unsigned char *filedata,
35                                       SilcUInt32 filedata_len,
36                                       SilcPKCSFileEncoding encoding,
37                                       void **ret_public_key);
38 int silc_pkcs_silc_import_public_key(const struct SilcPKCSObjectStruct *pkcs,
39                                      void *key,
40                                      SilcUInt32 key_len,
41                                      void **ret_public_key);
42 unsigned char *
43 silc_pkcs_silc_export_public_key_file(const struct SilcPKCSObjectStruct *pkcs,
44                                       SilcStack stack,
45                                       void *public_key,
46                                       SilcPKCSFileEncoding encoding,
47                                       SilcUInt32 *ret_len);
48 unsigned char *
49 silc_pkcs_silc_export_public_key(const struct SilcPKCSObjectStruct *pkcs,
50                                  SilcStack stack,
51                                  void *public_key,
52                                  SilcUInt32 *ret_len);
53 SilcUInt32
54 silc_pkcs_silc_public_key_bitlen(const struct SilcPKCSObjectStruct *pkcs,
55                                  void *public_key);
56 void *silc_pkcs_silc_public_key_copy(const struct SilcPKCSObjectStruct *pkcs,
57                                      void *public_key);
58 SilcBool
59 silc_pkcs_silc_public_key_compare(const struct SilcPKCSObjectStruct *pkcs,
60                                   void *key1, void *key2);
61 void silc_pkcs_silc_public_key_free(const struct SilcPKCSObjectStruct *pkcs,
62                                     void *public_key);
63 SilcBool
64 silc_pkcs_silc_import_private_key_file(const struct SilcPKCSObjectStruct *pkcs,
65                                        unsigned char *filedata,
66                                        SilcUInt32 filedata_len,
67                                        const char *passphrase,
68                                        SilcUInt32 passphrase_len,
69                                        SilcPKCSFileEncoding encoding,
70                                        void **ret_private_key);
71 int silc_pkcs_silc_import_private_key(const struct SilcPKCSObjectStruct *pkcs,
72                                       void *key,
73                                       SilcUInt32 key_len,
74                                       void **ret_private_key);
75 unsigned char *
76 silc_pkcs_silc_export_private_key_file(const struct SilcPKCSObjectStruct *pkcs,
77                                        SilcStack stack,
78                                        void *private_key,
79                                        const char *passphrase,
80                                        SilcUInt32 passphrase_len,
81                                        SilcPKCSFileEncoding encoding,
82                                        SilcRng rng,
83                                        SilcUInt32 *ret_len);
84 unsigned char *
85 silc_pkcs_silc_export_private_key(const struct SilcPKCSObjectStruct *pkcs,
86                                   SilcStack stack,
87                                   void *private_key,
88                                   SilcUInt32 *ret_len);
89 SilcUInt32
90 silc_pkcs_silc_private_key_bitlen(const struct SilcPKCSObjectStruct *pkcs,
91                                   void *private_key);
92 void silc_pkcs_silc_private_key_free(const struct SilcPKCSObjectStruct *pkcs,
93                                      void *private_key);
94 SilcAsyncOperation
95 silc_pkcs_silc_encrypt(const struct SilcPKCSObjectStruct *pkcs,
96                        void *public_key,
97                        unsigned char *src,
98                        SilcUInt32 src_len,
99                        SilcRng rng,
100                        SilcPKCSEncryptCb encrypt_cb,
101                        void *context);
102 SilcAsyncOperation
103 silc_pkcs_silc_decrypt(const struct SilcPKCSObjectStruct *pkcs,
104                         void *private_key,
105                         unsigned char *src,
106                         SilcUInt32 src_len,
107                         SilcPKCSDecryptCb decrypt_cb,
108                         void *context);
109 SilcAsyncOperation
110 silc_pkcs_silc_sign(const struct SilcPKCSObjectStruct *pkcs,
111                     void *private_key,
112                     unsigned char *src,
113                     SilcUInt32 src_len,
114                     SilcBool compute_hash,
115                     SilcHash hash,
116                     SilcPKCSSignCb sign_cb,
117                     void *context);
118 SilcAsyncOperation
119 silc_pkcs_silc_verify(const struct SilcPKCSObjectStruct *pkcs,
120                       void *public_key,
121                       unsigned char *signature,
122                       SilcUInt32 signature_len,
123                       unsigned char *data,
124                       SilcUInt32 data_len,
125                       SilcHash hash,
126                       SilcPKCSVerifyCb verify_cb,
127                       void *context);
128
129 #endif /* SILCPK_I_H */