size_t signWithKey()

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;
}