This function may be part of the keyexchange procedure: It takes over from the arguments given, invokes crypto_scalarmult und results in the hashed our_sharedkey as proposed in the documentaion. There is no heap allocation for secrets, yet enforce may require heap memory, thus inhibiting the attribute @nogc. It may throw in error conditions.