| 1 |
/* Mixmaster version 3 -- (C) 1999 Anonymizer Inc. |
/* Mixmaster version 3.0 -- (C) 1999 - 2004 Anonymizer Inc. and others. |
| 2 |
|
|
| 3 |
Mixmaster may be redistributed and modified under certain conditions. |
Mixmaster may be redistributed and modified under certain conditions. |
| 4 |
This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF |
This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF |
| 6 |
details. |
details. |
| 7 |
|
|
| 8 |
Function prototypes |
Function prototypes |
| 9 |
$Id: mix3.h,v 1.13 2002/08/26 19:38:51 weaselp Exp $ */ |
$Id$ */ |
| 10 |
|
|
| 11 |
|
|
| 12 |
#ifndef _MIX3_H |
#ifndef _MIX3_H |
| 13 |
#define _MIX3_H |
#define _MIX3_H |
| 14 |
#define COPYRIGHT "Copyright Anonymizer Inc." |
#define COPYRIGHT "Copyright Anonymizer Inc. et al." |
| 15 |
|
|
| 16 |
#include "config.h" |
#include "config.h" |
| 17 |
#include "mix.h" |
#include "mix.h" |
| 19 |
#ifdef WIN32 |
#ifdef WIN32 |
| 20 |
#ifndef USE_SOCK |
#ifndef USE_SOCK |
| 21 |
#define _WINSOCKAPI_ /* don't include winsock */ |
#define _WINSOCKAPI_ /* don't include winsock */ |
| 22 |
#endif |
#endif /* not USE_SOCK */ |
| 23 |
#include <windows.h> |
#include <windows.h> |
| 24 |
#ifdef _MSC |
#ifdef _MSC |
| 25 |
#define snprintf _snprintf |
#define snprintf _snprintf |
| 26 |
#endif |
#endif /* _MSC */ |
| 27 |
#define DIRSEP '\\' |
#define DIRSEP '\\' |
| 28 |
#define DIRSEPSTR "\\" |
#define DIRSEPSTR "\\" |
| 29 |
#else |
#else /* end of WIN32 */ |
| 30 |
#define DIRSEP '/' |
#define DIRSEP '/' |
| 31 |
#define DIRSEPSTR "/" |
#define DIRSEPSTR "/" |
| 32 |
#endif |
#endif /* else if not WIN32 */ |
| 33 |
|
|
| 34 |
#define NOT_IMPLEMENTED {printf("Function not implemented.\n");return -1;} |
#define NOT_IMPLEMENTED {printf("Function not implemented.\n");return -1;} |
| 35 |
#define SECONDSPERDAY 86400 |
#define SECONDSPERDAY 86400 |
| 36 |
|
|
| 37 |
|
#include <time.h> |
| 38 |
|
|
| 39 |
/* Dynamically allocated buffers */ |
/* Dynamically allocated buffers */ |
| 40 |
|
|
| 41 |
int buf_reset(BUFFER *buffer); |
int buf_reset(BUFFER *buffer); |
| 122 |
FILE *openpipe(const char *prog); |
FILE *openpipe(const char *prog); |
| 123 |
int closepipe(FILE *fp); |
int closepipe(FILE *fp); |
| 124 |
int maildirWrite(char *maildir, BUFFER *message, int create); |
int maildirWrite(char *maildir, BUFFER *message, int create); |
| 125 |
|
int write_pidfile(char *pidfile); |
| 126 |
|
int clear_pidfile(char *pidfile); |
| 127 |
|
time_t parse_yearmonthday(char* str); |
| 128 |
|
|
| 129 |
|
|
| 130 |
typedef struct { |
typedef struct { |
| 131 |
char *name; |
char *name; |
| 217 |
|
|
| 218 |
#ifdef USE_IDEA |
#ifdef USE_IDEA |
| 219 |
int buf_ideacrypt(BUFFER *b, BUFFER *key, BUFFER *iv, int enc); |
int buf_ideacrypt(BUFFER *b, BUFFER *key, BUFFER *iv, int enc); |
| 220 |
#endif |
#endif /* USE_IDEA */ |
| 221 |
int buf_bfcrypt(BUFFER *b, BUFFER *key, BUFFER *iv, int enc); |
int buf_bfcrypt(BUFFER *b, BUFFER *key, BUFFER *iv, int enc); |
| 222 |
int buf_3descrypt(BUFFER *b, BUFFER *key, BUFFER *iv, int enc); |
int buf_3descrypt(BUFFER *b, BUFFER *key, BUFFER *iv, int enc); |
| 223 |
int buf_castcrypt(BUFFER *b, BUFFER *key, BUFFER *iv, int enc); |
int buf_castcrypt(BUFFER *b, BUFFER *key, BUFFER *iv, int enc); |
| 224 |
#ifdef USE_AES |
#ifdef USE_AES |
| 225 |
int buf_aescrypt(BUFFER *b, BUFFER *key, BUFFER *iv, int enc); |
int buf_aescrypt(BUFFER *b, BUFFER *key, BUFFER *iv, int enc); |
| 226 |
#endif |
#endif /* USE_AES */ |
| 227 |
|
|
| 228 |
int db_getseckey(byte keyid[], BUFFER *key); |
int db_getseckey(byte keyid[], BUFFER *key); |
| 229 |
int db_getpubkey(byte keyid[], BUFFER *key); |
int db_getpubkey(byte keyid[], BUFFER *key); |
| 237 |
|
|
| 238 |
/* configuration, general remailer functions */ |
/* configuration, general remailer functions */ |
| 239 |
int mix_configline(char *line); |
int mix_configline(char *line); |
| 240 |
|
int mix_config(void); |
| 241 |
int mix_initialized(void); |
int mix_initialized(void); |
| 242 |
int mix_daily(void); |
int mix_daily(void); |
| 243 |
|
|
| 251 |
int pool_packetfile(char *fname, BUFFER *mid, int packetnum); |
int pool_packetfile(char *fname, BUFFER *mid, int packetnum); |
| 252 |
void pool_packetexp(void); |
void pool_packetexp(void); |
| 253 |
int idexp(void); |
int idexp(void); |
| 254 |
|
int pgpmaxexp(void); |
| 255 |
void pop3get(void); |
void pop3get(void); |
| 256 |
|
|
| 257 |
typedef struct { /* added for binary id.log change */ |
typedef struct { /* added for binary id.log change */ |
| 271 |
#define PGP_ARMOR_NYMSIG 4 |
#define PGP_ARMOR_NYMSIG 4 |
| 272 |
#define PGP_ARMOR_SECKEY 5 |
#define PGP_ARMOR_SECKEY 5 |
| 273 |
|
|
| 274 |
|
#define PGP_TYPE_UNDEFINED 0 |
| 275 |
|
#define PGP_TYPE_PRIVATE 1 |
| 276 |
|
#define PGP_TYPE_PUBLIC 2 |
| 277 |
|
|
| 278 |
int pgp_keymgt(int force); |
int pgp_keymgt(int force); |
| 279 |
|
int pgp_latestkeys(BUFFER* outtxt, int algo); |
| 280 |
int pgp_armor(BUFFER *buf, int mode); |
int pgp_armor(BUFFER *buf, int mode); |
| 281 |
int pgp_dearmor(BUFFER *buf, BUFFER *out); |
int pgp_dearmor(BUFFER *buf, BUFFER *out); |
| 282 |
int pgp_pubkeycert(BUFFER *userid, char *keyring, BUFFER *pass, |
int pgp_pubkeycert(BUFFER *userid, char *keyring, BUFFER *pass, |
| 322 |
|
|
| 323 |
unsigned int post:1; |
unsigned int post:1; |
| 324 |
unsigned int middle:1; |
unsigned int middle:1; |
| 325 |
|
|
| 326 |
|
unsigned int star_ex:1; |
| 327 |
} flags; |
} flags; |
| 328 |
struct rinfo { |
struct rinfo { |
| 329 |
int reliability; |
int reliability; |
| 335 |
#define CHAINMAX 421 |
#define CHAINMAX 421 |
| 336 |
#define MAXREM 100 |
#define MAXREM 100 |
| 337 |
int prepare_type2list(BUFFER *out); |
int prepare_type2list(BUFFER *out); |
| 338 |
int mix2_rlist(REMAILER remailer[]); |
int mix2_rlist(REMAILER remailer[], int badchains[MAXREM][MAXREM]); |
| 339 |
int t1_rlist(REMAILER remailer[]); |
int t1_rlist(REMAILER remailer[], int badchains[MAXREM][MAXREM]); |
| 340 |
int pgp_rlist(REMAILER remailer[], int n); |
int pgp_rlist(REMAILER remailer[], int n); |
| 341 |
int pgp_rkeylist(REMAILER remailer[], int keyid[], int n); |
int pgp_rkeylist(REMAILER remailer[], int keyid[], int n); |
| 342 |
|
void parse_badchains(int badchains[MAXREM][MAXREM], char *file, char *startindicator, REMAILER *remailer, int maxrem); |
| 343 |
int chain_select(int hop[], char *chainstr, int maxrem, REMAILER *remailer, |
int chain_select(int hop[], char *chainstr, int maxrem, REMAILER *remailer, |
| 344 |
int type, BUFFER *feedback); |
int type, BUFFER *feedback); |
| 345 |
int chain_rand(REMAILER *remailer, int maxrem, |
int chain_rand(REMAILER *remailer, int badchains[MAXREM][MAXREM], int maxrem, |
| 346 |
int thischain[], int chainlen, int t); |
int thischain[], int chainlen, int t, int ignore_constraints_if_necessary); |
| 347 |
int chain_randfinal(int type, REMAILER *remailer, int maxrem, int t); |
int chain_randfinal(int type, REMAILER *remailer, int badchains[MAXREM][MAXREM], |
| 348 |
|
int maxrem, int rtype, int chain[], int chainlen, int ignore_constraints_if_necessary); |
| 349 |
|
|
| 350 |
float chain_reliability(char *chain, int chaintype, |
float chain_reliability(char *chain, int chaintype, |
| 351 |
char *reliability_string); |
char *reliability_string); |
| 352 |
|
int redirect_message(BUFFER *sendmsg, char *chain, int numcopies, BUFFER *chainlist); |
| 353 |
int mix2_encrypt(int type, BUFFER *message, char *chainstr, int numcopies, |
int mix2_encrypt(int type, BUFFER *message, char *chainstr, int numcopies, |
| 354 |
BUFFER *feedback); |
int ignore_constraints_if_necessary, BUFFER *feedback); |
| 355 |
int t1_encrypt(int type, BUFFER *message, char *chainstr, int latency, |
int t1_encrypt(int type, BUFFER *message, char *chainstr, int latency, |
| 356 |
BUFFER *ek, BUFFER *feedback); |
BUFFER *ek, BUFFER *feedback); |
| 357 |
|
|
| 361 |
int t2_decrypt(BUFFER *in); |
int t2_decrypt(BUFFER *in); |
| 362 |
|
|
| 363 |
int mix2_decrypt(BUFFER *m); |
int mix2_decrypt(BUFFER *m); |
|
int mix3_decrypt(BUFFER *m); |
|
|
|
|
|
/* type 2 */ |
|
|
#define MAGIC0 0 |
|
|
#define MAGIC1 3 |
|
|
|
|
|
int v3_magic(byte *b); |
|
| 364 |
int v2body(BUFFER *body); |
int v2body(BUFFER *body); |
| 365 |
int v2body_setlen(BUFFER *body); |
int v2body_setlen(BUFFER *body); |
| 366 |
int v2partial(BUFFER *body, BUFFER *mid, int packet, int numpackets); |
int v2partial(BUFFER *body, BUFFER *mid, int packet, int numpackets); |
| 403 |
DIR *opendir(const char *name); |
DIR *opendir(const char *name); |
| 404 |
struct dirent *readdir(DIR *dir); |
struct dirent *readdir(DIR *dir); |
| 405 |
int closedir(DIR *dir); |
int closedir(DIR *dir); |
| 406 |
#endif |
#endif /* _MSC */ |
| 407 |
|
|
| 408 |
/* sockets */ |
/* sockets */ |
| 409 |
#if defined(WIN32) && defined(USE_SOCK) |
#if defined(WIN32) && defined(USE_SOCK) |
| 411 |
int sock_init(void); |
int sock_init(void); |
| 412 |
void sock_exit(void); |
void sock_exit(void); |
| 413 |
|
|
| 414 |
#else |
#else /* end of defined(WIN32) && defined(USE_SOCK) */ |
| 415 |
typedef int SOCKET; |
typedef int SOCKET; |
| 416 |
|
|
| 417 |
#define INVALID_SOCKET -1 |
#define INVALID_SOCKET -1 |
| 418 |
SOCKET opensocket(char *hostname, int port); |
SOCKET opensocket(char *hostname, int port); |
| 419 |
int closesocket(SOCKET s); |
int closesocket(SOCKET s); |
| 420 |
|
|
| 421 |
#endif |
#endif /* else if not defined(WIN32) && defined(USE_SOCK) */ |
| 422 |
|
|
| 423 |
#ifdef WIN32 |
#ifdef WIN32 |
| 424 |
int is_nt_service(void); |
int is_nt_service(void); |
| 425 |
void set_nt_exit_event(); |
void set_nt_exit_event(); |
| 426 |
#endif |
#endif /* WIN32 */ |
| 427 |
|
|
| 428 |
/* check for memory leaks */ |
/* check for memory leaks */ |
| 429 |
#ifdef DEBUG |
#ifdef DEBUG |
| 432 |
BUFFER *mix3_bufnew(char *, int, char*); |
BUFFER *mix3_bufnew(char *, int, char*); |
| 433 |
#if __GNUC__ >= 2 |
#if __GNUC__ >= 2 |
| 434 |
# define buf_new() mix3_bufnew(__FILE__, __LINE__, __PRETTY_FUNCTION__) |
# define buf_new() mix3_bufnew(__FILE__, __LINE__, __PRETTY_FUNCTION__) |
| 435 |
#else |
#else /* end of __GNUC__ >= 2 */ |
| 436 |
# define buf_new() mix3_bufnew(__FILE__, __LINE__, "file") |
# define buf_new() mix3_bufnew(__FILE__, __LINE__, "file") |
| 437 |
#endif |
#endif /* else if not __GNUC__ >= 2 */ |
| 438 |
#endif /* DEBUG */ |
#endif /* DEBUG */ |
| 439 |
|
|
| 440 |
#endif |
#endif /* not _MIX3_H */ |