]> git.saurik.com Git - apple/security.git/blob - sec/SOSCircle/Regressions/sc-40-circle.c
Security-55471.14.18.tar.gz
[apple/security.git] / sec / SOSCircle / Regressions / sc-40-circle.c
1 /*
2 * sc-01-create.c
3 *
4 * Created by Mitch Adler on 1/25/121.
5 * Copyright 2012 Apple Inc. All rights reserved.
6 *
7 */
8
9
10 #include <Security/SecBase.h>
11 #include <Security/SecItem.h>
12 #include <Security/SecKey.h>
13
14 #include <SecureObjectSync/SOSCircle.h>
15 #include <SecureObjectSync/SOSCloudCircle.h>
16 #include <SecureObjectSync/SOSPeerInfo.h>
17 #include <SecureObjectSync/SOSInternal.h>
18 #include <SecureObjectSync/SOSUserKeygen.h>
19
20 #include <utilities/SecCFWrappers.h>
21
22 #include <CoreFoundation/CoreFoundation.h>
23
24 #include <stdlib.h>
25 #include <unistd.h>
26
27 #include <securityd/SOSCloudCircleServer.h>
28
29 #include "SOSCircle_regressions.h"
30
31 #include "SOSRegressionUtilities.h"
32
33 static int kTestTestCount = 17;
34 static void tests(void)
35 {
36 SOSCircleRef circle = SOSCircleCreate(NULL, CFSTR("TEST DOMAIN"), NULL);
37
38 ok(NULL != circle, "Circle creation");
39
40 ok(0 == SOSCircleCountPeers(circle), "Zero peers");
41
42 //SecKeyRef publicKey = NULL;
43 SecKeyRef dev_a_key = NULL;
44 SecKeyRef dev_b_key = NULL;
45 CFErrorRef error = NULL;
46 CFDataRef cfpassword = CFDataCreate(NULL, (uint8_t *) "FooFooFoo", 10);
47
48 if(cfpassword == NULL) printf("WTF\n");
49
50 CFDataRef parameters = SOSUserKeyCreateGenerateParameters(&error);
51 ok(parameters, "No parameters!");
52 ok(error == NULL, "Error: (%@)", error);
53 CFReleaseNull(error);
54
55 SecKeyRef user_privkey = SOSUserKeygen(cfpassword, parameters, &error);
56 CFReleaseNull(parameters);
57
58 SOSFullPeerInfoRef peer_a_full_info = SOSCreateFullPeerInfoFromName(CFSTR("Peer A"), &dev_a_key, NULL);
59
60 SOSFullPeerInfoRef peer_b_full_info = SOSCreateFullPeerInfoFromName(CFSTR("Peer B"), &dev_b_key, NULL);
61
62 ok(SOSCircleRequestAdmission(circle, user_privkey, peer_a_full_info, NULL));
63 ok(SOSCircleRequestAdmission(circle, user_privkey, peer_a_full_info, NULL));
64 ok(SOSCircleRequestAdmission(circle, user_privkey, peer_a_full_info, NULL));
65
66 ok(SOSCircleAcceptRequest(circle, user_privkey, peer_a_full_info, SOSFullPeerInfoGetPeerInfo(peer_a_full_info), NULL));
67
68 ok(!SOSCircleRequestAdmission(circle, user_privkey, peer_a_full_info, NULL));
69 ok(SOSCircleRequestAdmission(circle, user_privkey, peer_b_full_info, NULL));
70
71 ok(SOSCircleCountPeers(circle) == 1, "Peer count");
72
73 size_t size = SOSCircleGetDEREncodedSize(circle, &error);
74 uint8_t buffer[size];
75 uint8_t* start = SOSCircleEncodeToDER(circle, &error, buffer, buffer + sizeof(buffer));
76
77 ok(start, "successful encoding");
78 ok(start == buffer, "Used whole buffer");
79
80 const uint8_t *der = buffer;
81 SOSCircleRef inflated = SOSCircleCreateFromDER(NULL, &error, &der, buffer + sizeof(buffer));
82
83 ok(inflated, "inflated");
84 ok(CFEqualSafe(inflated, circle), "Compares");
85
86
87 ok(SOSCircleRemovePeer(circle, user_privkey, peer_a_full_info, SOSFullPeerInfoGetPeerInfo(peer_a_full_info), NULL));
88 ok(SOSCircleCountPeers(circle) == 0, "Peer count");
89
90 CFReleaseNull(dev_a_key);
91 CFReleaseNull(cfpassword);
92 }
93
94 int sc_40_circle(int argc, char *const *argv)
95 {
96 plan_tests(kTestTestCount);
97
98 tests();
99
100 return 0;
101 }