Mercurial > hg > early-roguelike
annotate rogue3/xcrypt.c @ 237:2236ef808bcb
XRogue: fix some uses of entire structs instead of their members.
Some calls to runto() were given a pointer to the player struct instead
of to the player's coordinates.  A call to death() was passed a pointer
to a monster instead of the monster's type number.
| author | John "Elwin" Edwards | 
|---|---|
| date | Tue, 08 Mar 2016 20:47:57 -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 { | 
