@@ -27,7 +27,8 @@ public extension AutofillApiError {
27
27
public class RustAutofillEncryptionKeys {
28
28
public let ccKeychainKey = " appservices.key.creditcard.perfield "
29
29
30
- let keychain = MZKeychainWrapper . sharedClientAppContainerKeychain
30
+ let legacyKeychain = MZKeychainWrapper . sharedClientAppContainerKeychain
31
+ let keychain = RustKeychain . sharedClientAppContainerKeychain
31
32
let ccCanaryPhraseKey = " creditCardCanaryPhrase "
32
33
let canaryPhrase = " a string for checking validity of the key "
33
34
@@ -43,20 +44,20 @@ public class RustAutofillEncryptionKeys {
43
44
let canary = try self . createCanary ( text: canaryPhrase, key: secret)
44
45
45
46
DispatchQueue . global ( qos: . background) . sync {
46
- keychain . set ( secret,
47
- forKey: ccKeychainKey,
48
- withAccessibility: MZKeychainItemAccessibility . afterFirstUnlock)
49
- keychain . set ( canary,
50
- forKey: ccCanaryPhraseKey,
51
- withAccessibility: MZKeychainItemAccessibility . afterFirstUnlock)
47
+ legacyKeychain . set ( secret,
48
+ forKey: ccKeychainKey,
49
+ withAccessibility: MZKeychainItemAccessibility . afterFirstUnlock)
50
+ legacyKeychain . set ( canary,
51
+ forKey: ccCanaryPhraseKey,
52
+ withAccessibility: MZKeychainItemAccessibility . afterFirstUnlock)
52
53
}
53
54
54
55
return secret
55
56
} catch let err as NSError {
56
57
if let autofillStoreError = err as? AutofillApiError {
57
- logAutofillStoreError ( err: autofillStoreError,
58
- errorDomain: err. domain,
59
- errorMessage: " Error while creating and storing credit card key " )
58
+ keychain . logAutofillStoreError ( err: autofillStoreError,
59
+ errorDomain: err. domain,
60
+ errorMessage: " Error while creating and storing credit card key " )
60
61
61
62
throw AutofillEncryptionKeyError . noKeyCreated
62
63
} else {
@@ -70,16 +71,24 @@ public class RustAutofillEncryptionKeys {
70
71
}
71
72
}
72
73
73
- func decryptCreditCardNum( encryptedCCNum: String ) -> String ? {
74
- guard let key = self . keychain. string ( forKey: self . ccKeychainKey) else { return nil }
74
+ func decryptCreditCardNum( encryptedCCNum: String , rustKeychainEnabled: Bool ) -> String ? {
75
+ var keyValue : String ?
76
+
77
+ if rustKeychainEnabled {
78
+ ( keyValue, _) = keychain. getCreditCardKeyData ( )
79
+ } else {
80
+ keyValue = legacyKeychain. string ( forKey: self . ccKeychainKey)
81
+ }
82
+
83
+ guard let key = keyValue else { return nil }
75
84
76
85
do {
77
86
return try decryptString ( key: key, ciphertext: encryptedCCNum)
78
87
} catch let err as NSError {
79
88
if let autofillStoreError = err as? AutofillApiError {
80
- logAutofillStoreError ( err: autofillStoreError,
81
- errorDomain: err. domain,
82
- errorMessage: " Error while decrypting credit card " )
89
+ keychain . logAutofillStoreError ( err: autofillStoreError,
90
+ errorDomain: err. domain,
91
+ errorMessage: " Error while decrypting credit card " )
83
92
} else {
84
93
logger. log ( " Unknown error while decrypting credit card " ,
85
94
level: . warning,
@@ -100,25 +109,4 @@ public class RustAutofillEncryptionKeys {
100
109
key: String ) throws -> String {
101
110
return try encryptString ( key: key, cleartext: text)
102
111
}
103
-
104
- private func logAutofillStoreError( err: AutofillApiError ,
105
- errorDomain: String ,
106
- errorMessage: String ) {
107
- var message : String {
108
- switch err {
109
- case . SqlError( let message) ,
110
- . CryptoError( let message) ,
111
- . NoSuchRecord( let message) ,
112
- . UnexpectedAutofillApiError( let message) :
113
- return message
114
- case . InterruptedError:
115
- return " Interrupted Error "
116
- }
117
- }
118
-
119
- logger. log ( errorMessage,
120
- level: . warning,
121
- category: . storage,
122
- description: " \( errorDomain) - \( err. descriptionValue) : \( message) " )
123
- }
124
112
}
0 commit comments