]> git.saurik.com Git - apple/security.git/blobdiff - OSX/sec/Security/Regressions/rk_01_recoverykey.m
Security-57740.51.3.tar.gz
[apple/security.git] / OSX / sec / Security / Regressions / rk_01_recoverykey.m
diff --git a/OSX/sec/Security/Regressions/rk_01_recoverykey.m b/OSX/sec/Security/Regressions/rk_01_recoverykey.m
new file mode 100644 (file)
index 0000000..a9c55b5
--- /dev/null
@@ -0,0 +1,67 @@
+//
+//  rk_01_recoverykey.m
+//
+
+#define __KEYCHAINCORE__ 1
+
+#include <Foundation/Foundation.h>
+#include <Security/Security.h>
+
+#include "SecRecoveryKey.h"
+#include "shared_regressions.h"
+
+int rk_01_recoverykey(int argc, char *const *argv)
+{
+    NSArray *testData = @[
+                          @{
+                              @"recoverykey" : @"AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAGW",
+                              @"publicKey" : @"UUjq5Wv572RSsKahddvUPQAEIeErSHMK9J+NKb6sVdo=",
+                              @"privateKey" : @"UUjq5Wv572RSsKahddvUPQAEIeErSHMK9J+NKb6sVdpi00pR5UGzfoARLnpxCFmqCh1XCRtjCptztGfN1XW11w==",
+                              @"password" : @"Ze14tkzC8keZEnoIv+LoWvicxOTSSqUwhE8xyChmZAs=",
+                              },
+                          @{ // same again to make sure it works
+                              @"recoverykey" : @"AAAA-AAAA-AAAA-AAAA-AAAA-AAAA-AAGW",
+                              @"publicKey" : @"UUjq5Wv572RSsKahddvUPQAEIeErSHMK9J+NKb6sVdo=",
+                              @"privateKey" : @"UUjq5Wv572RSsKahddvUPQAEIeErSHMK9J+NKb6sVdpi00pR5UGzfoARLnpxCFmqCh1XCRtjCptztGfN1XW11w==",
+                              @"password" : @"Ze14tkzC8keZEnoIv+LoWvicxOTSSqUwhE8xyChmZAs=",
+                              },
+                          @{
+                              @"recoverykey" : @"BBBB-BBBB-BBBB-BBBB-BBBB-BBBB-BBAY",
+                              @"publicKey" : @"fomczHhXphIMaCbuQlKPefXO8YEIH2M9TFslcBjvJXY=",
+                              @"privateKey" : @"fomczHhXphIMaCbuQlKPefXO8YEIH2M9TFslcBjvJXa/W5BWvgJmZO9xShq1sePpLDfGf5lOkwhwzFzFypiXgw==",
+                              @"password" : @"P7nC1leKBTJ3aMsXZImVsR2kIlqlsvoSEI8yFKv6xdw=",
+                              },
+                          ];
+
+
+    plan_tests(7 * (int)[testData count]);
+
+    [testData enumerateObjectsUsingBlock:^(NSDictionary * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+        NSString *recoveryKey = obj[@"recoverykey"];
+        NSString *knownPublicKey = obj[@"publicKey"];
+        NSString *knownPrivateKey = obj[@"privateKey"];
+        NSString *knownPassword = obj[@"password"];
+
+        SecRecoveryKey *rk = SecRKCreateRecoveryKey(recoveryKey);
+        ok(rk, "got recovery key");
+
+        NSData *publicKey = SecRKCopyBackupPublicKey(rk);
+        ok(publicKey, "got publicKey");
+
+        ok([publicKey isEqualToData:[[NSData alloc] initWithBase64EncodedString:knownPublicKey options:0]],
+           "public key same: %@", [publicKey base64EncodedStringWithOptions:0]);
+
+        NSData *privateKey = SecRKCopyBackupFullKey(rk);
+        ok(privateKey, "got privateKey");
+
+        ok([privateKey isEqualToData:[[NSData alloc] initWithBase64EncodedString:knownPrivateKey options:0]],
+           "privateKey key same: %@", [privateKey base64EncodedStringWithOptions:0]);
+
+        NSString *recoveryPassword = SecRKCopyAccountRecoveryPassword(rk);
+        ok(recoveryPassword, "got account recovery password");
+
+        ok([recoveryPassword isEqualToString:knownPassword], "password same: %@", recoveryPassword);
+    }];
+
+    return 0;
+}