SecError
* Added the SecError to throw when interacting with the Keychain * Added the SecError.Code to wrap the status codes thrown by interacting with the Keychain Co-authored-by: Bram Kolkman <bramkolkman@thinkerium.nl> Reviewed-on: #2
This commit was merged in pull request #2.
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -9,7 +9,8 @@ xcuserdata/
|
|||||||
.LSOverride
|
.LSOverride
|
||||||
|
|
||||||
# Icon must end with two \r
|
# Icon must end with two \r
|
||||||
Icon
|
Icon
|
||||||
|
|
||||||
|
|
||||||
# Thumbnails
|
# Thumbnails
|
||||||
._*
|
._*
|
||||||
@@ -60,7 +61,7 @@ playground.xcworkspace
|
|||||||
#
|
#
|
||||||
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
|
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
|
||||||
# hence it is not needed unless you have added a package configuration file to your project
|
# hence it is not needed unless you have added a package configuration file to your project
|
||||||
# hence it is not needed unless you have added a package configuration file to your project
|
.swiftpm
|
||||||
|
|
||||||
.build/
|
.build/
|
||||||
|
|
||||||
|
|||||||
763
Keychain/Sources/Keychain/Error/SecError+Code.swift
Normal file
763
Keychain/Sources/Keychain/Error/SecError+Code.swift
Normal file
@@ -0,0 +1,763 @@
|
|||||||
|
//
|
||||||
|
// SecError+Code.swift
|
||||||
|
// Keychain
|
||||||
|
//
|
||||||
|
// Created by Bram Kolkman on 23/02/2026.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Security
|
||||||
|
|
||||||
|
extension SecError {
|
||||||
|
/// Security error codes.
|
||||||
|
public enum Code: OSStatus, Hashable, Sendable { // swiftlint:disable:this type_body_length
|
||||||
|
/// Function or operation not implemented.
|
||||||
|
case unimplemented = -4
|
||||||
|
/// The disk is full.
|
||||||
|
case diskFull = -34
|
||||||
|
/// I/O error.
|
||||||
|
case io = -36 // swiftlint:disable:this identifier_name
|
||||||
|
/// File already open with write permission.
|
||||||
|
case opWr = -49
|
||||||
|
/// One or more parameters passed to a function were not valid.
|
||||||
|
case param = -50
|
||||||
|
/// Write permissions error.
|
||||||
|
case wrPerm = -61
|
||||||
|
/// Failed to allocate memory.
|
||||||
|
case allocate = -108
|
||||||
|
/// User canceled the operation.
|
||||||
|
case userCanceled = -128
|
||||||
|
/// Bad parameter or invalid state for operation.
|
||||||
|
case badReq = -909
|
||||||
|
case internalComponent = -2070
|
||||||
|
case coreFoundationUnknown = -4960
|
||||||
|
/// A required entitlement isn't present.
|
||||||
|
case missingEntitlement = -34018
|
||||||
|
/// Client is restricted and is not permitted to perform this operation.
|
||||||
|
case restrictedAPI = -34020
|
||||||
|
/// No keychain is available. You may need to restart your computer.
|
||||||
|
case notAvailable = -25291
|
||||||
|
/// This keychain cannot be modified.
|
||||||
|
case readOnly = -25292
|
||||||
|
/// The user name or passphrase you entered is not correct.
|
||||||
|
case authFailed = -25293
|
||||||
|
/// The specified keychain could not be found.
|
||||||
|
case noSuchKeychain = -25294
|
||||||
|
/// The specified keychain is not a valid keychain file.
|
||||||
|
case invalidKeychain = -25295
|
||||||
|
/// A keychain with the same name already exists.
|
||||||
|
case duplicateKeychain = -25296
|
||||||
|
/// The specified callback function is already installed.
|
||||||
|
case duplicateCallback = -25297
|
||||||
|
/// The specified callback function is not valid.
|
||||||
|
case invalidCallback = -25298
|
||||||
|
/// The specified item already exists in the keychain.
|
||||||
|
case duplicateItem = -25299
|
||||||
|
/// The specified item could not be found in the keychain.
|
||||||
|
case itemNotFound = -25300
|
||||||
|
/// There is not enough memory available to use the specified item.
|
||||||
|
case bufferTooSmall = -25301
|
||||||
|
/// This item contains information which is too large or in a format that cannot be displayed.
|
||||||
|
case dataTooLarge = -25302
|
||||||
|
/// The specified attribute does not exist.
|
||||||
|
case noSuchAttr = -25303
|
||||||
|
/// The specified item is no longer valid. It may have been deleted from the keychain.
|
||||||
|
case invalidItemRef = -25304
|
||||||
|
/// Unable to search the current keychain.
|
||||||
|
case invalidSearchRef = -25305
|
||||||
|
/// The specified item does not appear to be a valid keychain item.
|
||||||
|
case noSuchClass = -25306
|
||||||
|
/// A default keychain could not be found.
|
||||||
|
case noDefaultKeychain = -25307
|
||||||
|
/// User interaction is not allowed.
|
||||||
|
case interactionNotAllowed = -25308
|
||||||
|
/// The specified attribute could not be modified.
|
||||||
|
case readOnlyAttr = -25309
|
||||||
|
/// This keychain was created by a different version of the system software and cannot be opened.
|
||||||
|
case wrongSecVersion = -25310
|
||||||
|
/// This item specifies a key size which is too large or too small.
|
||||||
|
case keySizeNotAllowed = -25311
|
||||||
|
/// A required component (data storage module) could not be loaded. You may need to restart your computer.
|
||||||
|
case noStorageModule = -25312
|
||||||
|
/// A required component (certificate module) could not be loaded. You may need to restart your computer.
|
||||||
|
case noCertificateModule = -25313
|
||||||
|
/// A required component (policy module) could not be loaded. You may need to restart your computer.
|
||||||
|
case noPolicyModule = -25314
|
||||||
|
/// User interaction is required, but is currently not allowed.
|
||||||
|
case interactionRequired = -25315
|
||||||
|
/// The contents of this item cannot be retrieved.
|
||||||
|
case dataNotAvailable = -25316
|
||||||
|
/// The contents of this item cannot be modified.
|
||||||
|
case dataNotModifiable = -25317
|
||||||
|
/// One or more certificates required to validate this certificate cannot be found.
|
||||||
|
case createChainFailed = -25318
|
||||||
|
/// The specified preferences domain is not valid.
|
||||||
|
case invalidPrefsDomain = -25319
|
||||||
|
/// In dark wake, no UI possible.
|
||||||
|
case inDarkWake = -25320
|
||||||
|
/// The specified access control list is not in standard (simple) form.
|
||||||
|
case aclNotSimple = -25240
|
||||||
|
/// The specified policy cannot be found.
|
||||||
|
case policyNotFound = -25241
|
||||||
|
/// The specified trust setting is invalid.
|
||||||
|
case invalidTrustSetting = -25242
|
||||||
|
/// The specified item has no access control.
|
||||||
|
case noAccessForItem = -25243
|
||||||
|
/// Invalid attempt to change the owner of this item.
|
||||||
|
case invalidOwnerEdit = -25244
|
||||||
|
/// No trust results are available.
|
||||||
|
case trustNotAvailable = -25245
|
||||||
|
/// Import/Export format unsupported.
|
||||||
|
case unsupportedFormat = -25256
|
||||||
|
/// Unknown format in import.
|
||||||
|
case unknownFormat = -25257
|
||||||
|
/// Key material must be wrapped for export.
|
||||||
|
case keyIsSensitive = -25258
|
||||||
|
/// An attempt was made to import multiple private keys.
|
||||||
|
case multiplePrivKeys = -25259
|
||||||
|
/// Passphrase is required for import/export.
|
||||||
|
case passphraseRequired = -25260
|
||||||
|
/// The password reference was invalid.
|
||||||
|
case invalidPasswordRef = -25261
|
||||||
|
/// The Trust Settings Record was corrupted.
|
||||||
|
case invalidTrustSettings = -25262
|
||||||
|
/// No Trust Settings were found.
|
||||||
|
case noTrustSettings = -25263
|
||||||
|
/// MAC verification failed during PKCS12 import (wrong password?)
|
||||||
|
case pkcs12VerifyFailure = -25264
|
||||||
|
/// A certificate was not signed by its proposed parent.
|
||||||
|
case notSigner = -26267
|
||||||
|
/// Unable to decode the provided data.
|
||||||
|
case decode = -26275
|
||||||
|
/// The required service is not available.
|
||||||
|
case serviceNotAvailable = -67585
|
||||||
|
/// The client ID is not correct.
|
||||||
|
case insufficientClientID = -67586
|
||||||
|
/// A device reset has occurred.
|
||||||
|
case deviceReset = -67587
|
||||||
|
/// A device failure has occurred.
|
||||||
|
case deviceFailed = -67588
|
||||||
|
/// Adding an application ACL subject failed.
|
||||||
|
case appleAddAppACLSubject = -67589
|
||||||
|
/// The public key is incomplete.
|
||||||
|
case applePublicKeyIncomplete = -67590
|
||||||
|
/// A signature mismatch has occurred.
|
||||||
|
case appleSignatureMismatch = -67591
|
||||||
|
/// The specified key has an invalid start date.
|
||||||
|
case appleInvalidKeyStartDate = -67592
|
||||||
|
/// The specified key has an invalid end date.
|
||||||
|
case appleInvalidKeyEndDate = -67593
|
||||||
|
/// A conversion error has occurred.
|
||||||
|
case conversionError = -67594
|
||||||
|
/// A SSLv2 rollback error has occurred.
|
||||||
|
case appleSSLv2Rollback = -67595
|
||||||
|
/// The quota was exceeded.
|
||||||
|
case quotaExceeded = -67596
|
||||||
|
/// The file is too big.
|
||||||
|
case fileTooBig = -67597
|
||||||
|
/// The specified database has an invalid blob.
|
||||||
|
case invalidDatabaseBlob = -67598
|
||||||
|
/// The specified database has an invalid key blob.
|
||||||
|
case invalidKeyBlob = -67599
|
||||||
|
/// The specified database has an incompatible blob.
|
||||||
|
case incompatibleDatabaseBlob = -67600
|
||||||
|
/// The specified database has an incompatible key blob.
|
||||||
|
case incompatibleKeyBlob = -67601
|
||||||
|
/// A host name mismatch has occurred.
|
||||||
|
case hostNameMismatch = -67602
|
||||||
|
/// There is an unknown critical extension flag.
|
||||||
|
case unknownCriticalExtensionFlag = -67603
|
||||||
|
/// No basic constraints were found.
|
||||||
|
case noBasicConstraints = -67604
|
||||||
|
/// No basic CA constraints were found.
|
||||||
|
case noBasicConstraintsCA = -67605
|
||||||
|
/// The authority key ID is not valid.
|
||||||
|
case invalidAuthorityKeyID = -67606
|
||||||
|
/// The subject key ID is not valid.
|
||||||
|
case invalidSubjectKeyID = -67607
|
||||||
|
/// The key usage is not valid for the specified policy.
|
||||||
|
case invalidKeyUsageForPolicy = -67608
|
||||||
|
/// The extended key usage is not valid.
|
||||||
|
case invalidExtendedKeyUsage = -67609
|
||||||
|
/// The ID linkage is not valid.
|
||||||
|
case invalidIDLinkage = -67610
|
||||||
|
/// The path length constraint was exceeded.
|
||||||
|
case pathLengthConstraintExceeded = -67611
|
||||||
|
/// The root or anchor certificate is not valid.
|
||||||
|
case invalidRoot = -67612
|
||||||
|
/// The CRL has expired.
|
||||||
|
case crlExpired = -67613
|
||||||
|
/// The CRL is not yet valid.
|
||||||
|
case crlNotValidYet = -67614
|
||||||
|
/// The CRL was not found.
|
||||||
|
case crlNotFound = -67615
|
||||||
|
/// The CRL server is down.
|
||||||
|
case crlServerDown = -67616
|
||||||
|
/// The CRL has a bad Uniform Resource Identifier.
|
||||||
|
case crlBadURI = -67617
|
||||||
|
/// An unknown certificate extension was encountered.
|
||||||
|
case unknownCertExtension = -67618
|
||||||
|
/// An unknown CRL extension was encountered.
|
||||||
|
case unknownCRLExtension = -67619
|
||||||
|
/// The CRL is not trusted.
|
||||||
|
case crlNotTrusted = -67620
|
||||||
|
/// The CRL policy failed.
|
||||||
|
case crlPolicyFailed = -67621
|
||||||
|
/// The issuing distribution point was not valid.
|
||||||
|
case idpFailure = -67622
|
||||||
|
/// An email address mismatch was encountered.
|
||||||
|
case smimeEmailAddressesNotFound = -67623
|
||||||
|
/// The appropriate extended key usage for SMIME was not found.
|
||||||
|
case smimeBadExtendedKeyUsage = -67624
|
||||||
|
/// The key usage is not compatible with SMIME.
|
||||||
|
case smimeBadKeyUsage = -67625
|
||||||
|
/// The key usage extension is not marked as critical.
|
||||||
|
case smimeKeyUsageNotCritical = -67626
|
||||||
|
/// No email address was found in the certificate.
|
||||||
|
case smimeNoEmailAddress = -67627
|
||||||
|
/// The subject alternative name extension is not marked as critical.
|
||||||
|
case smimeSubjAltNameNotCritical = -67628
|
||||||
|
/// The appropriate extended key usage for SSL was not found.
|
||||||
|
case sslBadExtendedKeyUsage = -67629
|
||||||
|
/// The OCSP response was incorrect or could not be parsed.
|
||||||
|
case ocspBadResponse = -67630
|
||||||
|
/// The OCSP request was incorrect or could not be parsed.
|
||||||
|
case ocspBadRequest = -67631
|
||||||
|
/// OCSP service is unavailable.
|
||||||
|
case ocspUnavailable = -67632
|
||||||
|
/// The OCSP server did not recognize this certificate.
|
||||||
|
case ocspStatusUnrecognized = -67633
|
||||||
|
/// An end-of-data was detected.
|
||||||
|
case endOfData = -67634
|
||||||
|
/// An incomplete certificate revocation check occurred.
|
||||||
|
case incompleteCertRevocationCheck = -67635
|
||||||
|
/// A network failure occurred.
|
||||||
|
case networkFailure = -67636
|
||||||
|
/// The OCSP response was not trusted to a root or anchor certificate.
|
||||||
|
case ocspNotTrustedToAnchor = -67637
|
||||||
|
/// The record was modified.
|
||||||
|
case recordModified = -67638
|
||||||
|
/// The OCSP response had an invalid signature.
|
||||||
|
case ocspSignatureError = -67639
|
||||||
|
/// The OCSP response had no signer.
|
||||||
|
case ocspNoSigner = -67640
|
||||||
|
/// The OCSP responder was given a malformed request.
|
||||||
|
case ocspResponderMalformedReq = -67641
|
||||||
|
/// The OCSP responder encountered an internal error.
|
||||||
|
case ocspResponderInternalError = -67642
|
||||||
|
/// The OCSP responder is busy, try again later.
|
||||||
|
case ocspResponderTryLater = -67643
|
||||||
|
/// The OCSP responder requires a signature.
|
||||||
|
case ocspResponderSignatureRequired = -67644
|
||||||
|
/// The OCSP responder rejected this request as unauthorized.
|
||||||
|
case ocspResponderUnauthorized = -67645
|
||||||
|
/// The OCSP response nonce did not match the request.
|
||||||
|
case ocspResponseNonceMismatch = -67646
|
||||||
|
/// Code signing encountered an incorrect certificate chain length.
|
||||||
|
case codeSigningBadCertChainLength = -67647
|
||||||
|
/// Code signing found no basic constraints.
|
||||||
|
case codeSigningNoBasicConstraints = -67648
|
||||||
|
/// Code signing encountered an incorrect path length constraint.
|
||||||
|
case codeSigningBadPathLengthConstraint = -67649
|
||||||
|
/// Code signing found no extended key usage.
|
||||||
|
case codeSigningNoExtendedKeyUsage = -67650
|
||||||
|
/// Code signing indicated use of a development-only certificate.
|
||||||
|
case codeSigningDevelopment = -67651
|
||||||
|
/// Resource signing has encountered an incorrect certificate chain length.
|
||||||
|
case resourceSignBadCertChainLength = -67652
|
||||||
|
/// Resource signing has encountered an error in the extended key usage.
|
||||||
|
case resourceSignBadExtKeyUsage = -67653
|
||||||
|
/// The trust setting for this policy was set to Deny.
|
||||||
|
case trustSettingDeny = -67654
|
||||||
|
/// An invalid certificate subject name was encountered.
|
||||||
|
case invalidSubjectName = -67655
|
||||||
|
/// An unknown qualified certificate statement was encountered.
|
||||||
|
case unknownQualifiedCertStatement = -67656
|
||||||
|
case mobileMeRequestQueued = -67657
|
||||||
|
case mobileMeRequestRedirected = -67658
|
||||||
|
case mobileMeServerError = -67659
|
||||||
|
case mobileMeServerNotAvailable = -67660
|
||||||
|
case mobileMeServerAlreadyExists = -67661
|
||||||
|
case mobileMeServerServiceErr = -67662
|
||||||
|
case mobileMeRequestAlreadyPending = -67663
|
||||||
|
case mobileMeNoRequestPending = -67664
|
||||||
|
case mobileMeCSRVerifyFailure = -67665
|
||||||
|
case mobileMeFailedConsistencyCheck = -67666
|
||||||
|
/// A function was called without initializing CSSM.
|
||||||
|
case notInitialized = -67667
|
||||||
|
/// The CSSM handle does not match with the service type.
|
||||||
|
case invalidHandleUsage = -67668
|
||||||
|
/// A reference to the calling module was not found in the list of authorized callers.
|
||||||
|
case pvcReferentNotFound = -67669
|
||||||
|
/// A function address was not within the verified module.
|
||||||
|
case functionIntegrityFail = -67670
|
||||||
|
/// An internal error has occurred.
|
||||||
|
case internalError = -67671
|
||||||
|
/// A memory error has occurred.
|
||||||
|
case memoryError = -67672
|
||||||
|
/// Invalid data was encountered.
|
||||||
|
case invalidData = -67673
|
||||||
|
/// A Module Directory Service error has occurred.
|
||||||
|
case mdsError = -67674
|
||||||
|
/// An invalid pointer was encountered.
|
||||||
|
case invalidPointer = -67675
|
||||||
|
/// Self-check has failed.
|
||||||
|
case selfCheckFailed = -67676
|
||||||
|
/// A function has failed.
|
||||||
|
case functionFailed = -67677
|
||||||
|
/// A module manifest verification failure has occurred.
|
||||||
|
case moduleManifestVerifyFailed = -67678
|
||||||
|
/// An invalid GUID was encountered.
|
||||||
|
case invalidGUID = -67679
|
||||||
|
/// An invalid handle was encountered.
|
||||||
|
case invalidHandle = -67680
|
||||||
|
/// An invalid DB list was encountered.
|
||||||
|
case invalidDBList = -67681
|
||||||
|
/// An invalid passthrough ID was encountered.
|
||||||
|
case invalidPassthroughID = -67682
|
||||||
|
/// An invalid network address was encountered.
|
||||||
|
case invalidNetworkAddress = -67683
|
||||||
|
/// The certificate revocation list is already signed.
|
||||||
|
case crlAlreadySigned = -67684
|
||||||
|
/// An invalid number of fields were encountered.
|
||||||
|
case invalidNumberOfFields = -67685
|
||||||
|
/// A verification failure occurred.
|
||||||
|
case verificationFailure = -67686
|
||||||
|
/// An unknown tag was encountered.
|
||||||
|
case unknownTag = -67687
|
||||||
|
/// An invalid signature was encountered.
|
||||||
|
case invalidSignature = -67688
|
||||||
|
/// An invalid name was encountered.
|
||||||
|
case invalidName = -67689
|
||||||
|
/// An invalid certificate reference was encountered.
|
||||||
|
case invalidCertificateRef = -67690
|
||||||
|
/// An invalid certificate group was encountered.
|
||||||
|
case invalidCertificateGroup = -67691
|
||||||
|
/// The specified tag was not found.
|
||||||
|
case tagNotFound = -67692
|
||||||
|
/// The specified query was not valid.
|
||||||
|
case invalidQuery = -67693
|
||||||
|
/// An invalid value was detected.
|
||||||
|
case invalidValue = -67694
|
||||||
|
/// A callback has failed.
|
||||||
|
case callbackFailed = -67695
|
||||||
|
/// An ACL delete operation has failed.
|
||||||
|
case aclDeleteFailed = -67696
|
||||||
|
/// An ACL replace operation has failed.
|
||||||
|
case aclReplaceFailed = -67697
|
||||||
|
/// An ACL add operation has failed.
|
||||||
|
case aclAddFailed = -67698
|
||||||
|
/// An ACL change operation has failed.
|
||||||
|
case aclChangeFailed = -67699
|
||||||
|
/// Invalid access credentials were encountered.
|
||||||
|
case invalidAccessCredentials = -67700
|
||||||
|
/// An invalid record was encountered.
|
||||||
|
case invalidRecord = -67701
|
||||||
|
/// An invalid ACL was encountered.
|
||||||
|
case invalidACL = -67702
|
||||||
|
/// An invalid sample value was encountered.
|
||||||
|
case invalidSampleValue = -67703
|
||||||
|
/// An incompatible version was encountered.
|
||||||
|
case incompatibleVersion = -67704
|
||||||
|
/// The privilege was not granted.
|
||||||
|
case privilegeNotGranted = -67705
|
||||||
|
/// An invalid scope was encountered.
|
||||||
|
case invalidScope = -67706
|
||||||
|
/// The PVC is already configured.
|
||||||
|
case pvcAlreadyConfigured = -67707
|
||||||
|
/// An invalid PVC was encountered.
|
||||||
|
case invalidPVC = -67708
|
||||||
|
/// The EMM load has failed.
|
||||||
|
case emmLoadFailed = -67709
|
||||||
|
/// The EMM unload has failed.
|
||||||
|
case emmUnloadFailed = -67710
|
||||||
|
/// The add-in load operation has failed.
|
||||||
|
case addinLoadFailed = -67711
|
||||||
|
/// An invalid key was encountered.
|
||||||
|
case invalidKeyRef = -67712
|
||||||
|
/// An invalid key hierarchy was encountered.
|
||||||
|
case invalidKeyHierarchy = -67713
|
||||||
|
/// The add-in unload operation has failed.
|
||||||
|
case addinUnloadFailed = -67714
|
||||||
|
/// A library reference was not found.
|
||||||
|
case libraryReferenceNotFound = -67715
|
||||||
|
/// An invalid add-in function table was encountered.
|
||||||
|
case invalidAddinFunctionTable = -67716
|
||||||
|
/// An invalid service mask was encountered.
|
||||||
|
case invalidServiceMask = -67717
|
||||||
|
/// A module was not loaded.
|
||||||
|
case moduleNotLoaded = -67718
|
||||||
|
/// An invalid subservice ID was encountered.
|
||||||
|
case invalidSubServiceID = -67719
|
||||||
|
/// An attribute was not in the context.
|
||||||
|
case attributeNotInContext = -67720
|
||||||
|
/// A module failed to initialize.
|
||||||
|
case moduleManagerInitializeFailed = -67721
|
||||||
|
/// A module was not found.
|
||||||
|
case moduleManagerNotFound = -67722
|
||||||
|
/// An event notification callback was not found.
|
||||||
|
case eventNotificationCallbackNotFound = -67723
|
||||||
|
/// An input length error was encountered.
|
||||||
|
case inputLengthError = -67724
|
||||||
|
/// An output length error was encountered.
|
||||||
|
case outputLengthError = -67725
|
||||||
|
/// The privilege is not supported.
|
||||||
|
case privilegeNotSupported = -67726
|
||||||
|
/// A device error was encountered.
|
||||||
|
case deviceError = -67727
|
||||||
|
/// The CSP handle was busy.
|
||||||
|
case attachHandleBusy = -67728
|
||||||
|
/// You are not logged in.
|
||||||
|
case notLoggedIn = -67729
|
||||||
|
/// An algorithm mismatch was encountered.
|
||||||
|
case algorithmMismatch = -67730
|
||||||
|
/// The key usage is incorrect.
|
||||||
|
case keyUsageIncorrect = -67731
|
||||||
|
/// The key blob type is incorrect.
|
||||||
|
case keyBlobTypeIncorrect = -67732
|
||||||
|
/// The key header is inconsistent.
|
||||||
|
case keyHeaderInconsistent = -67733
|
||||||
|
/// The key header format is not supported.
|
||||||
|
case unsupportedKeyFormat = -67734
|
||||||
|
/// The key size is not supported.
|
||||||
|
case unsupportedKeySize = -67735
|
||||||
|
/// The key usage mask is not valid.
|
||||||
|
case invalidKeyUsageMask = -67736
|
||||||
|
/// The key usage mask is not supported.
|
||||||
|
case unsupportedKeyUsageMask = -67737
|
||||||
|
/// The key attribute mask is not valid.
|
||||||
|
case invalidKeyAttributeMask = -67738
|
||||||
|
/// The key attribute mask is not supported.
|
||||||
|
case unsupportedKeyAttributeMask = -67739
|
||||||
|
/// The key label is not valid.
|
||||||
|
case invalidKeyLabel = -67740
|
||||||
|
/// The key label is not supported.
|
||||||
|
case unsupportedKeyLabel = -67741
|
||||||
|
/// The key format is not valid.
|
||||||
|
case invalidKeyFormat = -67742
|
||||||
|
/// The vector of buffers is not supported.
|
||||||
|
case unsupportedVectorOfBuffers = -67743
|
||||||
|
/// The input vector is not valid.
|
||||||
|
case invalidInputVector = -67744
|
||||||
|
/// The output vector is not valid.
|
||||||
|
case invalidOutputVector = -67745
|
||||||
|
/// An invalid context was encountered.
|
||||||
|
case invalidContext = -67746
|
||||||
|
/// An invalid algorithm was encountered.
|
||||||
|
case invalidAlgorithm = -67747
|
||||||
|
/// A key attribute was not valid.
|
||||||
|
case invalidAttributeKey = -67748
|
||||||
|
/// A key attribute was missing.
|
||||||
|
case missingAttributeKey = -67749
|
||||||
|
/// An init vector attribute was not valid.
|
||||||
|
case invalidAttributeInitVector = -67750
|
||||||
|
/// An init vector attribute was missing.
|
||||||
|
case missingAttributeInitVector = -67751
|
||||||
|
/// A salt attribute was not valid.
|
||||||
|
case invalidAttributeSalt = -67752
|
||||||
|
/// A salt attribute was missing.
|
||||||
|
case missingAttributeSalt = -67753
|
||||||
|
/// A padding attribute was not valid.
|
||||||
|
case invalidAttributePadding = -67754
|
||||||
|
/// A padding attribute was missing.
|
||||||
|
case missingAttributePadding = -67755
|
||||||
|
/// A random number attribute was not valid.
|
||||||
|
case invalidAttributeRandom = -67756
|
||||||
|
/// A random number attribute was missing.
|
||||||
|
case missingAttributeRandom = -67757
|
||||||
|
/// A seed attribute was not valid.
|
||||||
|
case invalidAttributeSeed = -67758
|
||||||
|
/// A seed attribute was missing.
|
||||||
|
case missingAttributeSeed = -67759
|
||||||
|
/// A passphrase attribute was not valid.
|
||||||
|
case invalidAttributePassphrase = -67760
|
||||||
|
/// A passphrase attribute was missing.
|
||||||
|
case missingAttributePassphrase = -67761
|
||||||
|
/// A key length attribute was not valid.
|
||||||
|
case invalidAttributeKeyLength = -67762
|
||||||
|
/// A key length attribute was missing.
|
||||||
|
case missingAttributeKeyLength = -67763
|
||||||
|
/// A block size attribute was not valid.
|
||||||
|
case invalidAttributeBlockSize = -67764
|
||||||
|
/// A block size attribute was missing.
|
||||||
|
case missingAttributeBlockSize = -67765
|
||||||
|
/// An output size attribute was not valid.
|
||||||
|
case invalidAttributeOutputSize = -67766
|
||||||
|
/// An output size attribute was missing.
|
||||||
|
case missingAttributeOutputSize = -67767
|
||||||
|
/// The number of rounds attribute was not valid.
|
||||||
|
case invalidAttributeRounds = -67768
|
||||||
|
/// The number of rounds attribute was missing.
|
||||||
|
case missingAttributeRounds = -67769
|
||||||
|
/// An algorithm parameters attribute was not valid.
|
||||||
|
case invalidAlgorithmParms = -67770
|
||||||
|
/// An algorithm parameters attribute was missing.
|
||||||
|
case missingAlgorithmParms = -67771
|
||||||
|
/// A label attribute was not valid.
|
||||||
|
case invalidAttributeLabel = -67772
|
||||||
|
/// A label attribute was missing.
|
||||||
|
case missingAttributeLabel = -67773
|
||||||
|
/// A key type attribute was not valid.
|
||||||
|
case invalidAttributeKeyType = -67774
|
||||||
|
/// A key type attribute was missing.
|
||||||
|
case missingAttributeKeyType = -67775
|
||||||
|
/// A mode attribute was not valid.
|
||||||
|
case invalidAttributeMode = -67776
|
||||||
|
/// A mode attribute was missing.
|
||||||
|
case missingAttributeMode = -67777
|
||||||
|
/// An effective bits attribute was not valid.
|
||||||
|
case invalidAttributeEffectiveBits = -67778
|
||||||
|
/// An effective bits attribute was missing.
|
||||||
|
case missingAttributeEffectiveBits = -67779
|
||||||
|
/// A start date attribute was not valid.
|
||||||
|
case invalidAttributeStartDate = -67780
|
||||||
|
/// A start date attribute was missing.
|
||||||
|
case missingAttributeStartDate = -67781
|
||||||
|
/// An end date attribute was not valid.
|
||||||
|
case invalidAttributeEndDate = -67782
|
||||||
|
/// An end date attribute was missing.
|
||||||
|
case missingAttributeEndDate = -67783
|
||||||
|
/// A version attribute was not valid.
|
||||||
|
case invalidAttributeVersion = -67784
|
||||||
|
/// A version attribute was missing.
|
||||||
|
case missingAttributeVersion = -67785
|
||||||
|
/// A prime attribute was not valid.
|
||||||
|
case invalidAttributePrime = -67786
|
||||||
|
/// A prime attribute was missing.
|
||||||
|
case missingAttributePrime = -67787
|
||||||
|
/// A base attribute was not valid.
|
||||||
|
case invalidAttributeBase = -67788
|
||||||
|
/// A base attribute was missing.
|
||||||
|
case missingAttributeBase = -67789
|
||||||
|
/// A subprime attribute was not valid.
|
||||||
|
case invalidAttributeSubprime = -67790
|
||||||
|
/// A subprime attribute was missing.
|
||||||
|
case missingAttributeSubprime = -67791
|
||||||
|
/// An iteration count attribute was not valid.
|
||||||
|
case invalidAttributeIterationCount = -67792
|
||||||
|
/// An iteration count attribute was missing.
|
||||||
|
case missingAttributeIterationCount = -67793
|
||||||
|
/// A database handle attribute was not valid.
|
||||||
|
case invalidAttributeDLDBHandle = -67794
|
||||||
|
/// A database handle attribute was missing.
|
||||||
|
case missingAttributeDLDBHandle = -67795
|
||||||
|
/// An access credentials attribute was not valid.
|
||||||
|
case invalidAttributeAccessCredentials = -67796
|
||||||
|
/// An access credentials attribute was missing.
|
||||||
|
case missingAttributeAccessCredentials = -67797
|
||||||
|
/// A public key format attribute was not valid.
|
||||||
|
case invalidAttributePublicKeyFormat = -67798
|
||||||
|
/// A public key format attribute was missing.
|
||||||
|
case missingAttributePublicKeyFormat = -67799
|
||||||
|
/// A private key format attribute was not valid.
|
||||||
|
case invalidAttributePrivateKeyFormat = -67800
|
||||||
|
/// A private key format attribute was missing.
|
||||||
|
case missingAttributePrivateKeyFormat = -67801
|
||||||
|
/// A symmetric key format attribute was not valid.
|
||||||
|
case invalidAttributeSymmetricKeyFormat = -67802
|
||||||
|
/// A symmetric key format attribute was missing.
|
||||||
|
case missingAttributeSymmetricKeyFormat = -67803
|
||||||
|
/// A wrapped key format attribute was not valid.
|
||||||
|
case invalidAttributeWrappedKeyFormat = -67804
|
||||||
|
/// A wrapped key format attribute was missing.
|
||||||
|
case missingAttributeWrappedKeyFormat = -67805
|
||||||
|
/// A staged operation is in progress.
|
||||||
|
case stagedOperationInProgress = -67806
|
||||||
|
/// A staged operation was not started.
|
||||||
|
case stagedOperationNotStarted = -67807
|
||||||
|
/// A cryptographic verification failure has occurred.
|
||||||
|
case verifyFailed = -67808
|
||||||
|
/// The query size is unknown.
|
||||||
|
case querySizeUnknown = -67809
|
||||||
|
/// A block size mismatch occurred.
|
||||||
|
case blockSizeMismatch = -67810
|
||||||
|
/// The public key was inconsistent.
|
||||||
|
case publicKeyInconsistent = -67811
|
||||||
|
/// A device verification failure has occurred.
|
||||||
|
case deviceVerifyFailed = -67812
|
||||||
|
/// An invalid login name was detected.
|
||||||
|
case invalidLoginName = -67813
|
||||||
|
/// The user is already logged in.
|
||||||
|
case alreadyLoggedIn = -67814
|
||||||
|
/// An invalid digest algorithm was detected.
|
||||||
|
case invalidDigestAlgorithm = -67815
|
||||||
|
/// An invalid CRL group was detected.
|
||||||
|
case invalidCRLGroup = -67816
|
||||||
|
/// The certificate cannot operate.
|
||||||
|
case certificateCannotOperate = -67817
|
||||||
|
/// An expired certificate was detected.
|
||||||
|
case certificateExpired = -67818
|
||||||
|
/// The certificate is not yet valid.
|
||||||
|
case certificateNotValidYet = -67819
|
||||||
|
/// The certificate was revoked.
|
||||||
|
case certificateRevoked = -67820
|
||||||
|
/// The certificate was suspended.
|
||||||
|
case certificateSuspended = -67821
|
||||||
|
/// Insufficient credentials were detected.
|
||||||
|
case insufficientCredentials = -67822
|
||||||
|
/// The action was not valid.
|
||||||
|
case invalidAction = -67823
|
||||||
|
/// The authority was not valid.
|
||||||
|
case invalidAuthority = -67824
|
||||||
|
/// A verify action has failed.
|
||||||
|
case verifyActionFailed = -67825
|
||||||
|
/// The certificate authority was not valid.
|
||||||
|
case invalidCertAuthority = -67826
|
||||||
|
/// The CRL authority was not valid.
|
||||||
|
case invalidCRLAuthority = -67827
|
||||||
|
/// The CRL encoding was not valid.
|
||||||
|
case invalidCRLEncoding = -67828
|
||||||
|
/// The CRL type was not valid.
|
||||||
|
case invalidCRLType = -67829
|
||||||
|
/// The CRL was not valid.
|
||||||
|
case invalidCRL = -67830
|
||||||
|
/// The form type was not valid.
|
||||||
|
case invalidFormType = -67831
|
||||||
|
/// The ID was not valid.
|
||||||
|
case invalidID = -67832
|
||||||
|
/// The identifier was not valid.
|
||||||
|
case invalidIdentifier = -67833
|
||||||
|
/// The index was not valid.
|
||||||
|
case invalidIndex = -67834
|
||||||
|
/// The policy identifiers are not valid.
|
||||||
|
case invalidPolicyIdentifiers = -67835
|
||||||
|
/// The time specified was not valid.
|
||||||
|
case invalidTimeString = -67836
|
||||||
|
/// The trust policy reason was not valid.
|
||||||
|
case invalidReason = -67837
|
||||||
|
/// The request inputs are not valid.
|
||||||
|
case invalidRequestInputs = -67838
|
||||||
|
/// The response vector was not valid.
|
||||||
|
case invalidResponseVector = -67839
|
||||||
|
/// The stop-on policy was not valid.
|
||||||
|
case invalidStopOnPolicy = -67840
|
||||||
|
/// The tuple was not valid.
|
||||||
|
case invalidTuple = -67841
|
||||||
|
/// Multiple values are not supported.
|
||||||
|
case multipleValuesUnsupported = -67842
|
||||||
|
/// The certificate was not trusted.
|
||||||
|
case notTrusted = -67843
|
||||||
|
/// No default authority was detected.
|
||||||
|
case noDefaultAuthority = -67844
|
||||||
|
/// The trust policy had a rejected form.
|
||||||
|
case rejectedForm = -67845
|
||||||
|
/// The request was lost.
|
||||||
|
case requestLost = -67846
|
||||||
|
/// The request was rejected.
|
||||||
|
case requestRejected = -67847
|
||||||
|
/// The address type is not supported.
|
||||||
|
case unsupportedAddressType = -67848
|
||||||
|
/// The service is not supported.
|
||||||
|
case unsupportedService = -67849
|
||||||
|
/// The tuple group was not valid.
|
||||||
|
case invalidTupleGroup = -67850
|
||||||
|
/// The base ACLs are not valid.
|
||||||
|
case invalidBaseACLs = -67851
|
||||||
|
/// The tuple credentials are not valid.
|
||||||
|
case invalidTupleCredentials = -67852
|
||||||
|
/// The encoding was not valid.
|
||||||
|
case invalidEncoding = -67853
|
||||||
|
/// The validity period was not valid.
|
||||||
|
case invalidValidityPeriod = -67854
|
||||||
|
/// The requestor was not valid.
|
||||||
|
case invalidRequestor = -67855
|
||||||
|
/// The request descriptor was not valid.
|
||||||
|
case requestDescriptor = -67856
|
||||||
|
/// The bundle information was not valid.
|
||||||
|
case invalidBundleInfo = -67857
|
||||||
|
/// The CRL index was not valid.
|
||||||
|
case invalidCRLIndex = -67858
|
||||||
|
/// No field values were detected.
|
||||||
|
case noFieldValues = -67859
|
||||||
|
/// The field format is not supported.
|
||||||
|
case unsupportedFieldFormat = -67860
|
||||||
|
/// The index information is not supported.
|
||||||
|
case unsupportedIndexInfo = -67861
|
||||||
|
/// The locality is not supported.
|
||||||
|
case unsupportedLocality = -67862
|
||||||
|
/// The number of attributes is not supported.
|
||||||
|
case unsupportedNumAttributes = -67863
|
||||||
|
/// The number of indexes is not supported.
|
||||||
|
case unsupportedNumIndexes = -67864
|
||||||
|
/// The number of record types is not supported.
|
||||||
|
case unsupportedNumRecordTypes = -67865
|
||||||
|
/// Too many fields were specified.
|
||||||
|
case fieldSpecifiedMultiple = -67866
|
||||||
|
/// The field format was incompatible.
|
||||||
|
case incompatibleFieldFormat = -67867
|
||||||
|
/// The parsing module was not valid.
|
||||||
|
case invalidParsingModule = -67868
|
||||||
|
/// The database is locked.
|
||||||
|
case databaseLocked = -67869
|
||||||
|
/// The data store is open.
|
||||||
|
case datastoreIsOpen = -67870
|
||||||
|
/// A missing value was detected.
|
||||||
|
case missingValue = -67871
|
||||||
|
/// The query limits are not supported.
|
||||||
|
case unsupportedQueryLimits = -67872
|
||||||
|
/// The number of selection predicates is not supported.
|
||||||
|
case unsupportedNumSelectionPreds = -67873
|
||||||
|
/// The operator is not supported.
|
||||||
|
case unsupportedOperator = -67874
|
||||||
|
/// The database location is not valid.
|
||||||
|
case invalidDBLocation = -67875
|
||||||
|
/// The access request is not valid.
|
||||||
|
case invalidAccessRequest = -67876
|
||||||
|
/// The index information is not valid.
|
||||||
|
case invalidIndexInfo = -67877
|
||||||
|
/// The new owner is not valid.
|
||||||
|
case invalidNewOwner = -67878
|
||||||
|
/// The modify mode is not valid.
|
||||||
|
case invalidModifyMode = -67879
|
||||||
|
/// A required certificate extension is missing.
|
||||||
|
case missingRequiredExtension = -67880
|
||||||
|
/// The extended key usage extension was not marked critical.
|
||||||
|
case extendedKeyUsageNotCritical = -67881
|
||||||
|
/// A timestamp was expected but was not found.
|
||||||
|
case timestampMissing = -67882
|
||||||
|
/// The timestamp was not valid.
|
||||||
|
case timestampInvalid = -67883
|
||||||
|
/// The timestamp was not trusted.
|
||||||
|
case timestampNotTrusted = -67884
|
||||||
|
/// The timestamp service is not available.
|
||||||
|
case timestampServiceNotAvailable = -67885
|
||||||
|
/// An unrecognized or unsupported Algorithm Identifier in timestamp.
|
||||||
|
case timestampBadAlg = -67886
|
||||||
|
/// The timestamp transaction is not permitted or supported.
|
||||||
|
case timestampBadRequest = -67887
|
||||||
|
/// The timestamp data submitted has the wrong format.
|
||||||
|
case timestampBadDataFormat = -67888
|
||||||
|
/// The time source for the Timestamp Authority is not available.
|
||||||
|
case timestampTimeNotAvailable = -67889
|
||||||
|
/// The requested policy is not supported by the Timestamp Authority.
|
||||||
|
case timestampUnacceptedPolicy = -67890
|
||||||
|
/// The requested extension is not supported by the Timestamp Authority.
|
||||||
|
case timestampUnacceptedExtension = -67891
|
||||||
|
/// The additional information requested is not available.
|
||||||
|
case timestampAddInfoNotAvailable = -67892
|
||||||
|
/// The timestamp request cannot be handled due to system failure.
|
||||||
|
case timestampSystemFailure = -67893
|
||||||
|
/// A signing time was expected but was not found.
|
||||||
|
case signingTimeMissing = -67894
|
||||||
|
/// A timestamp transaction was rejected.
|
||||||
|
case timestampRejection = -67895
|
||||||
|
/// A timestamp transaction is waiting.
|
||||||
|
case timestampWaiting = -67896
|
||||||
|
/// A timestamp authority revocation warning was issued.
|
||||||
|
case timestampRevocationWarning = -67897
|
||||||
|
/// A timestamp authority revocation notification was issued.
|
||||||
|
case timestampRevocationNotification = -67898
|
||||||
|
/// The requested policy is not allowed for this certificate.
|
||||||
|
case certificatePolicyNotAllowed = -67899
|
||||||
|
/// The requested name is not allowed for this certificate.
|
||||||
|
case certificateNameNotAllowed = -67900
|
||||||
|
/// The validity period in the certificate exceeds the maximum allowed.
|
||||||
|
case certificateValidityPeriodTooLong = -67901
|
||||||
|
/// The verified certificate is a CA rather than an end-entity.
|
||||||
|
case certificateIsCA = -67902
|
||||||
|
/// The certificate contains multiple extensions with the same extension ID.
|
||||||
|
case certificateDuplicateExtension = -67903
|
||||||
|
/// A qualified certificate statement was expected but missing.
|
||||||
|
case missingQualifiedCertStatement = -67904
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// swiftlint:disable:this file_length
|
||||||
24
Keychain/Sources/Keychain/Error/SecError.swift
Normal file
24
Keychain/Sources/Keychain/Error/SecError.swift
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
//
|
||||||
|
// SecError.swift
|
||||||
|
// Keychain
|
||||||
|
//
|
||||||
|
// Created by Bram Kolkman on 22/02/2026.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
/// Describes errors within the security error domain.
|
||||||
|
public struct SecError: Error, Hashable, Sendable {
|
||||||
|
/// The error code.
|
||||||
|
public let code: Code
|
||||||
|
/// The description of the error.
|
||||||
|
public var errorDescription: String? {
|
||||||
|
SecCopyErrorMessageString(code.rawValue, nil) as? String
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create the error.
|
||||||
|
/// - Parameter code: The error code.
|
||||||
|
init(_ code: Code) {
|
||||||
|
self.code = code
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user