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 |