Honor uninitialized private key in destructor
[gnutls.git] / lib / pkcs11_int.h
blobb2c1d4606cc9d1e6772d59e10f835cdaa51c846d
1 #ifndef PKCS11_INT_H
2 #define PKCS11_INT_H
4 #include <pakchois/pakchois.h>
5 #include <gnutls/pkcs11.h>
7 #define PKCS11_ID_SIZE 128
8 #define PKCS11_LABEL_SIZE 128
10 typedef unsigned char ck_bool_t;
12 struct token_info
14 struct ck_token_info tinfo;
15 struct ck_slot_info sinfo;
16 ck_slot_id_t sid;
17 struct gnutls_pkcs11_provider_s *prov;
20 struct pkcs11_url_info
22 /* everything here is null terminated strings */
23 opaque id[PKCS11_ID_SIZE * 3 + 1]; /* hex with delimiters */
24 opaque type[16]; /* cert/key etc. */
26 opaque lib_manufacturer[sizeof
27 (((struct ck_info *) NULL)->manufacturer_id) + 1];
28 opaque lib_desc[sizeof
29 (((struct ck_info *) NULL)->library_description) + 1];
30 opaque lib_version[12];
32 opaque manufacturer[sizeof
33 (((struct ck_token_info *) NULL)->manufacturer_id) + 1];
34 opaque token[sizeof (((struct ck_token_info *) NULL)->label) + 1];
35 opaque serial[sizeof (((struct ck_token_info *) NULL)->serial_number) + 1];
36 opaque model[sizeof (((struct ck_token_info *) NULL)->model) + 1];
37 opaque label[PKCS11_LABEL_SIZE + 1];
39 opaque certid_raw[PKCS11_ID_SIZE]; /* same as ID but raw */
40 size_t certid_raw_size;
43 struct gnutls_pkcs11_obj_st
45 gnutls_datum_t raw;
46 gnutls_pkcs11_obj_type_t type;
47 struct pkcs11_url_info info;
49 /* only when pubkey */
50 gnutls_datum_t pubkey[MAX_PUBLIC_PARAMS_SIZE];
51 gnutls_pk_algorithm pk_algorithm;
52 unsigned int key_usage;
55 /* thus function is called for every token in the traverse_tokens
56 * function. Once everything is traversed it is called with NULL tinfo.
57 * It should return 0 if found what it was looking for.
59 typedef int (*find_func_t) (pakchois_session_t * pks,
60 struct token_info * tinfo, struct ck_info *,
61 void *input);
63 int pkcs11_rv_to_err (ck_rv_t rv);
64 int pkcs11_url_to_info (const char *url, struct pkcs11_url_info *info);
65 int
66 pkcs11_find_slot (pakchois_module_t ** module, ck_slot_id_t * slot,
67 struct pkcs11_url_info *info, struct token_info *_tinfo);
69 int pkcs11_get_info (struct pkcs11_url_info *info,
70 gnutls_pkcs11_obj_info_t itype, void *output,
71 size_t * output_size);
72 int pkcs11_login (pakchois_session_t * pks,
73 const struct token_info *info, int admin);
75 extern gnutls_pkcs11_token_callback_t token_func;
76 extern void *token_data;
78 void pkcs11_rescan_slots (void);
79 int pkcs11_info_to_url (const struct pkcs11_url_info *info,
80 gnutls_pkcs11_url_type_t detailed, char **url);
82 #define SESSION_WRITE (1<<0)
83 #define SESSION_LOGIN (1<<1)
84 #define SESSION_SO (1<<2) /* security officer session */
85 int pkcs11_open_session (pakchois_session_t ** _pks,
86 struct pkcs11_url_info *info, unsigned int flags);
87 int _pkcs11_traverse_tokens (find_func_t find_func, void *input,
88 unsigned int flags);
89 ck_object_class_t pkcs11_strtype_to_class (const char *type);
91 int pkcs11_token_matches_info (struct pkcs11_url_info *info,
92 struct ck_token_info *tinfo,
93 struct ck_info *lib_info);
95 /* flags are SESSION_* */
96 int pkcs11_find_object (pakchois_session_t ** _pks,
97 ck_object_handle_t * _obj,
98 struct pkcs11_url_info *info, unsigned int flags);
100 unsigned int pkcs11_obj_flags_to_int (unsigned int flags);
103 _gnutls_pkcs11_privkey_sign_hash (gnutls_pkcs11_privkey_t key,
104 const gnutls_datum_t * hash,
105 gnutls_datum_t * signature);
108 _gnutls_pkcs11_privkey_decrypt_data (gnutls_pkcs11_privkey_t key,
109 unsigned int flags,
110 const gnutls_datum_t * ciphertext,
111 gnutls_datum_t * plaintext);
113 #endif