- ZERO_STRUCT(session_key);
- memcpy(session_key, session_info->session_key.data,
- MIN(session_info->session_key.length, sizeof(session_key)));
-
- x->global->signing_key = talloc_zero(x->global,
- struct smb2_signing_key);
- if (x->global->signing_key == NULL) {
- ZERO_STRUCT(session_key);
- return NT_STATUS_NO_MEMORY;
- }
- talloc_set_destructor(x->global->signing_key,
- smb2_signing_key_destructor);
-
- x->global->signing_key->blob =
- x->global->signing_key_blob =
- data_blob_talloc(x->global,
- session_key,
- sizeof(session_key));
- if (!smb2_signing_key_valid(x->global->signing_key)) {
- ZERO_STRUCT(session_key);
- return NT_STATUS_NO_MEMORY;
- }
-
- if (xconn->protocol >= PROTOCOL_SMB2_24) {
- const struct smb2_signing_derivation *d = derivations.signing;
-
- 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.length);
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
+ status = smb2_signing_key_sign_create(x->global,
+ x->global->signing_algo,
+ &session_info->session_key,
+ derivations.signing,
+ &x->global->signing_key);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;