OpenVAS Scanner 23.23.1
smb_crypt.c File Reference

Unix SMB/Netbios implementation. Version 1.9. More...

#include "smb_crypt.h"
#include "proto.h"
#include <glib.h>

Macros

#define int16   1
#define FSTRING_LEN   256

Typedefs

typedef char fstring[FSTRING_LEN]

Functions

static void permute (char *out, char *in, const uchar *p, int n)
static void lshift (char *d, int count, int n)
static void concat (char *out, char *in1, char *in2, int l1, int l2)
static void xor (char *out, char *in1, char *in2, int n)
static void dohash (char *out, char *in, char *key, int forw)
static void str_to_key (const uchar *str, uchar *key)
static void smbhash (uchar *out, const uchar *in, const uchar *key, int forw)
void E_P16 (uchar *p14, uchar *p16)
void E_P24 (const uchar *p21, const uchar *c8, uchar *p24)
void SamOEMhash (uchar *data, const uchar *key, int val)
void SMBsesskeygen_ntv1_ntlmssp (const uchar kr[16], const uchar *nt_resp, uint8 sess_key[16])
void SMBOWFencrypt_ntlmssp (const uchar passwd[16], const uchar *c8, uchar p24[24])
void SMBencrypt_hash_ntlmssp (const uchar lm_hash[16], const uchar *c8, uchar p24[24])
void SMBNTencrypt_hash_ntlmssp (const uchar nt_hash[16], uchar *c8, uchar *p24)
void SMBsesskeygen_lm_sess_key_ntlmssp (const uchar lm_hash[16], const uchar lm_resp[24], uint8 sess_key[16])
bool E_deshash_ntlmssp (const char *passwd, uint8_t pass_len, uchar p16[16])
void SMBsesskeygen_ntv2_ntlmssp (const uchar kr[16], const uchar *nt_resp, uint8 sess_key[16])
uint8_t * NTLMv2_generate_client_data_ntlmssp (const char *addr_list, int address_list_len)
void NTLMv2_generate_response_ntlmssp (const uchar ntlm_v2_hash[16], const char *server_chal, const char *address_list, int address_list_len, uint8_t *nt_response)
void LMv2_generate_response_ntlmssp (const uchar ntlm_v2_hash[16], const char *server_chal, uint8_t *lm_response)
void SMBNTLMv2encrypt_hash_ntlmssp (const char *user, const char *domain, uchar ntlm_v2_hash[16], const char *server_chal, const char *address_list, int address_list_len, uint8_t *lm_response, uint8_t *nt_response, uint8_t *user_session_key)

Variables

static const uchar perm1 [56]
static const uchar perm2 [48]
static const uchar perm3 [64]
static const uchar perm4 [48]
static const uchar perm5 [32]
static const uchar perm6 [64]
static const uchar sc [16] = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1}
static const uchar sbox [8][4][16]

Detailed Description

Unix SMB/Netbios implementation. Version 1.9.

a partial implementation of DES designed for use in the SMB authentication protocol

Macro Definition Documentation

◆ FSTRING_LEN

#define FSTRING_LEN   256

◆ int16

#define int16   1

Typedef Documentation

◆ fstring

typedef char fstring[FSTRING_LEN]

Function Documentation

◆ concat()

void concat ( char * out,
char * in1,
char * in2,
int l1,
int l2 )
static

◆ dohash()

void dohash ( char * out,
char * in,
char * key,
int forw )
static

◆ E_deshash_ntlmssp()

bool E_deshash_ntlmssp ( const char * passwd,
uint8_t pass_len,
uchar p16[16] )

Creates the DES forward-only Hash of the users password in DOS ASCII charset

Parameters
passwdpassword in 'unix' charset.
p16return password hashed with DES, caller allocated 16 byte buffer
Returns
False if password was > 14 characters, and therefore may be incorrect, otherwise True
Note
p16 is filled in regardless

◆ E_P16()

void E_P16 ( uchar * p14,
uchar * p16 )

◆ E_P24()

void E_P24 ( const uchar * p21,
const uchar * c8,
uchar * p24 )

◆ LMv2_generate_response_ntlmssp()

void LMv2_generate_response_ntlmssp ( const uchar ntlm_v2_hash[16],
const char * server_chal,
uint8_t * lm_response )

◆ lshift()

void lshift ( char * d,
int count,
int n )
static

◆ NTLMv2_generate_client_data_ntlmssp()

uint8_t * NTLMv2_generate_client_data_ntlmssp ( const char * addr_list,
int address_list_len )

◆ NTLMv2_generate_response_ntlmssp()

void NTLMv2_generate_response_ntlmssp ( const uchar ntlm_v2_hash[16],
const char * server_chal,
const char * address_list,
int address_list_len,
uint8_t * nt_response )

◆ permute()

void permute ( char * out,
char * in,
const uchar * p,
int n )
static

◆ SamOEMhash()

void SamOEMhash ( uchar * data,
const uchar * key,
int val )

◆ SMBencrypt_hash_ntlmssp()

void SMBencrypt_hash_ntlmssp ( const uchar lm_hash[16],
const uchar * c8,
uchar p24[24] )

◆ smbhash()

void smbhash ( uchar * out,
const uchar * in,
const uchar * key,
int forw )
static

◆ SMBNTencrypt_hash_ntlmssp()

void SMBNTencrypt_hash_ntlmssp ( const uchar nt_hash[16],
uchar * c8,
uchar * p24 )

◆ SMBNTLMv2encrypt_hash_ntlmssp()

void SMBNTLMv2encrypt_hash_ntlmssp ( const char * user,
const char * domain,
uchar ntlm_v2_hash[16],
const char * server_chal,
const char * address_list,
int address_list_len,
uint8_t * lm_response,
uint8_t * nt_response,
uint8_t * user_session_key )

◆ SMBOWFencrypt_ntlmssp()

void SMBOWFencrypt_ntlmssp ( const uchar passwd[16],
const uchar * c8,
uchar p24[24] )

◆ SMBsesskeygen_lm_sess_key_ntlmssp()

void SMBsesskeygen_lm_sess_key_ntlmssp ( const uchar lm_hash[16],
const uchar lm_resp[24],
uint8 sess_key[16] )

◆ SMBsesskeygen_ntv1_ntlmssp()

void SMBsesskeygen_ntv1_ntlmssp ( const uchar kr[16],
const uchar * nt_resp,
uint8 sess_key[16] )

◆ SMBsesskeygen_ntv2_ntlmssp()

void SMBsesskeygen_ntv2_ntlmssp ( const uchar kr[16],
const uchar * nt_resp,
uint8 sess_key[16] )

◆ str_to_key()

void str_to_key ( const uchar * str,
uchar * key )
static

◆ xor()

void xor ( char * out,
char * in1,
char * in2,
int n )
static

Variable Documentation

◆ perm1

const uchar perm1[56]
static
Initial value:
= {
57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43,
35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54,
46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4}

◆ perm2

const uchar perm2[48]
static
Initial value:
= {14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32}

◆ perm3

const uchar perm3[64]
static
Initial value:
= {
58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7}

◆ perm4

const uchar perm4[48]
static
Initial value:
= {32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9,
8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17,
16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25,
24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1}

◆ perm5

const uchar perm5[32]
static
Initial value:
= {16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23,
26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27,
3, 9, 19, 13, 30, 6, 22, 11, 4, 25}

◆ perm6

const uchar perm6[64]
static
Initial value:
= {
40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31,
38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29,
36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27,
34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25}

◆ sbox

const uchar sbox[8][4][16]
static

◆ sc

const uchar sc[16] = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1}
static