89 lines
4.0 KiB
Swift
89 lines
4.0 KiB
Swift
//
|
|
// 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"
|
|
}
|
|
}
|
|
}
|