X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=lib-crypt%2Fcrypt-mod.h;fp=lib-crypt%2Fcrypt-mod.h;h=679b81e065b27d6c000c226e547d4f1b14f8c1b2;hb=4761fa78a6dfc9437caa6e6e0aac806e50e01c83;hp=0000000000000000000000000000000000000000;hpb=b8c71f93b0296f815a6538182343ba67e88c0012;p=apps%2Fmadmutt.git diff --git a/lib-crypt/crypt-mod.h b/lib-crypt/crypt-mod.h new file mode 100644 index 0000000..679b81e --- /dev/null +++ b/lib-crypt/crypt-mod.h @@ -0,0 +1,126 @@ +/* + * Copyright notice from original mutt: + * Copyright (C) 2004 g10 Code GmbH + * + * This file is part of mutt-ng, see http://www.muttng.org/. + * It's licensed under the GNU General Public License, + * please see the file GPL in the top level source directory. + */ + +#ifndef CRYPTOGRAPHY_H +#define CRYPTOGRAPHY_H + +#include "mutt.h" +#include "crypt.h" + +/* + Type defintions for crypto module functions. + */ +typedef void (*crypt_func_void_passphrase_t) (void); +typedef int (*crypt_func_valid_passphrase_t) (void); + +typedef int (*crypt_func_decrypt_mime_t) (FILE * a, FILE ** b, + BODY * c, BODY ** d); + +typedef int (*crypt_func_application_handler_t) (BODY * m, STATE * s); +typedef int (*crypt_func_encrypted_handler_t) (BODY * m, STATE * s); + +typedef void (*crypt_func_pgp_invoke_getkeys_t) (address_t * addr); +typedef int (*crypt_func_pgp_check_traditional_t) (FILE * fp, BODY * b, + int tagged_only); +typedef BODY *(*crypt_func_pgp_traditional_encryptsign_t) (BODY * a, + int flags, + char *keylist); +typedef BODY *(*crypt_func_pgp_make_key_attachment_t) (char *tempf); +typedef char *(*crypt_func_findkeys_t) (address_t * to, + address_t * cc, address_t * bcc); +typedef BODY *(*crypt_func_sign_message_t) (BODY * a); +typedef BODY *(*crypt_func_pgp_encrypt_message_t) (BODY * a, char *keylist, + int sign); +typedef void (*crypt_func_pgp_invoke_import_t) (const char *fname); +typedef int (*crypt_func_verify_one_t) (BODY * sigbdy, STATE * s, + const char *tempf); +typedef void (*crypt_func_pgp_extract_keys_from_attachment_list_t) + (FILE * fp, int tag, BODY * top); + +typedef int (*crypt_func_send_menu_t) (HEADER * msg, int *redraw); + + /* (SMIME) */ +typedef void (*crypt_func_smime_getkeys_t) (ENVELOPE * env); +typedef int (*crypt_func_smime_verify_sender_t) (HEADER * h); + +typedef BODY *(*crypt_func_smime_build_smime_entity_t) (BODY * a, + char *certlist); + +typedef void (*crypt_func_smime_invoke_import_t) (char *infile, + char *mailbox); + +typedef void (*crypt_func_init_t) (void); + + +/* + A structure to keep all crypto module fucntions together. + */ +typedef struct crypt_module_functions { + /* Common/General functions. */ + crypt_func_init_t init; + crypt_func_void_passphrase_t void_passphrase; + crypt_func_valid_passphrase_t valid_passphrase; + crypt_func_decrypt_mime_t decrypt_mime; + crypt_func_application_handler_t application_handler; + crypt_func_encrypted_handler_t encrypted_handler; + crypt_func_findkeys_t findkeys; + crypt_func_sign_message_t sign_message; + crypt_func_verify_one_t verify_one; + crypt_func_send_menu_t send_menu; + + /* PGP specific functions. */ + crypt_func_pgp_encrypt_message_t pgp_encrypt_message; + crypt_func_pgp_make_key_attachment_t pgp_make_key_attachment; + crypt_func_pgp_check_traditional_t pgp_check_traditional; + crypt_func_pgp_traditional_encryptsign_t pgp_traditional_encryptsign; + crypt_func_pgp_invoke_getkeys_t pgp_invoke_getkeys; + crypt_func_pgp_invoke_import_t pgp_invoke_import; + + crypt_func_pgp_extract_keys_from_attachment_list_t + pgp_extract_keys_from_attachment_list; + + /* S/MIME specific functions. */ + + crypt_func_smime_getkeys_t smime_getkeys; + crypt_func_smime_verify_sender_t smime_verify_sender; + crypt_func_smime_build_smime_entity_t smime_build_smime_entity; + crypt_func_smime_invoke_import_t smime_invoke_import; +} crypt_module_functions_t; + + +/* + A structure to decribe a crypto module. + */ +typedef struct crypt_module_specs { + int identifier; /* Identifying bit. */ + crypt_module_functions_t functions; +} *crypt_module_specs_t; + + + +/* + High Level crypto module interface. + */ + +void crypto_module_register (crypt_module_specs_t specs); +crypt_module_specs_t crypto_module_lookup (int identifier); + +/* If the crypto module identifier by IDENTIFIER has been registered, + call its function FUNC. Do nothing else. This may be used as an + expression. */ +#define CRYPT_MOD_CALL_CHECK(identifier, func) \ + (crypto_module_lookup (APPLICATION_ ## identifier) \ + && (crypto_module_lookup (APPLICATION_ ## identifier))->functions.func) + +/* Call the function FUNC in the crypto module identified by + IDENTIFIER. This may be used as an expression. */ +#define CRYPT_MOD_CALL(identifier, func) \ + *(crypto_module_lookup (APPLICATION_ ## identifier))->functions.func + +#endif