Add and test PKCS#8 decryption

Fixes #80
This commit is contained in:
Davide De Rosa 2019-04-02 00:33:20 +02:00
parent 47b80d5361
commit 559bb6607c
6 changed files with 233 additions and 1 deletions

View File

@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
### Fixed
- Unrecognized PKCS#8 encrypted private keys. [#80](https://github.com/keeshux/tunnelkit/issues/80)
## 1.5.2 (2019-04-01) ## 1.5.2 (2019-04-01)
### Added ### Added

View File

@ -139,6 +139,10 @@
0EC1BBA920D7D803007C4C7B /* ConnectionStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC1BBA720D7D803007C4C7B /* ConnectionStrategy.swift */; }; 0EC1BBA920D7D803007C4C7B /* ConnectionStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC1BBA720D7D803007C4C7B /* ConnectionStrategy.swift */; };
0ECE3528212EB7770040F253 /* CryptoContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECE3527212EB7770040F253 /* CryptoContainer.swift */; }; 0ECE3528212EB7770040F253 /* CryptoContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECE3527212EB7770040F253 /* CryptoContainer.swift */; };
0ECE352A212EB88E0040F253 /* CryptoContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECE3527212EB7770040F253 /* CryptoContainer.swift */; }; 0ECE352A212EB88E0040F253 /* CryptoContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECE3527212EB7770040F253 /* CryptoContainer.swift */; };
0ECEB1152252C8E900E9E551 /* tunnelbear.enc.8.ovpn in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEB1132252C8E900E9E551 /* tunnelbear.enc.8.ovpn */; };
0ECEB1162252C8E900E9E551 /* tunnelbear.enc.8.ovpn in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEB1132252C8E900E9E551 /* tunnelbear.enc.8.ovpn */; };
0ECEB1172252C8E900E9E551 /* tunnelbear.enc.8.key in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEB1142252C8E900E9E551 /* tunnelbear.enc.8.key */; };
0ECEB1182252C8E900E9E551 /* tunnelbear.enc.8.key in Resources */ = {isa = PBXBuildFile; fileRef = 0ECEB1142252C8E900E9E551 /* tunnelbear.enc.8.key */; };
0ED9C8642138139000621BA3 /* SessionProxy+CompressionFraming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED9C8632138139000621BA3 /* SessionProxy+CompressionFraming.swift */; }; 0ED9C8642138139000621BA3 /* SessionProxy+CompressionFraming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED9C8632138139000621BA3 /* SessionProxy+CompressionFraming.swift */; };
0ED9C8652138139000621BA3 /* SessionProxy+CompressionFraming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED9C8632138139000621BA3 /* SessionProxy+CompressionFraming.swift */; }; 0ED9C8652138139000621BA3 /* SessionProxy+CompressionFraming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED9C8632138139000621BA3 /* SessionProxy+CompressionFraming.swift */; };
0EE3B3E421471C3A0027AB17 /* StaticKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EE3B3E321471C3A0027AB17 /* StaticKey.swift */; }; 0EE3B3E421471C3A0027AB17 /* StaticKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EE3B3E321471C3A0027AB17 /* StaticKey.swift */; };
@ -337,6 +341,8 @@
0EC1BBA420D71190007C4C7B /* DNSResolver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DNSResolver.swift; sourceTree = "<group>"; }; 0EC1BBA420D71190007C4C7B /* DNSResolver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DNSResolver.swift; sourceTree = "<group>"; };
0EC1BBA720D7D803007C4C7B /* ConnectionStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionStrategy.swift; sourceTree = "<group>"; }; 0EC1BBA720D7D803007C4C7B /* ConnectionStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionStrategy.swift; sourceTree = "<group>"; };
0ECE3527212EB7770040F253 /* CryptoContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoContainer.swift; sourceTree = "<group>"; }; 0ECE3527212EB7770040F253 /* CryptoContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoContainer.swift; sourceTree = "<group>"; };
0ECEB1132252C8E900E9E551 /* tunnelbear.enc.8.ovpn */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tunnelbear.enc.8.ovpn; sourceTree = "<group>"; };
0ECEB1142252C8E900E9E551 /* tunnelbear.enc.8.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tunnelbear.enc.8.key; sourceTree = "<group>"; };
0ED9C8632138139000621BA3 /* SessionProxy+CompressionFraming.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SessionProxy+CompressionFraming.swift"; sourceTree = "<group>"; }; 0ED9C8632138139000621BA3 /* SessionProxy+CompressionFraming.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SessionProxy+CompressionFraming.swift"; sourceTree = "<group>"; };
0EE3B3E321471C3A0027AB17 /* StaticKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticKey.swift; sourceTree = "<group>"; }; 0EE3B3E321471C3A0027AB17 /* StaticKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticKey.swift; sourceTree = "<group>"; };
0EE7A79420F61EDC00B42E6A /* PacketMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketMacros.h; sourceTree = "<group>"; }; 0EE7A79420F61EDC00B42E6A /* PacketMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketMacros.h; sourceTree = "<group>"; };
@ -463,8 +469,10 @@
0EB2B45A20F0BE4C004233D7 /* TestUtils.swift */, 0EB2B45A20F0BE4C004233D7 /* TestUtils.swift */,
0E749F612178911C00BB2701 /* pia-2048.pem */, 0E749F612178911C00BB2701 /* pia-2048.pem */,
0E011F832196E25400BA59EE /* pia-hungary.ovpn */, 0E011F832196E25400BA59EE /* pia-hungary.ovpn */,
0E3B656E224923EC00EFF4DA /* tunnelbear.enc.1.ovpn */,
0E500EA522493B5B00CAE560 /* tunnelbear.enc.1.key */, 0E500EA522493B5B00CAE560 /* tunnelbear.enc.1.key */,
0E3B656E224923EC00EFF4DA /* tunnelbear.enc.1.ovpn */,
0ECEB1142252C8E900E9E551 /* tunnelbear.enc.8.key */,
0ECEB1132252C8E900E9E551 /* tunnelbear.enc.8.ovpn */,
0E3B65712249247E00EFF4DA /* tunnelbear.key */, 0E3B65712249247E00EFF4DA /* tunnelbear.key */,
); );
path = TunnelKitTests; path = TunnelKitTests;
@ -942,9 +950,11 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
0E011F852196E25900BA59EE /* pia-hungary.ovpn in Resources */, 0E011F852196E25900BA59EE /* pia-hungary.ovpn in Resources */,
0ECEB1172252C8E900E9E551 /* tunnelbear.enc.8.key in Resources */,
0E500EA622493B5B00CAE560 /* tunnelbear.enc.1.key in Resources */, 0E500EA622493B5B00CAE560 /* tunnelbear.enc.1.key in Resources */,
0E3B65762249253F00EFF4DA /* tunnelbear.key in Resources */, 0E3B65762249253F00EFF4DA /* tunnelbear.key in Resources */,
0E3B65742249253A00EFF4DA /* tunnelbear.enc.1.ovpn in Resources */, 0E3B65742249253A00EFF4DA /* tunnelbear.enc.1.ovpn in Resources */,
0ECEB1152252C8E900E9E551 /* tunnelbear.enc.8.ovpn in Resources */,
0E749F622178911D00BB2701 /* pia-2048.pem in Resources */, 0E749F622178911D00BB2701 /* pia-2048.pem in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -978,9 +988,11 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
0E011F862196E25A00BA59EE /* pia-hungary.ovpn in Resources */, 0E011F862196E25A00BA59EE /* pia-hungary.ovpn in Resources */,
0ECEB1182252C8E900E9E551 /* tunnelbear.enc.8.key in Resources */,
0E500EA722493B5B00CAE560 /* tunnelbear.enc.1.key in Resources */, 0E500EA722493B5B00CAE560 /* tunnelbear.enc.1.key in Resources */,
0E3B65772249254000EFF4DA /* tunnelbear.key in Resources */, 0E3B65772249254000EFF4DA /* tunnelbear.key in Resources */,
0E3B65752249253B00EFF4DA /* tunnelbear.enc.1.ovpn in Resources */, 0E3B65752249253B00EFF4DA /* tunnelbear.enc.1.ovpn in Resources */,
0ECEB1162252C8E900E9E551 /* tunnelbear.enc.8.ovpn in Resources */,
0EA82A3E2190B2BC007960EB /* pia-2048.pem in Resources */, 0EA82A3E2190B2BC007960EB /* pia-2048.pem in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;

View File

@ -82,6 +82,7 @@ class ConfigurationParserTests: XCTestCase {
func testEncryptedCertificateKey() throws { func testEncryptedCertificateKey() throws {
try privateTestEncryptedCertificateKey(pkcs: "1") try privateTestEncryptedCertificateKey(pkcs: "1")
try privateTestEncryptedCertificateKey(pkcs: "8")
} }
private func privateTestEncryptedCertificateKey(pkcs: String) throws { private func privateTestEncryptedCertificateKey(pkcs: String) throws {

View File

@ -98,6 +98,7 @@ class EncryptionTests: XCTestCase {
func testPrivateKeyDecryption() { func testPrivateKeyDecryption() {
privateTestPrivateKeyDecryption(pkcs: "1") privateTestPrivateKeyDecryption(pkcs: "1")
privateTestPrivateKeyDecryption(pkcs: "8")
} }
private func privateTestPrivateKeyDecryption(pkcs: String) { private func privateTestPrivateKeyDecryption(pkcs: String) {

View File

@ -0,0 +1,54 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
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
kNk=
-----END ENCRYPTED PRIVATE KEY-----

View File

@ -0,0 +1,158 @@
client
dev tun0
proto udp
comp-lzo
nobind
ns-cert-type server
persist-key
persist-tun
reneg-sec 0
dhcp-option DNS 8.8.8.8
dhcp-option DNS 8.8.4.4
redirect-gateway
verb 1
auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,1C7216F89C74E56260FE71A9C1BAB35E
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
-----END RSA PRIVATE KEY-----
</key>
remote no.lazerpenguin.com 443
cipher AES-256-CBC
auth SHA256
keysize 256