Commit Graph

368 Commits

Author SHA1 Message Date
Andy Wang
bbb0d35e80 Remove conns from map once switchboard.CloseAll is called 2019-08-20 23:15:36 +01:00
Andy Wang
8b99e419b3 Check buffer length for datagramBuffer.Read() in case the datagram is larger than the buffer 2019-08-20 22:50:58 +01:00
Andy Wang
46c02d17f4 Refactor InitState 2019-08-20 22:48:01 +01:00
Andy Wang
87a7684e10 More comments 2019-08-20 22:43:04 +01:00
Andy Wang
dd4a1769d0 Refactor new session authorisation 2019-08-20 17:35:17 +01:00
Andy Wang
eabe113547 Add Stream Timeout 2019-08-19 23:23:41 +01:00
Andy Wang
ba467e8a32 Only store stream in map after Accept 2019-08-19 11:31:56 +01:00
Andy Wang
c8184fc1d2 Switch back to juju/ratelimit 2019-08-17 11:23:26 +01:00
Andy Wang
cf1f1ccf16 Add some tests 2019-08-17 00:59:30 +01:00
Andy Wang
57255fdeb2 Fail to parse ClientHello if the TLS record layer Content Type and versions are wrong 2019-08-17 00:35:28 +01:00
Andy Wang
0e0a3314c9 Add server TLS parse test 2019-08-17 00:32:03 +01:00
Andy Wang
812ca1af99 Unexport some client.State fields 2019-08-17 00:18:19 +01:00
Andy Wang
b98a74f49b Refactor client ClientHello composition 2019-08-17 00:16:31 +01:00
Andy Wang
b5c6d7fedc Change touchUp function signature 2019-08-16 23:56:46 +01:00
Andy Wang
52796ad0b1 recvDataFromRemote returns err 2019-08-16 23:47:15 +01:00
Andy Wang
c276f504b5 Use ENUM constants for encryption methods 2019-08-16 23:44:40 +01:00
Andy Wang
e9a3c29429 Add some tests 2019-08-16 23:39:41 +01:00
Andy Wang
e28df86a55 Move Unordered field around 2019-08-16 23:20:24 +01:00
Andy Wang
c1b1d5d8ba Fix accidentally removed tx qos 2019-08-14 11:56:55 +01:00
Andy Wang
44a09219f7 Experimental support for UDP 2019-08-14 11:56:55 +01:00
Andy Wang
c19c43f6e8 Server side UDP to proxy server 2019-08-14 11:56:55 +01:00
Andy Wang
c36ec04ce5 Add unordered mode 2019-08-14 11:56:55 +01:00
Andy Wang
52fac535e3 Fix nil pointer with ClientInfo 2019-08-14 11:48:32 +01:00
Andy Wang
8967819830 Fix accidentally removed tx qos 2019-08-14 10:28:08 +01:00
Qian Wang
f65a46f4a9 Remove unnecessary state variable IsAdmin 2019-08-12 14:25:24 +01:00
Qian Wang
58cbb73f0f Refactor return value of decryption 2019-08-12 14:21:42 +01:00
Qian Wang
71e48a1947 Refactor switchboard configuration and add unordered option 2019-08-12 00:48:20 +01:00
Qian Wang
cb672a99de Refactor session configuration 2019-08-12 00:22:15 +01:00
Qian Wang
abc83a9190 Potential fix to an edge case nil pointer 2019-08-09 10:36:27 +01:00
Qian Wang
ea5bb44b0a Add and edit some tests 2019-08-08 15:08:16 +01:00
Qian Wang
82fe177c24 Change how timestamp's validity is checked 2019-08-08 15:05:36 +01:00
Qian Wang
fc9f227ccf stream.Write now returns the correct amount of data written 2019-08-08 10:56:29 +01:00
Qian Wang
572fe8486a Rename a variable and modify a test 2019-08-07 19:08:37 +01:00
Qian Wang
586cc5ebb6 Optimise deobfs 2019-08-07 17:53:34 +01:00
Qian Wang
e3de2b9852 Fix a potential make len<0 2019-08-07 17:22:40 +01:00
Qian Wang
b7549c0664 Fix a potential nil pointer 2019-08-07 17:06:48 +01:00
Qian Wang
e244340885 Modify some tests 2019-08-07 17:06:31 +01:00
Qian Wang
d99b4009b2 Differentiate concrete types of LimitedValve and UnlimitedValve to avoid unnecessary atomic.AddUint64 since it has non-trivial overhead on embedded systems 2019-08-07 15:43:42 +01:00
Qian Wang
e7aa4cd04b Fix a stuck mutex 2019-08-07 13:59:27 +01:00
Qian Wang
ae4fc917b6 Let the server send a mock encrypted certificate after ChangeCipherSuite to imitate real behaviour more closely 2019-08-07 00:28:08 +01:00
Qian Wang
81f233c226 Update obfs_test 2019-08-07 00:19:30 +01:00
Qian Wang
acb999ee64 Force aead key sizes as 32 bytes due to chacha20-poly1305 2019-08-07 00:15:55 +01:00
Qian Wang
581c2332d1 Fix obfs_test as it wasn't really testing encryptionMethod other than aes-gcm 2019-08-07 00:15:12 +01:00
Qian Wang
1d878b3adb Use AEAD to encrypt session key in ServerHello to provide authentication of the identity of the server 2019-08-06 23:59:29 +01:00
Qian Wang
623ca55ab5 Add ecdh test 2019-08-06 23:27:18 +01:00
Qian Wang
3002c87a49 Fix a server crashing null pointer 2019-08-06 21:04:08 +01:00
Qian Wang
e15536d7c7 Refactor TLS handshake 2019-08-06 15:50:33 +01:00
Qian Wang
3dc4c6fb3f Add more trace logs 2019-08-06 11:19:47 +01:00
Qian Wang
01036086c7 Change the frame distribution strategy so that each stream is assigned a fixed underlying TCP connection to send its frames to reduce framesorter ooo count 2019-08-05 22:14:11 +01:00
Qian Wang
fac381dbca Refactor switchboard 2019-08-05 14:33:20 +01:00
Qian Wang
d46fa74924 Refactor frame sorter 2019-08-05 13:32:53 +01:00
Qian Wang
9fcc328797 Fix a mutex deadlock 2019-08-05 13:17:02 +01:00
Qian Wang
76095bde0f Add user bypass feature 2019-08-04 21:10:59 +01:00
Qian Wang
a513663a72 Use a fork of ratelimit for unlimited bucket 2019-08-04 17:16:18 +01:00
Qian Wang
640f81461c Buffer reuse in obfs 2019-08-04 10:38:49 +01:00
Qian Wang
9fa37e327f Use exclusively salsa20 for header encryption 2019-08-03 22:05:06 +01:00
Qian Wang
f933c7b453 Move pipe to util 2019-08-03 15:01:12 +01:00
Qian Wang
bf83273f6e Fix redirection 2019-08-03 13:26:57 +01:00
Qian Wang
64b39d728f Refactor usedrandom 2019-08-03 11:49:05 +01:00
Qian Wang
08cb5d8462 Refactor usermanager 2019-08-03 11:17:09 +01:00
Qian Wang
67521efbd6 Alter composeServerHello function signature slightly 2019-08-02 23:37:00 +01:00
Qian Wang
57fc31a5fc Add tests 2019-08-02 23:23:54 +01:00
Qian Wang
237b9d131b Add and fix some tests 2019-08-02 20:50:08 +01:00
Qian Wang
e0e33e12d6 Fix non random GREASE generation 2019-08-02 20:06:41 +01:00
Qian Wang
05972863b5 Add tests 2019-08-02 20:06:28 +01:00
Qian Wang
53b6b96262 Remove stupid code 2019-08-02 18:03:08 +01:00
Qian Wang
429da0e0d9 Add unit tests 2019-08-02 18:00:27 +01:00
Qian Wang
e75c713385 Refactor session struct's obfs fields 2019-08-02 16:37:48 +01:00
Qian Wang
1a628cb524 Refactor client TLS 2019-08-02 16:02:25 +01:00
Qian Wang
33f232475d Improve logging 2019-08-02 15:45:33 +01:00
Qian Wang
726a405a26 TLS1.3 2019-08-02 01:01:19 +01:00
Qian Wang
0684f5df40 Refactor payload cipher 2019-08-01 00:43:33 +01:00
Qian Wang
2735de4f96 Fix bad cryptography 2019-08-01 00:16:33 +01:00
Qian Wang
0fbb6011fc Remove psudorandom padding 2019-07-31 23:58:15 +01:00
Qian Wang
0f3b2232ab Remove redundant config field 2019-07-31 14:44:34 +01:00
Qian Wang
e1c879a478 Fix CORS and POST handler 2019-07-30 23:49:22 +01:00
Qian Wang
6af97e2c22 Optimise session closing 2019-07-28 23:27:59 +01:00
Qian Wang
059a222394 Use defer to unlock mutexes 2019-07-28 12:52:57 +01:00
Qian Wang
bf8d373f79 Stream optimisations 2019-07-28 11:58:45 +01:00
Qian Wang
0f9830e716 Update test 2019-07-28 11:06:15 +01:00
Qian Wang
73c0b8567e Memory optimisation 2019-07-28 00:15:27 +01:00
Qian Wang
6fc48c5dae Fix a goroutine leak 2019-07-27 21:38:08 +01:00
Qian Wang
1099b558f1 Fix admin mode 2019-07-27 19:55:53 +01:00
Qian Wang
0e08683828 Use a buffered pipe to buffer sorted data 2019-07-27 19:53:16 +01:00
Qian Wang
38f3a4a522 Only start a session after a local connection has been made 2019-07-26 23:12:38 +01:00
Qian Wang
75fecacd20 Change the protocol to solve sessionTicket inconsistency 2019-07-26 17:05:46 +01:00
Qian Wang
592175f73d Close pipe properly 2019-07-25 22:06:33 +01:00
Qian Wang
8f9922b06b Add terminal messages upon session closing 2019-07-25 20:57:02 +01:00
Qian Wang
8ff0f3d17e Rename handlers 2019-07-25 13:09:36 +01:00
Qian Wang
09bdae2584 Add CORS header through middleware 2019-07-25 13:03:32 +01:00
Qian Wang
2ce6f380d1 Implement admin control through a tunneled RESTful API 2019-07-25 12:17:29 +01:00
Qian Wang
98a772b6ee Add server response to status update 2019-07-24 15:25:09 +01:00
Qian Wang
9b552f55a4 Allow an terminal message to be set as a session terminates 2019-07-24 14:25:57 +01:00
Qian Wang
299f08270c make Session implement net.Listener 2019-07-23 11:06:49 +01:00
Qian Wang
29a45bcc1a Rewrite user authentication, credit bookkeeping and db interaction 2019-07-22 13:42:39 +01:00
Qian Wang
c88c3d0084 Timeout unused new sessions 2019-06-16 23:30:35 +10:00
Qian Wang
710fa6835a Reduce the size of UID to 16 bytes 2019-06-16 11:08:51 +10:00
Qian Wang
d781c7b1be Use a sessional ephemeral key as the main key instead of UID for forward security 2019-06-16 00:20:55 +10:00
Qian Wang
ef185b00f0 Solve a data race 2019-06-15 11:52:46 +10:00
Qian Wang
589900fe52 I just did a joint and I need to commit before things go wrong 2019-06-14 23:08:28 +10:00
Qian Wang
00069b7a69 Support Chaha20-Poly1305 2019-06-14 20:26:26 +10:00
Qian Wang
078a382963 Improve the security of header obfuscation 2019-06-14 19:48:59 +10:00
Qian Wang
f525643518 Remove debug log 2019-06-10 00:04:16 +10:00
Qian Wang
8168b9e2e7 Use AES-GCM instead of CTR 2019-06-10 00:03:28 +10:00
Qian Wang
0dd52d8570 Add optional encryption 2019-06-09 21:05:41 +10:00
Qian Wang
3e9855191b Cloak 2: generalising cloak as a universal pluggable transport for arbitary proxies 2019-06-09 16:10:22 +10:00
Qian Wang
425dbc4797 Session times out 30s after all streams have been closed 2019-03-23 23:45:12 +11:00
Qian Wang
99afb1a58b Remove ECDH as an external dependancy and include it as a internal package 2019-01-25 00:24:47 +00:00
Qian Wang
c44b202c27 Regenerate SessionID on reconnection 2019-01-22 21:51:57 +00:00
Qian Wang
9d2e9be1ef Fix a race which causes the server unable to close all the connections in a session 2019-01-22 00:03:38 +00:00
Qian Wang
cb07e446b6 Fix issue which the closing frame padding gets send as acutal data 2019-01-21 21:15:18 +00:00
Qian Wang
a52c3204d1 Fix a stuck RWMutex 2019-01-21 21:13:54 +00:00
Qian Wang
b522d4a407 Fix constant overflow 2019-01-21 11:42:27 +00:00
Qian Wang
8a10949846 Add unit tests 2019-01-20 23:47:10 +00:00
Qian Wang
46c8bc24de Fix wrapping bug 2019-01-20 17:23:45 +00:00
Qian Wang
9793537034 Faster reconnection 2019-01-20 12:13:29 +00:00
Qian Wang
17d024ac16 Remove reundancy and fix a race 2019-01-19 19:30:32 +00:00
Qian Wang
a6e16b4f74 Fix memory leak 2019-01-19 19:30:00 +00:00
Qian Wang
935f995954 Fix a user input validation 2019-01-19 13:18:13 +00:00
Qian Wang
735dc64bd1 Stop using custom conversion function 2019-01-13 22:22:55 +00:00
Qian Wang
41da4102ab Syntax cleanups 2019-01-13 21:43:50 +00:00
Qian Wang
24cdf274dd Change the stream header format and reduce overhead 2019-01-13 21:28:57 +00:00
Qian Wang
f4a1c21c2c Birng back sequence wrapping 2019-01-13 19:06:12 +00:00
Qian Wang
95c3dbfcf2 Specify when failed to open userinfo database 2019-01-12 17:05:55 +00:00
Qian Wang
0544364a8e Cleanup logs 2019-01-12 15:51:20 +00:00
Qian Wang
310ce1643a Minor Makefile edit and remove FIXME 2019-01-12 14:16:31 +00:00
Qian Wang
d906541497 Redo the header obfuscation. Fix hiccups caused by short packets 2019-01-06 01:40:27 +00:00
Qian Wang
fb12f096d1 Abandon the frameSeq wrapping 2019-01-06 01:39:55 +00:00
Qian Wang
59c18437e4 Fix a race regarding client keyPairs caching 2019-01-01 14:37:47 +00:00
Qian Wang
f3f3042c81 Remove redundant functions 2018-12-31 11:30:39 +00:00
Qian Wang
23a06c6a52 Clarify the code to enter admin mode 2018-12-30 01:15:46 +00:00
Qian Wang
1cb7bff8b3 Lexical changes 2018-12-30 00:28:38 +00:00
Qian Wang
deb5271cef User can now specify the path of db file and backups 2018-12-30 00:18:50 +00:00
Qian Wang
652261af81 Implement SessionsCap and ExpiryTime limitations 2018-12-29 00:54:10 +00:00
Qian Wang
e31aef3030 Stop repetitive closing 2018-12-29 00:02:59 +00:00
Qian Wang
4b6ab1b4d5 Finish the admin control 2018-12-26 00:46:39 +00:00
Qian Wang
73aefdeeeb Done some TODOs 2018-12-22 23:58:03 +00:00
Qian Wang
6fbd39ea10 Integrate keygen util into ck-server 2018-12-17 22:12:38 +00:00
Qian Wang
55780fc85d Remove deprecated field 2018-12-12 19:50:11 +00:00
Qian Wang
36a743c3ca Client using AdminUID can now use the proxy without adding themselves to the db 2018-12-11 23:26:05 +00:00
Qian Wang
ed1253ff4c Refactor MakeObfs and MakeDeobfs 2018-12-09 23:45:06 +00:00
Qian Wang
3abef6dbad Use pointer for UserInfo in User struct 2018-12-08 15:30:46 +00:00
Qian Wang
7919834dfe Better keygen 2018-12-08 14:49:47 +00:00
Qian Wang
2688e30907 Inline formatting 2018-12-03 20:33:14 +00:00
Qian Wang
304f7f38a7 Redo config format 2018-12-03 20:30:06 +00:00
Qian Wang
0253f8077a Delete duplicate return 2018-11-24 01:27:41 +00:00
Qian Wang
306385f9c2 Uncomment header obfuscation 2018-11-24 01:24:47 +00:00
Qian Wang
239647c5b2 Fix a race, some cleanup 2018-11-24 00:55:26 +00:00
Qian Wang
3b656c9360 Use sync.Once to close die ch 2018-11-23 23:57:35 +00:00
Qian Wang
85e0e95a4b User control server and client 2018-11-22 21:56:29 +00:00
Qian Wang
c4048dccea Basic remote control 2018-11-22 21:55:23 +00:00
Qian Wang
0702e37391 Syncing in-memory credit with db regularly 2018-11-11 19:30:40 +00:00
Qian Wang
fe19d31158 Stop duplicate goroutines accepting streams 2018-11-08 19:47:53 +00:00
Qian Wang
3534d05055 QOS and user managing, bug fixes 2018-11-07 21:16:13 +00:00
Qian Wang
6a6b293164 Add bandwidth limiter 2018-10-28 22:51:00 +00:00
Qian Wang
f476650953 Rework switchboard dispatch 2018-10-28 21:22:38 +00:00
Qian Wang
9e4aedbdc1 Stream closing is now ordered 2018-10-27 23:35:46 +01:00
Qian Wang
077eb16dba Fix goroutine leak 2018-10-27 15:27:43 +01:00
Qian Wang
0db52a8a26 General improvements 2018-10-23 20:47:58 +01:00
Qian Wang
3f7eef98e3 drop aes encryption of headers 2018-10-20 21:41:01 +01:00
Qian Wang
bd69784443 optimisations 2018-10-20 17:03:39 +01:00
Qian Wang
7487600434 Mostly works 2018-10-20 11:35:50 +01:00
Qian Wang
02fa072964 Fix infinite loop. Baseline 2018-10-16 21:13:19 +01:00
Qian Wang
a8786a5576 Use ECDH instead of ECIES 2018-10-14 20:32:54 +01:00
Qian Wang
b9f2aa4ed0 Barely working 2018-10-09 21:53:55 +01:00
Qian Wang
ae30ed6ba4 Untested server 2018-10-09 16:07:54 +01:00
Qian Wang
3fd7e01566 Untested client 2018-10-07 18:09:45 +01:00
Qian Wang
44d2c0e073 Multiplex initial commit 2018-10-05 23:44:20 +01:00