- CFErrorRef error = NULL;
-
- SecTransformRef decryptTrans = SecDecryptTransformCreate(wrapKey, &error);
- if(error == NULL) {
- SecTransformRef group = SecTransformCreateGroupTransform();
-
- SecTransformRef decodeTrans = SecDecodeTransformCreate(kSecBase64Encoding, &error);
- if(error == NULL) SecTransformSetAttribute(decodeTrans, kSecTransformInputAttributeName, wrappedPassword, &error);
-
- if(error == NULL) SecTransformSetAttribute(decryptTrans, kSecEncryptionMode, kSecModeCBCKey, &error);
- if(error == NULL) SecTransformSetAttribute(decryptTrans, kSecPaddingKey, kSecPaddingPKCS7Key, &error);
- if(error == NULL) SecTransformSetAttribute(decryptTrans, kSecIVKey, iv, &error);
- SecTransformConnectTransforms(decodeTrans, kSecTransformOutputAttributeName, decryptTrans, kSecTransformInputAttributeName, group, &error);
- CFRelease(decodeTrans);
- CFRelease(decryptTrans);
- if(error == NULL) retData = SecTransformExecute(group, &error);
-
- if(error == NULL) retval = CFStringCreateFromExternalRepresentation(kCFAllocatorDefault, retData, kCFStringEncodingMacRoman);
- else secDebug(ASL_LEVEL_ERR, "Failed to decrypt recovery password\n", NULL);
- CFRelease(group);
+ CFErrorRef error = NULL;
+ SecTransformRef decode = NULL;
+ SecTransformRef decrypt = NULL;
+ SecTransformRef group = NULL;
+
+ decode = SecDecodeTransformCreate(kSecBase64Encoding, &error);
+ if (error) goto out;
+ SecTransformSetAttribute(decode, kSecTransformInputAttributeName, wrappedPassword, &error);
+ if (error) goto out;
+
+ decrypt = SecDecryptTransformCreate(wrapKey, &error);
+ if (error) goto out;
+ SecTransformSetAttribute(decrypt, kSecEncryptionMode, kSecModeCBCKey, &error);
+ if (error) goto out;
+ SecTransformSetAttribute(decrypt, kSecPaddingKey, kSecPaddingPKCS7Key, &error);
+ if (error) goto out;
+ SecTransformSetAttribute(decrypt, kSecIVKey, iv, &error);
+ if (error) goto out;
+
+ group = SecTransformCreateGroupTransform();
+ SecTransformConnectTransforms(decode, kSecTransformOutputAttributeName, decrypt, kSecTransformInputAttributeName, group, &error);
+ if (error) goto out;
+ retData = SecTransformExecute(group, &error);
+ if (error) goto out;
+ retval = CFStringCreateFromExternalRepresentation(kCFAllocatorDefault, retData, kCFStringEncodingMacRoman);
+
+out:
+ if (error) {
+ secerror("Failed to decrypt recovery password: %@", error);