1 // Copyright 2015-present 650 Industries. All rights reserved.
2 
3 import Foundation
4 
5 @objc(EXUpdatesCodeSigningError)
6 public enum CodeSigningError : Int, Error {
7   case CertificateEncodingError
8   case CertificateDERDecodeError
9   case CertificateValidityError
10   case CertificateMissingPublicKeyError
11   case CertificateDigitalSignatureNotPresentError
12   case CertificateMissingCodeSigningError
13   case CertificateRootNotCA
14   case CertificateProjectInformationChainError
15   case KeyIdMismatchError
16   case SecurityFrameworkError
17   case CertificateEmptyError
18   case CertificateChainError
19   case CertificateRootNotSelfSigned
20   case SignatureHeaderMissing
21   case SignatureHeaderStructuredFieldParseError
22   case SignatureHeaderSigMissing
23   case SignatureHeaderSignatureEncodingError
24   case SignatureEncodingError
25   case AlgorithmParseError
26   case InvalidExpoProjectInformationExtensionValue
27 }
28 
29 @objc(EXUpdatesCodeSigningErrorUtils)
30 public class CodeSigningErrorUtils : NSObject {
31   @objc public static func message(forError: CodeSigningError) -> String {
32     switch forError {
33     case .CertificateEncodingError:
34       return "Code signing certificate could not be encoded in a lossless manner using utf8 encoding"
35     case .CertificateDERDecodeError:
36       return "Code signing certificate data not in DER format"
37     case .CertificateMissingPublicKeyError:
38       return "Code signing certificate missing public key"
39     case .CertificateValidityError:
40       return "Certificate not valid"
41     case .CertificateDigitalSignatureNotPresentError:
42       return "Certificate digital signature not present"
43     case .CertificateMissingCodeSigningError:
44       return "Certificate missing code signing extended key usage"
45     case .CertificateRootNotCA:
46       return "Root certificate subject must be a Certificate Authority"
47     case .CertificateProjectInformationChainError:
48       return "Expo project information must be a subset or equal of that of parent certificates"
49     case .KeyIdMismatchError:
50       return "Key with keyid from signature not found in client configuration"
51     case .SecurityFrameworkError:
52       return "Signature verification failed due to security framework error"
53     case .CertificateEmptyError:
54       return "No code signing certificates provided"
55     case .CertificateChainError:
56       return "Certificate chain error"
57     case .CertificateRootNotSelfSigned:
58       return "Root certificate not self-signed"
59     case .SignatureHeaderMissing:
60       return "No expo-signature header specified"
61     case .SignatureHeaderStructuredFieldParseError:
62       return "expo-signature structured header parsing failed"
63     case .SignatureHeaderSigMissing:
64       return "Structured field sig not found in expo-signature header"
65     case .SignatureHeaderSignatureEncodingError:
66       return "Signature in header has invalid encoding"
67     case .SignatureEncodingError:
68       return "Invalid signature encoding"
69     case .AlgorithmParseError:
70       return "Invalid algorithm"
71     case .InvalidExpoProjectInformationExtensionValue:
72       return "Invalid Expo project information extension value"
73     }
74   }
75 }
76