bc-10-knife-on-bread.c [plain text]
#include <Security/Security.h>
#include <Security/SecBreadcrumb.h>
#include "breadcrumb_regressions.h"
static void
print_hex(const char *label, CFDataRef data)
{
CFIndex count, n;
printf("%s = ", label);
const uint8_t *ptr = CFDataGetBytePtr(data);
count = CFDataGetLength(data);
for (n = 0; n < count; n++) {
printf("%02x", ptr[n]);
}
printf("\n");
}
#define kTestCount 6
int bc_10_password(int argc, char *const *argv)
{
CFDataRef breadcrumb = NULL, encryptedKey = NULL;
CFStringRef oldPassword = NULL;
CFStringRef password = CFSTR("password");
CFStringRef newpassword = CFSTR("newpassword");
CFErrorRef error = NULL;
plan_tests(kTestCount);
ok(SecBreadcrumbCreateFromPassword(password, &breadcrumb, &encryptedKey, &error), "wrap failed");
ok(SecBreadcrumbCopyPassword(password, breadcrumb, encryptedKey, &oldPassword, NULL), "unwrap failed");
ok(oldPassword && CFStringCompare(password, oldPassword, 0) == kCFCompareEqualTo, "not same password");
CFRelease(oldPassword);
print_hex("encrypted key before", encryptedKey);
CFDataRef newEncryptedKey;
printf("changing password from \"password\" to \"newpassword\"\n");
newEncryptedKey = SecBreadcrumbCreateNewEncryptedKey(password,
newpassword,
encryptedKey,
&error);
ok(newEncryptedKey, "no new encrypted key");
print_hex("encrypted key after", newEncryptedKey);
ok(SecBreadcrumbCopyPassword(newpassword, breadcrumb, newEncryptedKey, &oldPassword, NULL), "unwrap failed");
ok(oldPassword && CFStringCompare(password, oldPassword, 0) == kCFCompareEqualTo, "not same password");
CFRelease(breadcrumb);
CFRelease(oldPassword);
CFRelease(newEncryptedKey);
return 0;
}