diff options
author | ryker <> | 1998-10-05 20:13:15 +0000 |
---|---|---|
committer | ryker <> | 1998-10-05 20:13:15 +0000 |
commit | 536c76cbb863bab152f19842ab88772c01e922c7 (patch) | |
tree | dfecec371a097b73d605aae665887946d9982219 /src/lib/libssl/src/crypto/des/fcrypt.c | |
download | openbsd-536c76cbb863bab152f19842ab88772c01e922c7.tar.gz openbsd-536c76cbb863bab152f19842ab88772c01e922c7.tar.bz2 openbsd-536c76cbb863bab152f19842ab88772c01e922c7.zip |
Import of SSLeay-0.9.0b with RSA and IDEA stubbed + OpenBSD build
functionality for shared libs.
Note that routines such as sslv2_init and friends that use RSA will
not work due to lack of RSA in this library.
Needs documentation and help from ports for easy upgrade to full
functionality where legally possible.
Diffstat (limited to 'src/lib/libssl/src/crypto/des/fcrypt.c')
-rw-r--r-- | src/lib/libssl/src/crypto/des/fcrypt.c | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/src/lib/libssl/src/crypto/des/fcrypt.c b/src/lib/libssl/src/crypto/des/fcrypt.c new file mode 100644 index 0000000000..129beb27da --- /dev/null +++ b/src/lib/libssl/src/crypto/des/fcrypt.c | |||
@@ -0,0 +1,153 @@ | |||
1 | /* NOCW */ | ||
2 | #include <stdio.h> | ||
3 | |||
4 | /* This version of crypt has been developed from my MIT compatable | ||
5 | * DES library. | ||
6 | * The library is available at pub/Crypto/DES at ftp.psy.uq.oz.au | ||
7 | * Eric Young (eay@cryptsoft.com) | ||
8 | */ | ||
9 | |||
10 | /* Modification by Jens Kupferschmidt (Cu) | ||
11 | * I have included directive PARA for shared memory computers. | ||
12 | * I have included a directive LONGCRYPT to using this routine to cipher | ||
13 | * passwords with more then 8 bytes like HP-UX 10.x it used. The MAXPLEN | ||
14 | * definition is the maximum of lenght of password and can changed. I have | ||
15 | * defined 24. | ||
16 | */ | ||
17 | |||
18 | #include "des_locl.h" | ||
19 | |||
20 | /* Added more values to handle illegal salt values the way normal | ||
21 | * crypt() implementations do. The patch was sent by | ||
22 | * Bjorn Gronvall <bg@sics.se> | ||
23 | */ | ||
24 | static unsigned const char con_salt[128]={ | ||
25 | 0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9, | ||
26 | 0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1, | ||
27 | 0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9, | ||
28 | 0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1, | ||
29 | 0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9, | ||
30 | 0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,0x00,0x01, | ||
31 | 0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, | ||
32 | 0x0A,0x0B,0x05,0x06,0x07,0x08,0x09,0x0A, | ||
33 | 0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12, | ||
34 | 0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A, | ||
35 | 0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22, | ||
36 | 0x23,0x24,0x25,0x20,0x21,0x22,0x23,0x24, | ||
37 | 0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C, | ||
38 | 0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34, | ||
39 | 0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C, | ||
40 | 0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44, | ||
41 | }; | ||
42 | |||
43 | static unsigned const char cov_2char[64]={ | ||
44 | 0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35, | ||
45 | 0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44, | ||
46 | 0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C, | ||
47 | 0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54, | ||
48 | 0x55,0x56,0x57,0x58,0x59,0x5A,0x61,0x62, | ||
49 | 0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A, | ||
50 | 0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72, | ||
51 | 0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A | ||
52 | }; | ||
53 | |||
54 | #ifndef NOPROTO | ||
55 | void fcrypt_body(DES_LONG *out,des_key_schedule ks, | ||
56 | DES_LONG Eswap0, DES_LONG Eswap1); | ||
57 | |||
58 | #if defined(PERL5) || defined(FreeBSD) | ||
59 | char *des_crypt(const char *buf,const char *salt); | ||
60 | #else | ||
61 | char *crypt(const char *buf,const char *salt); | ||
62 | #endif | ||
63 | #else | ||
64 | void fcrypt_body(); | ||
65 | #ifdef PERL5 | ||
66 | char *des_crypt(); | ||
67 | #else | ||
68 | char *crypt(); | ||
69 | #endif | ||
70 | #endif | ||
71 | |||
72 | #if defined(PERL5) || defined(FreeBSD) | ||
73 | char *des_crypt(buf,salt) | ||
74 | #else | ||
75 | char *crypt(buf,salt) | ||
76 | #endif | ||
77 | const char *buf; | ||
78 | const char *salt; | ||
79 | { | ||
80 | static char buff[14]; | ||
81 | |||
82 | return(des_fcrypt(buf,salt,buff)); | ||
83 | } | ||
84 | |||
85 | |||
86 | char *des_fcrypt(buf,salt,ret) | ||
87 | const char *buf; | ||
88 | const char *salt; | ||
89 | char *ret; | ||
90 | { | ||
91 | unsigned int i,j,x,y; | ||
92 | DES_LONG Eswap0,Eswap1; | ||
93 | DES_LONG out[2],ll; | ||
94 | des_cblock key; | ||
95 | des_key_schedule ks; | ||
96 | unsigned char bb[9]; | ||
97 | unsigned char *b=bb; | ||
98 | unsigned char c,u; | ||
99 | |||
100 | /* eay 25/08/92 | ||
101 | * If you call crypt("pwd","*") as often happens when you | ||
102 | * have * as the pwd field in /etc/passwd, the function | ||
103 | * returns *\0XXXXXXXXX | ||
104 | * The \0 makes the string look like * so the pwd "*" would | ||
105 | * crypt to "*". This was found when replacing the crypt in | ||
106 | * our shared libraries. People found that the disbled | ||
107 | * accounts effectivly had no passwd :-(. */ | ||
108 | x=ret[0]=((salt[0] == '\0')?'A':salt[0]); | ||
109 | Eswap0=con_salt[x]<<2; | ||
110 | x=ret[1]=((salt[1] == '\0')?'A':salt[1]); | ||
111 | Eswap1=con_salt[x]<<6; | ||
112 | |||
113 | /* EAY | ||
114 | r=strlen(buf); | ||
115 | r=(r+7)/8; | ||
116 | */ | ||
117 | for (i=0; i<8; i++) | ||
118 | { | ||
119 | c= *(buf++); | ||
120 | if (!c) break; | ||
121 | key[i]=(c<<1); | ||
122 | } | ||
123 | for (; i<8; i++) | ||
124 | key[i]=0; | ||
125 | |||
126 | des_set_key((des_cblock *)(key),ks); | ||
127 | fcrypt_body(&(out[0]),ks,Eswap0,Eswap1); | ||
128 | |||
129 | ll=out[0]; l2c(ll,b); | ||
130 | ll=out[1]; l2c(ll,b); | ||
131 | y=0; | ||
132 | u=0x80; | ||
133 | bb[8]=0; | ||
134 | for (i=2; i<13; i++) | ||
135 | { | ||
136 | c=0; | ||
137 | for (j=0; j<6; j++) | ||
138 | { | ||
139 | c<<=1; | ||
140 | if (bb[y] & u) c|=1; | ||
141 | u>>=1; | ||
142 | if (!u) | ||
143 | { | ||
144 | y++; | ||
145 | u=0x80; | ||
146 | } | ||
147 | } | ||
148 | ret[i]=cov_2char[c]; | ||
149 | } | ||
150 | ret[13]='\0'; | ||
151 | return(ret); | ||
152 | } | ||
153 | |||