22
22
#ifndef GCKCRYPTO_H_
23
23
#define GCKCRYPTO_H_
25
#include "gck-types.h"
27
#include "pkcs11/pkcs11.h"
29
#include "egg/egg-padding.h"
27
33
#include <gcrypt.h>
29
#include "pkcs11/pkcs11.h"
31
typedef guchar* (*GckCryptoPadding) (guint n_modulus, const guchar* raw,
32
gsize n_raw, gsize *n_padded);
34
static const CK_MECHANISM_TYPE GCK_CRYPTO_RSA_MECHANISMS[] = {
39
static const CK_MECHANISM_TYPE GCK_CRYPTO_DSA_MECHANISMS[] = {
43
35
void gck_crypto_initialize (void);
45
CK_RV gck_crypto_perform (gcry_sexp_t sexp,
46
CK_MECHANISM_TYPE mech,
47
CK_ATTRIBUTE_TYPE method,
37
CK_RV gck_crypto_prepare (GckSession *session,
38
CK_MECHANISM_TYPE mech,
41
CK_RV gck_crypto_prepare_xsa (GckSession *session,
42
CK_MECHANISM_TYPE mech,
45
CK_RV gck_crypto_perform (GckSession *session,
46
CK_MECHANISM_TYPE mech,
47
CK_ATTRIBUTE_TYPE method,
51
51
CK_ULONG_PTR n_buftwo);
53
CK_RV gck_crypto_encrypt (gcry_sexp_t sexp,
54
CK_MECHANISM_TYPE mech,
57
CK_BYTE_PTR encrypted,
58
CK_ULONG_PTR n_encrypted);
60
CK_RV gck_crypto_encrypt_rsa (gcry_sexp_t sexp,
61
GckCryptoPadding padding,
64
CK_BYTE_PTR encrypted,
65
CK_ULONG_PTR n_encrypted);
68
CK_RV gck_crypto_decrypt (gcry_sexp_t sexp,
69
CK_MECHANISM_TYPE mech,
70
CK_BYTE_PTR encrypted,
75
CK_RV gck_crypto_decrypt_rsa (gcry_sexp_t sexp,
76
GckCryptoPadding padding,
77
CK_BYTE_PTR encrypted,
82
CK_RV gck_crypto_sign (gcry_sexp_t sexp,
83
CK_MECHANISM_TYPE mech,
86
CK_BYTE_PTR signature,
87
CK_ULONG_PTR n_signature);
89
CK_RV gck_crypto_sign_rsa (gcry_sexp_t sexp,
90
GckCryptoPadding padding,
93
CK_BYTE_PTR signature,
94
CK_ULONG_PTR n_signature);
96
CK_RV gck_crypto_sign_dsa (gcry_sexp_t sexp,
99
CK_BYTE_PTR signature,
100
CK_ULONG_PTR n_signature);
102
CK_RV gck_crypto_verify (gcry_sexp_t sexp,
103
CK_MECHANISM_TYPE mech,
106
CK_BYTE_PTR signature,
107
CK_ULONG n_signature);
109
CK_RV gck_crypto_verify_rsa (gcry_sexp_t sexp,
110
GckCryptoPadding padding,
113
CK_BYTE_PTR signature,
114
CK_ULONG n_signature);
117
CK_RV gck_crypto_verify_dsa (gcry_sexp_t sexp,
120
CK_BYTE_PTR signature,
121
CK_ULONG n_signature);
123
gboolean gck_crypto_sexp_parse_key (gcry_sexp_t sexp,
125
gboolean *is_private,
126
gcry_sexp_t *numbers);
128
gboolean gck_crypto_sexp_key_to_public (gcry_sexp_t sexp,
131
gboolean gck_crypto_sexp_extract_mpi (gcry_sexp_t sexp,
53
CK_RV gck_crypto_encrypt (GckSession *session,
54
CK_MECHANISM_TYPE mech,
57
CK_BYTE_PTR encrypted,
58
CK_ULONG_PTR n_encrypted);
60
CK_RV gck_crypto_encrypt_xsa (gcry_sexp_t sexp,
61
CK_MECHANISM_TYPE mech,
64
CK_BYTE_PTR encrypted,
65
CK_ULONG_PTR n_encrypted);
67
CK_RV gck_crypto_decrypt (GckSession *session,
68
CK_MECHANISM_TYPE mech,
69
CK_BYTE_PTR encrypted,
74
CK_RV gck_crypto_decrypt_xsa (gcry_sexp_t sexp,
75
CK_MECHANISM_TYPE mech,
76
CK_BYTE_PTR encrypted,
81
CK_RV gck_crypto_sign (GckSession *session,
82
CK_MECHANISM_TYPE mech,
85
CK_BYTE_PTR signature,
86
CK_ULONG_PTR n_signature);
88
CK_RV gck_crypto_sign_xsa (gcry_sexp_t sexp,
89
CK_MECHANISM_TYPE mech,
92
CK_BYTE_PTR signature,
93
CK_ULONG_PTR n_signature);
95
CK_RV gck_crypto_verify (GckSession *session,
96
CK_MECHANISM_TYPE mech,
99
CK_BYTE_PTR signature,
100
CK_ULONG n_signature);
102
CK_RV gck_crypto_verify_xsa (gcry_sexp_t sexp,
103
CK_MECHANISM_TYPE mech,
106
CK_BYTE_PTR signature,
107
CK_ULONG n_signature);
109
CK_RV gck_crypto_sexp_to_data (gcry_sexp_t sexp,
133
114
...) G_GNUC_NULL_TERMINATED;
135
void gck_crypto_sexp_dump (gcry_sexp_t sexp);
137
guchar* gck_crypto_rsa_pad_raw (guint bits,
142
guchar* gck_crypto_rsa_pad_one (guint bits,
147
guchar* gck_crypto_rsa_pad_two (guint bits,
152
guchar* gck_crypto_rsa_unpad_one (guint bits,
153
const guchar *padded,
157
guchar* gck_crypto_rsa_unpad_two (guint bits,
158
const guchar* padded,
116
CK_RV gck_crypto_data_to_sexp (const gchar *format,
123
CK_RV gck_crypto_generate_key_pair (GckSession *session,
124
CK_MECHANISM_TYPE mech,
125
CK_ATTRIBUTE_PTR pub_atts,
127
CK_ATTRIBUTE_PTR priv_atts,
128
CK_ULONG n_priv_atts,
130
GckObject **priv_key);
132
CK_RV gck_crypto_derive_key (GckSession *session,
133
CK_MECHANISM_PTR mech,
135
CK_ATTRIBUTE_PTR attrs,
137
GckObject **derived);
139
CK_RV gck_crypto_wrap_key (GckSession *session,
140
CK_MECHANISM_PTR mech,
144
CK_ULONG_PTR n_output);
146
CK_RV gck_crypto_unwrap_key (GckSession *session,
147
CK_MECHANISM_PTR mech,
151
CK_ATTRIBUTE_PTR attrs,
153
GckObject **unwrapped);
155
gulong gck_crypto_secret_key_length (CK_KEY_TYPE type);
162
157
#endif /* GCKCRYPTO_H_ */