4 * Copyright (c) 2012-2014 Apple Inc. All Rights Reserved.
9 #include <Security/SecBase.h>
10 #include <Security/SecItem.h>
11 #include <Security/SecKey.h>
12 #include <Security/SecKeyPriv.h>
13 #include "keychain/SecureObjectSync/SOSPeerInfoDER.h"
15 #include "keychain/SecureObjectSync/SOSCircle.h"
16 #include <Security/SecureObjectSync/SOSPeerInfo.h>
17 #include "keychain/SecureObjectSync/SOSPeerInfoCollections.h"
18 #include "keychain/SecureObjectSync/SOSInternal.h"
19 #include "keychain/SecureObjectSync/SOSUserKeygen.h"
21 #include <utilities/SecCFWrappers.h>
23 #include <CoreFoundation/CoreFoundation.h>
28 #include "SOSCircle_regressions.h"
30 #include "SOSRegressionUtilities.h"
34 #include <MobileGestalt.h>
37 static unsigned long kTestCount
= 2;
38 static unsigned long kTestFuzzerCount
= 20000;
40 static void tests(void)
42 SecKeyRef signingKey
= NULL
;
43 SecKeyRef octagonSigningKey
= NULL
;
44 SecKeyRef octagonEncryptionKey
= NULL
;
45 SOSFullPeerInfoRef fpi
= SOSCreateFullPeerInfoFromName(CFSTR("Test Peer"), &signingKey
, &octagonSigningKey
, &octagonEncryptionKey
, NULL
);
46 SOSPeerInfoRef pi
= SOSFullPeerInfoGetPeerInfo(fpi
);
49 ok(NULL
!= pi
, "info creation");
50 size_t size
= SOSPeerInfoGetDEREncodedSize(pi
, NULL
);
52 uint8_t buffer
[size
+100]; // make the buffer long enough to hold the DER + some room for the fuzzing
54 const uint8_t *buffer_p
= SOSPeerInfoEncodeToDER(pi
, NULL
, buffer
, buffer
+ sizeof(buffer
));
56 ok(buffer_p
!= NULL
, "encode");
58 size_t length
= (buffer
+ sizeof(buffer
)) - buffer_p
;
59 // diag("size %lu length %lu\n", size, length);
60 uint8_t buffer2
[length
];
61 if(buffer_p
== NULL
) goto errOut
;
63 for (count
= 0; count
< kTestFuzzerCount
; count
++) {
64 memcpy(buffer2
, buffer_p
, length
);
66 const uint8_t *startp
= buffer2
;
67 size_t offset
= arc4random_uniform((u_int32_t
)length
);
68 uint8_t value
= arc4random() & 0xff;
69 // diag("Offset %lu value %d\n", offset, value);
70 buffer2
[offset
] = value
;
72 SOSPeerInfoRef pi2
= SOSPeerInfoCreateFromDER(NULL
, NULL
, &startp
, buffer2
+ length
);
78 CFReleaseNull(signingKey
);
79 CFReleaseNull(octagonSigningKey
);
80 CFReleaseNull(octagonEncryptionKey
);
85 int sc_31_peerinfo(int argc
, char *const *argv
)
88 plan_tests((int)(kTestCount
+ kTestFuzzerCount
));