chiark / gitweb /
Upgrade licence to GPLv3+.
[tripe] / common / protocol.h
CommitLineData
165db1a8 1/* -*-c-*-
165db1a8 2 *
3 * Protocol definition for TrIPE
4 *
5 * (c) 2003 Straylight/Edgeware
6 */
7
e04c2d50 8/*----- Licensing notice --------------------------------------------------*
165db1a8 9 *
10 * This file is part of Trivial IP Encryption (TrIPE).
11 *
11ad66c2
MW
12 * TrIPE is free software: you can redistribute it and/or modify it under
13 * the terms of the GNU General Public License as published by the Free
14 * Software Foundation; either version 3 of the License, or (at your
15 * option) any later version.
e04c2d50 16 *
11ad66c2
MW
17 * TrIPE is distributed in the hope that it will be useful, but WITHOUT
18 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
20 * for more details.
e04c2d50 21 *
165db1a8 22 * You should have received a copy of the GNU General Public License
11ad66c2 23 * along with TrIPE. If not, see <https://www.gnu.org/licenses/>.
165db1a8 24 */
25
165db1a8 26#ifndef TRIPE_PROTOCOL_H
27#define TRIPE_PROTOCOL_H
28
29/*----- TrIPE protocol ----------------------------------------------------*/
30
165efde7
MW
31#define TRIPE_PORT 4070 /* Assigned by IANA */
32
165db1a8 33/* --- TrIPE message format --- *
34 *
35 * A packet begins with a single-byte message type. The top four bits are a
36 * category code used to send the message to the right general place in the
37 * code; the bottom bits identify the actual message type.
38 */
39
40#define MSG_CATMASK 0xf0
41#define MSG_TYPEMASK 0x0f
42
43/* --- Encrypted message packets --- *
44 *
45 * Messages of category @MSG_PACKET@ contain encrypted network packets. The
46 * message content is a symmetric-encrypted block (see below). Reception of
47 * a packet encrypted under a new key implicitly permits that key to be used
48 * to send further packets.
49 *
50 * The only packet type accepted is zero.
51 *
52 * Packets may be encrypted under any live keyset, but should use the most
53 * recent one.
54 */
55
56#define MSG_PACKET 0x00
57
58/* --- Key exchange packets --- */
59
60#define MSG_KEYEXCH 0x10
61
62#define KX_PRECHAL 0u
de7bd20b
MW
63#define KX_CHAL 1u
64#define KX_REPLY 2u
65#define KX_SWITCH 3u
66#define KX_SWITCHOK 4u
67#define KX_NMSG 5u
165db1a8 68
0ba8de86 69/* --- Miscellaneous packets --- */
70
71#define MSG_MISC 0x20
72
73#define MISC_NOP 0u /* Do nothing; ignore me */
74#define MISC_PING 1u /* Transport-level ping */
75#define MISC_PONG 2u /* Transport-level ping response */
76#define MISC_EPING 3u /* Encrypted ping */
77#define MISC_EPONG 4u /* Encrypted ping response */
37941236 78#define MISC_GREET 5u /* A greeting from a NATed peer */
0ba8de86 79
165db1a8 80/* --- Symmetric encryption and keysets --- *
81 *
82 * Packets consist of an 80-bit MAC, a 32-bit sequence number, and the
83 * encrypted payload.
84 *
85 * The plaintext is encrypted using Blowfish in CBC mode with ciphertext
0ba8de86 86 * stealing (as described in [Schneier]). The initialization vector is
165db1a8 87 * selected randomly, and prepended to the actual ciphertext.
88 *
89 * The MAC is computed using the HMAC construction with RIPEMD160 over the
90 * sequence number and the ciphertext (with IV); the first 80 bits of the
91 * output are used. (This is the minimum allowed by the draft FIPS for HMAC,
92 * and the recommended truncation.)
93 *
94 * A keyset consists of
95 *
96 * * an integrity (MAC) key;
97 * * a confidentiality (encryption) key; and
98 * * a sequence numbering space
99 *
100 * in each direction. The packets sent by a host encrypted under a
101 * particular keyset are assigned consecutive sequence numbers starting from
102 * zero. The receiving host must ensure that it only accepts each packet at
103 * most once. It should maintain a window of sequence numbers: packets with
104 * numbers beyond the end of the window are accepted and cause the window to
105 * be advanced; packets with numbers before the start of the window are
106 * rejected; packets with numbers which appear within the window are accepted
107 * only if the number has not been seen before.
108 *
109 * When a host sends a @KX_SWITCH@ or @KX_SWITCHOK@ message, it installs the
110 * newly-negotiated keyset in a `listen-only' state: it may not send a packet
111 * encrypted under the keyset until either it has received a @KX_SWITCH@ or
112 * @KX_SWITCHOK@ message, or a @MSG_PACKET@ encrypted under the keyset, from
113 * its peer.
114 */
115
116/*----- That's all, folks -------------------------------------------------*/
117
118#endif