blob: 35bc2746f014a8c177520ac7e5b46fef920062f8 [file] [log] [blame]
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//! Placeholder crate for an unimplemented CP. Can be used to satisfy the trait bounds of
//! the uber CryptoProvider trait, when only a subset of the associated types have real implementations
//! Can be removed once no one else is depending on it.
#![allow(unused_variables)]
use std::fmt::Debug;
use crypto_provider::aead::AeadInit;
use crypto_provider::{
aead::{Aead, AeadError, AesGcm, AesGcmSiv},
aes::{
cbc::{AesCbcIv, AesCbcPkcs7Padded, DecryptionError, EncryptionError},
ctr::{AesCtr, NonceAndCounter},
Aes, Aes128Key, Aes256Key, AesBlock, AesCipher, AesDecryptCipher, AesEncryptCipher,
},
ed25519::{
self, Ed25519Provider, InvalidPublicKeyBytes, KeyPairImpl, RawPrivateKey,
RawPrivateKeyPermit, RawPublicKey, RawSignature, SignatureError, SignatureImpl,
},
elliptic_curve::{EcdhProvider, EphemeralSecret, PublicKey},
hkdf::{Hkdf, InvalidLength},
hmac::{Hmac, MacError},
p256::{P256PublicKey, PointCompression, P256},
tinyvec::{ArrayVec, SliceVec},
x25519::X25519,
};
#[derive(Default, Clone, Debug, PartialEq, Eq)]
pub struct CryptoProviderStubs;
impl crypto_provider::CryptoProvider for CryptoProviderStubs {
type HkdfSha256 = HkdfStubs;
type HmacSha256 = HmacStubs;
type HkdfSha512 = HkdfStubs;
type HmacSha512 = HmacStubs;
type AesCbcPkcs7Padded = AesCbcPkcs7PaddedStubs;
type X25519 = X25519Stubs;
type P256 = P256Stubs;
type Sha256 = Sha2Stubs;
type Sha512 = Sha2Stubs;
type Aes128 = Aes128Impl;
type Aes256 = Aes256Impl;
type AesCtr128 = Aes128Stubs;
type AesCtr256 = Aes256Stubs;
type Ed25519 = Ed25519Stubs;
type Aes128GcmSiv = Aes128Stubs;
type Aes256GcmSiv = Aes256Stubs;
type Aes128Gcm = Aes128Stubs;
type Aes256Gcm = Aes256Stubs;
type CryptoRng = ();
fn constant_time_eq(_a: &[u8], _b: &[u8]) -> bool {
unimplemented!()
}
}
pub struct Aes128Impl;
impl Aes for Aes128Impl {
type Key = Aes128Key;
type EncryptCipher = Aes128Stubs;
type DecryptCipher = Aes128Stubs;
}
pub struct Aes256Impl;
impl Aes for Aes256Impl {
type Key = Aes256Key;
type EncryptCipher = Aes256Stubs;
type DecryptCipher = Aes256Stubs;
}
#[derive(Clone)]
pub struct HkdfStubs;
impl Hkdf for HkdfStubs {
fn new(_salt: Option<&[u8]>, _ikm: &[u8]) -> Self {
unimplemented!()
}
fn expand_multi_info(
&self,
_info_components: &[&[u8]],
_okm: &mut [u8],
) -> Result<(), InvalidLength> {
unimplemented!()
}
fn expand(&self, _info: &[u8], _okm: &mut [u8]) -> Result<(), InvalidLength> {
unimplemented!()
}
}
pub struct HmacStubs;
impl Hmac<32> for HmacStubs {
fn new_from_key(_key: [u8; 32]) -> Self {
unimplemented!()
}
fn new_from_slice(_key: &[u8]) -> Result<Self, crypto_provider::hmac::InvalidLength> {
unimplemented!()
}
fn update(&mut self, _data: &[u8]) {
unimplemented!()
}
fn finalize(self) -> [u8; 32] {
unimplemented!()
}
fn verify_slice(self, _tag: &[u8]) -> Result<(), MacError> {
unimplemented!()
}
fn verify(self, _tag: [u8; 32]) -> Result<(), MacError> {
unimplemented!()
}
fn verify_truncated_left(self, _tag: &[u8]) -> Result<(), MacError> {
unimplemented!()
}
}
impl Hmac<64> for HmacStubs {
fn new_from_key(_key: [u8; 64]) -> Self {
unimplemented!()
}
fn new_from_slice(_key: &[u8]) -> Result<Self, crypto_provider::hmac::InvalidLength> {
unimplemented!()
}
fn update(&mut self, _data: &[u8]) {
unimplemented!()
}
fn finalize(self) -> [u8; 64] {
unimplemented!()
}
fn verify_slice(self, _tag: &[u8]) -> Result<(), MacError> {
unimplemented!()
}
fn verify(self, _tag: [u8; 64]) -> Result<(), MacError> {
unimplemented!()
}
fn verify_truncated_left(self, _tag: &[u8]) -> Result<(), MacError> {
unimplemented!()
}
}
pub struct AesCbcPkcs7PaddedStubs;
impl AesCbcPkcs7Padded for AesCbcPkcs7PaddedStubs {
fn encrypt(_key: &Aes256Key, _iv: &AesCbcIv, _message: &[u8]) -> Vec<u8> {
unimplemented!()
}
fn encrypt_in_place(
key: &Aes256Key,
iv: &AesCbcIv,
message: &mut SliceVec<u8>,
) -> Result<(), EncryptionError> {
unimplemented!()
}
fn decrypt(
_key: &Aes256Key,
_iv: &AesCbcIv,
_ciphertext: &[u8],
) -> Result<Vec<u8>, DecryptionError> {
unimplemented!()
}
fn decrypt_in_place(
key: &Aes256Key,
iv: &AesCbcIv,
ciphertext: &mut SliceVec<u8>,
) -> Result<(), DecryptionError> {
unimplemented!()
}
}
pub struct X25519Stubs;
impl EcdhProvider<X25519> for X25519Stubs {
type PublicKey = EcdhPubKey;
type EphemeralSecret = EphSecretStubs;
type SharedSecret = [u8; 32];
}
pub struct EphSecretStubs;
impl EphemeralSecret<X25519> for EphSecretStubs {
type Impl = X25519Stubs;
type Error = ();
type Rng = ();
type EncodedPublicKey = [u8; 32];
fn generate_random(_rng: &mut Self::Rng) -> Self {
unimplemented!()
}
fn public_key_bytes(&self) -> Self::EncodedPublicKey {
unimplemented!()
}
fn diffie_hellman(
self,
_other_pub: &<Self::Impl as EcdhProvider<X25519>>::PublicKey,
) -> Result<<Self::Impl as EcdhProvider<X25519>>::SharedSecret, Self::Error> {
unimplemented!()
}
}
impl EphemeralSecret<P256> for EphSecretStubs {
type Impl = P256Stubs;
type Error = ();
type Rng = ();
type EncodedPublicKey = ArrayVec<[u8; 65]>;
fn generate_random(_rng: &mut Self::Rng) -> Self {
unimplemented!()
}
fn public_key_bytes(&self) -> Self::EncodedPublicKey {
unimplemented!()
}
fn diffie_hellman(
self,
_other_pub: &<Self::Impl as EcdhProvider<P256>>::PublicKey,
) -> Result<<Self::Impl as EcdhProvider<P256>>::SharedSecret, Self::Error> {
unimplemented!()
}
}
#[derive(Debug, PartialEq)]
pub struct EcdhPubKey;
impl PublicKey<X25519> for EcdhPubKey {
type Error = ();
type EncodedPublicKey = [u8; 32];
fn from_bytes(_bytes: &[u8]) -> Result<Self, Self::Error> {
unimplemented!()
}
fn to_bytes(&self) -> Self::EncodedPublicKey {
unimplemented!()
}
}
#[derive(Debug, PartialEq, Eq)]
pub struct PublicKeyStubs;
impl P256PublicKey for PublicKeyStubs {
type Error = ();
fn from_sec1_bytes(_bytes: &[u8]) -> Result<Self, Self::Error> {
unimplemented!()
}
fn to_sec1_bytes(&self, _point_compression: PointCompression) -> ArrayVec<[u8; 65]> {
unimplemented!()
}
fn to_affine_coordinates(&self) -> Result<([u8; 32], [u8; 32]), Self::Error> {
unimplemented!()
}
fn from_affine_coordinates(_x: &[u8; 32], _y: &[u8; 32]) -> Result<Self, Self::Error> {
unimplemented!()
}
}
pub struct P256Stubs;
impl EcdhProvider<P256> for P256Stubs {
type PublicKey = PublicKeyStubs;
type EphemeralSecret = EphSecretStubs;
type SharedSecret = [u8; 32];
}
pub struct Sha2Stubs;
impl crypto_provider::sha2::Sha256 for Sha2Stubs {
fn sha256(_input: &[u8]) -> [u8; 32] {
unimplemented!()
}
}
impl crypto_provider::sha2::Sha512 for Sha2Stubs {
fn sha512(_input: &[u8]) -> [u8; 64] {
unimplemented!()
}
}
pub struct Aes128Stubs;
impl AeadInit<Aes128Key> for Aes128Stubs {
fn new(key: &Aes128Key) -> Self {
unimplemented!()
}
}
impl AesCipher for Aes128Stubs {
type Key = Aes128Key;
fn new(key: &Self::Key) -> Self {
unimplemented!()
}
}
impl AesDecryptCipher for Aes128Stubs {
fn decrypt(&self, block: &mut AesBlock) {
unimplemented!()
}
}
impl AesEncryptCipher for Aes128Stubs {
fn encrypt(&self, block: &mut AesBlock) {
unimplemented!()
}
}
impl AesCtr for Aes128Stubs {
type Key = Aes128Key;
fn new(_key: &Self::Key, _nonce_and_counter: NonceAndCounter) -> Self {
unimplemented!()
}
fn apply_keystream(&mut self, data: &mut [u8]) {
unimplemented!()
}
}
impl Aead for Aes128Stubs {
const TAG_SIZE: usize = 16;
type Nonce = [u8; 12];
type Tag = [u8; 16];
fn encrypt(&self, msg: &[u8], aad: &[u8], nonce: &[u8; 12]) -> Result<Vec<u8>, AeadError> {
unimplemented!()
}
fn encrypt_detached(
&self,
msg: &mut [u8],
aad: &[u8],
nonce: &Self::Nonce,
) -> Result<Self::Tag, AeadError> {
unimplemented!()
}
fn decrypt(&self, msg: &[u8], aad: &[u8], nonce: &[u8; 12]) -> Result<Vec<u8>, AeadError> {
unimplemented!()
}
fn decrypt_detached(
&self,
msg: &mut [u8],
aad: &[u8],
nonce: &Self::Nonce,
tag: &Self::Tag,
) -> Result<(), AeadError> {
unimplemented!()
}
}
impl AesGcmSiv for Aes128Stubs {}
impl AesGcm for Aes128Stubs {}
pub struct Aes256Stubs;
impl AeadInit<Aes256Key> for Aes256Stubs {
fn new(key: &Aes256Key) -> Self {
unimplemented!()
}
}
impl AesCipher for Aes256Stubs {
type Key = Aes256Key;
fn new(key: &Self::Key) -> Self {
unimplemented!()
}
}
impl AesEncryptCipher for Aes256Stubs {
fn encrypt(&self, block: &mut AesBlock) {
unimplemented!()
}
}
impl AesDecryptCipher for Aes256Stubs {
fn decrypt(&self, block: &mut AesBlock) {
unimplemented!()
}
}
impl AesCtr for Aes256Stubs {
type Key = Aes256Key;
fn new(_key: &Self::Key, _nonce_and_counter: NonceAndCounter) -> Self {
unimplemented!()
}
fn apply_keystream(&mut self, data: &mut [u8]) {
unimplemented!()
}
}
impl Aead for Aes256Stubs {
const TAG_SIZE: usize = 16;
type Nonce = [u8; 12];
type Tag = [u8; 16];
fn encrypt(&self, msg: &[u8], aad: &[u8], nonce: &[u8; 12]) -> Result<Vec<u8>, AeadError> {
unimplemented!()
}
fn encrypt_detached(
&self,
msg: &mut [u8],
aad: &[u8],
nonce: &Self::Nonce,
) -> Result<Self::Tag, AeadError> {
unimplemented!()
}
fn decrypt(&self, msg: &[u8], aad: &[u8], nonce: &[u8; 12]) -> Result<Vec<u8>, AeadError> {
unimplemented!()
}
fn decrypt_detached(
&self,
msg: &mut [u8],
aad: &[u8],
nonce: &Self::Nonce,
tag: &Self::Tag,
) -> Result<(), AeadError> {
unimplemented!()
}
}
impl AesGcmSiv for Aes256Stubs {}
impl AesGcm for Aes256Stubs {}
pub struct Ed25519Stubs;
impl Ed25519Provider for Ed25519Stubs {
type KeyPair = KeyPairStubs;
type PublicKey = PublicKeyStubs;
type Signature = SignatureStubs;
}
impl ed25519::PublicKeyImpl for PublicKeyStubs {
type Signature = SignatureStubs;
fn from_bytes(bytes: &RawPublicKey) -> Result<Self, InvalidPublicKeyBytes>
where
Self: Sized,
{
unimplemented!()
}
fn to_bytes(&self) -> RawPublicKey {
unimplemented!()
}
fn verify_strict(
&self,
_message: &[u8],
_signature: &Self::Signature,
) -> Result<(), SignatureError> {
unimplemented!()
}
}
pub struct SignatureStubs;
impl SignatureImpl for SignatureStubs {
fn from_bytes(_bytes: &RawSignature) -> Self {
unimplemented!()
}
fn to_bytes(&self) -> RawSignature {
unimplemented!()
}
}
pub struct KeyPairStubs;
impl KeyPairImpl for KeyPairStubs {
type PublicKey = PublicKeyStubs;
type Signature = SignatureStubs;
fn raw_private_key(&self, _permit: &RawPrivateKeyPermit) -> RawPrivateKey {
unimplemented!()
}
fn from_raw_private_key(_bytes: &RawPrivateKey, _permit: &RawPrivateKeyPermit) -> Self
where
Self: Sized,
{
unimplemented!()
}
fn sign(&self, _msg: &[u8]) -> Self::Signature {
unimplemented!()
}
fn generate() -> Self {
unimplemented!()
}
fn public_key(&self) -> Self::PublicKey {
unimplemented!()
}
}