Skip to content

Commit

Permalink
eap auth
Browse files Browse the repository at this point in the history
  • Loading branch information
miniyarov committed Sep 16, 2019
1 parent caf1c2e commit 4a3091e
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 22 deletions.
47 changes: 47 additions & 0 deletions ios/Keychain.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import Foundation
import Security

@objc class Keychain {
@objc func persistentRef(key: String) -> NSData? {
let query: [NSObject: AnyObject] = [
kSecClass: kSecClassGenericPassword,
kSecAttrGeneric: key,
kSecAttrAccount: key,
kSecAttrAccessible: kSecAttrAccessibleAlways,
kSecMatchLimit: kSecMatchLimitOne,
kSecAttrService: NSBundle.mainBundle().bundleIdentifier!,
kSecReturnPersistentRef: kCFBooleanTrue
]

var secItem: AnyObject?
let result = SecItemCopyMatching(query, &secItem)
if result != errSecSuccess {
return nil
}

return secItem as? NSData
}

@objc func set(key: String, value: String) {

let query: [NSObject: AnyObject] = [
kSecValueData: value.dataUsingEncoding(NSUTF8StringEncoding)!,
kSecClass: kSecClassGenericPassword,
kSecAttrGeneric: key,
kSecAttrAccount: key,
kSecAttrAccessible: kSecAttrAccessibleAlways,
kSecAttrService: NSBundle.mainBundle().bundleIdentifier!
]

clear(key)
SecItemAdd(query as CFDictionaryRef, nil)
}

@objc func clear(key: String) {
let query: [NSObject: AnyObject] = [
kSecClass: kSecClassGenericPassword,
kSecAttrAccount: key
]
SecItemDelete(query as CFDictionaryRef)
}
}
1 change: 1 addition & 0 deletions ios/RNNetworkExtension.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>

@class Keychain;

@interface RNNetworkExtension : RCTEventEmitter <RCTBridgeModule>

Expand Down
46 changes: 26 additions & 20 deletions ios/RNNetworkExtension.m
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

#import "RNNetworkExtension.h"
#import "RNNetworkExtension-Swift.h"

#import <NetworkExtension/NEVPNManager.h>
#import <NetworkExtension/NEVPNConnection.h>
Expand Down Expand Up @@ -97,38 +98,43 @@ -(void)installProfile:(NSDictionary *)args resolver:(RCTPromiseResolveBlock)reso
p = [[NEVPNProtocolIKEv2 alloc] init];
}

p.serverAddress = args[@"IPAddress"];
Keychain *keychain = [Keychain new];
[keychain set:@"vpnpassword" value:args[@"password"]];

p.serverAddress = args[@"domain"];
p.authenticationMethod = NEVPNIKEAuthenticationMethodCertificate;
p.identityData = [[NSData alloc] initWithBase64EncodedString:args[@"clientCert"] options:0];
p.identityDataPassword = args[@"clientCertKey"];

p.childSecurityAssociationParameters.diffieHellmanGroup = NEVPNIKEv2DiffieHellmanGroup19;
p.childSecurityAssociationParameters.encryptionAlgorithm = NEVPNIKEv2EncryptionAlgorithmAES128GCM;
p.childSecurityAssociationParameters.integrityAlgorithm = NEVPNIKEv2IntegrityAlgorithmSHA512;
p.childSecurityAssociationParameters.lifetimeMinutes = 20;

p.IKESecurityAssociationParameters.diffieHellmanGroup = NEVPNIKEv2DiffieHellmanGroup19;
p.IKESecurityAssociationParameters.encryptionAlgorithm = NEVPNIKEv2EncryptionAlgorithmAES128GCM;
p.IKESecurityAssociationParameters.integrityAlgorithm = NEVPNIKEv2IntegrityAlgorithmSHA512;
p.IKESecurityAssociationParameters.lifetimeMinutes = 20;
p.username = args[@"username"];
p.passwordReference = [keychain persistentRef:args[@"password"]];
// p.identityData = [[NSData alloc] initWithBase64EncodedString:args[@"clientCert"] options:0];
// p.identityDataPassword = args[@"clientCertKey"];

// p.childSecurityAssociationParameters.diffieHellmanGroup = NEVPNIKEv2DiffieHellmanGroup19;
// p.childSecurityAssociationParameters.encryptionAlgorithm = NEVPNIKEv2EncryptionAlgorithmAES128GCM;
// p.childSecurityAssociationParameters.integrityAlgorithm = NEVPNIKEv2IntegrityAlgorithmSHA512;
// p.childSecurityAssociationParameters.lifetimeMinutes = 20;

// p.IKESecurityAssociationParameters.diffieHellmanGroup = NEVPNIKEv2DiffieHellmanGroup19;
// p.IKESecurityAssociationParameters.encryptionAlgorithm = NEVPNIKEv2EncryptionAlgorithmAES128GCM;
// p.IKESecurityAssociationParameters.integrityAlgorithm = NEVPNIKEv2IntegrityAlgorithmSHA512;
// p.IKESecurityAssociationParameters.lifetimeMinutes = 20;

p.disableMOBIKE = NO;
p.disableRedirect = YES;
p.enableRevocationCheck = NO;
p.enablePFS = YES;
p.useConfigurationAttributeInternalIPSubnet = NO;
p.certificateType = NEVPNIKEv2CertificateTypeECDSA256;
p.serverCertificateCommonName = args[@"IPAddress"];
p.serverCertificateIssuerCommonName = args[@"IPAddress"];
// p.certificateType = NEVPNIKEv2CertificateTypeECDSA256;
// p.serverCertificateCommonName = args[@"IPAddress"];
// p.serverCertificateIssuerCommonName = args[@"IPAddress"];

p.localIdentifier = args[@"IPAddress"];
p.remoteIdentifier = args[@"IPAddress"];
p.localIdentifier = args[@"domain"];
p.remoteIdentifier = args[@"domain"];

p.useExtendedAuthentication = NO;
p.useExtendedAuthentication = YES;
p.disconnectOnSleep = NO;

_vpnManager.protocolConfiguration = p;
_vpnManager.localizedDescription = @"AnyVPN";
_vpnManager.localizedDescription = args[@"domain"];
_vpnManager.enabled = YES;

[_vpnManager saveToPreferencesWithCompletionHandler:^(NSError *error) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react-native-network-extension",
"version": "0.1.11",
"version": "0.1.12",
"description": "React Native Network Extension",
"repository": "https://github.com/miniyarov/react-native-network-extension",
"main": "index.js",
Expand Down
2 changes: 1 addition & 1 deletion react-native-network-extension.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Pod::Spec.new do |s|
s.platform = :ios, '9.0'

s.preserve_paths = '*.js'
s.source_files = 'ios/*.{h,m}'
s.source_files = 'ios/*.{h,m}', 'ios/*.swift'

s.dependency 'React'
end
Expand Down

0 comments on commit 4a3091e

Please sign in to comment.