Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/rust/mls-rs-crypto-traits/src/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 2 kB image not shown  

Quelle  dh.rs   Sprache: unbekannt

 
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Copyright by contributors to this project.
// SPDX-License-Identifier: (Apache-2.0 OR MIT)

use mls_rs_core::{
    crypto::{HpkePublicKey, HpkeSecretKey},
    error::IntoAnyError,
};

use alloc::vec::Vec;

#[cfg(feature = "mock")]
use mockall::automock;

/// A trait that provides the required DH functions, as in RFC 9180,Section 4.1
#[cfg_attr(feature = "mock", automock(type Error = crate::mock::TestError;))]
#[cfg_attr(not(mls_build_async), maybe_async::must_be_sync)]
#[cfg_attr(all(target_arch = "wasm32", mls_build_async), maybe_async::must_be_async(?Send))]
#[cfg_attr(
    all(not(target_arch = "wasm32"), mls_build_async),
    maybe_async::must_be_async
)]
pub trait DhType: Send + Sync {
    type Error: IntoAnyError + Send + Sync;

    async fn dh(
        &self,
        secret_key: &HpkeSecretKey,
        public_key: &HpkePublicKey,
    ) -> Result<Vec<u8>, Self::Error>;

    /// Generate a fresh key pair. This is the only place where randomness is used in this
    /// module. The function could be implemented in the same way as `derive` with random
    /// `ikm`, but it could also be implemented directly with a crypto provider like OpenSSL.
    async fn generate(&self) -> Result<(HpkeSecretKey, HpkePublicKey), Self::Error>;

    /// Outputs the public key corresponding to the given secret key bytes. If the secret
    /// key is malformed, the function should return an error.
    async fn to_public(&self, secret_key: &HpkeSecretKey) -> Result<HpkePublicKey, Self::Error>;

    /// If the output is `Some(bitmask)`, then the `Kem::derive` function will generate
    /// the secret key by rejection sampling over random byte sequences with `bitmask`
    /// applied to the most significant byte.
    ///
    /// Typical outputs for ECDH are:
    /// * `None` for curves 25519 and X448 (no rejection sampling is needed),
    /// * `Some(0x01)` for curve P-521 (all bits  of the first byte except the least
    ///   significant one are filtered out),
    /// * `Some(0xFF)`for curves P-256 and P-384 (rejection sampling is needed but no
    ///   bits need to be filtered).
    fn bitmask_for_rejection_sampling(&self) -> Option<u8>;

    fn secret_key_size(&self) -> usize;

    fn public_key_validate(&self, key: &HpkePublicKey) -> Result<(), Self::Error>;
}

[ Dauer der Verarbeitung: 0.3 Sekunden  (vorverarbeitet)  ]