#include <sys/types.h>
#include <netsmb/smb_conn.h>
#include <netsmb/nsmb_kcrypt.h>
#include <netsmb/mchain.h>
int
nsmb_preauth_init(smb_vc_t *vcp)
{
int rc;
rc = nsmb_sha512_getmech(&vcp->vc3_preauthmech);
if (rc != 0) {
return (EAUTH);
}
return (rc);
}
int
nsmb_preauth_calc(smb_vc_t *vcp, mblk_t *mb,
uint8_t *in_hashval, uint8_t *out_hashval)
{
smb_sign_ctx_t ctx = 0;
int rc;
if ((rc = nsmb_sha512_init(&ctx, &vcp->vc3_preauthmech)) != 0)
return (rc);
rc = nsmb_sha512_update(ctx, in_hashval, SHA512_DIGEST_LENGTH);
if (rc != 0)
return (rc);
while (mb != NULL) {
size_t len = MBLKL(mb);
rc = nsmb_sha512_update(ctx, mb->b_rptr, len);
if (rc != 0)
return (rc);
mb = mb->b_cont;
}
rc = nsmb_sha512_final(ctx, out_hashval);
return (rc);
}