in macos/midtier.c [100:136]
size_t signWithKey(
const char* label,
const char* tag,
unsigned char* hash,
unsigned char* data,
size_t len,
unsigned char** ret,
char** error) {
if (!len)
return 0;
CFStringRef errStr = NULL;
CFDataRef dataRef =
CFDataCreate(kCFAllocatorDefault, (UInt8*)data, (CFIndex)len);
if (!dataRef) {
errStr = SecCopyErrorMessageString(errSecAllocate, NULL);
*error = CFStringToCString(errStr);
CFRelease((CFTypeRef)errStr);
return 0;
}
CFDataRef res = SignWithSEKey(label, tag, hash, dataRef, &errStr);
CFRelease((CFTypeRef)dataRef);
if (errStr) {
*error = CFStringToCString(errStr);
CFRelease((CFTypeRef)errStr);
return 0;
}
if (!res)
return 0;
*ret = CFDataToUint8(res);
CFIndex size = CFDataGetLength(res);
CFRelease((CFTypeRef)res);
return (size_t)size;
}