1 /*
2  * gnome-keyring
3  *
4  * Copyright (C) 2008 Stefan Walter
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as
8  * published by the Free Software Foundation; either version 2.1 of
9  * the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this program; if not, see
18  * <http://www.gnu.org/licenses/>.
19  */
20 
21 #ifndef GKM_CRYPTO_H_
22 #define GKM_CRYPTO_H_
23 
24 #include "gkm-types.h"
25 
26 #include "pkcs11/pkcs11.h"
27 
28 #include "egg/egg-padding.h"
29 
30 #include <glib.h>
31 
32 #include <gcrypt.h>
33 
34 void                     gkm_crypto_initialize                         (void);
35 
36 CK_RV                    gkm_crypto_prepare                            (GkmSession *session,
37                                                                         CK_MECHANISM_TYPE mech,
38                                                                         GkmObject *key);
39 
40 CK_RV                    gkm_crypto_prepare_xsa                        (GkmSession *session,
41                                                                         CK_MECHANISM_TYPE mech,
42                                                                         GkmObject *key);
43 
44 CK_RV                    gkm_crypto_perform                            (GkmSession *session,
45                                                                         CK_MECHANISM_TYPE mech,
46                                                                         CK_ATTRIBUTE_TYPE method,
47                                                                         CK_BYTE_PTR bufone,
48                                                                         CK_ULONG n_bufone,
49                                                                         CK_BYTE_PTR buftwo,
50                                                                         CK_ULONG_PTR n_buftwo);
51 
52 CK_RV                    gkm_crypto_encrypt                            (GkmSession *session,
53                                                                         CK_MECHANISM_TYPE mech,
54                                                                         CK_BYTE_PTR data,
55                                                                         CK_ULONG n_data,
56                                                                         CK_BYTE_PTR encrypted,
57                                                                         CK_ULONG_PTR n_encrypted);
58 
59 CK_RV                    gkm_crypto_encrypt_xsa                        (gcry_sexp_t sexp,
60                                                                         CK_MECHANISM_TYPE mech,
61                                                                         CK_BYTE_PTR data,
62                                                                         CK_ULONG n_data,
63                                                                         CK_BYTE_PTR encrypted,
64                                                                         CK_ULONG_PTR n_encrypted);
65 
66 CK_RV                    gkm_crypto_decrypt                            (GkmSession *session,
67                                                                         CK_MECHANISM_TYPE mech,
68                                                                         CK_BYTE_PTR encrypted,
69                                                                         CK_ULONG n_encrypted,
70                                                                         CK_BYTE_PTR data,
71                                                                         CK_ULONG_PTR n_data);
72 
73 CK_RV                    gkm_crypto_decrypt_xsa                        (gcry_sexp_t sexp,
74                                                                         CK_MECHANISM_TYPE mech,
75                                                                         CK_BYTE_PTR encrypted,
76                                                                         CK_ULONG n_encrypted,
77                                                                         CK_BYTE_PTR data,
78                                                                         CK_ULONG_PTR n_data);
79 
80 CK_RV                    gkm_crypto_sign                               (GkmSession *session,
81                                                                         CK_MECHANISM_TYPE mech,
82                                                                         CK_BYTE_PTR data,
83                                                                         CK_ULONG n_data,
84                                                                         CK_BYTE_PTR signature,
85                                                                         CK_ULONG_PTR n_signature);
86 
87 CK_RV                    gkm_crypto_sign_xsa                           (gcry_sexp_t sexp,
88                                                                         CK_MECHANISM_TYPE mech,
89                                                                         CK_BYTE_PTR data,
90                                                                         CK_ULONG n_data,
91                                                                         CK_BYTE_PTR signature,
92                                                                         CK_ULONG_PTR n_signature);
93 
94 CK_RV                    gkm_crypto_verify                             (GkmSession *session,
95                                                                         CK_MECHANISM_TYPE mech,
96                                                                         CK_BYTE_PTR data,
97                                                                         CK_ULONG n_data,
98                                                                         CK_BYTE_PTR signature,
99                                                                         CK_ULONG n_signature);
100 
101 CK_RV                    gkm_crypto_verify_xsa                         (gcry_sexp_t sexp,
102                                                                         CK_MECHANISM_TYPE mech,
103                                                                         CK_BYTE_PTR data,
104                                                                         CK_ULONG n_data,
105                                                                         CK_BYTE_PTR signature,
106                                                                         CK_ULONG n_signature);
107 
108 CK_RV                    gkm_crypto_sexp_to_data                       (gcry_sexp_t sexp,
109                                                                         guint bits,
110                                                                         CK_BYTE_PTR data,
111                                                                         CK_ULONG *n_data,
112                                                                         EggPadding padding,
113                                                                         ...) G_GNUC_NULL_TERMINATED;
114 
115 CK_RV                    gkm_crypto_data_to_sexp                       (const gchar *format,
116                                                                         guint nbits,
117                                                                         EggPadding padding,
118                                                                         CK_BYTE_PTR data,
119                                                                         CK_ULONG n_data,
120                                                                         gcry_sexp_t *sexp);
121 
122 CK_RV                    gkm_crypto_generate_key_pair                  (GkmSession *session,
123                                                                         CK_MECHANISM_TYPE mech,
124                                                                         CK_ATTRIBUTE_PTR pub_atts,
125                                                                         CK_ULONG n_pub_atts,
126                                                                         CK_ATTRIBUTE_PTR priv_atts,
127                                                                         CK_ULONG n_priv_atts,
128                                                                         GkmObject **pub_key,
129                                                                         GkmObject **priv_key);
130 
131 CK_RV                    gkm_crypto_derive_key                         (GkmSession *session,
132                                                                         CK_MECHANISM_PTR mech,
133                                                                         GkmObject *base,
134                                                                         CK_ATTRIBUTE_PTR attrs,
135                                                                         CK_ULONG n_attrs,
136                                                                         GkmObject **derived);
137 
138 CK_RV                    gkm_crypto_wrap_key                           (GkmSession *session,
139                                                                         CK_MECHANISM_PTR mech,
140                                                                         GkmObject *wrapper,
141                                                                         GkmObject *wrapped,
142                                                                         CK_BYTE_PTR output,
143                                                                         CK_ULONG_PTR n_output);
144 
145 CK_RV                    gkm_crypto_unwrap_key                         (GkmSession *session,
146                                                                         CK_MECHANISM_PTR mech,
147                                                                         GkmObject *wrapper,
148                                                                         CK_VOID_PTR input,
149                                                                         CK_ULONG n_input,
150                                                                         CK_ATTRIBUTE_PTR attrs,
151                                                                         CK_ULONG n_attrs,
152                                                                         GkmObject **unwrapped);
153 
154 gulong                   gkm_crypto_secret_key_length                  (CK_KEY_TYPE type);
155 
156 #endif /* GKM_CRYPTO_H_ */
157