Deleted Added
full compact
smb_crypt.c (82036) smb_crypt.c (109623)
1/*
2 * Copyright (c) 2000-2001, Boris Popov
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 15 unchanged lines hidden (view full) ---

24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 *
1/*
2 * Copyright (c) 2000-2001, Boris Popov
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 15 unchanged lines hidden (view full) ---

24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 *
32 * $FreeBSD: head/sys/netsmb/smb_crypt.c 82036 2001-08-21 08:07:18Z bp $
32 * $FreeBSD: head/sys/netsmb/smb_crypt.c 109623 2003-01-21 08:56:16Z alfred $
33 */
34#include <sys/param.h>
35#include <sys/malloc.h>
36#include <sys/kernel.h>
37#include <sys/systm.h>
38#include <sys/conf.h>
39#include <sys/proc.h>
40#include <sys/fcntl.h>

--- 27 unchanged lines hidden (view full) ---

68 kk[0] = key[0] & 0xfe;
69 kk[1] = key[0] << 7 | (key[1] >> 1 & 0xfe);
70 kk[2] = key[1] << 6 | (key[2] >> 2 & 0xfe);
71 kk[3] = key[2] << 5 | (key[3] >> 3 & 0xfe);
72 kk[4] = key[3] << 4 | (key[4] >> 4 & 0xfe);
73 kk[5] = key[4] << 3 | (key[5] >> 5 & 0xfe);
74 kk[6] = key[5] << 2 | (key[6] >> 6 & 0xfe);
75 kk[7] = key[6] << 1;
33 */
34#include <sys/param.h>
35#include <sys/malloc.h>
36#include <sys/kernel.h>
37#include <sys/systm.h>
38#include <sys/conf.h>
39#include <sys/proc.h>
40#include <sys/fcntl.h>

--- 27 unchanged lines hidden (view full) ---

68 kk[0] = key[0] & 0xfe;
69 kk[1] = key[0] << 7 | (key[1] >> 1 & 0xfe);
70 kk[2] = key[1] << 6 | (key[2] >> 2 & 0xfe);
71 kk[3] = key[2] << 5 | (key[3] >> 3 & 0xfe);
72 kk[4] = key[3] << 4 | (key[4] >> 4 & 0xfe);
73 kk[5] = key[4] << 3 | (key[5] >> 5 & 0xfe);
74 kk[6] = key[5] << 2 | (key[6] >> 6 & 0xfe);
75 kk[7] = key[6] << 1;
76 ksp = malloc(sizeof(des_key_schedule), M_SMBTEMP, M_WAITOK);
76 ksp = malloc(sizeof(des_key_schedule), M_SMBTEMP, 0);
77 des_set_key((des_cblock *)kk, *ksp);
78 des_ecb_encrypt((des_cblock *)data, (des_cblock *)dest, *ksp, 1);
79 free(ksp, M_SMBTEMP);
80}
81#endif
82
83
84int
85smb_encrypt(const u_char *apwd, u_char *C8, u_char *RN)
86{
87#ifdef NETSMBCRYPTO
88 u_char *p, *P14, *S21;
89
77 des_set_key((des_cblock *)kk, *ksp);
78 des_ecb_encrypt((des_cblock *)data, (des_cblock *)dest, *ksp, 1);
79 free(ksp, M_SMBTEMP);
80}
81#endif
82
83
84int
85smb_encrypt(const u_char *apwd, u_char *C8, u_char *RN)
86{
87#ifdef NETSMBCRYPTO
88 u_char *p, *P14, *S21;
89
90 p = malloc(14 + 21, M_SMBTEMP, M_WAITOK);
90 p = malloc(14 + 21, M_SMBTEMP, 0);
91 bzero(p, 14 + 21);
92 P14 = p;
93 S21 = p + 14;
94 bcopy(apwd, P14, min(14, strlen(apwd)));
95 /*
96 * S21 = concat(Ex(P14, N8), zeros(5));
97 */
98 smb_E(P14, N8, S21);

--- 16 unchanged lines hidden (view full) ---

115{
116#ifdef NETSMBCRYPTO
117 u_char S21[21];
118 u_int16_t *unipwd;
119 MD4_CTX *ctxp;
120 int len;
121
122 len = strlen(apwd);
91 bzero(p, 14 + 21);
92 P14 = p;
93 S21 = p + 14;
94 bcopy(apwd, P14, min(14, strlen(apwd)));
95 /*
96 * S21 = concat(Ex(P14, N8), zeros(5));
97 */
98 smb_E(P14, N8, S21);

--- 16 unchanged lines hidden (view full) ---

115{
116#ifdef NETSMBCRYPTO
117 u_char S21[21];
118 u_int16_t *unipwd;
119 MD4_CTX *ctxp;
120 int len;
121
122 len = strlen(apwd);
123 unipwd = malloc((len + 1) * sizeof(u_int16_t), M_SMBTEMP, M_WAITOK);
123 unipwd = malloc((len + 1) * sizeof(u_int16_t), M_SMBTEMP, 0);
124 /*
125 * S21 = concat(MD4(U(apwd)), zeros(5));
126 */
127 smb_strtouni(unipwd, apwd);
124 /*
125 * S21 = concat(MD4(U(apwd)), zeros(5));
126 */
127 smb_strtouni(unipwd, apwd);
128 ctxp = malloc(sizeof(MD4_CTX), M_SMBTEMP, M_WAITOK);
128 ctxp = malloc(sizeof(MD4_CTX), M_SMBTEMP, 0);
129 MD4Init(ctxp);
130 MD4Update(ctxp, (u_char*)unipwd, len * sizeof(u_int16_t));
131 free(unipwd, M_SMBTEMP);
132 bzero(S21, 21);
133 MD4Final(S21, ctxp);
134 free(ctxp, M_SMBTEMP);
135
136 smb_E(S21, C8, RN);
137 smb_E(S21 + 7, C8, RN + 8);
138 smb_E(S21 + 14, C8, RN + 16);
139 return 0;
140#else
141 SMBERROR("password encryption is not available\n");
142 bzero(RN, 24);
143 return EAUTH;
144#endif
145}
146
129 MD4Init(ctxp);
130 MD4Update(ctxp, (u_char*)unipwd, len * sizeof(u_int16_t));
131 free(unipwd, M_SMBTEMP);
132 bzero(S21, 21);
133 MD4Final(S21, ctxp);
134 free(ctxp, M_SMBTEMP);
135
136 smb_E(S21, C8, RN);
137 smb_E(S21 + 7, C8, RN + 8);
138 smb_E(S21 + 14, C8, RN + 16);
139 return 0;
140#else
141 SMBERROR("password encryption is not available\n");
142 bzero(RN, 24);
143 return EAUTH;
144#endif
145}
146