]> git.saurik.com Git - apple/security.git/blob - sec/SOSCircle/Regressions/sc-95-ckd2client.c
Security-55471.14.8.tar.gz
[apple/security.git] / sec / SOSCircle / Regressions / sc-95-ckd2client.c
1 //
2 // sc-90-ckdclient.c
3 // sec
4 //
5 // Created by John Hurley on 9/6/12.
6 //
7 //
8
9 #include <AssertMacros.h>
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <unistd.h>
14 #include <xpc/xpc.h>
15
16 #include <Security/SecBase.h>
17 #include <Security/SecItem.h>
18
19 #include <SecureObjectSync/SOSAccount.h>
20 #include <CKBridge/SOSCloudKeychainClient.h>
21 #include <utilities/SecCFWrappers.h>
22 #include <utilities/debugging.h>
23
24 #include "SOSCircle_regressions.h"
25 #include "SOSRegressionUtilities.h"
26
27 static bool verboseCKDClientDebugging = false;
28
29 static CFStringRef kTestKeyIDTimestamp = CFSTR("IDTimestamp");
30
31 static void printTimeNow(const char *msg)
32 {
33 if (verboseCKDClientDebugging)
34 {
35 CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
36 const char *nowstr = cfabsoluteTimeToString(now);
37 if (nowstr)
38 {
39 printf("%s %s\n", nowstr, msg);
40 free((void *)nowstr);
41 }
42 }
43 }
44
45 // MARK: ----- basicKVSTests -----
46
47 static bool postIDTimestamp(dispatch_queue_t theq)
48 {
49 __block bool result = false;
50 CFStringRef macaddr = myMacAddress();
51 CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
52 const char *nowstr = cfabsoluteTimeToStringLocal(now);
53 CFStringRef cfidstr = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%@: %@ %s"), kTestKeyIDTimestamp, macaddr ,nowstr);
54 secerror("Setting %@ key: %@", kTestKeyIDTimestamp, cfidstr);
55
56 // create a dictionary with one key/value pair
57 CFDictionaryRef objects = CFDictionaryCreateForCFTypes(kCFAllocatorDefault, kTestKeyIDTimestamp, cfidstr, NULL);
58 SOSCloudKeychainPutObjectsInCloud(objects, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
59 ^(CFDictionaryRef returnedValues, CFErrorRef error) {
60 if (error) {
61 fail("Error putting: %@", error);
62 CFReleaseSafe(error);
63 }
64 });
65
66 CFMutableArrayRef keysToGet = CFArrayCreateMutableForCFTypes(kCFAllocatorDefault);
67 CFArrayAppendValue(keysToGet, kTestKeyIDTimestamp);
68 SOSCloudKeychainGetObjectsFromCloud(keysToGet, theq, ^ (CFDictionaryRef returnedValues, CFErrorRef error)
69 {
70 CFStringRef returnedTimestamp = (CFStringRef)CFDictionaryGetValue(returnedValues, kTestKeyIDTimestamp);
71 if (returnedTimestamp)
72 result = CFEqual(returnedTimestamp, cfidstr);
73 });
74
75 if (nowstr)
76 free((void *)nowstr);
77 return result;
78 }
79
80 static const int kbasicKVSTestsCount = 1;
81 static void basicKVSTests2()
82 {
83 dispatch_queue_t generalq = dispatch_queue_create("general", DISPATCH_QUEUE_SERIAL);
84
85 const UInt8 tdata[] = {0x01, 0x02, 0x03, 0x04, 'a', 'b', 'c'};
86 CFDataRef testData = CFDataCreate(kCFAllocatorDefault, tdata, sizeof(tdata)/sizeof(UInt8));
87
88 const CFStringRef adata[] = {CFSTR("A"), CFSTR("b"), CFSTR("C"), CFSTR("D")};
89 CFArrayRef testArray = CFArrayCreate(kCFAllocatorDefault, (const void **)&adata, sizeof(adata)/sizeof(CFStringRef), &kCFTypeArrayCallBacks);
90
91 // Register keys
92 const CFStringRef circleKeyStrings[] = {CFSTR("circleA"), CFSTR("circleB"), CFSTR("circleC"), CFSTR("circleD")};
93 CFArrayRef circleKeys = CFArrayCreate(kCFAllocatorDefault, (const void **)&circleKeyStrings, sizeof(circleKeyStrings)/sizeof(CFStringRef), &kCFTypeArrayCallBacks);
94
95 const CFStringRef keysWhenUnlockedKeyStrings[] = {CFSTR("foo"), CFSTR("bar"), CFSTR("baz")};
96 CFArrayRef keysWhenUnlocked = CFArrayCreate(kCFAllocatorDefault, (const void **)&keysWhenUnlockedKeyStrings, sizeof(keysWhenUnlockedKeyStrings)/sizeof(CFStringRef), &kCFTypeArrayCallBacks);
97
98 printTimeNow("Start tests [basicKVSTests]");
99
100 ok(postIDTimestamp(generalq), "testPostGet for %@", kTestKeyIDTimestamp);
101
102 printTimeNow("Start tests [basicKVSTests2]");
103
104 // Release test data
105 CFRelease(testData);
106 CFRelease(testArray);
107 CFRelease(circleKeys);
108 CFRelease(keysWhenUnlocked);
109 }
110
111 // MARK: ----- start of all tests -----
112
113 static const int kCloudTransportTestsCount = 0;
114 static int kTestTestCount = kbasicKVSTestsCount + kCloudTransportTestsCount;
115 static void tests(void)
116 {
117 SKIP: {
118 skip("Skipping ckdclient tests because CloudKeychainProxy.xpc is not installed", kTestTestCount, XPCServiceInstalled());
119 basicKVSTests2();
120 // cloudTransportTests();
121 sleep(15); // on iOS, we need to hang around long enough for syncdefaultsd to see us
122 }
123 }
124
125 int sc_95_ckd2client(int argc, char *const *argv)
126 {
127 plan_tests(kTestTestCount);
128
129 tests();
130
131 return 0;
132 }
133
134