Files
2026-07-09 11:19:13 +08:00

43 lines
1.1 KiB
Objective-C

#import "anchors_darwin.h"
#import <Foundation/Foundation.h>
#import <Security/Security.h>
void *box_certificate_anchors_from_der(const uint8_t *const *ders, const size_t *lens, size_t count) {
if (count == 0 || ders == NULL || lens == NULL) {
return NULL;
}
CFMutableArrayRef certificates = CFArrayCreateMutable(NULL, (CFIndex)count, &kCFTypeArrayCallBacks);
if (certificates == NULL) {
return NULL;
}
for (size_t index = 0; index < count; index++) {
if (ders[index] == NULL || lens[index] == 0) {
continue;
}
CFDataRef data = CFDataCreate(NULL, ders[index], (CFIndex)lens[index]);
if (data == NULL) {
continue;
}
SecCertificateRef certificate = SecCertificateCreateWithData(NULL, data);
CFRelease(data);
if (certificate == NULL) {
continue;
}
CFArrayAppendValue(certificates, certificate);
CFRelease(certificate);
}
if (CFArrayGetCount(certificates) == 0) {
CFRelease(certificates);
return NULL;
}
return certificates;
}
void box_certificate_release_anchors(void *anchors) {
if (anchors == NULL) {
return;
}
CFRelease((CFTypeRef)anchors);
}