// SPDX-License-Identifier: MIT OR Apache-2.0 // Copyright (c) VexaHub and contributors. use core::iter; use digest::Output; use crate::common::{Dst, Mode, STR_HASH_TO_GROUP, finalize_after_unblind}; use crate::{CipherSuite, Group}; pub(crate) fn prf( input: &[u8], key: ::Scalar, mode: Mode, ) -> Output { let dst = Dst::new::(STR_HASH_TO_GROUP, mode); let point = CS::Group::hash_to_curve::(&[input], &dst.as_dst()).unwrap(); let res = point * &key; finalize_after_unblind::(iter::once((input, res))) .next() .unwrap() .unwrap() }