void testValidPemKey(void) { CFStringRef pemKey = CFStringCreateWithCString(kCFAllocatorDefault, pemEncodedKey, kCFStringEncodingUTF8); APSetKey(pemKey); CFRelease(pemKey); CFDataRef exampleLicenseFileData = CFDataCreate(NULL, (const UInt8 *)exampleLicenseFileContents, (CFIndex)strlen(exampleLicenseFileContents)); Boolean licenseIsValid = APVerifyLicenseData(exampleLicenseFileData); CFRelease(exampleLicenseFileData); if (licenseIsValid) { CFShow(CFSTR("Test OK: Valid file recognised using PEM encoded key")); } else { CFShow(CFSTR("Test FAILED: Valid file not recognised using PEM encoded key")); } }
int main (int argc, const char * argv[]) { // This string was generated by the AquaticPrime Developer tool. // (I've converted it to use CoreFoundation instead of Foundation, however, as the // AP Dev tool doesn't generate CF-based string obfuscation yet.) // *** Begin Public Key *** CFMutableStringRef exampleKey = CFStringCreateMutable(NULL, 0); CFStringAppend(exampleKey, CFSTR("0xC21727A4604EF3C70959D8645FDA")); CFStringAppend(exampleKey, CFSTR("C3C5FD49F")); CFStringAppend(exampleKey, CFSTR("E")); CFStringAppend(exampleKey, CFSTR("E")); CFStringAppend(exampleKey, CFSTR("02E46DC154A74B302C0")); CFStringAppend(exampleKey, CFSTR("041C")); CFStringAppend(exampleKey, CFSTR("3")); CFStringAppend(exampleKey, CFSTR("3")); CFStringAppend(exampleKey, CFSTR("F26028D0F3BF120A262B5E53")); CFStringAppend(exampleKey, CFSTR("E3CA86528D702E40F4B5")); CFStringAppend(exampleKey, CFSTR("2")); CFStringAppend(exampleKey, CFSTR("2")); CFStringAppend(exampleKey, CFSTR("BFBCAEA6")); CFStringAppend(exampleKey, CFSTR("3E9D31FD6976DC6C")); CFStringAppend(exampleKey, CFSTR("7")); CFStringAppend(exampleKey, CFSTR("7")); CFStringAppend(exampleKey, CFSTR("97D8354F3629")); CFStringAppend(exampleKey, CFSTR("DEFEB572AFA4A")); CFStringAppend(exampleKey, CFSTR("2")); CFStringAppend(exampleKey, CFSTR("2")); CFStringAppend(exampleKey, CFSTR("96F24DAB115EE71")); CFStringAppend(exampleKey, CFSTR("C06")); CFStringAppend(exampleKey, CFSTR("1")); CFStringAppend(exampleKey, CFSTR("1")); CFStringAppend(exampleKey, CFSTR("5BF0CF6E4383ACB9EA4473396")); CFStringAppend(exampleKey, CFSTR("49397BE")); CFStringAppend(exampleKey, CFSTR("D")); CFStringAppend(exampleKey, CFSTR("D")); CFStringAppend(exampleKey, CFSTR("48F556054DD9274A85448")); CFStringAppend(exampleKey, CFSTR("69BADE5F51EF06D897")); // *** End Public Key *** // Convert the example license file string to a CFData. // In a real app, you'd get this from somewhere else (e.g. a server), or use // one of the file-based AP methods. CFDataRef exampleLicenseFileData = CFDataCreate(NULL, (const UInt8 *)exampleLicenseFileContents, (CFIndex)strlen(exampleLicenseFileContents)); // Now, verify the license. // Try changing the example license file contents above and see what happens. // Let AP know what our public key is, so it can verify the signature. APSetKey(exampleKey); // You can just get back a boolean whether the license data is valid or not: Boolean licenseIsValid = APVerifyLicenseData(exampleLicenseFileData); if(licenseIsValid) CFShow(CFSTR("License passed boolean verification!\n")); else CFShow(CFSTR("License failed boolean verification!\n")); // Or, you can get back a full dictionary: CFDictionaryRef licenseDictionary = APCreateDictionaryForLicenseData(exampleLicenseFileData); if(licenseDictionary) { CFShow(licenseDictionary); CFRelease(licenseDictionary); } else { CFShow(CFSTR("No license dictionary results.\n")); } CFRelease(exampleLicenseFileData); CFRelease(exampleKey); return 0; }