1/* 2 * sc-30-peerinfo.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#include <Security/SecKeyPriv.h> 14 15#include <SecureObjectSync/SOSCircle.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 "SOSCircle_regressions.h" 28 29#include "SOSRegressionUtilities.h" 30 31#if TARGET_OS_IPHONE 32#include <MobileGestalt.h> 33#endif 34 35static int kTestTestCount = 11; 36static void tests(void) 37{ 38 SecKeyRef signingKey = NULL; 39 SOSFullPeerInfoRef fpi = SOSCreateFullPeerInfoFromName(CFSTR("Test Peer"), &signingKey, NULL); 40 SOSPeerInfoRef pi = SOSFullPeerInfoGetPeerInfo(fpi); 41 CFRetainSafe(pi); 42 43 ok(NULL != pi, "info creation"); 44 45 uint8_t buffer[4096]; 46 47 const uint8_t *buffer_p = SOSPeerInfoEncodeToDER(pi, NULL, buffer, buffer + sizeof(buffer)); 48 49 ok(buffer_p != NULL, "encode"); 50 51 SOSPeerInfoRef pi2 = SOSPeerInfoCreateFromDER(NULL, NULL, &buffer_p, buffer + sizeof(buffer)); 52 53 SKIP: 54 { 55 skip("Decode failed", 1, ok(NULL != pi2, "Decode")); 56 ok(CFEqual(pi, pi2), "Decode matches"); 57 } 58 59 buffer_p = SOSFullPeerInfoEncodeToDER(fpi, NULL, buffer, buffer + sizeof(buffer)); 60 61 ok(buffer_p != NULL, "Full peer encode"); 62 63 SOSFullPeerInfoRef fpi2 = SOSFullPeerInfoCreateFromDER(kCFAllocatorDefault, NULL, &buffer_p, buffer + sizeof(buffer)); 64 65 SKIP: 66 { 67 skip("Full Peer Decode failed", 1, ok(fpi2, "Full peer inflated")); 68 69 ok(CFEqual(fpi, fpi2), "Full peer inflate matches"); 70 } 71 72 73// Application ticket time. 74 CFDataRef cfpassword = CFDataCreate(NULL, (uint8_t *) "FooFooFoo", 10); 75 CFErrorRef error = NULL; 76 77 CFDataRef parameters = SOSUserKeyCreateGenerateParameters(&error); 78 ok(parameters, "No parameters!"); 79 ok(error == NULL, "Error: (%@)", error); 80 CFReleaseNull(error); 81 82 SecKeyRef user_privkey = SOSUserKeygen(cfpassword, parameters, &error); 83 CFReleaseSafe(cfpassword); 84 CFReleaseNull(parameters); 85 SecKeyRef user_pubkey = SecKeyCreatePublicFromPrivate(user_privkey); 86 87 ok(SOSFullPeerInfoPromoteToApplication(fpi, user_privkey, &error), "Promote to Application"); 88 ok(SOSPeerInfoApplicationVerify(SOSFullPeerInfoGetPeerInfo(fpi), user_pubkey, &error), "Promote to Application"); 89 90 91 CFReleaseNull(user_privkey); 92 CFReleaseNull(user_pubkey); 93 94 CFReleaseNull(signingKey); 95 CFReleaseNull(pi); 96 CFReleaseNull(pi2); 97 CFReleaseNull(fpi); 98 CFReleaseNull(fpi2); 99} 100 101int sc_30_peerinfo(int argc, char *const *argv) 102{ 103 plan_tests(kTestTestCount); 104 105 tests(); 106 107 return 0; 108} 109