| 1 |
rabbi |
934 |
/* Mixmaster version 3.0 -- (C) 1999 - 2006 Anonymizer Inc. and others.
|
| 2 |
rabbi |
1 |
|
| 3 |
|
|
Mixmaster may be redistributed and modified under certain conditions.
|
| 4 |
|
|
This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
|
| 5 |
|
|
ANY KIND, either express or implied. See the file COPYRIGHT for
|
| 6 |
|
|
details.
|
| 7 |
|
|
|
| 8 |
|
|
OpenPGP messages
|
| 9 |
weasel |
647 |
$Id$ */
|
| 10 |
rabbi |
1 |
|
| 11 |
|
|
|
| 12 |
|
|
#ifdef USE_PGP
|
| 13 |
|
|
#ifndef _PGP_H
|
| 14 |
|
|
#include "mix3.h"
|
| 15 |
|
|
#ifdef USE_OPENSSL
|
| 16 |
|
|
#include <openssl/opensslv.h>
|
| 17 |
rabbi |
262 |
#endif /* USE_OPENSSL */
|
| 18 |
rabbi |
1 |
|
| 19 |
weaselp |
332 |
/* in the PGP Version header, list the same information as all other
|
| 20 |
rabbi |
139 |
versions of Mixmaster to prevent anonymity set division. */
|
| 21 |
|
|
#define CLOAK
|
| 22 |
|
|
|
| 23 |
rabbi |
1 |
/* try to make the messages look similar to PGP 2.6.3i output
|
| 24 |
|
|
(compression is not always the same though). */
|
| 25 |
|
|
#define MIMIC
|
| 26 |
|
|
|
| 27 |
|
|
/* packet types */
|
| 28 |
|
|
#define PGP_SESKEY 1
|
| 29 |
|
|
#define PGP_SIG 2
|
| 30 |
|
|
#define PGP_SYMSESKEY 3
|
| 31 |
|
|
#define PGP_OSIG 4
|
| 32 |
|
|
#define PGP_SECKEY 5
|
| 33 |
|
|
#define PGP_PUBKEY 6
|
| 34 |
|
|
#define PGP_SECSUBKEY 7
|
| 35 |
|
|
#define PGP_COMPRESSED 8
|
| 36 |
|
|
#define PGP_ENCRYPTED 9
|
| 37 |
|
|
#define PGP_MARKER 10
|
| 38 |
|
|
#define PGP_LITERAL 11
|
| 39 |
|
|
#define PGP_TRUST 12
|
| 40 |
|
|
#define PGP_USERID 13
|
| 41 |
|
|
#define PGP_PUBSUBKEY 14
|
| 42 |
rabbi |
111 |
#define PGP_ENCRYPTEDMDC 18
|
| 43 |
|
|
#define PGP_MDC 19
|
| 44 |
rabbi |
1 |
|
| 45 |
|
|
/* symmetric algorithms */
|
| 46 |
disastry |
254 |
#define PGP_K_ANY 0
|
| 47 |
rabbi |
1 |
#define PGP_K_IDEA 1
|
| 48 |
|
|
#define PGP_K_3DES 2
|
| 49 |
|
|
#define PGP_K_CAST5 3
|
| 50 |
|
|
#define PGP_K_BF 4
|
| 51 |
rabbi |
98 |
#define PGP_K_AES128 7
|
| 52 |
|
|
#define PGP_K_AES192 8
|
| 53 |
|
|
#define PGP_K_AES256 9
|
| 54 |
rabbi |
1 |
|
| 55 |
|
|
/* hash algorithms */
|
| 56 |
|
|
#define PGP_H_MD5 1
|
| 57 |
|
|
#define PGP_H_SHA1 2
|
| 58 |
|
|
#define PGP_H_RIPEMD 3
|
| 59 |
|
|
|
| 60 |
|
|
/* signature types */
|
| 61 |
|
|
#define PGP_SIG_BINARY 0
|
| 62 |
|
|
#define PGP_SIG_CANONIC 1
|
| 63 |
|
|
#define PGP_SIG_CERT 0x10
|
| 64 |
disastry |
254 |
#define PGP_SIG_CERT1 0x11
|
| 65 |
|
|
#define PGP_SIG_CERT2 0x12
|
| 66 |
|
|
#define PGP_SIG_CERT3 0x13
|
| 67 |
|
|
#define isPGP_SIG_CERT(x) (x >= PGP_SIG_CERT && x <= PGP_SIG_CERT3)
|
| 68 |
rabbi |
1 |
#define PGP_SIG_BINDSUBKEY 0x18
|
| 69 |
disastry |
254 |
#define PGP_SIG_KEYREVOKE 0x20
|
| 70 |
|
|
#define PGP_SIG_SUBKEYREVOKE 0x28
|
| 71 |
|
|
#define PGP_SIG_CERTREVOKE 0x30
|
| 72 |
rabbi |
1 |
|
| 73 |
|
|
/* signature subpacket types */
|
| 74 |
|
|
#define PGP_SUB_CREATIME 2
|
| 75 |
disastry |
254 |
#define PGP_SUB_CERTEXPIRETIME 3
|
| 76 |
weaselp |
205 |
#define PGP_SUB_KEYEXPIRETIME 9
|
| 77 |
rabbi |
1 |
#define PGP_SUB_PSYMMETRIC 11
|
| 78 |
|
|
#define PGP_SUB_ISSUER 16
|
| 79 |
disastry |
254 |
#define PGP_SUB_PRIMARY 25
|
| 80 |
rabbi |
135 |
#define PGP_SUB_FEATURES 30
|
| 81 |
rabbi |
1 |
|
| 82 |
|
|
#define ARMORED 1
|
| 83 |
|
|
|
| 84 |
|
|
/* publick key algorithm operation modes */
|
| 85 |
|
|
|
| 86 |
|
|
#define PK_ENCRYPT 1
|
| 87 |
|
|
#define PK_DECRYPT 2
|
| 88 |
|
|
#define PK_SIGN 3
|
| 89 |
|
|
#define PK_VERIFY 4
|
| 90 |
|
|
|
| 91 |
|
|
#define MD5PREFIX "\x30\x20\x30\x0C\x06\x08\x2A\x86\x48\x86\xF7\x0D\x02\x05\x05\x00\x04\x10"
|
| 92 |
|
|
#define SHA1PREFIX "\x30\x21\x30\x09\x06\x05\x2b\x0E\x03\x02\x1A\x05\x00\x04\x14"
|
| 93 |
|
|
|
| 94 |
|
|
typedef struct {
|
| 95 |
|
|
int ok;
|
| 96 |
|
|
BUFFER *userid;
|
| 97 |
|
|
byte sigtype;
|
| 98 |
|
|
long sigtime;
|
| 99 |
|
|
byte hash[16];
|
| 100 |
|
|
} pgpsig;
|
| 101 |
|
|
|
| 102 |
|
|
/* internal error codes */
|
| 103 |
|
|
#define PGP_SIGVRFY 99 /* valid signature packet to be verified */
|
| 104 |
|
|
|
| 105 |
|
|
/* pgpdata.c */
|
| 106 |
|
|
int pgp_getsk(BUFFER *p, BUFFER *pass, BUFFER *key);
|
| 107 |
|
|
int pgp_makesk(BUFFER *out, BUFFER *key, int sym, int type, int hash,
|
| 108 |
|
|
BUFFER *pass);
|
| 109 |
|
|
void pgp_iteratedsk(BUFFER *salted, BUFFER *salt, BUFFER *pass, byte c);
|
| 110 |
|
|
int pgp_expandsk(BUFFER *key, int skalgo, int hashalgo, BUFFER *data);
|
| 111 |
|
|
int skcrypt(BUFFER *data, int skalgo, BUFFER *key, BUFFER *iv, int enc);
|
| 112 |
|
|
int mpi_get(BUFFER *buf, BUFFER *mpi);
|
| 113 |
|
|
int mpi_put(BUFFER *buf, BUFFER *mpi);
|
| 114 |
|
|
int pgp_rsa(BUFFER *buf, BUFFER *key, int mode);
|
| 115 |
|
|
void pgp_sigcanonic(BUFFER *msg);
|
| 116 |
|
|
int pgp_makepubkey(BUFFER *seckey, BUFFER *outtxt, BUFFER *pubkey,
|
| 117 |
|
|
BUFFER *pass, int keyalgo);
|
| 118 |
weaselp |
295 |
int pgp_makekeyheader(int type, BUFFER *keypacket, BUFFER *outtxt,
|
| 119 |
weaselp |
185 |
BUFFER *pass, int keyalgo);
|
| 120 |
disastry |
254 |
int pgp_getkey(int mode, int algo, int *sym, int *mdc, long *expires, BUFFER *keypacket, BUFFER *key,
|
| 121 |
rabbi |
1 |
BUFFER *keyid, BUFFER *userid, BUFFER *pass);
|
| 122 |
|
|
int pgp_rsakeygen(int bits, BUFFER *userid, BUFFER *pass, char *pubring,
|
| 123 |
|
|
char *secring, int remail);
|
| 124 |
|
|
int pgp_dhkeygen(int bits, BUFFER *userid, BUFFER *pass, char *pubring,
|
| 125 |
|
|
char *secring, int remail);
|
| 126 |
|
|
int pgp_dosign(int algo, BUFFER *data, BUFFER *key);
|
| 127 |
|
|
int pgp_elgencrypt(BUFFER *b, BUFFER *key);
|
| 128 |
|
|
int pgp_elgdecrypt(BUFFER *b, BUFFER *key);
|
| 129 |
|
|
int pgp_keyid(BUFFER *key, BUFFER *id);
|
| 130 |
|
|
int pgp_keylen(int symalgo);
|
| 131 |
rabbi |
98 |
int pgp_blocklen(int symalgo);
|
| 132 |
rabbi |
1 |
|
| 133 |
|
|
/* pgpget.c */
|
| 134 |
|
|
int pgp_getmsg(BUFFER *in, BUFFER *key, BUFFER *sig, char *pubring,
|
| 135 |
|
|
char *secring);
|
| 136 |
|
|
int pgp_ispacket(BUFFER *buf);
|
| 137 |
|
|
int pgp_isconventional(BUFFER *buf);
|
| 138 |
|
|
int pgp_packettype(BUFFER *buf, long *len, int *partial);
|
| 139 |
|
|
int pgp_packetpartial(BUFFER *buf, long *len, int *partial);
|
| 140 |
|
|
int pgp_getpacket(BUFFER *buf, BUFFER *p);
|
| 141 |
|
|
int pgp_getsig(BUFFER *p, pgpsig *sig, char *pubring);
|
| 142 |
|
|
void pgp_verify(BUFFER *msg, BUFFER *detached, pgpsig *sig);
|
| 143 |
rabbi |
111 |
int pgp_getsymmetric(BUFFER *buf, BUFFER *key, int algo, int type);
|
| 144 |
rabbi |
1 |
int pgp_getliteral(BUFFER *buf);
|
| 145 |
|
|
int pgp_uncompress(BUFFER *buf);
|
| 146 |
|
|
int pgp_getsessionkey(BUFFER *buf, BUFFER *pass, char *secring);
|
| 147 |
|
|
int pgp_getsymsessionkey(BUFFER *buf, BUFFER *pass);
|
| 148 |
|
|
|
| 149 |
|
|
/* pgpcreat.c */
|
| 150 |
|
|
int pgp_packet(BUFFER *buf, int type);
|
| 151 |
|
|
int pgp_packet3(BUFFER *buf, int type);
|
| 152 |
rabbi |
135 |
int pgp_symmetric(BUFFER *buf, BUFFER *key, int mdc);
|
| 153 |
rabbi |
1 |
int pgp_literal(BUFFER *buf, char *filename, int text);
|
| 154 |
|
|
int pgp_compress(BUFFER *buf);
|
| 155 |
|
|
int pgp_sessionkey(BUFFER *buf, BUFFER *user, BUFFER *keyid, BUFFER *seskey,
|
| 156 |
|
|
char *pubring);
|
| 157 |
|
|
void pgp_marker(BUFFER *buf);
|
| 158 |
|
|
int pgp_symsessionkey(BUFFER *buf, BUFFER *seskey, BUFFER *pass);
|
| 159 |
|
|
int pgp_sign(BUFFER *msg, BUFFER *msg2, BUFFER *sig, BUFFER *userid,
|
| 160 |
|
|
BUFFER *pass, int type, int self, long now, int remail,
|
| 161 |
|
|
BUFFER *seckey, char *secring);
|
| 162 |
|
|
int pgp_digest(int hashalgo, BUFFER *in, BUFFER *d);
|
| 163 |
|
|
|
| 164 |
|
|
/* pgpdb.c */
|
| 165 |
|
|
|
| 166 |
disastry |
254 |
int pgpdb_getkey(int mode, int algo, int *sym, int *mdc, long *expires, BUFFER *key, BUFFER *user,
|
| 167 |
rabbi |
1 |
BUFFER *founduid, BUFFER *keyid, char *keyring, BUFFER *pass);
|
| 168 |
|
|
|
| 169 |
|
|
typedef struct {
|
| 170 |
|
|
int filetype;
|
| 171 |
|
|
BUFFER *db;
|
| 172 |
|
|
LOCK *lock;
|
| 173 |
|
|
int modified;
|
| 174 |
weaselp |
285 |
int type; /* undefined, public, private */
|
| 175 |
rabbi |
1 |
char filename[LINELEN];
|
| 176 |
|
|
BUFFER *encryptkey;
|
| 177 |
colin |
987 |
#ifdef DEBUG
|
| 178 |
weaselp |
285 |
int writer;
|
| 179 |
|
|
#endif
|
| 180 |
rabbi |
1 |
} KEYRING;
|
| 181 |
|
|
|
| 182 |
weaselp |
285 |
KEYRING *pgpdb_new(char *keyring, int filetype, BUFFER *encryptkey, int type);
|
| 183 |
|
|
KEYRING *pgpdb_open(char *keyring, BUFFER *encryptkey, int writer, int type);
|
| 184 |
rabbi |
1 |
int pgpdb_append(KEYRING *keydb, BUFFER *p);
|
| 185 |
|
|
int pgpdb_getnext(KEYRING *keydb, BUFFER *p, BUFFER *keyid, BUFFER *userid);
|
| 186 |
weaselp |
284 |
int pgpdb_close(KEYRING *keydb);
|
| 187 |
rabbi |
1 |
|
| 188 |
rabbi |
262 |
#endif /* not _PGP_H */
|
| 189 |
weaselp |
109 |
#endif /* USE_PGP */
|