diff --git a/OpenVPN Adapter/OpenVPNCertificate.h b/OpenVPN Adapter/OpenVPNCertificate.h index bcc2464..4cbb7bd 100644 --- a/OpenVPN Adapter/OpenVPNCertificate.h +++ b/OpenVPN Adapter/OpenVPNCertificate.h @@ -19,5 +19,6 @@ - (nonnull instancetype) __unavailable init; - (nullable NSData *)pemData:(out NSError * __nullable * __nullable)error; +- (nullable NSData *)derData:(out NSError * __nullable * __nullable)error; @end diff --git a/OpenVPN Adapter/OpenVPNCertificate.m b/OpenVPN Adapter/OpenVPNCertificate.m index 43afb21..dc36e05 100644 --- a/OpenVPN Adapter/OpenVPNCertificate.m +++ b/OpenVPN Adapter/OpenVPNCertificate.m @@ -96,6 +96,19 @@ return [NSData dataWithBytes:pem_buffer length:output_length]; } +- (NSData *)derData:(out NSError **)error { + if (self.crt->raw.p == NULL || self.crt->raw.len == 0) { + *error = [NSError errorWithDomain:OpenVPNIdentityErrorDomain code:MBEDTLS_ERR_X509_BAD_INPUT_DATA userInfo:@{ + NSLocalizedDescriptionKey: @"Failed to write DER data.", + NSLocalizedFailureReasonErrorKey: @"Input invalid" + }]; + + return nil; + } + + return [NSData dataWithBytes:self.crt->raw.p length:self.crt->raw.len]; +} + - (void)dealloc { mbedtls_x509_crt_free(self.crt); free(self.crt);