/[pkg-mixmaster]/trunk/Mix/Src/pgp.h
ViewVC logotype

Contents of /trunk/Mix/Src/pgp.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations) (download)
Wed Oct 31 08:19:51 2001 UTC (11 years, 6 months ago) by rabbi
File MIME type: text/plain
File size: 5019 byte(s)
Initial revision
1 /* Mixmaster version 3 -- (C) 1999 Anonymizer Inc.
2
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 $Id: pgp.h,v 1.1 2001/10/31 08:19:53 rabbi Exp $ */
10
11
12 #ifdef USE_PGP
13 #ifndef _PGP_H
14 #include "mix3.h"
15 #ifdef USE_OPENSSL
16 #include <openssl/opensslv.h>
17 #endif
18
19 /* try to make the messages look similar to PGP 2.6.3i output
20 (compression is not always the same though). */
21 #define MIMIC
22
23 /* packet types */
24 #define PGP_SESKEY 1
25 #define PGP_SIG 2
26 #define PGP_SYMSESKEY 3
27 #define PGP_OSIG 4
28 #define PGP_SECKEY 5
29 #define PGP_PUBKEY 6
30 #define PGP_SECSUBKEY 7
31 #define PGP_COMPRESSED 8
32 #define PGP_ENCRYPTED 9
33 #define PGP_MARKER 10
34 #define PGP_LITERAL 11
35 #define PGP_TRUST 12
36 #define PGP_USERID 13
37 #define PGP_PUBSUBKEY 14
38
39 /* symmetric algorithms */
40 #define PGP_K_IDEA 1
41 #define PGP_K_3DES 2
42 #define PGP_K_CAST5 3
43 #define PGP_K_BF 4
44
45 /* hash algorithms */
46 #define PGP_H_MD5 1
47 #define PGP_H_SHA1 2
48 #define PGP_H_RIPEMD 3
49
50 /* signature types */
51 #define PGP_SIG_BINARY 0
52 #define PGP_SIG_CANONIC 1
53 #define PGP_SIG_CERT 0x10
54 #define PGP_SIG_BINDSUBKEY 0x18
55
56 /* signature subpacket types */
57 #define PGP_SUB_CREATIME 2
58 #define PGP_SUB_PSYMMETRIC 11
59 #define PGP_SUB_ISSUER 16
60
61 #define ARMORED 1
62
63 /* publick key algorithm operation modes */
64
65 #define PK_ENCRYPT 1
66 #define PK_DECRYPT 2
67 #define PK_SIGN 3
68 #define PK_VERIFY 4
69
70 #define MD5PREFIX "\x30\x20\x30\x0C\x06\x08\x2A\x86\x48\x86\xF7\x0D\x02\x05\x05\x00\x04\x10"
71 #define SHA1PREFIX "\x30\x21\x30\x09\x06\x05\x2b\x0E\x03\x02\x1A\x05\x00\x04\x14"
72
73 typedef struct {
74 int ok;
75 BUFFER *userid;
76 byte sigtype;
77 long sigtime;
78 byte hash[16];
79 } pgpsig;
80
81 /* internal error codes */
82 #define PGP_SIGVRFY 99 /* valid signature packet to be verified */
83
84 /* pgpdata.c */
85 int pgp_getsk(BUFFER *p, BUFFER *pass, BUFFER *key);
86 int pgp_makesk(BUFFER *out, BUFFER *key, int sym, int type, int hash,
87 BUFFER *pass);
88 void pgp_iteratedsk(BUFFER *salted, BUFFER *salt, BUFFER *pass, byte c);
89 int pgp_expandsk(BUFFER *key, int skalgo, int hashalgo, BUFFER *data);
90 int skcrypt(BUFFER *data, int skalgo, BUFFER *key, BUFFER *iv, int enc);
91 int mpi_get(BUFFER *buf, BUFFER *mpi);
92 int mpi_put(BUFFER *buf, BUFFER *mpi);
93 int pgp_rsa(BUFFER *buf, BUFFER *key, int mode);
94 void pgp_sigcanonic(BUFFER *msg);
95 int pgp_makepubkey(BUFFER *seckey, BUFFER *outtxt, BUFFER *pubkey,
96 BUFFER *pass, int keyalgo);
97 int pgp_getkey(int mode, int algo, int *sym, BUFFER *keypacket, BUFFER *key,
98 BUFFER *keyid, BUFFER *userid, BUFFER *pass);
99 int pgp_rsakeygen(int bits, BUFFER *userid, BUFFER *pass, char *pubring,
100 char *secring, int remail);
101 int pgp_dhkeygen(int bits, BUFFER *userid, BUFFER *pass, char *pubring,
102 char *secring, int remail);
103 int pgp_dosign(int algo, BUFFER *data, BUFFER *key);
104 int pgp_elgencrypt(BUFFER *b, BUFFER *key);
105 int pgp_elgdecrypt(BUFFER *b, BUFFER *key);
106 int pgp_keyid(BUFFER *key, BUFFER *id);
107 int pgp_keylen(int symalgo);
108
109 /* pgpget.c */
110 int pgp_getmsg(BUFFER *in, BUFFER *key, BUFFER *sig, char *pubring,
111 char *secring);
112 int pgp_ispacket(BUFFER *buf);
113 int pgp_isconventional(BUFFER *buf);
114 int pgp_packettype(BUFFER *buf, long *len, int *partial);
115 int pgp_packetpartial(BUFFER *buf, long *len, int *partial);
116 int pgp_getpacket(BUFFER *buf, BUFFER *p);
117 int pgp_getsig(BUFFER *p, pgpsig *sig, char *pubring);
118 void pgp_verify(BUFFER *msg, BUFFER *detached, pgpsig *sig);
119 int pgp_getsymmetric(BUFFER *buf, BUFFER *key, int algo);
120 int pgp_getliteral(BUFFER *buf);
121 int pgp_uncompress(BUFFER *buf);
122 int pgp_getsessionkey(BUFFER *buf, BUFFER *pass, char *secring);
123 int pgp_getsymsessionkey(BUFFER *buf, BUFFER *pass);
124
125 /* pgpcreat.c */
126 int pgp_packet(BUFFER *buf, int type);
127 int pgp_packet3(BUFFER *buf, int type);
128 int pgp_symmetric(BUFFER *buf, BUFFER *key);
129 int pgp_literal(BUFFER *buf, char *filename, int text);
130 int pgp_compress(BUFFER *buf);
131 int pgp_sessionkey(BUFFER *buf, BUFFER *user, BUFFER *keyid, BUFFER *seskey,
132 char *pubring);
133 void pgp_marker(BUFFER *buf);
134 int pgp_symsessionkey(BUFFER *buf, BUFFER *seskey, BUFFER *pass);
135 int pgp_sign(BUFFER *msg, BUFFER *msg2, BUFFER *sig, BUFFER *userid,
136 BUFFER *pass, int type, int self, long now, int remail,
137 BUFFER *seckey, char *secring);
138 int pgp_digest(int hashalgo, BUFFER *in, BUFFER *d);
139
140 /* pgpdb.c */
141
142 int pgpdb_getkey(int mode, int algo, int *sym, BUFFER *key, BUFFER *user,
143 BUFFER *founduid, BUFFER *keyid, char *keyring, BUFFER *pass);
144
145 typedef struct {
146 int filetype;
147 BUFFER *db;
148 LOCK *lock;
149 int modified;
150 char filename[LINELEN];
151 BUFFER *encryptkey;
152 } KEYRING;
153
154 KEYRING *pgpdb_new(char *keyring, int filetype, BUFFER *encryptkey);
155 KEYRING *pgpdb_open(char *keyring, BUFFER *encryptkey, int writer);
156 int pgpdb_append(KEYRING *keydb, BUFFER *p);
157 int pgpdb_getnext(KEYRING *keydb, BUFFER *p, BUFFER *keyid, BUFFER *userid);
158 int pgpdb_close(KEYRING *keydb);
159
160 #endif
161 #endif

  ViewVC Help
Powered by ViewVC 1.1.5