// Copyright 2020, The Android Open Source Project // // 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. //! This module implements Error for the keystore2_crypto library. use crate::zvec; /// Crypto specific error codes. #[derive(Debug, thiserror::Error, Eq, PartialEq)] pub enum Error { /// This is returned if the C/C++ implementation of AES_gcm_decrypt returned false. #[error("Failed to decrypt.")] DecryptionFailed, /// This is returned if the C/C++ implementation of AES_gcm_encrypt returned false. #[error("Failed to encrypt.")] EncryptionFailed, /// The initialization vector has the wrong length. #[error("Invalid IV length.")] InvalidIvLength, /// The aead tag has the wrong length. #[error("Invalid AEAD tag length.")] InvalidAeadTagLength, /// The key has the wrong length. #[error("Invalid key length.")] InvalidKeyLength, /// Invalid data length. #[error("Invalid data length.")] InvalidDataLength, /// Invalid salt length. #[error("Invalid salt length.")] InvalidSaltLength, /// Random number generation failed. #[error("Random number generation failed.")] RandomNumberGenerationFailed, /// ZVec construction failed. #[error(transparent)] LayoutError(#[from] std::alloc::LayoutErr), /// Nix error. #[error(transparent)] NixError(#[from] nix::Error), /// This is returned if the C implementation of HKDFExtract returned false /// or otherwise failed. #[error("Failed to extract.")] HKDFExtractFailed, /// This is returned if the C implementation of HKDFExpand returned false. #[error("Failed to expand.")] HKDFExpandFailed, /// This is returned if the C implementation of ECDHComputeKey returned -1. #[error("Failed to compute ecdh key.")] ECDHComputeKeyFailed, /// This is returned if the C implementation of ECKEYGenerateKey returned null. #[error("Failed to generate key.")] ECKEYGenerateKeyFailed, /// This is returned if the C implementation of ECKEYMarshalPrivateKey returned 0. #[error("Failed to marshal private key.")] ECKEYMarshalPrivateKeyFailed, /// This is returned if the C implementation of ECKEYParsePrivateKey returned null. #[error("Failed to parse private key.")] ECKEYParsePrivateKeyFailed, /// This is returned if the C implementation of ECPOINTPoint2Oct returned 0. #[error("Failed to convert point to oct.")] ECPoint2OctFailed, /// This is returned if the C implementation of ECPOINTOct2Point returned null. #[error("Failed to convert oct to point.")] ECOct2PointFailed, /// This is returned if the C implementation of extractSubjectFromCertificate failed. #[error("Failed to extract certificate subject.")] ExtractSubjectFailed, /// This is returned if the C implementation of hmacSha256 failed. #[error("Failed to calculate HMAC-SHA256.")] HmacSha256Failed, /// Zvec error. #[error(transparent)] ZVec(#[from] zvec::Error), }