diff --git a/OpenVPN Adapter/OpenVPNCertificate.h b/OpenVPN Adapter/OpenVPNCertificate.h new file mode 100644 index 0000000..cc3677f --- /dev/null +++ b/OpenVPN Adapter/OpenVPNCertificate.h @@ -0,0 +1,21 @@ +// +// OpenVPNCertificate.h +// OpenVPN Adapter +// +// Created by Sergey Abramchuk on 06.09.17. +// +// + +#import + +@interface OpenVPNCertificate : NSObject + ++ (nullable OpenVPNCertificate *)certificateWithPEM:(nonnull NSData *)pemData + error:(out NSError * __nullable * __nullable)error; + ++ (nullable OpenVPNCertificate *)certificateWithDER:(nonnull NSData *)derData + error:(out NSError * __nullable * __nullable)error; + +- (nonnull instancetype) __unavailable init; + +@end diff --git a/OpenVPN Adapter/OpenVPNCertificate.m b/OpenVPN Adapter/OpenVPNCertificate.m new file mode 100644 index 0000000..fd09813 --- /dev/null +++ b/OpenVPN Adapter/OpenVPNCertificate.m @@ -0,0 +1,54 @@ +// +// OpenVPNCertificate.m +// OpenVPN Adapter +// +// Created by Sergey Abramchuk on 06.09.17. +// +// + +#import + +#import "OpenVPNCertificate.h" + +@interface OpenVPNCertificate () + +@property (nonatomic) mbedtls_x509_crt *crt; + +@end + +@implementation OpenVPNCertificate + +- (instancetype)init +{ + self = [super init]; + if (self) { + self.crt = malloc(sizeof(mbedtls_x509_crt)); + mbedtls_x509_crt_init(self.crt); + } + return self; +} + ++ (OpenVPNCertificate *)certificateWithPEM:(NSData *)pemData error:(out NSError * __nullable * __nullable)error { + OpenVPNCertificate *certificate = [OpenVPNCertificate new]; + + // TODO: Parse PEM data + + return certificate; +} + ++ (OpenVPNCertificate *)certificateWithDER:(NSData *)derData error:(out NSError * __nullable * __nullable)error { + OpenVPNCertificate *certificate = [OpenVPNCertificate new]; + + // TODO: Parse DER data + + return certificate; +} + +- (void)dealloc { + if (self.crt) { + mbedtls_x509_crt_free(self.crt); + free(self.crt); + } +} + +@end