Refactor generation of mbedTLS errors

This commit is contained in:
Sergey Abramchuk
2018-01-18 16:39:41 +03:00
parent 761564a028
commit eff0bccfef
7 changed files with 54 additions and 115 deletions
+2 -22
View File
@@ -154,10 +154,6 @@
C9E350C2200F6EC0000820D9 /* NSError+OpenVPNError.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E350BF200F6EC0000820D9 /* NSError+OpenVPNError.h */; }; C9E350C2200F6EC0000820D9 /* NSError+OpenVPNError.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E350BF200F6EC0000820D9 /* NSError+OpenVPNError.h */; };
C9E350C3200F6EC0000820D9 /* NSError+OpenVPNError.m in Sources */ = {isa = PBXBuildFile; fileRef = C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */; }; C9E350C3200F6EC0000820D9 /* NSError+OpenVPNError.m in Sources */ = {isa = PBXBuildFile; fileRef = C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */; };
C9E350C4200F6EC0000820D9 /* NSError+OpenVPNError.m in Sources */ = {isa = PBXBuildFile; fileRef = C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */; }; C9E350C4200F6EC0000820D9 /* NSError+OpenVPNError.m in Sources */ = {isa = PBXBuildFile; fileRef = C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */; };
C9E4401D1F6086A1001D7C41 /* NSError+Message.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E4401B1F6086A1001D7C41 /* NSError+Message.h */; };
C9E4401E1F6086A1001D7C41 /* NSError+Message.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E4401B1F6086A1001D7C41 /* NSError+Message.h */; };
C9E4401F1F6086A1001D7C41 /* NSError+Message.m in Sources */ = {isa = PBXBuildFile; fileRef = C9E4401C1F6086A1001D7C41 /* NSError+Message.m */; };
C9E440201F6086A1001D7C41 /* NSError+Message.m in Sources */ = {isa = PBXBuildFile; fileRef = C9E4401C1F6086A1001D7C41 /* NSError+Message.m */; };
C9FD921A1E9A667600374FC4 /* ovpncli.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9FD92181E9A667600374FC4 /* ovpncli.hpp */; }; C9FD921A1E9A667600374FC4 /* ovpncli.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9FD92181E9A667600374FC4 /* ovpncli.hpp */; };
C9FD921B1E9A667600374FC4 /* ovpncli.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9FD92191E9A667600374FC4 /* ovpncli.cpp */; }; C9FD921B1E9A667600374FC4 /* ovpncli.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9FD92191E9A667600374FC4 /* ovpncli.cpp */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
@@ -263,8 +259,6 @@
C9D2ABFF1EA212A3007EDF9D /* OpenVPNAdapterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OpenVPNAdapterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; C9D2ABFF1EA212A3007EDF9D /* OpenVPNAdapterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OpenVPNAdapterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
C9E350BF200F6EC0000820D9 /* NSError+OpenVPNError.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSError+OpenVPNError.h"; sourceTree = "<group>"; }; C9E350BF200F6EC0000820D9 /* NSError+OpenVPNError.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSError+OpenVPNError.h"; sourceTree = "<group>"; };
C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSError+OpenVPNError.m"; sourceTree = "<group>"; }; C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSError+OpenVPNError.m"; sourceTree = "<group>"; };
C9E4401B1F6086A1001D7C41 /* NSError+Message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+Message.h"; sourceTree = "<group>"; };
C9E4401C1F6086A1001D7C41 /* NSError+Message.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+Message.m"; sourceTree = "<group>"; };
C9FD92181E9A667600374FC4 /* ovpncli.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ovpncli.hpp; path = Vendors/openvpn/client/ovpncli.hpp; sourceTree = "<group>"; }; C9FD92181E9A667600374FC4 /* ovpncli.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ovpncli.hpp; path = Vendors/openvpn/client/ovpncli.hpp; sourceTree = "<group>"; };
C9FD92191E9A667600374FC4 /* ovpncli.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ovpncli.cpp; path = Vendors/openvpn/client/ovpncli.cpp; sourceTree = "<group>"; }; C9FD92191E9A667600374FC4 /* ovpncli.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ovpncli.cpp; path = Vendors/openvpn/client/ovpncli.cpp; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@@ -447,8 +441,6 @@
C93A4F611EE18009004DC561 /* OpenVPNError.m */, C93A4F611EE18009004DC561 /* OpenVPNError.m */,
C9CDFDD9200781AF00323B73 /* OpenVPNClient.h */, C9CDFDD9200781AF00323B73 /* OpenVPNClient.h */,
C9CDFDDA200781AF00323B73 /* OpenVPNClient.mm */, C9CDFDDA200781AF00323B73 /* OpenVPNClient.mm */,
ABD6EF151F8F9C37007D3D90 /* OpenVPNAdapter.h */,
ABD6EF161F8F9C38007D3D90 /* OpenVPNAdapter.mm */,
ABD6EF071F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h */, ABD6EF071F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h */,
ABD6EF081F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m */, ABD6EF081F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m */,
C9C2B2B6200CB42F00CA0FF3 /* OpenVPNAdapterPacketFlow.h */, C9C2B2B6200CB42F00CA0FF3 /* OpenVPNAdapterPacketFlow.h */,
@@ -456,6 +448,8 @@
C9C2B2BA200CC42A00CA0FF3 /* OpenVPNPacket.mm */, C9C2B2BA200CC42A00CA0FF3 /* OpenVPNPacket.mm */,
ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.h */, ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.h */,
ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm */, ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm */,
ABD6EF151F8F9C37007D3D90 /* OpenVPNAdapter.h */,
ABD6EF161F8F9C38007D3D90 /* OpenVPNAdapter.mm */,
); );
name = Adapter; name = Adapter;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -574,20 +568,10 @@
name = Extensions; name = Extensions;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
C9E4401A1F6081FF001D7C41 /* Utils */ = {
isa = PBXGroup;
children = (
C9E4401B1F6086A1001D7C41 /* NSError+Message.h */,
C9E4401C1F6086A1001D7C41 /* NSError+Message.m */,
);
name = Utils;
sourceTree = "<group>";
};
C9FF73B71EB7421600E995AC /* Helpers */ = { C9FF73B71EB7421600E995AC /* Helpers */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
C9E350C5200F70CA000820D9 /* Extensions */, C9E350C5200F70CA000820D9 /* Extensions */,
C9E4401A1F6081FF001D7C41 /* Utils */,
); );
name = Helpers; name = Helpers;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -625,7 +609,6 @@
C9657A171EB0A7F800EFF210 /* OpenVPNConnectionInfo.h in Headers */, C9657A171EB0A7F800EFF210 /* OpenVPNConnectionInfo.h in Headers */,
C9BB47711E7171A100F3F98C /* OpenVPNError.h in Headers */, C9BB47711E7171A100F3F98C /* OpenVPNError.h in Headers */,
C9B795641F1D182500CF35FE /* OpenVPNReachabilityTracker.h in Headers */, C9B795641F1D182500CF35FE /* OpenVPNReachabilityTracker.h in Headers */,
C9E4401D1F6086A1001D7C41 /* NSError+Message.h in Headers */,
ABD6EF091F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h in Headers */, ABD6EF091F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h in Headers */,
C9657A611EB0D64E00EFF210 /* OpenVPNIPv6Preference.h in Headers */, C9657A611EB0D64E00EFF210 /* OpenVPNIPv6Preference.h in Headers */,
C9657A671EB0D73200EFF210 /* OpenVPNMinTLSVersion.h in Headers */, C9657A671EB0D73200EFF210 /* OpenVPNMinTLSVersion.h in Headers */,
@@ -672,7 +655,6 @@
C9657A181EB0A7F800EFF210 /* OpenVPNConnectionInfo.h in Headers */, C9657A181EB0A7F800EFF210 /* OpenVPNConnectionInfo.h in Headers */,
C9D2ABE81EA20F99007EDF9D /* OpenVPNError.h in Headers */, C9D2ABE81EA20F99007EDF9D /* OpenVPNError.h in Headers */,
C9B795651F1D182500CF35FE /* OpenVPNReachabilityTracker.h in Headers */, C9B795651F1D182500CF35FE /* OpenVPNReachabilityTracker.h in Headers */,
C9E4401E1F6086A1001D7C41 /* NSError+Message.h in Headers */,
ABD6EF0A1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h in Headers */, ABD6EF0A1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h in Headers */,
C9657A621EB0D64E00EFF210 /* OpenVPNIPv6Preference.h in Headers */, C9657A621EB0D64E00EFF210 /* OpenVPNIPv6Preference.h in Headers */,
C9657A681EB0D73200EFF210 /* OpenVPNMinTLSVersion.h in Headers */, C9657A681EB0D73200EFF210 /* OpenVPNMinTLSVersion.h in Headers */,
@@ -900,7 +882,6 @@
ABD6EF0B1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m in Sources */, ABD6EF0B1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m in Sources */,
C98467A81EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */, C98467A81EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */,
ABD6EF121F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm in Sources */, ABD6EF121F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm in Sources */,
C9E4401F1F6086A1001D7C41 /* NSError+Message.m in Sources */,
C9657A311EB0B7A900EFF210 /* OpenVPNTransportStats.mm in Sources */, C9657A311EB0B7A900EFF210 /* OpenVPNTransportStats.mm in Sources */,
C9B795661F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */, C9B795661F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */,
C9657A581EB0CE1300EFF210 /* OpenVPNProperties.mm in Sources */, C9657A581EB0CE1300EFF210 /* OpenVPNProperties.mm in Sources */,
@@ -942,7 +923,6 @@
ABD6EF0C1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m in Sources */, ABD6EF0C1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m in Sources */,
C98467A91EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */, C98467A91EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */,
ABD6EF131F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm in Sources */, ABD6EF131F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm in Sources */,
C9E440201F6086A1001D7C41 /* NSError+Message.m in Sources */,
C9657A301EB0B7A600EFF210 /* OpenVPNTransportStats.mm in Sources */, C9657A301EB0B7A600EFF210 /* OpenVPNTransportStats.mm in Sources */,
C9B795671F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */, C9B795671F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */,
C9657A591EB0CE1400EFF210 /* OpenVPNProperties.mm in Sources */, C9657A591EB0CE1400EFF210 /* OpenVPNProperties.mm in Sources */,
-15
View File
@@ -1,15 +0,0 @@
//
// NSError+Message.h
// OpenVPN Adapter
//
// Created by Sergey Abramchuk on 06.09.17.
//
//
#import <Foundation/Foundation.h>
@interface NSError (Message)
+ (NSString *)reasonFromResult:(NSInteger)result;
@end
-28
View File
@@ -1,28 +0,0 @@
//
// NSError+Message.m
// OpenVPN Adapter
//
// Created by Sergey Abramchuk on 06.09.17.
//
//
#import <mbedtls/error.h>
#import "NSError+Message.h"
@implementation NSError (Message)
+ (NSString *)reasonFromResult:(NSInteger)result {
size_t length = 1024;
char *buffer = malloc(length);
mbedtls_strerror(result, buffer, length);
NSString *reason = [NSString stringWithUTF8String:buffer];
free(buffer);
return reason;
}
@end
+6
View File
@@ -24,4 +24,10 @@ typedef NS_ERROR_ENUM(OpenVPNAdapterErrorDomain, OpenVPNAdapterError);
@end @end
@interface NSError (OpenVPNMbedTLSErrorGeneration)
+ (NSError *)ovpn_errorObjectForMbedTLSError:(NSInteger)errorCode description:(NSString *)description;
@end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
+22
View File
@@ -7,6 +7,8 @@
#import "NSError+OpenVPNError.h" #import "NSError+OpenVPNError.h"
#import <mbedtls/error.h>
#import "OpenVPNError.h" #import "OpenVPNError.h"
@implementation NSError (OpenVPNAdapterErrorGeneration) @implementation NSError (OpenVPNAdapterErrorGeneration)
@@ -179,3 +181,23 @@
} }
@end @end
@implementation NSError (OpenVPNMbedTLSErrorGeneration)
+ (NSError *)ovpn_errorObjectForMbedTLSError:(NSInteger)errorCode description:(NSString *)description {
size_t length = 1024;
char *buffer = malloc(length);
mbedtls_strerror(errorCode, buffer, length);
NSString *reason = [NSString stringWithUTF8String:buffer];
free(buffer);
return [NSError errorWithDomain:OpenVPNIdentityErrorDomain code:errorCode userInfo:@{
NSLocalizedDescriptionKey: description,
NSLocalizedFailureReasonErrorKey: reason
}];
}
@end
+9 -24
View File
@@ -5,13 +5,12 @@
// Created by Sergey Abramchuk on 06.09.17. // Created by Sergey Abramchuk on 06.09.17.
// //
// //
#import "OpenVPNCertificate.h"
#import <mbedtls/x509_crt.h> #import <mbedtls/x509_crt.h>
#import <mbedtls/pem.h> #import <mbedtls/pem.h>
#import "NSError+Message.h" #import "NSError+OpenVPNError.h"
#import "OpenVPNError.h"
#import "OpenVPNCertificate.h"
@interface OpenVPNCertificate () @interface OpenVPNCertificate ()
@@ -39,11 +38,7 @@
int result = mbedtls_x509_crt_parse(certificate.crt, (const unsigned char *)pemString.UTF8String, pemData.length + 1); int result = mbedtls_x509_crt_parse(certificate.crt, (const unsigned char *)pemString.UTF8String, pemData.length + 1);
if (result < 0) { if (result < 0) {
if (error) { if (error) {
NSString *reason = [NSError reasonFromResult:result]; *error = [NSError ovpn_errorObjectForMbedTLSError:result description:@"Failed to read PEM data"];
*error = [NSError errorWithDomain:OpenVPNIdentityErrorDomain code:result userInfo:@{
NSLocalizedDescriptionKey: @"Failed to read PEM data.",
NSLocalizedFailureReasonErrorKey: reason
}];
} }
return nil; return nil;
@@ -58,11 +53,7 @@
int result = mbedtls_x509_crt_parse_der(certificate.crt, derData.bytes, derData.length); int result = mbedtls_x509_crt_parse_der(certificate.crt, derData.bytes, derData.length);
if (result < 0) { if (result < 0) {
if (error) { if (error) {
NSString *reason = [NSError reasonFromResult:result]; *error = [NSError ovpn_errorObjectForMbedTLSError:result description:@"Failed to read DER data"];
*error = [NSError errorWithDomain:OpenVPNIdentityErrorDomain code:result userInfo:@{
NSLocalizedDescriptionKey: @"Failed to read DER data.",
NSLocalizedFailureReasonErrorKey: reason
}];
} }
return nil; return nil;
@@ -80,14 +71,11 @@
size_t output_length = 0; size_t output_length = 0;
int result = mbedtls_pem_write_buffer(header.UTF8String, footer.UTF8String, self.crt->raw.p, self.crt->raw.len, pem_buffer, buffer_length, &output_length); int result = mbedtls_pem_write_buffer(header.UTF8String, footer.UTF8String, self.crt->raw.p,
self.crt->raw.len, pem_buffer, buffer_length, &output_length);
if (result < 0) { if (result < 0) {
if (error) { if (error) {
NSString *reason = [NSError reasonFromResult:result]; *error = [NSError ovpn_errorObjectForMbedTLSError:result description: @"Failed to write PEM data"];
*error = [NSError errorWithDomain:OpenVPNIdentityErrorDomain code:result userInfo:@{
NSLocalizedDescriptionKey: @"Failed to write PEM data.",
NSLocalizedFailureReasonErrorKey: reason
}];
} }
free(pem_buffer); free(pem_buffer);
@@ -103,11 +91,8 @@
- (NSData *)derData:(out NSError **)error { - (NSData *)derData:(out NSError **)error {
if (self.crt->raw.p == NULL || self.crt->raw.len == 0) { if (self.crt->raw.p == NULL || self.crt->raw.len == 0) {
if (error) { if (error) {
NSString *reason = [NSError reasonFromResult:MBEDTLS_ERR_X509_BAD_INPUT_DATA]; *error = [NSError ovpn_errorObjectForMbedTLSError:MBEDTLS_ERR_X509_BAD_INPUT_DATA
*error = [NSError errorWithDomain:OpenVPNIdentityErrorDomain code:MBEDTLS_ERR_X509_BAD_INPUT_DATA userInfo:@{ description: @"Failed to write DER data"];
NSLocalizedDescriptionKey: @"Failed to write DER data.",
NSLocalizedFailureReasonErrorKey:reason
}];
} }
return nil; return nil;
+15 -26
View File
@@ -6,11 +6,11 @@
// //
// //
#import "OpenVPNPrivateKey.h"
#import <mbedtls/pk.h> #import <mbedtls/pk.h>
#import "NSError+Message.h" #import "NSError+OpenVPNError.h"
#import "OpenVPNError.h"
#import "OpenVPNPrivateKey.h"
@interface OpenVPNPrivateKey () @interface OpenVPNPrivateKey ()
@@ -45,14 +45,12 @@
size_t pem_length = strlen(pemString.UTF8String) + 1; size_t pem_length = strlen(pemString.UTF8String) + 1;
size_t password_length = password != nil ? strlen(password.UTF8String) : 0; size_t password_length = password != nil ? strlen(password.UTF8String) : 0;
int result = mbedtls_pk_parse_key(key.ctx, (const unsigned char *)pemString.UTF8String, pem_length, (const unsigned char *)password.UTF8String, password_length); int result = mbedtls_pk_parse_key(key.ctx, (const unsigned char *)pemString.UTF8String,
pem_length, (const unsigned char *)password.UTF8String, password_length);
if (result < 0) { if (result < 0) {
if (error) { if (error) {
NSString *reason = [NSError reasonFromResult:result]; *error = [NSError ovpn_errorObjectForMbedTLSError:result description:@"Failed to read PEM data"];
*error = [NSError errorWithDomain:OpenVPNIdentityErrorDomain code:result userInfo:@{
NSLocalizedDescriptionKey: @"Failed to read PEM data.",
NSLocalizedFailureReasonErrorKey: reason
}];
} }
return nil; return nil;
@@ -66,14 +64,12 @@
size_t password_length = password != nil ? strlen(password.UTF8String) : 0; size_t password_length = password != nil ? strlen(password.UTF8String) : 0;
int result = mbedtls_pk_parse_key(key.ctx, derData.bytes, derData.length, (const unsigned char *)password.UTF8String, password_length); int result = mbedtls_pk_parse_key(key.ctx, derData.bytes,
derData.length, (const unsigned char *)password.UTF8String, password_length);
if (result < 0) { if (result < 0) {
if (error) { if (error) {
NSString *reason = [NSError reasonFromResult:result]; *error = [NSError ovpn_errorObjectForMbedTLSError:result description:@"Failed to read DER data"];
*error = [NSError errorWithDomain:OpenVPNIdentityErrorDomain code:result userInfo:@{
NSLocalizedDescriptionKey: @"Failed to read DER data.",
NSLocalizedFailureReasonErrorKey: reason
}];
} }
return nil; return nil;
@@ -89,18 +85,15 @@
int result = mbedtls_pk_write_key_pem(self.ctx, pem_buffer, buffer_length); int result = mbedtls_pk_write_key_pem(self.ctx, pem_buffer, buffer_length);
if (result < 0) { if (result < 0) {
if (error) { if (error) {
NSString *reason = [NSError reasonFromResult:result]; *error = [NSError ovpn_errorObjectForMbedTLSError:result description:@"Failed to write PEM data"];
*error = [NSError errorWithDomain:OpenVPNIdentityErrorDomain code:result userInfo:@{
NSLocalizedDescriptionKey: @"Failed to write PEM data.",
NSLocalizedFailureReasonErrorKey: reason
}];
} }
free(pem_buffer); free(pem_buffer);
return nil; return nil;
} }
NSData *pemData = [[NSString stringWithCString:(const char *)pem_buffer encoding:NSUTF8StringEncoding] dataUsingEncoding:NSUTF8StringEncoding]; NSData *pemData = [[NSString stringWithCString:(const char *)pem_buffer
encoding:NSUTF8StringEncoding] dataUsingEncoding:NSUTF8StringEncoding];
free(pem_buffer); free(pem_buffer);
return pemData; return pemData;
@@ -113,11 +106,7 @@
int result = mbedtls_pk_write_key_der(self.ctx, der_buffer, buffer_length); int result = mbedtls_pk_write_key_der(self.ctx, der_buffer, buffer_length);
if (result < 0) { if (result < 0) {
if (error) { if (error) {
NSString *reason = [NSError reasonFromResult:result]; *error = [NSError ovpn_errorObjectForMbedTLSError:result description:@"Failed to write DER data"];
*error = [NSError errorWithDomain:OpenVPNIdentityErrorDomain code:result userInfo:@{
NSLocalizedDescriptionKey: @"Failed to write DER data.",
NSLocalizedFailureReasonErrorKey: reason
}];
} }
free(der_buffer); free(der_buffer);