/// Convert any result that contains an ECH error into a result with an `EchRetry`. pubfn convert_ech_error(fd: *mut PRFileDesc, err: Error) -> Error { iflet Error::NssError {
code: SSL_ERROR_ECH_RETRY_WITH_ECH,
..
} = &err
{ letmut item = Item::make_empty(); ifunsafe { SSL_GetEchRetryConfigs(fd, &mut item).is_err() } { return Error::InternalError;
} let buf = unsafe { let slc = null_safe_slice(item.data, item.len); let buf = Vec::from(slc);
SECITEM_FreeItem(&mut item, PRBool::from(false));
buf
};
Error::EchRetry(buf)
} else {
err
}
}
/// Generate a key pair for encrypted client hello (ECH). /// /// # Errors /// /// When NSS fails to generate a key pair or when the KEM is not supported. /// /// # Panics /// /// When underlying types aren't large enough to hold keys. So never. pubfn generate_keys() -> Res<(PrivateKey, PublicKey)> { let slot = Slot::internal()?;
let oid_data = unsafe { p11::SECOID_FindOIDByTag(p11::SECOidTag::SEC_OID_CURVE25519) }; let oid = unsafe { oid_data.as_ref() }.ok_or(Error::InternalError)?; let oid_slc = unsafe { null_safe_slice(oid.oid.data, oid.oid.len) }; letmut params: Vec<u8> = Vec::with_capacity(oid_slc.len() + 2);
params.push(u8::try_from(p11::SEC_ASN1_OBJECT_ID)?);
params.push(u8::try_from(oid.oid.len)?);
params.extend_from_slice(oid_slc);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.