summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/des/fcrypt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/des/fcrypt.c')
-rw-r--r--src/lib/libcrypto/des/fcrypt.c151
1 files changed, 77 insertions, 74 deletions
diff --git a/src/lib/libcrypto/des/fcrypt.c b/src/lib/libcrypto/des/fcrypt.c
index 537562cd38..1e42ecbfe8 100644
--- a/src/lib/libcrypto/des/fcrypt.c
+++ b/src/lib/libcrypto/des/fcrypt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: fcrypt.c,v 1.13 2022/11/26 16:08:51 tb Exp $ */ 1/* $OpenBSD: fcrypt.c,v 1.14 2023/07/08 07:11:07 beck Exp $ */
2 2
3#include <stdio.h> 3#include <stdio.h>
4 4
@@ -18,57 +18,58 @@
18#include "des_local.h" 18#include "des_local.h"
19 19
20/* Added more values to handle illegal salt values the way normal 20/* Added more values to handle illegal salt values the way normal
21 * crypt() implementations do. The patch was sent by 21 * crypt() implementations do. The patch was sent by
22 * Bjorn Gronvall <bg@sics.se> 22 * Bjorn Gronvall <bg@sics.se>
23 */ 23 */
24static unsigned const char con_salt[128]={ 24static unsigned const char con_salt[128] = {
250xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9, 25 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9,
260xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1, 26 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1,
270xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9, 27 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
280xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1, 28 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1,
290xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9, 29 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9,
300xFA,0xFB,0xFC,0xFD,0xFE,0xFF,0x00,0x01, 30 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0x00, 0x01,
310x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, 31 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
320x0A,0x0B,0x05,0x06,0x07,0x08,0x09,0x0A, 32 0x0A, 0x0B, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
330x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12, 33 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
340x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A, 34 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
350x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22, 35 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,
360x23,0x24,0x25,0x20,0x21,0x22,0x23,0x24, 36 0x23, 0x24, 0x25, 0x20, 0x21, 0x22, 0x23, 0x24,
370x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C, 37 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
380x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34, 38 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,
390x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C, 39 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,
400x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44, 40 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,
41}; 41};
42 42
43static unsigned const char cov_2char[64]={ 43static unsigned const char cov_2char[64] = {
440x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35, 44 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
450x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44, 45 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44,
460x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C, 46 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
470x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54, 47 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,
480x55,0x56,0x57,0x58,0x59,0x5A,0x61,0x62, 48 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62,
490x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A, 49 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A,
500x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72, 50 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72,
510x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A 51 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A
52}; 52};
53 53
54char *DES_crypt(const char *buf, const char *salt) 54char *
55 { 55DES_crypt(const char *buf, const char *salt)
56{
56 static char buff[14]; 57 static char buff[14];
57 58
58 return(DES_fcrypt(buf,salt,buff)); 59 return (DES_fcrypt(buf, salt, buff));
59 } 60}
60
61 61
62char *DES_fcrypt(const char *buf, const char *salt, char *ret) 62char *
63 { 63DES_fcrypt(const char *buf, const char *salt, char *ret)
64 unsigned int i,j,x,y; 64{
65 DES_LONG Eswap0,Eswap1; 65 unsigned int i, j, x, y;
66 DES_LONG out[2],ll; 66 DES_LONG Eswap0, Eswap1;
67 DES_LONG out[2], ll;
67 DES_cblock key; 68 DES_cblock key;
68 DES_key_schedule ks; 69 DES_key_schedule ks;
69 unsigned char bb[9]; 70 unsigned char bb[9];
70 unsigned char *b=bb; 71 unsigned char *b = bb;
71 unsigned char c,u; 72 unsigned char c, u;
72 73
73 /* eay 25/08/92 74 /* eay 25/08/92
74 * If you call crypt("pwd","*") as often happens when you 75 * If you call crypt("pwd","*") as often happens when you
@@ -78,48 +79,50 @@ char *DES_fcrypt(const char *buf, const char *salt, char *ret)
78 * crypt to "*". This was found when replacing the crypt in 79 * crypt to "*". This was found when replacing the crypt in
79 * our shared libraries. People found that the disabled 80 * our shared libraries. People found that the disabled
80 * accounts effectively had no passwd :-(. */ 81 * accounts effectively had no passwd :-(. */
81 x=ret[0]=((salt[0] == '\0')?'A':salt[0]); 82 x = ret[0] = ((salt[0] == '\0') ? 'A' : salt[0]);
82 Eswap0=con_salt[x]<<2; 83 Eswap0 = con_salt[x] << 2;
83 x=ret[1]=((salt[1] == '\0')?'A':salt[1]); 84 x = ret[1] = ((salt[1] == '\0') ? 'A' : salt[1]);
84 Eswap1=con_salt[x]<<6; 85 Eswap1 = con_salt[x] << 6;
85/* EAY 86/* EAY
86r=strlen(buf); 87r=strlen(buf);
87r=(r+7)/8; 88r=(r+7)/8;
88*/ 89*/
89 for (i=0; i<8; i++) 90 for (i = 0; i < 8; i++)
90 { 91 {
91 c= *(buf++); 92 c = *(buf++);
92 if (!c) break; 93 if (!c)
93 key[i]=(c<<1); 94 break;
94 } 95 key[i] = (c << 1);
95 for (; i<8; i++) 96 }
96 key[i]=0; 97 for (; i < 8; i++)
98 key[i] = 0;
97 99
98 DES_set_key_unchecked(&key,&ks); 100 DES_set_key_unchecked(&key, &ks);
99 fcrypt_body(&(out[0]),&ks,Eswap0,Eswap1); 101 fcrypt_body(&(out[0]), &ks, Eswap0, Eswap1);
100 102
101 ll=out[0]; l2c(ll,b); 103 ll = out[0];
102 ll=out[1]; l2c(ll,b); 104 l2c(ll, b);
103 y=0; 105 ll = out[1];
104 u=0x80; 106 l2c(ll, b);
105 bb[8]=0; 107 y = 0;
106 for (i=2; i<13; i++) 108 u = 0x80;
109 bb[8] = 0;
110 for (i = 2; i < 13; i++)
111 {
112 c = 0;
113 for (j = 0; j < 6; j++)
107 { 114 {
108 c=0; 115 c <<= 1;
109 for (j=0; j<6; j++) 116 if (bb[y] & u)
110 { 117 c |= 1;
111 c<<=1; 118 u >>= 1;
112 if (bb[y] & u) c|=1; 119 if (!u) {
113 u>>=1;
114 if (!u)
115 {
116 y++; 120 y++;
117 u=0x80; 121 u = 0x80;
118 }
119 } 122 }
120 ret[i]=cov_2char[c];
121 } 123 }
122 ret[13]='\0'; 124 ret[i] = cov_2char[c];
123 return(ret);
124 } 125 }
125 126 ret[13] = '\0';
127 return (ret);
128}