4 * Created by Mitch Adler on 1/25/121.
5 * Copyright 2012 Apple Inc. All rights reserved.
10 #include <Security/SecBase.h>
11 #include <Security/SecItem.h>
12 #include <Security/SecKey.h>
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>
20 #include <utilities/SecCFWrappers.h>
22 #include <CoreFoundation/CoreFoundation.h>
27 #include <securityd/SOSCloudCircleServer.h>
29 #include "SOSCircle_regressions.h"
31 #include "SOSRegressionUtilities.h"
33 static int kTestTestCount
= 17;
34 static void tests(void)
36 SOSCircleRef circle
= SOSCircleCreate(NULL
, CFSTR("TEST DOMAIN"), NULL
);
38 ok(NULL
!= circle
, "Circle creation");
40 ok(0 == SOSCircleCountPeers(circle
), "Zero peers");
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);
48 if(cfpassword
== NULL
) printf("WTF\n");
50 CFDataRef parameters
= SOSUserKeyCreateGenerateParameters(&error
);
51 ok(parameters
, "No parameters!");
52 ok(error
== NULL
, "Error: (%@)", error
);
55 SecKeyRef user_privkey
= SOSUserKeygen(cfpassword
, parameters
, &error
);
56 CFReleaseNull(parameters
);
58 SOSFullPeerInfoRef peer_a_full_info
= SOSCreateFullPeerInfoFromName(CFSTR("Peer A"), &dev_a_key
, NULL
);
60 SOSFullPeerInfoRef peer_b_full_info
= SOSCreateFullPeerInfoFromName(CFSTR("Peer B"), &dev_b_key
, NULL
);
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
));
66 ok(SOSCircleAcceptRequest(circle
, user_privkey
, peer_a_full_info
, SOSFullPeerInfoGetPeerInfo(peer_a_full_info
), NULL
));
68 ok(!SOSCircleRequestAdmission(circle
, user_privkey
, peer_a_full_info
, NULL
));
69 ok(SOSCircleRequestAdmission(circle
, user_privkey
, peer_b_full_info
, NULL
));
71 ok(SOSCircleCountPeers(circle
) == 1, "Peer count");
73 size_t size
= SOSCircleGetDEREncodedSize(circle
, &error
);
75 uint8_t* start
= SOSCircleEncodeToDER(circle
, &error
, buffer
, buffer
+ sizeof(buffer
));
77 ok(start
, "successful encoding");
78 ok(start
== buffer
, "Used whole buffer");
80 const uint8_t *der
= buffer
;
81 SOSCircleRef inflated
= SOSCircleCreateFromDER(NULL
, &error
, &der
, buffer
+ sizeof(buffer
));
83 ok(inflated
, "inflated");
84 ok(CFEqualSafe(inflated
, circle
), "Compares");
87 ok(SOSCircleRemovePeer(circle
, user_privkey
, peer_a_full_info
, SOSFullPeerInfoGetPeerInfo(peer_a_full_info
), NULL
));
88 ok(SOSCircleCountPeers(circle
) == 0, "Peer count");
90 CFReleaseNull(dev_a_key
);
91 CFReleaseNull(cfpassword
);
94 int sc_40_circle(int argc
, char *const *argv
)
96 plan_tests(kTestTestCount
);