Davide De Rosa
ca77858bf0
Move CryptoContainer to Core
2018-10-25 18:34:02 +02:00
Davide De Rosa
f1efac073c
Export and document log shortcuts in Configuration
2018-10-24 21:06:04 +02:00
Davide De Rosa
f5d12300f9
Save debug log to file in app group container
...
Don't bog UserDefaults. Reuse debugLogKey for the log filename.
2018-10-24 21:06:04 +02:00
Davide De Rosa
b35fb34da5
Cap masked hash to 16 hexes
2018-10-24 18:50:36 +02:00
Davide De Rosa
ae85337e91
Mask log.debug
2018-10-24 18:47:41 +02:00
Davide De Rosa
033763f372
Mask log.info
2018-10-24 18:47:41 +02:00
Davide De Rosa
25d84f6530
Add internal flag for masking private data
...
Hardcoded to true. Private data is mostly hostname/IP addresses
and routing information.
2018-10-24 18:23:10 +02:00
Davide De Rosa
b1a79d6451
Shut down on server-initiated HARD_RESET
...
Session is stale and not recoverable (lame duck).
2018-10-24 12:31:37 +02:00
Davide De Rosa
0b79ce4194
Handle server-initiated SOFT_RESET
2018-10-24 12:22:47 +02:00
Davide De Rosa
d829247e6e
Simplify socket shutdown code
...
Drop weird (old?) linkFailures check.
2018-10-24 09:42:18 +02:00
Davide De Rosa
91349fd780
Take shouldChangeProtocol out of GenericSocket
...
Behavior is not exactly similar in UDP and TCP.
2018-10-24 09:42:03 +02:00
Davide De Rosa
8b59fe6f4c
Use RawRepresentable where adequate
2018-10-24 09:19:50 +02:00
Davide De Rosa
e3a5302e06
Check NULL EKU and simplify OID comparison
2018-10-24 00:43:01 +02:00
Davide De Rosa
3a95568d0b
Remove unused code
2018-10-24 00:36:18 +02:00
Davide De Rosa
440a7f7da8
Verify server cert EKU
...
Fixes #27
2018-10-23 23:46:37 +02:00
Davide De Rosa
c32185b524
Review/complete mapping to ProviderError
...
Errors from TunnelKitNative were not mapped. Also, move TLS CA
verification error to TLSBox domain.
2018-10-23 23:44:25 +02:00
Davide De Rosa
f5d9720b01
Halt TLS on internal failure
2018-10-23 23:44:25 +02:00
Davide De Rosa
f725779e0e
Convert ct pulling to try/catch
2018-10-23 22:47:04 +02:00
Davide De Rosa
1ad4a62593
Report error status to shared defaults
...
Retain after disposal, unless manually stopped.
2018-10-22 01:04:36 +02:00
Davide De Rosa
7ffb997904
Add defaults key for last error
2018-10-22 01:04:36 +02:00
Davide De Rosa
4bf7f1a1fc
Bridge SessionError to public ProviderError
2018-10-22 01:04:36 +02:00
Davide De Rosa
6200a0bc1c
Split configuration and session errors
2018-10-22 01:04:36 +02:00
Davide De Rosa
f93634bd7a
Respect link MTU in TCP
...
Mitigates #39
2018-10-22 00:56:08 +02:00
Davide De Rosa
26fc12c2ef
Add missing fclose() after fopen()
...
Slip-up from #32
2018-10-21 00:22:36 +02:00
Davide De Rosa
fbd3f977d5
Parse static key from file
2018-10-19 17:22:26 +02:00
Davide De Rosa
28d9f3ee68
Add crypt strategy
2018-10-19 17:06:29 +02:00
Davide De Rosa
55e0aa5c5a
Implement and test crypt serializer
2018-10-19 17:06:26 +02:00
Davide De Rosa
3ec4a7d292
Implement AES-CTR encryption
2018-10-19 16:56:20 +02:00
Davide De Rosa
a430beb35f
Improve Swift bridging of CryptoFlags
2018-10-19 16:56:20 +02:00
Davide De Rosa
8ccc4c08a5
Add auth strategy
2018-10-19 16:20:56 +02:00
Davide De Rosa
0fce5abdde
Implement auth serializer
2018-10-19 16:20:56 +02:00
Davide De Rosa
a974646558
Add macros for replay packet id
2018-10-19 16:12:07 +02:00
Davide De Rosa
66735ec118
Prepare API to enable TLS wrapping
...
Extensible TLSWrap parameter.
2018-10-19 16:11:35 +02:00
Davide De Rosa
51720c1fbc
Split ControlPacket header/content serialization
...
rawSerializeTo: does not include opcode|session_id.
2018-10-19 16:11:35 +02:00
Davide De Rosa
372fa194a5
Parse indexed keys from StaticKey
2018-10-19 16:11:35 +02:00
Davide De Rosa
5c8c361fce
Add StaticKey class for static OpenVPN keys
2018-10-19 16:11:35 +02:00
Davide De Rosa
a85c4ea6da
Rename packetId flag to more proper IV
2018-10-19 15:55:16 +02:00
Davide De Rosa
bff9352c6e
Handle encryption/peer-id in a stateless manner
...
Fixes #30
2018-10-19 15:54:55 +02:00
Davide De Rosa
70b50a7a2e
Parse data opcode when decrypting
...
Assume it could be DATA_V1/V2 regardless of peer-id.
2018-10-19 11:33:12 +02:00
Davide De Rosa
9b785084e2
Customize HARD_RESET payload when PIA-patched
2018-10-18 13:31:11 +02:00
Davide De Rosa
eb8a8b38c2
Restore PIA HARD_RESET code
2018-10-18 12:45:32 +02:00
Davide De Rosa
872e20a95a
Add function to compute MD5 from certificate
2018-10-18 12:32:22 +02:00
Davide De Rosa
98c5a015f3
Split endpoint and credentials
...
Basically drop AuthenticatedEndpoint.
2018-10-06 16:22:02 +02:00
Davide De Rosa
40b733db57
Make credentials optional
2018-10-06 16:21:59 +02:00
Davide De Rosa
093774535d
Make CA non-optional
...
Fix up nullability qualifiers in TLSBox.
Fixes #26
2018-10-06 15:53:22 +02:00
Davide De Rosa
09210b727a
Use compression framing description
2018-09-28 08:40:14 +02:00
Davide De Rosa
7b96247c72
Fix interpretation of 0 seconds
...
0 keep-alive = never
0 reneg seconds = never
2018-09-28 08:39:57 +02:00
Davide De Rosa
24dabe2739
Set peer-info version from bundle
...
Omit build number for now, seems more complex than expected to
accomplish with CocoaPods.
2018-09-24 10:26:43 +02:00
Davide De Rosa
d6958ed28d
Revert LZO deprecation, still widely used
2018-09-23 14:23:52 +02:00
Davide De Rosa
58726a67d7
Update SwiftyBeaver for MemoryDestination
...
See for reference:
- https://github.com/pia-foss/tunnel-apple/pull/15
- https://github.com/SwiftyBeaver/SwiftyBeaver/pull/299
2018-09-23 14:14:25 +02:00
Davide De Rosa
668474d75c
Indent negotiated parameters in log
2018-09-21 19:53:38 +02:00
Davide De Rosa
44fc38e8ef
Rename encryption headers for consistency
...
The shared prefix makes it easier to associate them with
implementation files.
2018-09-20 09:03:33 +02:00
Davide De Rosa
600c93be55
Drop overheadLength, only used in one place
2018-09-20 09:03:33 +02:00
Davide De Rosa
dd02c92aa5
Expose methods for capacity prediction
...
Encapsulate encrypt/decrypt buffer capacity calculation.
2018-09-20 09:03:33 +02:00
Davide De Rosa
f6ee187db7
Use symbolic data header length
2018-09-20 09:03:33 +02:00
Davide De Rosa
aa39414a77
Rename packet header to opcode (first byte)
2018-09-20 09:03:31 +02:00
Davide De Rosa
fe92fcd91c
Remove NSData versions from Encrypter/Decrypter
...
Move to test target. Conversely, bring ZeroingData.data extension
into main targets.
2018-09-20 09:01:44 +02:00
Davide De Rosa
1099d9adbf
Improve control channel log readability
...
- Use consistent convention in id logging.
- Describe packet codes.
- Encapsulate packet logging.
2018-09-20 09:00:11 +02:00
Davide De Rosa
ce94a594f9
Bring code/key deserialization into serializer
...
Duplicates first byte parsing but makes testing more meaningful,
because there's no need to provide a bogus code/key pair.
2018-09-20 08:59:50 +02:00
Davide De Rosa
11cb312c02
Move control channel logic to PlainSerializer
2018-09-19 22:04:52 +02:00
Davide De Rosa
595cae3563
Add strategy for control channel serialization
2018-09-19 22:04:52 +02:00
Davide De Rosa
3608860b9d
Move sessionId and remoteSessionId
2018-09-19 22:04:52 +02:00
Davide De Rosa
1573b2070a
Move control queue management
...
- Out packets
- In packets
- Acks
2018-09-19 22:04:52 +02:00
Davide De Rosa
e6dd4de472
Move control data parsing
2018-09-19 22:04:52 +02:00
Davide De Rosa
19ce7de819
Encapsulate control state into ControlChannel
...
First step: variables + mutating funcs.
2018-09-19 22:04:52 +02:00
Davide De Rosa
d80c0b5460
Move in/out states to a generic struct
2018-09-19 22:04:52 +02:00
Davide De Rosa
2bd9484a43
Move ControlPacket serialization to Obj-C
...
Additionally, make sessionId non-optional in control packets. They
must have it, therefore treat a missing sessionId as a programming
error instead.
Reuse routines for acks to make PacketMacros the only point of
packets serialization.
2018-09-19 22:04:52 +02:00
Davide De Rosa
92dbb57666
Revert CommonPacket name to ControlPacket
2018-09-19 22:04:52 +02:00
Davide De Rosa
856fa9e12e
Take PacketStream out and make public
...
Useful for reuse in TCP streams.
2018-09-19 22:04:52 +02:00
Davide De Rosa
cba6f6f959
Clean up some documentation metadata
...
- Reorder fields in SessionProxy.Configuration*
- Add new classes to .yml
2018-09-19 22:04:52 +02:00
Davide De Rosa
6ffdcec47b
Return optional from String/IPv4 conversion
2018-09-19 22:03:46 +02:00
Davide De Rosa
da2727b003
Apply both IPv4 and IPv6 settings
...
Best choice to cope with "hybrid" environments.
2018-09-15 19:42:43 +02:00
Davide De Rosa
ac3582c0fa
Fix ignored OpenSSL code
2018-09-14 02:04:36 +02:00
Davide De Rosa
b9243c9f0b
Add some more peer-info
...
- IV_PLAT
- IV_UI_VER
- IV_SSL
2018-09-12 15:50:36 +02:00
Davide De Rosa
02a20b5308
Indent TunnelKitProvider.Configuration log
...
Gives more context.
2018-09-12 15:49:41 +02:00
Davide De Rosa
915638b163
Log negotiated parms at info level
...
Useful when debug disabled.
2018-09-12 15:48:47 +02:00
Davide De Rosa
aef7daec51
Fix and clean up redundant nullability specifiers
2018-09-12 15:38:52 +02:00
Davide De Rosa
a3fe740ad9
Assert ambiguity about HMAC key length
2018-09-12 15:21:25 +02:00
Davide De Rosa
d53e7add10
Allow HMAC verify with nil cipher in CryptoCBC
2018-09-12 15:21:25 +02:00
Davide De Rosa
401d999b3d
Expose HMAC digestLength where available
2018-09-12 15:21:25 +02:00
Davide De Rosa
4af0ce8739
Refactor duplicate keep-alive code
2018-09-09 00:52:16 +02:00
Davide De Rosa
3a02557b5e
Override keep-alive with pushed interval
2018-09-09 00:52:16 +02:00
Davide De Rosa
4bf02198d1
Parse ping from PUSH_REPLY
2018-09-09 00:52:16 +02:00
Davide De Rosa
66864da51b
Default to no keep-alive if unset
...
For consistency with other optional flags.
Updates #20
2018-09-08 12:56:40 +02:00
Davide De Rosa
01f65b2a7e
Always shut down on known tunnel error
...
Not recoverable by default (e.g algorithm mismatch).
2018-09-08 00:10:35 +02:00
Davide De Rosa
891c72caa1
Rearrange shutdown code rationally
2018-09-08 00:10:35 +02:00
Davide De Rosa
8adb9871c3
Dispose tunnel if can't try next protocol
...
Return boolean in socketShouldChangeProtocol indicating whether
another protocol is available.
2018-09-08 00:10:35 +02:00
Davide De Rosa
de09d0b5da
Only try upgrade socket on network error
2018-09-08 00:10:35 +02:00
Davide De Rosa
ecbad85b4a
Discard 0 keep-alive interval
2018-09-08 00:06:19 +02:00
Davide De Rosa
582ef4875d
Move default pingInterval to constructor
...
Use CoreConfiguration only within Core.
2018-09-08 00:00:07 +02:00
Davide De Rosa
65468207cb
Transfer keep-alive to SessionProxy
2018-09-07 22:14:57 +02:00
Davide De Rosa
fcfe1f3f68
Add keepAliveSeconds field in AppExtension
2018-09-07 22:13:40 +02:00
Davide De Rosa
e9032e5490
Leave nil if push option parsed but unrecognized
...
For whatever reason. Do not override with .disabled when not
necessarily intended.
2018-09-07 15:22:03 +02:00
Davide De Rosa
e5918d1b05
Override framing with pushed if available
2018-09-07 15:11:44 +02:00
Davide De Rosa
0304c4a5eb
Parse compression framing from PUSH_REPLY
2018-09-07 15:10:19 +02:00
Davide De Rosa
55cdd6227c
Interpret 0 reneg seconds as never
2018-09-07 14:58:56 +02:00
Davide De Rosa
14f5a68c12
Move appGroup out of Configuration
...
Decouple VPN parameters.
2018-09-07 00:25:21 +02:00
Davide De Rosa
1fbfe5b844
Document genericName method
2018-09-06 11:16:48 +02:00
Davide De Rosa
5b638ea5f6
Use different genericName for CBC/GCM
2018-09-06 11:16:14 +02:00
Davide De Rosa
0b28eacf0d
Add more metadata to Cipher/Digest
...
- Ciphers are AES.
- Digests are HMAC.
2018-09-06 10:55:56 +02:00
Davide De Rosa
ce6a41a218
Add more ciphers/digests
...
No-brainer, OpenSSL EVP supports them.
2018-09-06 10:38:18 +02:00
Davide De Rosa
802f7dc0f8
Fix debugLogFormat not copied to builder
2018-09-06 10:34:10 +02:00
Davide De Rosa
d6b80ea449
Implement Codable in public entities
...
Also rename CompressionFraming for being an extension of
SessionProxy.
2018-09-06 10:34:10 +02:00
Davide De Rosa
43a5972737
Fix cipher regex in PUSH_REPLY
...
Breaks with NCP enabled when cipher is not last. Trailing comma
was erroneously included in parsed cipher name.
Fixes #11
2018-09-05 03:54:40 +02:00
Davide De Rosa
3aebedf5b8
Encapsulate complex serialization
2018-09-04 15:59:22 +02:00
Davide De Rosa
e121555f82
Add Cipher.embedsDigest to signal digest embedding
...
Currently GCM ciphers do.
2018-09-04 15:57:07 +02:00
Davide De Rosa
3543f7aab3
Omit sensitive data from PUSH_REPLY log
...
Namely auth-token.
2018-09-02 12:48:45 +02:00
Davide De Rosa
201da9b69b
Bump IV_VER to 2.4
...
Enough to claim.
2018-09-02 02:09:20 +02:00
Davide De Rosa
bcc95ad510
Send NCP in peer-info
2018-09-02 02:09:20 +02:00
Davide De Rosa
81eb18619d
Pick cipher from PUSH_REPLY if present
2018-09-02 02:09:20 +02:00
Davide De Rosa
31e694859f
Cache aggregated PushReply object
...
- authToken
- peerId
- cipher
Retain across soft resets.
2018-09-02 02:09:20 +02:00
Davide De Rosa
cff359fceb
Parse pushed cipher if any
2018-09-02 02:09:20 +02:00
Davide De Rosa
e900454504
Share connection completion code
...
Across hard and soft reset.
2018-09-02 02:09:20 +02:00
Davide De Rosa
c930cda065
Consolidate DataPath with new flow
2018-09-02 02:09:20 +02:00
Davide De Rosa
c01ac7e1e3
Postpone keys setup until after PUSH_REPLY
...
And rename to setupEncryption() for ambiguity with SessionKey.
2018-09-02 02:09:20 +02:00
Davide De Rosa
474e633e48
Parse arguments from regexp extension
...
Further code simplification.
2018-09-02 01:14:37 +02:00
Davide De Rosa
208fc48dd7
Drop unused DataPath protocols array
2018-08-31 01:59:08 +02:00
Davide De Rosa
ec2950171b
Use AF_INET6 according to IPv6 availability
2018-08-31 01:59:08 +02:00
Davide De Rosa
235c485cae
Simplify regex matching with private extension
2018-08-31 01:59:08 +02:00
Davide De Rosa
e6036095c9
Describe routes in IPv*Settings
2018-08-31 01:59:08 +02:00
Davide De Rosa
373a36b9c1
Parse and apply IPv6 settings when available
...
IPv4 currently mandatory in PushReply (exception otherwise).
2018-08-31 01:59:08 +02:00
Davide De Rosa
ac0e7713d6
Parse IPv6 DNS servers
...
dhcp-option can be DN6 (older) or DNS (newer).
2018-08-31 01:59:08 +02:00
Davide De Rosa
97866e6f23
Set compression framing enum value by appearance
...
0 = none (oldest)
1 = comp-lzo
2 = compress (newest)
2018-08-31 01:58:18 +02:00
Davide De Rosa
b050110e60
Bridge CompressionFraming to Swift
...
Avoid exposing __TunnelKitNative module for using it.
2018-08-31 01:40:58 +02:00
Davide De Rosa
b81294f6e4
Parse IPv4 from String
2018-08-31 01:06:38 +02:00
Davide De Rosa
7723a7fe7d
Move compression magic bytes back to PacketMacros
2018-08-30 19:33:23 +02:00
Davide De Rosa
b0d264889c
Extend PUSH_REPLY parsing
...
- Topology
- Routes
Use the less confusing defaultGateway vs gatewayAddress.
2018-08-30 18:02:12 +02:00
Davide De Rosa
5bf7813d56
Forward compound SessionReply to delegate
...
Improves extensibility.
2018-08-30 18:02:12 +02:00
Davide De Rosa
3dabc254bc
Improve naming in crypto classes
...
- Consistency in encryption/decryption flow
- Consistency in packet/payload
- DataPathChannel method names
2018-08-30 17:52:50 +02:00
Davide De Rosa
5166ac3813
Move compression framing to stateless blocks
...
Prepare payload blocks in DataPath.
2018-08-30 17:11:22 +02:00
Davide De Rosa
31924c6038
Make peerId stateless, imply from blocks
...
Will do the same with compressionFraming.
2018-08-30 14:56:03 +02:00
Davide De Rosa
e57ef9fb86
Fix duplicate memcpy in AEAD crypto
...
Regression in #5
2018-08-30 14:55:26 +02:00
Davide De Rosa
68810d9497
Add description to framing enum
2018-08-30 13:59:47 +02:00
Davide De Rosa
209889b9d2
Make compression framing an enum option
...
- Disabled: no framing (default)
- CompLZO: NO_COMPRESS
- Compress: NO_COMPRESS_SWAP
2018-08-30 12:43:36 +02:00
Davide De Rosa
dee2956406
Rename Certificate to CryptoContainer
...
Makes more sense as it holds certs and keys. Can be other formats
than PEM in the future.
2018-08-28 12:55:27 +02:00
Davide De Rosa
e6f509a26c
Add client certificate to TunnelKitProvider
...
Refactor composition of temporary file URL.
Also fix missing LZOFraming from Configuration.builder().
2018-08-28 12:55:27 +02:00
Davide De Rosa
a4c109a916
Bridge client cert from SessionProxy to TLSBox
2018-08-28 12:55:27 +02:00
Davide De Rosa
b7a48d4f4f
Support client certificate in TLSBox
2018-08-28 12:55:27 +02:00
Davide De Rosa
6a71ada1c8
Drop support for redundant EC curves
2018-08-28 12:55:27 +02:00
Davide De Rosa
b172f79719
Re-license with proper per-file notices
...
Clarify explicitly the author/extent of the fork, with proper
credit to the original project's license and copyright holder.
2018-08-28 12:53:14 +02:00
Davide De Rosa
c4b0964c3c
Improve split naming
...
*Socket + *Link
2018-08-24 12:44:17 +02:00
Davide De Rosa
54cc811e47
Use MTU configuration for the link instead
...
Raise default link MTU from 1000 to 1250. Keep default for
tunnel MTU.
2018-08-24 12:37:09 +02:00
Davide De Rosa
6208fe8e21
Split GenericSocket and LinkInterface
...
Keep socket and link logic separated. Allows for setting MTU
specifically for the link.
- UDP: hardcoded 1000
- TCP: ignored (.max)
2018-08-24 12:36:35 +02:00
Davide De Rosa
94890c08cf
Do not deprecate until replacement
...
Implement new compression framing later.
2018-08-24 00:48:17 +02:00
Davide De Rosa
9f54e624ee
Expose LZO framing option
2018-08-24 00:27:45 +02:00
Davide De Rosa
8836d2b175
Deprecate LZO compression framing
...
Prepend NO_COMPRESS if enabled, omit if not (default).
2018-08-24 00:18:42 +02:00
Davide De Rosa
fe7a2c6941
Drop a few old commented lines
2018-08-23 18:51:36 +02:00
Davide De Rosa
2459fe1bfd
Move a few classes inside SessionProxy
...
- Authenticator
- EncryptionBridge (formerly EncryptionProxy)
- PushReply
- SessionKey
They only make sense there. Content unchanged.
2018-08-23 18:51:36 +02:00
Davide De Rosa
6d5e9f68a9
Move cipher/digest enums to Core
...
Restrict choice to supported OpenSSL algorithms.
2018-08-23 18:51:36 +02:00
Davide De Rosa
8a9e99e6a9
Wrap SessionProxy configuration in a builder
2018-08-23 18:51:36 +02:00
Davide De Rosa
897e824340
Enforce use of non-preset CA certificates
2018-08-23 12:11:55 +02:00
Davide De Rosa
dfac465c1d
Drop support for PIA HARD_RESET patch
2018-08-23 12:11:55 +02:00
Davide De Rosa
4d03df7066
Finish up renaming in headers and prefixes
2018-08-23 12:10:56 +02:00
Davide De Rosa
fe665e8ad5
Rename library to TunnelKit
2018-08-23 12:10:41 +02:00