code: def _smb3kdf(self, ki, label, context):
          
          kdf = KBKDFHMAC(
              algorithm=hashes.SHA256(),
              mode=Mode.CounterMode,
              length=16,
              rlen=4,
              llen=4,
              location=CounterLocation.BeforeFixed,
              label=label,
              context=context,
              fixed=None,
              backend=default_backend()
          )
          return kdf.derive(ki)
docs: See SMB 3.x key derivation function
          https://blogs.msdn.microsoft.com/openspecification/2017/05/26/smb-2-and-smb-3-security-in-windows-10-the-anatomy-of-signing-and-cryptographic-keys/
  
          :param ki: The session key is the KDK used as an input to the KDF
          :param label: The purpose of this derived key as bytes string
          :param context: The context information of this derived key as bytes
          string
          :return: Key derived by the KDF as specified by [SP800-108] 5.1