Mercurial > hg > early-roguelike
annotate rogue3/xcrypt.c @ 251:e7862a021609
Fix the perpetual haste cheat.
Rogue V3 allowed the player to gain perpetual haste by quaffing a
potion of haste while already hasted.  This is supposed to remove the
haste effect and cause temporary paralysis.
Super-Rogue removed haste correctly, but gave confusing messages.
| author | John "Elwin" Edwards | 
|---|---|
| date | Sat, 28 Jan 2017 11:45:36 -0500 | 
| parents | 527e2150eaf0 | 
| children | 
| rev | line source | 
|---|---|
| 
0
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
2 * FreeSec: libcrypt | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
3 * | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
4 * Copyright (C) 1994 David Burren | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
5 * All rights reserved. | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
6 * | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
7 * Redistribution and use in source and binary forms, with or without | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
8 * modification, are permitted provided that the following conditions | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
9 * are met: | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
10 * 1. Redistributions of source code must retain the above copyright | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
11 * notice, this list of conditions and the following disclaimer. | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
12 * 2. Redistributions in binary form must reproduce the above copyright | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
13 * notice, this list of conditions and the following disclaimer in the | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
14 * documentation and/or other materials provided with the distribution. | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
15 * 3. Neither the name(s) of the author(s) nor the names of other contributors | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
16 * may be used to endorse or promote products derived from this software | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
17 * without specific prior written permission. | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
18 * | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTORS ``AS IS'' AND | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTORS BE LIABLE | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
29 * SUCH DAMAGE. | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
30 * | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
31 * | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
32 * This is an original implementation of the DES and the crypt(3) interfaces | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
33 * by David Burren <davidb@werj.com.au>. | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
34 * | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
35 * An excellent reference on the underlying algorithm (and related | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
36 * algorithms) is: | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
37 * | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
38 * B. Schneier, Applied Cryptography: protocols, algorithms, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
39 * and source code in C, John Wiley & Sons, 1994. | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
40 * | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
41 * Note that in that book's description of DES the lookups for the initial, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
42 * pbox, and final permutations are inverted (this has been brought to the | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
43 * attention of the author). A list of errata for this book has been | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
44 * posted to the sci.crypt newsgroup by the author and is available for FTP. | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
45 * | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
46 * NOTE: | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
47 * This file has a static version of des_setkey() so that crypt.o exports | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
48 * only the crypt() interface. This is required to make binaries linked | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
49 * against crypt.o exportable or re-exportable from the USA. | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
50 */ | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
51 #ifndef HAVE_CRYPT | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
52 #include <sys/types.h> | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
53 #include <string.h> | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
54 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
55 static unsigned int _endian = 1; | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
56 static char *_le = (char *) &_endian; | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
57 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
58 #define xntohl(x) (!*_le?(x):((x)&0xffU)<<24|((x)&0xff00U)<<8|((x)&0xff0000U)>>8|((x)&0xff000000U)>>24) | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
59 #define xhtonl(x) (!*_le?(x):((x)&0xffU)<<24|((x)&0xff00U)<<8|((x)&0xff0000U)>>8|((x)&0xff000000U)>>24) | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
60 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
61 #define _PASSWORD_EFMT1 '_' | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
62 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
63 static unsigned char IP[64] = { | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
64 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
65 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
66 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
67 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
68 }; | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
69 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
70 static unsigned char inv_key_perm[64]; | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
71 static unsigned char key_perm[56] = { | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
72 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
73 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
74 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
75 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
76 }; | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
77 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
78 static unsigned char key_shifts[16] = { | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
79 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
80 }; | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
81 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
82 static unsigned char inv_comp_perm[56]; | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
83 static unsigned char comp_perm[48] = { | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
84 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
85 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
86 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
87 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
88 }; | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
89 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
90 /* | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
91 * No E box is used, as it's replaced by some ANDs, shifts, and ORs. | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
92 */ | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
93 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
94 static unsigned char u_sbox[8][64]; | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
95 static unsigned char sbox[8][64] = { | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
96 { | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
97 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
98 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
99 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
100 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
101 }, | 
| 
 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 
edwarj4 
parents:  
diff
changeset
 | 
102 { | 
