NTSTATUS smb2_key_derivation(const uint8_t *KI, size_t KI_len,
const uint8_t *Label, size_t Label_len,
const uint8_t *Context, size_t Context_len,
- uint8_t KO[16])
+ uint8_t *KO, size_t KO_len)
{
- size_t KO_len = 16;
gnutls_hmac_hd_t hmac_hnd = NULL;
uint8_t buf[4];
static const uint8_t zero = 0;
NTSTATUS smb2_key_derivation(const uint8_t *KI, size_t KI_len,
const uint8_t *Label, size_t Label_len,
const uint8_t *Context, size_t Context_len,
- uint8_t KO[16]);
+ uint8_t *KO, size_t KO_len);
NTSTATUS smb2_signing_encrypt_pdu(struct smb2_signing_key *encryption_key,
uint16_t cipher_id,
status = smb2_key_derivation(session_key, sizeof(session_key),
d->label.data, d->label.length,
d->context.data, d->context.length,
- session->smb2->signing_key->blob.data);
+ session->smb2->signing_key->blob.data,
+ session->smb2->signing_key->blob.length);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
status = smb2_key_derivation(session_key, sizeof(session_key),
d->label.data, d->label.length,
d->context.data, d->context.length,
- session->smb2->encryption_key->blob.data);
+ session->smb2->encryption_key->blob.data,
+ session->smb2->encryption_key->blob.length);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
status = smb2_key_derivation(session_key, sizeof(session_key),
d->label.data, d->label.length,
d->context.data, d->context.length,
- session->smb2->decryption_key->blob.data);
+ session->smb2->decryption_key->blob.data,
+ session->smb2->decryption_key->blob.length);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
status = smb2_key_derivation(session_key, sizeof(session_key),
d->label.data, d->label.length,
d->context.data, d->context.length,
- session->smb2->application_key.data);
+ session->smb2->application_key.data,
+ session->smb2->application_key.length);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
status = smb2_key_derivation(channel_key, sizeof(channel_key),
d->label.data, d->label.length,
d->context.data, d->context.length,
- session->smb2_channel.signing_key->blob.data);
+ session->smb2_channel.signing_key->blob.data,
+ session->smb2_channel.signing_key->blob.length);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
status = smb2_key_derivation(session_key, sizeof(session_key),
d->label.data, d->label.length,
d->context.data, d->context.length,
- x->global->signing_key->blob.data);
+ x->global->signing_key->blob.data,
+ x->global->signing_key->blob.length);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
status = smb2_key_derivation(session_key, sizeof(session_key),
d->label.data, d->label.length,
d->context.data, d->context.length,
- x->global->decryption_key->blob.data);
+ x->global->decryption_key->blob.data,
+ x->global->decryption_key->blob.length);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
status = smb2_key_derivation(session_key, sizeof(session_key),
d->label.data, d->label.length,
d->context.data, d->context.length,
- x->global->encryption_key->blob.data);
+ x->global->encryption_key->blob.data,
+ x->global->encryption_key->blob.length);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
status = smb2_key_derivation(session_key, sizeof(session_key),
d->label.data, d->label.length,
d->context.data, d->context.length,
- x->global->application_key.data);
+ x->global->application_key.data,
+ x->global->application_key.length);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
status = smb2_key_derivation(session_key, sizeof(session_key),
d->label.data, d->label.length,
d->context.data, d->context.length,
- c->signing_key->blob.data);
+ c->signing_key->blob.data,
+ c->signing_key->blob.length);
if (!NT_STATUS_IS_OK(status)) {
return status;
}