--- pgp/src/pgp.h 2018/04/24 16:37:52 1.1.1.1 +++ pgp/src/pgp.h 2018/04/24 16:40:42 1.1.1.5 @@ -9,7 +9,13 @@ */ +#ifndef PGP_H +#define PGP_H + #include "usuals.h" +#include "more.h" +#include "armor.h" + #define KEYFRAGSIZE 8 /* # of bytes in key ID modulus fragment */ #define SIZEOF_TIMESTAMP 4 /* 32-bit timestamp */ @@ -53,6 +59,7 @@ #define CTB_COMPRESSED_TYPE 8 /* compressed data packet */ #define CTB_CKE_TYPE 9 /* conventional-key-encrypted data */ #define CTB_LITERAL_TYPE 10 /* raw data with filename and mode */ +#define CTB_LITERAL2_TYPE 11 /* Fixed literal packet */ #define CTB_KEYCTRL_TYPE 12 /* key control packet */ #define CTB_USERID_TYPE 13 /* user id packet */ #define CTB_COMMENT_TYPE 14 /* comment packet */ @@ -80,6 +87,7 @@ /* CTB_CKE ciphertext */ #define CTB_LITERAL CTB_BYTE(CTB_LITERAL_TYPE,3) +#define CTB_LITERAL2 CTB_BYTE(CTB_LITERAL_TYPE,3) /* CTB_LITERAL data */ #define CTB_COMPRESSED CTB_BYTE(CTB_COMPRESSED_TYPE,3) @@ -116,49 +124,47 @@ #define VERSION_BYTE 2 /* PGP2 */ /* Values for trust bits in keycntrl packet after key packet */ -#define KC_OWNERTRUST_MASK 0x07 /* Trust bits for key owner */ +#define KC_OWNERTRUST_MASK 0x07 /* Trust bits for key owner */ #define KC_OWNERTRUST_UNDEFINED 0x00 #define KC_OWNERTRUST_UNKNOWN 0x01 -#define KC_OWNERTRUST_NEVER 0x02 +#define KC_OWNERTRUST_NEVER 0x02 /* 2 levels reserved */ #define KC_OWNERTRUST_USUALLY 0x05 #define KC_OWNERTRUST_ALWAYS 0x06 #define KC_OWNERTRUST_ULTIMATE 0x07 /* Only for keys in secret ring */ -#define KC_BUCKSTOP 0x80 /* This key is in secret ring */ -#define KC_VISITED 0x40 +#define KC_BUCKSTOP 0x80 /* This key is in secret ring */ +#define KC_DISABLED 0x20 /* key is disabled */ /* Values for trust bits in keycntrl packet after userid packet */ -#define KC_LEGIT_MASK 0x03 /* Key legit bits for key */ -#define KC_LEGIT_UNKNOWN 0x00 -#define KC_LEGIT_UNTRUSTED 0x01 -#define KC_LEGIT_MARGINAL 0x02 -#define KC_LEGIT_COMPLETE 0x03 -#define KC_WARNONLY 0x80 +#define KC_LEGIT_MASK 0x03 /* Key legit bits for key */ +#define KC_LEGIT_UNKNOWN 0x00 +#define KC_LEGIT_UNTRUSTED 0x01 +#define KC_LEGIT_MARGINAL 0x02 +#define KC_LEGIT_COMPLETE 0x03 +#define KC_WARNONLY 0x80 /* Values for trust bits in keycntrl packet after signature packet */ -#define KC_SIGTRUST_MASK 0x07 /* Trust bits for key owner */ +#define KC_SIGTRUST_MASK 0x07 /* Trust bits for key owner */ #define KC_SIGTRUST_UNDEFINED 0x00 -#define KC_SIGTRUST_UNKNOWN 0x01 +#define KC_SIGTRUST_UNKNOWN 0x01 #define KC_SIGTRUST_UNTRUSTED 0x02 /* 2 levels reserved */ #define KC_SIGTRUST_MARGINAL 0x05 #define KC_SIGTRUST_COMPLETE 0x06 #define KC_SIGTRUST_ULTIMATE 0x07 -#define KC_CONTIG 0x80 /* This sig is on a cert. path */ - -#define MAINT_CHECK 0x01 -#define MAINT_VERBOSE 0x02 -#define MAINT_SILENT 0x04 +#define KC_SIG_CHECKED 0x40 /* This sig has been checked */ +#define KC_CONTIG 0x80 /* This sig is on a cert. path */ #define is_secret_key(ctb) is_ctb_type(ctb,CTB_CERT_SECKEY_TYPE) -#define MAX_SIGCERT_LENGTH (1+2 + KEYFRAGSIZE + 2+MAX_BYTE_PRECISION) - -#define MAX_KEYCERT_LENGTH (1+2+4+256 + 5*(2+MAX_BYTE_PRECISION)) +#define MPILEN (2+MAX_BYTE_PRECISION) +#define MAX_SIGCERT_LENGTH (1+2+1 +1+7 +KEYFRAGSIZE+2+2+MPILEN) +#define MAX_KEYCERT_LENGTH (1+2+1+4+2+1 +(2*MPILEN) +1+8 +(4*MPILEN) +2) /* Modes for CTB_LITERAL2 packet */ #define MODE_BINARY 'b' #define MODE_TEXT 't' +#define MODE_LOCAL 'l' /* Define CANONICAL_TEXT for any system which normally uses CRLF's for text separators */ @@ -174,32 +180,29 @@ int more_file(char *fileName); /* Prototypes for the transport armor routines */ -boolean is_armor_file(char *infile); -int armor_file(char *infile, char *outfile, char *filename); -int de_armor_file(char *infile, char *outfile, boolean *newname); +boolean is_armor_file(char *infile, long startline); +int armor_file(char *infile, char *outfile, char *filename, char *clearname); +int de_armor_file(char *infile, char *outfile, long *curline); -void exitPGP(int); -void user_error(); +void user_error(void); /* Global filenames and system-wide file extensions... */ -extern char CTX_EXTENSION[]; extern char PGP_EXTENSION[]; extern char ASC_EXTENSION[]; extern char SIG_EXTENSION[]; extern char BAK_EXTENSION[]; -extern char SCRATCH_KEYRING_FILENAME[]; /* gets modified */ extern char CONSOLE_FILENAME[]; -extern char SCRATCH_KEYRING_PATH[MAX_PATH]; extern char rel_version[]; -extern char rel_date[]; /* These files use the environmental variable PGPPATH as a default path: */ -extern char PUBLIC_KEYRING_FILENAME[32]; -extern char SECRET_KEYRING_FILENAME[32]; -extern char RANDSEED_FILENAME[32]; +extern char globalPubringName[MAX_PATH]; +extern char globalSecringName[MAX_PATH]; +extern char globalRandseedName[MAX_PATH]; +extern char globalCommentString[128]; /* Variables which are global across the driver code */ extern boolean filter_mode; +extern boolean moreflag; extern FILE *pgpout; /* FILE structure for routine output */ /* Variables settable by config.pgp and referenced in config.c ... */ @@ -207,15 +210,23 @@ extern char language[]; /* foreign langu extern char charset[]; /* my_name is substring of default userid for secret key to make signatures */ extern char my_name[]; -extern char tmpdir[]; /* directory for temp files, usually RAMdisk */ extern char floppyring[]; /* for comparing secret keys with backup on floppy */ -extern char lit_mode; /* text or binary mode for literal packet */ +extern char literal_mode; /* text or binary mode for literal packet */ extern boolean emit_radix_64; extern boolean showpass; extern boolean keepctx; extern boolean verbose; /* display maximum information */ extern boolean compress_enabled; /* attempt compression before encryption */ +extern boolean clear_signatures; +extern boolean encrypt_to_self; /* Should I encrypt to myself? */ +extern boolean batchmode; /* for batch processing */ +extern boolean quietmode; /* less verbose */ +extern boolean force_flag; /* overwrite existing file without asking */ +extern boolean pkcs_compat; /* Use PKCS format messages */ +/* Ask for each key separately if it should be added to the keyring */ +extern boolean interactive_add; extern long timeshift; /* seconds from GMT timezone */ +extern boolean signature_checked; extern int pem_lines; extern int marg_min; /* number of marginally trusted signatures needed to make a key fully-legit */ @@ -223,5 +234,28 @@ extern int compl_min; /* number of fully extern int max_cert_depth; extern char pager[]; /* file lister command */ -extern char trust_lst[8][16]; +/* These lists store hashed passwords for future use. */ +/* passwds are passwords of as-yet-unknown purpose; keypasswds + are passwords used to decrypt keys. */ +struct hashedpw { + struct hashedpw *next; + byte hash[16]; +}; +extern struct hashedpw *keypasswds, *passwds; + +extern boolean strip_spaces; + +#ifdef VMS +/* + * FDL Support Prototypes, Currently Used Only In SYSTEM.C and CRYPTO.C + */ + +int fdl_generate(char *in_file, char **fdl, short *len); +VOID *fdl_create( char *fdl, short len, char *outfile, char *preserved_name); +int fdl_copyfile2bin(FILE *f, VOID *rab, word32 longcount); +void fdl_close( VOID *rab); +#endif /* VMS */ + +extern int compressSignature(byte *header); +#endif /* PGP_H */