OpenVAS Scanner  21.4.1
Macros | Typedefs | Functions | Variables
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)
 
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()

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

◆ dohash()

static 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()

static 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()

static 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 
)

◆ 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()

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

◆ xor()

static 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