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