pub struct Blake3;Expand description
BLAKE3 single-stage KDF (unofficial KDF id 0xFF01).
BLAKE3 is an extendable-output function, so it is used exactly like
Shake256: the key schedule is built from a single Kdf::labeled_derive
call whose Derive primitive is the BLAKE3 XOF. The output size is 32
bytes.
§Interoperability
BLAKE3 is not registered in the IANA “HPKE KDF Identifiers” registry and
is not specified by any HPKE standard. The identifier 0xFF01 is an
stdx-private, unofficial value chosen to stay clear of the low IDs IANA is
likely to assign to future official KDFs; ciphersuites using this KDF only
interoperate with implementations that adopt the same convention.
§Example
use hpke::kdf::{Blake3, Kdf};
let suite_id = b"HPKE\x64\x7a\xff\x01\x00\x03";
let mut output_keying_material = [0u8; 32];
Blake3::labeled_derive(&mut output_keying_material, &[b"ikm"], suite_id, b"label", &[b"info"]).unwrap();Trait Implementations§
impl Copy for Blake3
impl Eq for Blake3
Source§impl Kdf for Blake3
impl Kdf for Blake3
Source§const HPKE_KDF_ID: u16 = 0xFF01
const HPKE_KDF_ID: u16 = 0xFF01
The HPKE KDF identifier (
draft-ietf-hpke-hpke-05 Section 7.2, IANA “HPKE KDF
Identifiers”), used to build the ciphersuite suite_id.Source§const SINGLE_STAGE: bool = true
const SINGLE_STAGE: bool = true
Whether this is a single-stage KDF (
draft-ietf-hpke-hpke-05 Section 4). Read moreSource§fn labeled_derive(
out: &mut [u8],
input_keying_material: &[&[u8]],
suite_id: &[u8],
label: &[u8],
context: &[&[u8]],
) -> Result<(), HpkeError>
fn labeled_derive( out: &mut [u8], input_keying_material: &[&[u8]], suite_id: &[u8], label: &[u8], context: &[&[u8]], ) -> Result<(), HpkeError>
draft-ietf-hpke-hpke-05 Section 4.4
LabeledDerive(input_keying_material, label, context, L):
Derive(input_keying_material || "HPKE-v1" || suite_id || I2OSP(len(label), 2) || label || I2OSP(L, 2) || context, L), where
L == out.len() and the elements of input_keying_material and
context are absorbed in order. Read moreSource§const OUTPUT_SIZE: usize = <Self::Hash as crypto::Hasher>::OUTPUT_SIZE
const OUTPUT_SIZE: usize = <Self::Hash as crypto::Hasher>::OUTPUT_SIZE
Output size of the extract step (the hash output size). Read more
Source§fn labeled_extract(
salt: &[u8],
suite_id: &[u8],
label: &[u8],
input_keying_material: &[u8],
) -> Hash
fn labeled_extract( salt: &[u8], suite_id: &[u8], label: &[u8], input_keying_material: &[u8], ) -> Hash
draft-ietf-hpke-hpke-05 Section 4.4
LabeledExtract(salt, label, input_keying_material):
Extract(salt, "HPKE-v1" || suite_id || label || input_keying_material). Read moreSource§fn labeled_expand(
out: &mut [u8],
pseudorandom_key: &[u8],
suite_id: &[u8],
label: &[u8],
info: &[u8],
) -> Result<(), HpkeError>
fn labeled_expand( out: &mut [u8], pseudorandom_key: &[u8], suite_id: &[u8], label: &[u8], info: &[u8], ) -> Result<(), HpkeError>
draft-ietf-hpke-hpke-05 Section 4.4
LabeledExpand(pseudorandom_key, label, info, L):
Expand(pseudorandom_key, I2OSP(L, 2) || "HPKE-v1" || suite_id || label || info, L),
where L == out.len(). The info string is absorbed incrementally, so
it may be arbitrarily long. Read moreimpl StructuralPartialEq for Blake3
Auto Trait Implementations§
impl Freeze for Blake3
impl RefUnwindSafe for Blake3
impl Send for Blake3
impl Sync for Blake3
impl Unpin for Blake3
impl UnsafeUnpin for Blake3
impl UnwindSafe for Blake3
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more