append gdbm change to all changes since 2.6.2
[fwknop.git] / lib / fko.h
1 /*
2  *****************************************************************************
3  *
4  * File:    fko.h
5  *
6  * Purpose: Header for libfko.
7  *
8  *  Fwknop is developed primarily by the people listed in the file 'AUTHORS'.
9  *  Copyright (C) 2009-2014 fwknop developers and contributors. For a full
10  *  list of contributors, see the file 'CREDITS'.
11  *
12  *  License (GNU General Public License):
13  *
14  *  This program is free software; you can redistribute it and/or
15  *  modify it under the terms of the GNU General Public License
16  *  as published by the Free Software Foundation; either version 2
17  *  of the License, or (at your option) any later version.
18  *
19  *  This program is distributed in the hope that it will be useful,
20  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
21  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  *  GNU General Public License for more details.
23  *
24  *  You should have received a copy of the GNU General Public License
25  *  along with this program; if not, write to the Free Software
26  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
27  *  USA
28  *
29  *****************************************************************************
30 */
31 #ifndef FKO_H
32 #define FKO_H 1
33
34 #include <time.h>
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 #ifdef WIN32
41   #ifdef DLL_EXPORTS
42     #define DLL_API __declspec(dllexport)
43   #else
44         #ifdef DLL_IMPORTS
45                 #define DLL_API __declspec(dllimport)
46         #else
47                 #define DLL_API
48         #endif
49   #endif
50 #else
51   #define DLL_API
52 #endif
53
54 /* General params
55 */
56 #define FKO_PROTOCOL_VERSION "2.0.2" /* The fwknop protocol version */
57
58 /* Supported FKO Message types...
59 */
60 typedef enum {
61     FKO_COMMAND_MSG = 0,
62     FKO_ACCESS_MSG,
63     FKO_NAT_ACCESS_MSG,
64     FKO_CLIENT_TIMEOUT_ACCESS_MSG,
65     FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG,
66     FKO_LOCAL_NAT_ACCESS_MSG,
67     FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG,
68     FKO_LAST_MSG_TYPE /* Always leave this as the last one */
69 } fko_message_type_t;
70
71 /* Supported digest types...
72 */
73 typedef enum {
74     FKO_DIGEST_INVALID_DATA = -1,
75     FKO_DIGEST_UNKNOWN = 0,
76     FKO_DIGEST_MD5,
77     FKO_DIGEST_SHA1,
78     FKO_DIGEST_SHA256,
79     FKO_DIGEST_SHA384,
80     FKO_DIGEST_SHA512,
81     FKO_LAST_DIGEST_TYPE /* Always leave this as the last one */
82 } fko_digest_type_t;
83
84 /* Supported hmac digest types...
85 */
86 typedef enum {
87     FKO_HMAC_INVALID_DATA = -1,
88     FKO_HMAC_UNKNOWN = 0,
89     FKO_HMAC_MD5,
90     FKO_HMAC_SHA1,
91     FKO_HMAC_SHA256,
92     FKO_HMAC_SHA384,
93     FKO_HMAC_SHA512,
94     FKO_LAST_HMAC_MODE /* Always leave this as the last one */
95 } fko_hmac_type_t;
96
97 /* Supported encryption types...
98 */
99 typedef enum {
100     FKO_ENCRYPTION_INVALID_DATA = -1,
101     FKO_ENCRYPTION_UNKNOWN = 0,
102     FKO_ENCRYPTION_RIJNDAEL,
103     FKO_ENCRYPTION_GPG,
104     FKO_LAST_ENCRYPTION_TYPE /* Always leave this as the last one */
105 } fko_encryption_type_t;
106
107 /* Symmetric encryption modes to correspond to rijndael.h
108 */
109 typedef enum {
110     FKO_ENC_MODE_UNKNOWN = 0,
111     FKO_ENC_MODE_ECB,
112     FKO_ENC_MODE_CBC,
113     FKO_ENC_MODE_CFB,
114     FKO_ENC_MODE_PCBC,
115     FKO_ENC_MODE_OFB,
116     FKO_ENC_MODE_CTR,
117     FKO_ENC_MODE_ASYMMETRIC,  /* placeholder when GPG is used */
118     FKO_ENC_MODE_CBC_LEGACY_IV,  /* for the old zero-padding strategy */
119     FKO_LAST_ENC_MODE /* Always leave this as the last one */
120 } fko_encryption_mode_t;
121
122 /* FKO ERROR_CODES
123  *
124  * Note: If you change this list in any way, please be sure to make the
125  *       appropriate corresponding change to the error message list in
126  *       fko_error.c.
127 */
128 typedef enum {
129     FKO_SUCCESS = 0,
130     FKO_ERROR_CTX_NOT_INITIALIZED,
131     FKO_ERROR_MEMORY_ALLOCATION,
132     FKO_ERROR_FILESYSTEM_OPERATION,
133
134     /* Invalid data errors */
135     FKO_ERROR_INVALID_DATA,
136     FKO_ERROR_INVALID_DATA_CLIENT_TIMEOUT_NEGATIVE,
137     FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL,
138     FKO_ERROR_INVALID_DATA_DECODE_NON_ASCII,
139     FKO_ERROR_INVALID_DATA_DECODE_LT_MIN_FIELDS,
140     FKO_ERROR_INVALID_DATA_DECODE_GT_MAX_FIELDS,
141     FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS,
142     FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE,
143     FKO_ERROR_INVALID_DATA_DECODE_RAND_MISSING,
144     FKO_ERROR_INVALID_DATA_DECODE_USERNAME_MISSING,
145     FKO_ERROR_INVALID_DATA_DECODE_USERNAME_TOOBIG,
146     FKO_ERROR_INVALID_DATA_DECODE_USERNAME_DECODEFAIL,
147     FKO_ERROR_INVALID_DATA_DECODE_USERNAME_VALIDFAIL,
148     FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_MISSING,
149     FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_TOOBIG,
150     FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_DECODEFAIL,
151     FKO_ERROR_INVALID_DATA_DECODE_VERSION_MISSING,
152     FKO_ERROR_INVALID_DATA_DECODE_VERSION_TOOBIG,
153     FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_MISSING,
154     FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_TOOBIG,
155     FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL,
156     FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_MISSING,
157     FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_TOOBIG,
158     FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_DECODEFAIL,
159     FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_VALIDFAIL,
160     FKO_ERROR_INVALID_DATA_DECODE_ACCESS_VALIDFAIL,
161     FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_MISSING,
162     FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_TOOBIG,
163     FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_DECODEFAIL,
164     FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_VALIDFAIL,
165     FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_MISSING,
166     FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_DECODEFAIL,
167     FKO_ERROR_INVALID_DATA_DECODE_SPA_EXTRA_TOOBIG,
168     FKO_ERROR_INVALID_DATA_DECODE_EXTRA_TOOBIG,
169     FKO_ERROR_INVALID_DATA_DECODE_EXTRA_DECODEFAIL,
170     FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_MISSING,
171     FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_TOOBIG,
172     FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_VALIDFAIL,
173     FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_DECODEFAIL,
174     FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG,
175     FKO_ERROR_INVALID_DATA_ENCODE_MSGLEN_VALIDFAIL,
176     FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL,
177     FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG,
178     FKO_ERROR_INVALID_DATA_ENCODE_NOTBASE64,
179     FKO_ERROR_INVALID_DATA_ENCRYPT_MSGLEN_VALIDFAIL,
180     FKO_ERROR_INVALID_DATA_ENCRYPT_DIGESTLEN_VALIDFAIL,
181     FKO_ERROR_INVALID_DATA_ENCRYPT_PTLEN_VALIDFAIL,
182     FKO_ERROR_INVALID_DATA_ENCRYPT_RESULT_MSGLEN_VALIDFAIL,
183     FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_DECODEFAIL,
184     FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_VALIDFAIL,
185     FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MESSAGE_MISSING,
186     FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MSGLEN_VALIDFAIL,
187     FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MESSAGE_VALIDFAIL,
188     FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_DIGEST_VALIDFAIL,
189     FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MSGLEN_VALIDFAIL,
190     FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL,
191     FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_CIPHER_DECODEFAIL,
192     FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSG_NULL,
193     FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSGLEN_VALIDFAIL,
194     FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL,
195     FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL,
196     FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_UNKNOWN,
197     FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING,
198     FKO_ERROR_INVALID_DATA_FUNCS_NEW_MSGLEN_VALIDFAIL,
199     FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEYLEN_VALIDFAIL,
200     FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMACLEN_VALIDFAIL,
201     FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEY_ENCODEFAIL,
202     FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMAC_ENCODEFAIL,
203     FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL,
204     FKO_ERROR_INVALID_DATA_HMAC_MSGLEN_VALIDFAIL,
205     FKO_ERROR_INVALID_DATA_HMAC_ENCMSGLEN_VALIDFAIL,
206     FKO_ERROR_INVALID_DATA_HMAC_COMPAREFAIL,
207     FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL,
208     FKO_ERROR_INVALID_DATA_HMAC_LEN_VALIDFAIL,
209     FKO_ERROR_INVALID_DATA_MESSAGE_PORT_MISSING,
210     FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL,
211     FKO_ERROR_INVALID_DATA_MESSAGE_EMPTY,
212     FKO_ERROR_INVALID_DATA_MESSAGE_CMD_MISSING,
213     FKO_ERROR_INVALID_DATA_MESSAGE_ACCESS_MISSING,
214     FKO_ERROR_INVALID_DATA_MESSAGE_NAT_MISSING,
215     FKO_ERROR_INVALID_DATA_MESSAGE_PORTPROTO_MISSING,
216     FKO_ERROR_INVALID_DATA_NAT_EMPTY,
217     FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL,
218     FKO_ERROR_INVALID_DATA_SRVAUTH_MISSING,
219     FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL,
220     FKO_ERROR_INVALID_DATA_USER_MISSING,
221     FKO_ERROR_INVALID_DATA_USER_FIRSTCHAR_VALIDFAIL,
222     FKO_ERROR_INVALID_DATA_USER_REMCHAR_VALIDFAIL,
223     FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN,
224     FKO_ERROR_INVALID_DATA_UTIL_STRTOL_GT_MAX,
225
226     FKO_ERROR_DATA_TOO_LARGE,
227     FKO_ERROR_INVALID_KEY_LEN,
228     FKO_ERROR_USERNAME_UNKNOWN,
229     FKO_ERROR_INCOMPLETE_SPA_DATA,
230     FKO_ERROR_MISSING_ENCODED_DATA,
231     FKO_ERROR_INVALID_DIGEST_TYPE,
232     FKO_ERROR_INVALID_ALLOW_IP,
233     FKO_ERROR_INVALID_SPA_COMMAND_MSG,
234     FKO_ERROR_INVALID_SPA_ACCESS_MSG,
235     FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG,
236     FKO_ERROR_INVALID_ENCRYPTION_TYPE,
237     FKO_ERROR_WRONG_ENCRYPTION_TYPE,
238     FKO_ERROR_DECRYPTION_SIZE,
239     FKO_ERROR_DECRYPTION_FAILURE,
240     FKO_ERROR_DIGEST_VERIFICATION_FAILED,
241     FKO_ERROR_INVALID_HMAC_KEY_LEN,
242     FKO_ERROR_UNSUPPORTED_HMAC_MODE,
243     FKO_ERROR_UNSUPPORTED_FEATURE,
244     FKO_ERROR_ZERO_OUT_DATA,
245     FKO_ERROR_UNKNOWN,
246
247     /* Start GPGME-related errors (NOTE: Do not put non-GPG-related error
248      * below this point).
249     */
250     GPGME_ERR_START,
251     FKO_ERROR_MISSING_GPG_KEY_DATA,
252     FKO_ERROR_GPGME_NO_OPENPGP,
253     FKO_ERROR_GPGME_CONTEXT,
254     FKO_ERROR_GPGME_PLAINTEXT_DATA_OBJ,
255     FKO_ERROR_GPGME_SET_PROTOCOL,
256     FKO_ERROR_GPGME_CIPHER_DATA_OBJ,
257     FKO_ERROR_GPGME_BAD_PASSPHRASE,
258     FKO_ERROR_GPGME_ENCRYPT_SIGN,
259     FKO_ERROR_GPGME_CONTEXT_SIGNER_KEY,
260     FKO_ERROR_GPGME_SIGNER_KEYLIST_START,
261     FKO_ERROR_GPGME_SIGNER_KEY_NOT_FOUND,
262     FKO_ERROR_GPGME_SIGNER_KEY_AMBIGUOUS,
263     FKO_ERROR_GPGME_ADD_SIGNER,
264     FKO_ERROR_GPGME_CONTEXT_RECIPIENT_KEY,
265     FKO_ERROR_GPGME_RECIPIENT_KEYLIST_START,
266     FKO_ERROR_GPGME_RECIPIENT_KEY_NOT_FOUND,
267     FKO_ERROR_GPGME_RECIPIENT_KEY_AMBIGUOUS,
268     FKO_ERROR_GPGME_DECRYPT_FAILED,
269     FKO_ERROR_GPGME_DECRYPT_UNSUPPORTED_ALGORITHM,
270     FKO_ERROR_GPGME_BAD_GPG_EXE,
271     FKO_ERROR_GPGME_BAD_HOME_DIR,
272     FKO_ERROR_GPGME_SET_HOME_DIR,
273     FKO_ERROR_GPGME_NO_SIGNATURE,
274     FKO_ERROR_GPGME_BAD_SIGNATURE,
275     FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED,
276
277     FKO_LAST_ERROR
278 } fko_error_codes_t;
279
280 /* Macro that returns true if the given error code is a gpg-related error.
281 */
282 #define IS_GPG_ERROR(x) (x > GPGME_ERR_START && x < FKO_LAST_ERROR)
283
284 /* General Defaults
285 */
286 #define FKO_DEFAULT_MSG_TYPE     FKO_ACCESS_MSG
287 #define FKO_DEFAULT_DIGEST       FKO_DIGEST_SHA256
288 #define FKO_DEFAULT_ENCRYPTION   FKO_ENCRYPTION_RIJNDAEL
289 #define FKO_DEFAULT_ENC_MODE     FKO_ENC_MODE_CBC
290 #define FKO_DEFAULT_KEY_LEN      0
291 #define FKO_DEFAULT_HMAC_KEY_LEN 0
292 #define FKO_DEFAULT_HMAC_MODE    FKO_HMAC_SHA256
293
294 /* Define the consistent prefixes or salt on some encryption schemes.
295 */
296 #define B64_RIJNDAEL_SALT "U2FsdGVkX1"
297 #define B64_RIJNDAEL_SALT_STR_LEN 10
298
299 #define B64_GPG_PREFIX "hQ"
300 #define B64_GPG_PREFIX_STR_LEN 2
301
302 /* Specify whether libfko is allowed to call exit()
303 */
304 #define EXIT_UPON_ERR 1
305 #define NO_EXIT_UPON_ERR 0
306
307 /* The context holds the global state and config options, as
308  * well as some intermediate results during processing. This
309  * is an opaque pointer.
310 */
311 struct fko_context;
312 typedef struct fko_context *fko_ctx_t;
313
314 /* Some gpg-specifc data types and constants.
315 */
316 #if HAVE_LIBGPGME
317
318 enum {
319     FKO_GPG_NO_SIG_VERIFY_SIGS  = 0x01,
320     FKO_GPG_ALLOW_BAD_SIG       = 0x02,
321     FKO_GPG_NO_SIG_INFO         = 0x04,
322     FKO_GPG_ALLOW_EXPIRED_SIG   = 0x08,
323     FKO_GPG_ALLOW_REVOKED_SIG   = 0x10
324 };
325
326 #define FKO_GPG_GOOD_SIGSUM     3
327
328 #endif /* HAVE_LIBGPGME */
329
330 /* Function prototypes */
331
332 /* General API calls
333 */
334 DLL_API int fko_new(fko_ctx_t *ctx);
335 DLL_API int fko_new_with_data(fko_ctx_t *ctx, const char * const enc_msg,
336     const char * const dec_key, const int dec_key_len, int encryption_mode,
337     const char * const hmac_key, const int hmac_key_len, const int hmac_type);
338 DLL_API int fko_destroy(fko_ctx_t ctx);
339 DLL_API int fko_spa_data_final(fko_ctx_t ctx, const char * const enc_key,
340     const int enc_key_len, const char * const hmac_key, const int hmac_key_len);
341
342 /* Set context data functions
343 */
344 DLL_API int fko_set_rand_value(fko_ctx_t ctx, const char * const val);
345 DLL_API int fko_set_username(fko_ctx_t ctx, const char * const spoof_user);
346 DLL_API int fko_set_timestamp(fko_ctx_t ctx, const int offset);
347 DLL_API int fko_set_spa_message_type(fko_ctx_t ctx, const short msg_type);
348 DLL_API int fko_set_spa_message(fko_ctx_t ctx, const char * const msg_string);
349 DLL_API int fko_set_spa_nat_access(fko_ctx_t ctx, const char * const nat_access);
350 DLL_API int fko_set_spa_server_auth(fko_ctx_t ctx, const char * const server_auth);
351 DLL_API int fko_set_spa_client_timeout(fko_ctx_t ctx, const int timeout);
352 DLL_API int fko_set_spa_digest_type(fko_ctx_t ctx, const short digest_type);
353 DLL_API int fko_set_spa_digest(fko_ctx_t ctx);
354 DLL_API int fko_set_raw_spa_digest_type(fko_ctx_t ctx, const short raw_digest_type);
355 DLL_API int fko_set_raw_spa_digest(fko_ctx_t ctx);
356 DLL_API int fko_set_spa_encryption_type(fko_ctx_t ctx, const short encrypt_type);
357 DLL_API int fko_set_spa_encryption_mode(fko_ctx_t ctx, const int encrypt_mode);
358 DLL_API int fko_set_spa_data(fko_ctx_t ctx, const char * const enc_msg);
359 DLL_API int fko_set_spa_hmac_type(fko_ctx_t ctx, const short hmac_type);
360
361 /* Data processing and misc utility functions
362 */
363 DLL_API const char* fko_errstr(const int err_code);
364 DLL_API int fko_encryption_type(const char * const enc_data);
365 DLL_API int fko_key_gen(char * const key_base64, const int key_len,
366         char * const hmac_key_base64, const int hmac_ken_len,
367         const int hmac_type);
368 DLL_API int fko_base64_encode(unsigned char * const in, char * const out, int in_len);
369 DLL_API int fko_base64_decode(const char * const in, unsigned char *out);
370
371 DLL_API int fko_encode_spa_data(fko_ctx_t ctx);
372 DLL_API int fko_decode_spa_data(fko_ctx_t ctx);
373 DLL_API int fko_encrypt_spa_data(fko_ctx_t ctx, const char * const enc_key,
374     const int enc_key_len);
375 DLL_API int fko_decrypt_spa_data(fko_ctx_t ctx, const char * const dec_key,
376     const int dec_key_len);
377 DLL_API int fko_verify_hmac(fko_ctx_t ctx, const char * const hmac_key,
378     const int hmac_key_len);
379 DLL_API int fko_set_spa_hmac(fko_ctx_t ctx, const char * const hmac_key,
380     const int hmac_key_len);
381 DLL_API int fko_get_spa_hmac(fko_ctx_t ctx, char **enc_data);
382
383 DLL_API int fko_get_encoded_data(fko_ctx_t ctx, char **enc_data);
384 #if FUZZING_INTERFACES
385 DLL_API int fko_set_encoded_data(fko_ctx_t ctx, const char * const encoded_msg,
386         const int msg_len, const int do_digest, const int digest_type);
387 #endif
388
389 /* Get context data functions
390 */
391 DLL_API int fko_get_rand_value(fko_ctx_t ctx, char **rand_val);
392 DLL_API int fko_get_username(fko_ctx_t ctx, char **username);
393 DLL_API int fko_get_timestamp(fko_ctx_t ctx, time_t *ts);
394 DLL_API int fko_get_spa_message_type(fko_ctx_t ctx, short *spa_msg);
395 DLL_API int fko_get_spa_message(fko_ctx_t ctx, char **spa_message);
396 DLL_API int fko_get_spa_nat_access(fko_ctx_t ctx, char **nat_access);
397 DLL_API int fko_get_spa_server_auth(fko_ctx_t ctx, char **server_auth);
398 DLL_API int fko_get_spa_client_timeout(fko_ctx_t ctx, int *client_timeout);
399 DLL_API int fko_get_spa_digest_type(fko_ctx_t ctx, short *spa_digest_type);
400 DLL_API int fko_get_raw_spa_digest_type(fko_ctx_t ctx, short *raw_spa_digest_type);
401 DLL_API int fko_get_spa_hmac_type(fko_ctx_t ctx, short *spa_hmac_type);
402 DLL_API int fko_get_spa_digest(fko_ctx_t ctx, char **spa_digest);
403 DLL_API int fko_get_raw_spa_digest(fko_ctx_t ctx, char **raw_spa_digest);
404 DLL_API int fko_get_spa_encryption_type(fko_ctx_t ctx, short *spa_enc_type);
405 DLL_API int fko_get_spa_encryption_mode(fko_ctx_t ctx, int *spa_enc_mode);
406 DLL_API int fko_get_spa_data(fko_ctx_t ctx, char **spa_data);
407
408 DLL_API int fko_get_version(fko_ctx_t ctx, char **version);
409
410 /* GPG-related functions
411 */
412 DLL_API int fko_set_gpg_exe(fko_ctx_t ctx, const char * const gpg_exe);
413 DLL_API int fko_get_gpg_exe(fko_ctx_t ctx, char **gpg_exe);
414
415 DLL_API int fko_set_gpg_recipient(fko_ctx_t ctx, const char * const recip);
416 DLL_API int fko_get_gpg_recipient(fko_ctx_t ctx, char **recip);
417 DLL_API int fko_set_gpg_signer(fko_ctx_t ctx, const char * const signer);
418 DLL_API int fko_get_gpg_signer(fko_ctx_t ctx, char **signer);
419 DLL_API int fko_set_gpg_home_dir(fko_ctx_t ctx, const char * const gpg_home_dir);
420 DLL_API int fko_get_gpg_home_dir(fko_ctx_t ctx, char **gpg_home_dir);
421
422 DLL_API const char* fko_gpg_errstr(fko_ctx_t ctx);
423
424 DLL_API int fko_set_gpg_signature_verify(fko_ctx_t ctx,
425     const unsigned char val);
426 DLL_API int fko_get_gpg_signature_verify(fko_ctx_t ctx,
427     unsigned char * const val);
428 DLL_API int fko_set_gpg_ignore_verify_error(fko_ctx_t ctx,
429     const unsigned char val);
430 DLL_API int fko_get_gpg_ignore_verify_error(fko_ctx_t ctx,
431     unsigned char * const val);
432
433 DLL_API int fko_get_gpg_signature_id(fko_ctx_t ctx, char **sig_id);
434 DLL_API int fko_get_gpg_signature_fpr(fko_ctx_t ctx, char **sig_fpr);
435 DLL_API int fko_get_gpg_signature_summary(fko_ctx_t ctx, int *sigsum);
436 DLL_API int fko_get_gpg_signature_status(fko_ctx_t ctx, int *sigstat);
437
438 DLL_API int fko_gpg_signature_id_match(fko_ctx_t ctx, const char * const id,
439     unsigned char * const result);
440 DLL_API int fko_gpg_signature_fpr_match(fko_ctx_t ctx, const char * const fpr,
441     unsigned char * const result);
442
443 #ifdef __cplusplus
444 }
445 #endif
446
447 #endif /* FKO_H */
448
449 /***EOF***/