//
// SwiftyRSAError.swift
// SwiftyRSA
//
// Created by Lois Di Qual on 5/15/17.
// Contributions by Stchepinsky Nathan on 24/06/2021
// Copyright © 2017 Scoop. All rights reserved.
//
import Foundation
public enum SwiftyRSAError: Error {
case pemDoesNotContainKey
case keyRepresentationFailed(error: CFError?)
case keyGenerationFailed(error: CFError?)
case keyCreateFailed(error: CFError?)
case keyAddFailed(status: OSStatus)
case keyCopyFailed(status: OSStatus)
case tagEncodingFailed
case asn1ParsingFailed
case invalidAsn1RootNode
case invalidAsn1Structure
case invalidBase64String
case chunkDecryptFailed(index: Int)
case chunkEncryptFailed(index: Int)
case stringToDataConversionFailed
case dataToStringConversionFailed
case invalidDigestSize(digestSize: Int, maxChunkSize: Int)
case signatureCreateFailed(status: OSStatus)
case signatureVerifyFailed(status: OSStatus)
case pemFileNotFound(name: String)
case derFileNotFound(name: String)
case notAPublicKey
case notAPrivateKey
case x509CertificateFailed
var localizedDescription: String {
switch self {
case .pemDoesNotContainKey:
return "Couldn't get data from PEM key: no data available after stripping headers"
case .keyRepresentationFailed(let error):
return "Couldn't retrieve key data from the keychain: CFError \(String(describing: error))"
case .keyGenerationFailed(let error):
return "Couldn't generate key pair: CFError: \(String(describing: error))"
case .keyCreateFailed(let error):
return "Couldn't create key reference from key data: CFError \(String(describing: error))"
case .keyAddFailed(let status):
return "Couldn't retrieve key data from the keychain: OSStatus \(status)"
case .keyCopyFailed(let status):
return "Couldn't copy and retrieve key reference from the keychain: OSStatus \(status)"
case .tagEncodingFailed:
return "Couldn't create tag data for key"
case .asn1ParsingFailed:
return "Couldn't parse the ASN1 key data. Please file a bug at https://goo.gl/y67MW6"
case .invalidAsn1RootNode:
return "Couldn't parse the provided key because its root ASN1 node is not a sequence. The key is probably corrupt"
case .invalidAsn1Structure:
return "Couldn't parse the provided key because it has an unexpected ASN1 structure"
case .invalidBase64String:
return "The provided string is not a valid Base 64 string"
case .chunkDecryptFailed(let index):
return "Couldn't decrypt chunk at index \(index)"
case .chunkEncryptFailed(let index):
return "Couldn't encrypt chunk at index \(index)"
case .stringToDataConversionFailed:
return "Couldn't convert string to data using specified encoding"
case .dataToStringConversionFailed:
return "Couldn't convert data to string representation"
case .invalidDigestSize(let digestSize, let maxChunkSize):
return "Provided digest type produces a size (\(digestSize)) that is bigger than the maximum chunk size \(maxChunkSize) of the RSA key"
case .signatureCreateFailed(let status):
return "Couldn't sign provided data: OSStatus \(status)"
case .signatureVerifyFailed(let status):
return "Couldn't verify signature of the provided data: OSStatus \(status)"
case .pemFileNotFound(let name):
return "Couldn't find a PEM file named '\(name)'"
case .derFileNotFound(let name):
return "Couldn't find a DER file named '\(name)'"
case .notAPublicKey:
return "Provided key is not a valid RSA public key"
case .notAPrivateKey:
return "Provided key is not a valid RSA pivate key"
case .x509CertificateFailed :
return "Couldn't prepend the provided key because it has an unexpected structure"
}
}
}