1 | /*************************************** 2 | $Revision: 1.20 $ 3 | 4 | gpg.h - header for gpg.c . 5 | 6 | Status: COMPLETE, REVUED, TESTED 7 | 8 | ******************/ /****************** 9 | Filename : gpg.h 10 | Authors : filippo@ripe.net 11 | OSs Tested : Solaris 7 12 | ******************/ /****************** 13 | Copyright (c) 2000,2001,2002 RIPE NCC 14 | 15 | All Rights Reserved 16 | 17 | Permission to use, copy, modify, and distribute this software and its 18 | documentation for any purpose and without fee is hereby granted, 19 | provided that the above copyright notice appear in all copies and that 20 | both that copyright notice and this permission notice appear in 21 | supporting documentation, and that the name of the author not be 22 | used in advertising or publicity pertaining to distribution of the 23 | software without specific, written prior permission. 24 | 25 | THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 26 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL 27 | AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY 28 | DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 29 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 30 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 31 | ***************************************/ 32 | 33 | #ifndef GPG_H 34 | #define GPG_H 35 | 36 | #include <netdb.h> 37 | #include <unistd.h> 38 | #include "mail_parser.h" 39 | 40 | /* FP: interface file for RIPE gnuPG */ 41 | 42 | #define INPUT_FD 0 43 | #define OUTPUT_FD 1 44 | #define ERROR_FD 2 45 | 46 | #define LINE_LENGTH 1024 47 | #define STRING_LENGTH 255 48 | #define FILENAME_LENGTH 1024 49 | 50 | #define ERRSTRING strerror (errno) 51 | 52 | #define MAX_LINE_BUF 50000 53 | 54 | /* FP : global objects used as and interface with gnuPG */ 55 | 56 | struct VerifySignObject { 57 | char iDocSigFilename[FILENAME_LENGTH], /* IN */ 58 | iSigFilename[FILENAME_LENGTH], /* IN */ 59 | outputPath[FILENAME_LENGTH], /* IN */ 60 | oStream[FILENAME_LENGTH]; /* OUT */ 61 | 62 | char keyRing[FILENAME_LENGTH]; /* Deprecated */ 63 | int isValid; 64 | u32 keyID; 65 | struct VerifySignObject *next; 66 | struct VerifySignObject *inner; 67 | int nMsg; 68 | int type; 69 | int isMIME; 70 | }; 71 | 72 | struct ReadCryptedObject { 73 | char iFilename[FILENAME_LENGTH], 74 | oStream[FILENAME_LENGTH]; 75 | char keyRing[FILENAME_LENGTH]; 76 | int isValid; 77 | u32 keyID; 78 | }; 79 | 80 | struct ImportKeyObject { 81 | char iFilename[FILENAME_LENGTH]; 82 | char keyRing[FILENAME_LENGTH]; 83 | int rc; 84 | u32 keyID; 85 | char fingerPrint[STRING_LENGTH]; 86 | char keyOwner[STRING_LENGTH]; 87 | }; 88 | 89 | struct RemoveKeyObject { 90 | char iFilename[FILENAME_LENGTH]; 91 | char keyRing[FILENAME_LENGTH]; 92 | int rc; 93 | u32 keyID; 94 | }; 95 | 96 | enum { 97 | iKO_OK = 0, 98 | iKO_UNCHANGED, 99 | iKO_NOUSERID, 100 | iKO_GENERAL, 101 | iKO_NOTVALIDUSERID, 102 | iKO_NOPUBLICKEY, 103 | iKO_NODEFAULTPUBLICKEYRING, 104 | iKO_CRC_ERROR, 105 | iKO_NO_OPENPGP_DATA, 106 | iKO_NO_IN_FILES, 107 | iKO_SECRET_KEY_PRESENT, 108 | iKO_INVALID_ARMOR_HEADER, 109 | iKO_MULTIPLE_KEYS, 110 | iKO_GENERALFAILURE 111 | }; 112 | 113 | enum { 114 | vSO_IS_VALID = 0, 115 | vSO_KO, 116 | vSO_CRC_ERROR, 117 | vSO_NO_PUBLIC_KEY, 118 | vSO_NO_OPENPGP_DATA, 119 | vSO_NO_IN_FILES, 120 | vSO_NO_OUT_FILES 121 | }; 122 | 123 | enum { 124 | vSO_Type_PlainText = 0, 125 | vSO_Type_Unparsed, 126 | vSO_Type_ToBeGPGVerified, 127 | vSO_Type_Signed 128 | }; 129 | 130 | #ifdef __cplusplus 131 | extern "C" { 132 | #endif 133 | 134 | void PA_SetGPGCmd(char* path); 135 | void PA_SetKeyRing(char* path); 136 | void PA_SetOutputPrefix(char* path); 137 | void PA_VerifySignature(struct VerifySignObject *vSO); 138 | void PA_ImportKey(struct ImportKeyObject *iKO); 139 | void PA_RemoveKey_withKeyID(struct ImportKeyObject *iKO); 140 | void PA_RemoveKey(struct ImportKeyObject *iKO); 141 | void PA_Decrypt(struct ReadCryptedObject *rDO); 142 | EPNodePtr PA_ParseMessage(EPNodePtr ptr); 143 | void GetFingerPrint(struct ImportKeyObject *iKO); 144 | void GetKeyOwner(struct ImportKeyObject *iKO); 145 | 146 | #ifdef __cplusplus 147 | } 148 | #endif 149 | 150 | #endif