Lightway Core is a modern VPN protocol by ExpressVPN, to deliver a VPN experience that’s faster, more secure, and more reliable.

Overview

Lightway Core

Lightway Core is a modern VPN protocol by ExpressVPN, to deliver a VPN experience that’s faster, more secure, and more reliable.

ExpressVPN

One of the world’s largest providers of VPN services, ExpressVPN enables users to protect their privacy and security online with just a few clicks. The company’s award-winning apps for Windows, Mac, iOS, Android, Linux, routers, and browsers secure user information and identities with best-in-class encryption and leak-proofing.

For more information please visit https://www.expressvpn.com.

About Lightway Core

Lightway Core is a small, multi-platform C library that provides the foundational components of a virtual private network (VPN).

Lightway Core is the technology that powers Lightway, ExpressVPN’s pioneering new VPN protocol, built for an always-on world. It makes your VPN experience speedier, more secure, and more reliable than ever. Designed to be light on its feet, Lightway runs faster, uses less battery, and is easier to audit and maintain.

Note: Lightway Core may be referred to by the internal project name, libhelium, in the source code.

Build and Run (Earthly)

The simplest way to build the static library for Linux, and run all tests is to use Earthly, which runs the build in a containerised environment.

earthly +all

Build and Run (Ceedling)

  1. Install ceedling gem somewhere on your path

    gem install ceedling
  2. Windows only: Start git-bash (or similar) via a Developer Command Prompt for VS 2019 for all subsequent commands

  3. Build and run tests, $PLATFORM is [linux|macos|windows]

    ceedling test project:$PLATFORM
  4. Build lib for release

    ceedling release project:$PLATFORM

Contributing

We appreciate feedback and contribution to this repository! Before you get started, please see CONTRIBUTING

Reporting a vulnerability

To report security vulnerabilities, please see section on Reporting a vulnerability

Acknowledgments

We rely on the following projects to build Lightway Core:

Preferred Languages

We prefer all communications to be in English.

License

This project is licensed under the GNU General Public License, version 2.

Comments
  • GSoC participation request

    GSoC participation request

    Hi guys,

    I would like to add TCP functionality to lightway-laser as a project for Google Summer of Code (GSoC), 2022. It would be awesome if expressvpn register as an organisation for GSoC.

    Thank You

    opened by sheharyaar 9
  • lightway-laser - Tun on server not going active

    lightway-laser - Tun on server not going active

    After compiling and running on latest patched Centos 8 image I attempted to utilize the reference package of lightway-laser for a client/server test but ran into an issue when trying to run the most basic tests as documented: https://github.com/expressvpn/lightway-laser

    Expected Behavior

    After bringing up the client and server on two different VMs I was expecting a valid IP address and Tun interface on both to go up/active.
    Client device = wolfssl-01 Server device = wolfssl-02

    Current Behavior

    From basic debugging the client appears to be functional from a network standpoint and is receiving an IP address from the server:

    Startup:

    sudo ./lw.out --client --protocol udp --username test --password test --server_ip '192.168.0.49' --server_port 19655 --cert shared.crt --tun helium-test [18:50:44.725344s] Starting client... [18:50:44.725425s] Connecting to: 192.168.0.49:19655 [18:50:44.725432s] Username: test [18:50:44.725435s] Client cert: shared.crt [18:50:44.725438s] Streaming Mode: false [18:50:44.725442s] Tun device: helium-test

    5: helium-test: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1350 qdisc fq_codel state UNKNOWN group default qlen 500 link/none inet 10.125.0.2 peer 10.125.0.1/32 scope global helium-test valid_lft forever preferred_lft forever inet6 fe80::f61a:8c2d:7a82:e292/64 scope link stable-privacy valid_lft forever preferred_lft forever

    The client device is also properly updating the route table:

    10.125.0.1 dev helium-test proto kernel scope link src 10.125.0.2

    The server shows a different behavior where the server appears to be starting properly:

    sudo ./lw.out --server --protocol udp --username test --password test --server_ip '0.0.0.0' --server_port 19655 --cert shared.crt --key server.key --tun helium-test [18:58:51.001022s] Starting server... [18:58:51.001105s] Listening on: 0.0.0.0:19655 [18:58:51.001111s] Username: test [18:58:51.001115s] Server cert: shared.crt [18:58:51.001118s] Server key: server.key [18:58:51.001121s] Streaming Mode: false [18:58:51.001124s] Tun device: helium-test

    Looking at the network devices I see the new helium-test however the state is incomplete.

    7: helium-test: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 500 link/none

    With the interface never going active no route is ever installed in the route table on the server pointing towards the client.

    When trying to ping from the client to the server expected IP:

    [19:02:16.711474s] Error writing to TUN device[19:02:17.717433s] Error writing to TUN device[19:02:18.741458s] Error writing to TUN device[19:02:19.765450s] Error writing to TUN device[19:02:20.790663s] Error writing to TUN device[19:02:21.813424s] Error writing to TUN device[19:02:22.837489s] Error writing to TUN device[19:02:23.861464s] Error writing to TUN device^C

    Each ICMP packet causing a error writing to Tun.

    TCPDUMP on the server shows the incoming packet:

    [[email protected] ~]# tcpdump host 192.168.0.48 dropped privs to tcpdump tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes 19:02:40.245486 IP 192.168.0.48.46886 > wolfssl-02.19655: UDP, length 140 19:02:40.245534 IP wolfssl-02 > 192.168.0.48: ICMP wolfssl-02 udp port 19655 unreachable, length 176 19:02:41.269365 IP 192.168.0.48.46886 > wolfssl-02.19655: UDP, length 140 19:02:41.269417 IP wolfssl-02 > 192.168.0.48: ICMP wolfssl-02 udp port 19655 unreachable, length 176 19:02:42.293458 IP 192.168.0.48.46886 > wolfssl-02.19655: UDP, length 140 19:02:42.293513 IP wolfssl-02 > 192.168.0.48: ICMP wolfssl-02 udp port 19655 unreachable, length 176 19:02:43.317359 IP 192.168.0.48.46886 > wolfssl-02.19655: UDP, length 140 19:02:43.317404 IP wolfssl-02 > 192.168.0.48: ICMP wolfssl-02 udp port 19655 unreachable, length 176 19:02:43.591793 ARP, Request who-has 192.168.0.48 tell wolfssl-02, length 28

    From the above the Tun looks established from the Client to the Server but the Server doesn't have a valid route to respond back to the client using the Tun which never goes up.

    Possible Solution

    None found.

    Steps to Reproduce (for bugs)

    1. Fresh Centos 8 fully patched
    2. Fresh pull of wolfssl
    3. Fresh pull of lightway-laser
    4. gcc, autoconf, automake, libtool, gem, ceedling, git, docker

    5291800 Sep 23 16:51 lw.out

    Context

    Attempting benchmark lightway across several platforms for analysis. Currently can't run do to server functionality issue.

    Your Environment

    • Version used:

    https://github.com/expressvpn/lightway-laser

    • Operating System and version:

    CentOS Linux release 8.4.2105

    opened by light-brite 6
  • Error in starting lightway-laser cli

    Error in starting lightway-laser cli

    I was trying to implement TCP connection and streaming for lightway-laser. I am having the following issue :

    lw.out: src/unix/stream.c:1405: uv_write2: Assertion `(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || stream->type == UV_TTY) && "uv_write (unix) does not yet support other types of streams"' failed.
    

    Current Behavior

    Log :

    [email protected]:/lw_reference# scripts/run_iperf_client.sh 
    Resolved to target 172.18.0.3 server 172.18.0.2
    Check that we have connectivity to the lightway server
    PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
    64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.094 ms
    
    --- 172.18.0.2 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.094/0.094/0.094/0.000 ms
    [11:54:16.833530s] Starting client...
    [11:54:16.833599s] Connecting to:        172.18.0.2:19655
    [11:54:16.833604s] Username:             test
    [11:54:16.833608s] Client cert:          certs/shared.crt
    [11:54:16.833610s] Streaming Mode:       true
    [11:54:16.833613s] Tun device:           helium-test
    lw.out: src/unix/stream.c:1405: uv_write2: Assertion `(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || stream->type == UV_TTY) && "uv_write (unix) does not yet support other types of streams"' failed.
    scripts/run_iperf_client.sh: line 15:    37 Aborted                 (core dumped) build/release/lw.out --client --protocol tcp --username test --password test --server_ip ${SERVER} --server_port 19655 --cert certs/shared.crt --tun helium-test
    Setting route to 172.18.0.3 via 10.125.0.2
    Error: Nexthop has invalid gateway.
    
    

    Warnings on compilation :

    Release build 'lw.out'
    ----------------------
    Compiling flow.c...
    cc1: warning: third_party/zlog/tidy/zlog.c: not a directory
    cc1: warning: third_party/argparse/tidy/argparse.c: not a directory
    src/udp/flow.c: In function ‘tcp_write_cb’:
    src/udp/flow.c:282:41: warning: passing argument 2 of ‘uv_write’ from incompatible pointer type [-Wincompatible-pointer-types]
       int res = uv_write((uv_write_t *)req, &state->tcp_socket, &req->buf, 1, on_send);
                                             ^~~~~~~~~~~~~~~~~~
    In file included from include/lw.h:24,
                     from src/udp/flow.h:23,
                     from src/udp/flow.c:20:
    third_party/builds/libuv/include/uv.h:510:37: note: expected ‘uv_stream_t *’ {aka ‘struct uv_stream_s *’} but argument is of type ‘uv_tcp_t *’ {aka ‘struct uv_tcp_s *’}
                            uv_stream_t* handle,
                            ~~~~~~~~~~~~~^~~~~~
    src/udp/flow.c:282:75: warning: passing argument 5 of ‘uv_write’ from incompatible pointer type [-Wincompatible-pointer-types]
       int res = uv_write((uv_write_t *)req, &state->tcp_socket, &req->buf, 1, on_send);
                                                                               ^~~~~~~
    In file included from include/lw.h:24,
                     from src/udp/flow.h:23,
                     from src/udp/flow.c:20:
    third_party/builds/libuv/include/uv.h:513:36: note: expected ‘uv_write_cb’ {aka ‘void (*)(struct uv_write_s *, int)’} but argument is of type ‘void (*)(uv_udp_send_t *, int)’ {aka ‘void (*)(struct uv_udp_send_s *, int)’}
                            uv_write_cb cb);
                            ~~~~~~~~~~~~^~
    src/udp/flow.c: In function ‘he_session_reject_tcp’:
    src/udp/flow.c:359:41: warning: passing argument 2 of ‘uv_write’ from incompatible pointer type [-Wincompatible-pointer-types]
       int err = uv_write((uv_write_t *)req, &state->tcp_socket, &req->buf, 1, on_send);
                                             ^~~~~~~~~~~~~~~~~~
    In file included from include/lw.h:24,
                     from src/udp/flow.h:23,
                     from src/udp/flow.c:20:
    third_party/builds/libuv/include/uv.h:510:37: note: expected ‘uv_stream_t *’ {aka ‘struct uv_stream_s *’} but argument is of type ‘uv_tcp_t *’ {aka ‘struct uv_tcp_s *’}
                            uv_stream_t* handle,
                            ~~~~~~~~~~~~~^~~~~~
    src/udp/flow.c:359:75: warning: passing argument 5 of ‘uv_write’ from incompatible pointer type [-Wincompatible-pointer-types]
       int err = uv_write((uv_write_t *)req, &state->tcp_socket, &req->buf, 1, on_send);
                                                                               ^~~~~~~
    In file included from include/lw.h:24,
                     from src/udp/flow.h:23,
                     from src/udp/flow.c:20:
    third_party/builds/libuv/include/uv.h:513:36: note: expected ‘uv_write_cb’ {aka ‘void (*)(struct uv_write_s *, int)’} but argument is of type ‘void (*)(uv_udp_send_t *, int)’ {aka ‘void (*)(struct uv_udp_send_s *, int)’}
                            uv_write_cb cb);
                            ~~~~~~~~~~~~^~
    Linking lw.out...
    

    I am attaching the parts I added in files I felt revelant to this issue :

    udp/client.c :

    void configure_tcp_client(lw_config_t *config, lw_state_t *state) {
      zlogf_time(ZLOG_INFO_LOG_MSG, "Configuring TCP Client...\n");
    
      int res = uv_udp_init(state->loop, &state->tcp_socket);
      LW_CHECK_WITH_MSG(res == 0, "Unable to initialise TCP socket");
    
      res = uv_ip4_addr(config->server_ip, config->server_port, &state->send_addr);
      LW_CHECK_WITH_MSG(res == 0, "Invalid IP address or port");
    
      int udp_buffer_size = 15 * MEGABYTE;
      uv_send_buffer_size((uv_handle_t *)&state->tcp_socket, &udp_buffer_size);
      uv_recv_buffer_size((uv_handle_t *)&state->tcp_socket, &udp_buffer_size);
    
      state->tcp_socket.data = state;
      he_ssl_ctx_set_outside_write_cb(state->he_ctx, tcp_write_cb);
    
      return;
    }
    
    void start_tcp_client(lw_state_t *state) {
      int res = uv_listen(&state->tcp_socket, DEFAULT_BACKLOG, on_new_connection);
      LW_CHECK_WITH_MSG(res == 0, "Unable to start recv on udp socket");
    
      return;
    }
    

    /udp/flow.c :

    /* Callback if a new connection arrives */
    void on_new_connection(uv_stream_t *server, int status) {
      if(status < 0){
        zlogf_time(ZLOG_INFO_LOG_MSG, "New connection error %s\n", uv_strerror(status));
        return ;
      }
    
      /* Create a new client socket */
      uv_tcp_t *client = calloc(1,sizeof(uv_tcp_t));
      int res = uv_tcp_init(server->loop,client);
      LW_CHECK_WITH_MSG(res == 0, "Unable to initialise Client Socket");
    
    /* Accept the client */
      res = uv_accept(server, (uv_stream_t *) client);
      LW_CHECK_WITH_MSG(res == 0, "Unable to accept the client");
    
    /* Read from the client socket */
      res = uv_read_start((uv_stream_t *) client,alloc_buffer,on_read_stream);
      LW_CHECK_WITH_MSG(res == 0, "Unable to read from client socket");
    
    }
    
    he_return_code_t tcp_write_cb(he_conn_t *he_conn, uint8_t *packet, size_t length, void *context) {
      // Get our context back
      lw_state_t *state = (lw_state_t *)context;
    
      write_req_t *req = (write_req_t *)calloc(1, sizeof(write_req_t));
      LW_CHECK_WITH_MSG(req, "Unable to allocate write request!");
    
      uint8_t *output_buffer = calloc(1, LW_MAX_WIRE_MTU);
      LW_CHECK_WITH_MSG(output_buffer, "Unable to allocate write buffer");
      memcpy(output_buffer, packet, length);
    
      req->buf = uv_buf_init((char *)output_buffer, (unsigned int)length);
    
      int res = uv_write((uv_write_t *)req, &state->tcp_socket, &req->buf, 1, on_send);
    
      if(res) {
        zlogf_time(ZLOG_INFO_LOG_MSG, "Error occurred during uv_write: %s (%d)\n", uv_strerror(res),
                   res);
        return HE_ERR_CALLBACK_FAILED;
      }
    
      return HE_SUCCESS;
    }
    
    

    Context

    I am unable to set up Helium connection when running run_iperf_client.sh

    Your Environment

    • Version used: lightway-laser latest version
    • Operating System and version: Endeavour Os 1.4 - Arch Rolling
    opened by sheharyaar 5
  • multi-threading support

    multi-threading support

    It seems to me that Lightway currently does not use multithreading I checked both the official version and the beta version on my Raspberry Pi4 Both versions use only one core use AES, 120mbps is the limit, and ChaCha20 is 170mbps multithreading is needed for fast speed on mobile devices and SBC

    AES on Pi4, no big difference in speed with openvpn On the Pi4, Wireguard supports multithreading, resulting in very fast speeds of over 500mbps

    But ExpressVPN doesn't support Wireguard, so I wish the lightway was as fast as wireguard !

    opened by u-sil 3
  • Battery usage is extremely high

    Battery usage is extremely high

    I'm running iOS 15.1 and the background usage of the app is 29% in the last 24 hours. I'm using the lightway udp protocol and think this might be a bug.

    Thank you.

    opened by Milo123459 3
  • Streaming is not supported yet (tcp mode)?

    Streaming is not supported yet (tcp mode)?

    Hello.

    How to run with --protocol tcp?

    sudo ./lw.out --server --protocol tcp --username test --password test --server_ip '0.0.0.0' --server_port 19655 --cert certs/shared.crt --key certs/server.key --tun helium-test

    Exit with Streaming is not supported yet

    opened by Jiw0cha 1
  • wolf: explicitly enable 4096 sp

    wolf: explicitly enable 4096 sp

    Description

    Explicitly enable 4096 SP, this is automatically enabled on x64 but not on 32bit which causes issues with RSA4096. So explicitly enable it to not rely on implicit behaviours

    Motivation and Context

    Fixes issues with 32bit builds

    How Has This Been Tested?

    Manually tested with android on x86 emu

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [ ] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [ ] All active GitHub checks are passing
    • [ ] The correct base branch is being used, if not main
    opened by expressvpn-raihaan-m 1
  • Add new auth type (HE_AUTH_TYPE_CB) and deprecate he_conn_set_auth_buffer

    Add new auth type (HE_AUTH_TYPE_CB) and deprecate he_conn_set_auth_buffer

    Description

    • Added a new error code: HE_ERR_INVALID_AUTH_TYPE. Client-side code may see this error when the conn->auth_type is set to unsupported value.
    • Deprecate he_conn_set_auth_buffer. Client-side code should use he_conn_set_auth_buffer2 instead. And both function will set the auth_type to HE_AUTH_TYPE_CB.
    • Server-side code will response "Access Denied" if the auth message contains unsupported auth_type.

    Motivation and Context

    Previously, a Lightway client can set any value to the auth_type field in the authentication message sent to the server, then the server side code just consider it's using "auth_buffer" without actually checking the value of auth_type. By using a specific code for the "auth buffer based" authentication, we can add support to more auth_type in the future.

    How Has This Been Tested?

    All changes have been verified with earthly +test to ensure no breaking changes to the API.

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [x] My code follows the code style of this project.
    • [x] My change requires a change to the documentation.
    • [x] I have updated the documentation accordingly.
    • [x] All active GitHub checks are passing
    • [x] The correct base branch is being used, if not main
    opened by expressvpn-tom-l 1
  • Upgrade WolfSSL to 5.2.0

    Upgrade WolfSSL to 5.2.0

    Description

    • Use version 5.2.0 of WolfSSL
    • Add mock struct for new WolfSSL type (WOLFSSL_X509_EXTENSION)
    • Add va_list to treat as array list for test generation

    Motivation and Context

    Brings WolfSSL up to date.

    How Has This Been Tested?

    Test suite as part of earthly +all completes successfully

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)
    • [X] Upgrade dependency

    Checklist:

    • [X] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [X] All active GitHub checks are passing
    • [X] The correct base branch is being used, if not main
    opened by expressvpn-pete-m 1
  • public: use a specific error code HE_SERVER_GOODBYE when receiving a goodbye message from server

    public: use a specific error code HE_SERVER_GOODBYE when receiving a goodbye message from server

    Description

    Return a specific error code when the client receives a "goodbye" message from server.

    Motivation and Context

    The client app may need to perform specific actions when receiving the "goodbye" message from server. Therefore we need a new error code to separate from generic HE_ERR_CONNECTION_WAS_CLOSED errors.

    How Has This Been Tested?

    This change has been unit tested.

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [X] New feature (non-breaking change which adds functionality)
    • [X] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [X] My code follows the code style of this project.
    • [X] My change requires a change to the documentation.
    • [X] I have updated the documentation accordingly.
    • [x] All active GitHub checks are passing
    • [x] The correct base branch is being used, if not main
    opened by expressvpn-tom-l 1
  • conn: fix documentation for parameters

    conn: fix documentation for parameters

    Fix parameter documentation for conn.h

    Description

    Some of the parameter documentation is out of date so update it.

    How Has This Been Tested?

    NIL: documentation update only

    Types of changes

    • [x] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [ ] My code follows the code style of this project.
    • [x] My change requires a change to the documentation.
    • [x] I have updated the documentation accordingly.
    • [x] All active GitHub checks are passing
    • [x] The correct base branch is being used, if not main
    opened by expressvpn-raihaan-m 1
  • Please help the Iranian peoples with sharing script for easy setup LightWay vpn server

    Please help the Iranian peoples with sharing script for easy setup LightWay vpn server

    Hi there! I am an Iranian developer. If you subscribe to the news, IRAN has blocked all protocols with DPI we can't connect to VPN. We need yours help for setup this protocol with simple script because LightWay protocol not detected by DPI right now and express VPN is working with this protocol.

    We can't buy an express VPN for some problems in communicating with national banks and payment getaways. So, we just can setup our VPN servers.

    IRAN needs your help

    Please make an update and simple script with the last version of lightway-core and replay the link to this message 🙏

    I very tried to use from lightway-laser but that is a very old source and I had some issues and errors.

    opened by hosein-moayedi 11
  • conn: add method to get detailed SSL errors

    conn: add method to get detailed SSL errors

    Description

    Add additional method for wolfSSL errors

    Motivation and Context

    This allows us to get detailed SSL errors to ease debugging

    How Has This Been Tested?

    Has autotests, this was also used to help debug issues internally

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [ ] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [ ] All active GitHub checks are passing
    • [ ] The correct base branch is being used, if not main
    opened by expressvpn-raihaan-m 2
  • Docs: Add comparison to Wireguard

    Docs: Add comparison to Wireguard

    This comparison with Wireguard (and OpenVPN) could include: security considerations (attack surface, cryptographic primitives used), ease of use, ease of getting started, and OS support (desktop and mobile).

    Context

    I'm comparing this project to other options and I'd appreciate it if your docs would help with that!

    opened by elimisteve 10
Releases(v1.9.0)
  • v1.9.0(Dec 30, 2022)

    What's Changed

    • wolfssl: update wolfssl to v5.5.4 by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/62
    • chore: ignore .vscode/ directory by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/67
    • Add SNI Support on client side by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/68

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.8.5...v1.9.0

    Source code(tar.gz)
    Source code(zip)
  • v1.8.5(Dec 15, 2022)

    What's Changed

    • ci: fix linux build on arm architectures by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/66
    • conn: add a helper function for getting the cipher used by the current ssl session by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/65

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.8.4...v1.8.5

    Source code(tar.gz)
    Source code(zip)
  • v1.8.4(Dec 6, 2022)

    What's Changed

    • msg_handlers: correct message size checks by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/63
    • ssl: Set cipher list on servers by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/64

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.8.3...v1.8.4

    Source code(tar.gz)
    Source code(zip)
  • v1.8.3(Nov 17, 2022)

    What's Changed

    • Add -D_FORTIFY_SOURCE=2 when building lightway-core by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/61

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.8.2...v1.8.3

    Source code(tar.gz)
    Source code(zip)
  • v1.8.2(Oct 25, 2022)

    What's Changed

    • Add helper functions for setting min/max supported wire protocol versions on ssl_ctx by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/60

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.8.1...v1.8.2

    Source code(tar.gz)
    Source code(zip)
  • v1.8.1(Oct 24, 2022)

    What's Changed

    • wolfssl: update wolfssl to 5.5.1 by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/56
    • Make default constants public and bump maximum wire protocol version to 1.2 by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/59

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.8.0...v1.8.1

    Source code(tar.gz)
    Source code(zip)
  • v1.8.0(Oct 17, 2022)

    What's Changed

    • ci: Add testing for WolfSSL by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/55
    • Add new message type: HE_MSGID_SERVER_CONFIG by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/58

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.7.0...v1.8.0

    Source code(tar.gz)
    Source code(zip)
  • v1.7.0(Sep 2, 2022)

    What's Changed

    • wolfssl: update wolfssl to v5.5.0 with patch for Android by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/54

    NOTES

    WolfSSL has been updated and includes security fixes. We encourage all users to update WolfSSL Release Notes

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.6.2...v1.7.0

    Source code(tar.gz)
    Source code(zip)
  • v1.6.2(Aug 2, 2022)

    What's Changed

    • wolf: explicitly enable 4096 sp by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/50

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.6.1...v1.6.2

    Source code(tar.gz)
    Source code(zip)
  • v1.6.1(Jul 28, 2022)

    What's Changed

    • android: use the latest lts ndk by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/49
    • ios: Fix builds for older iPhones by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/48

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.6.0...v1.6.1

    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Jul 12, 2022)

    What's Changed

    • ios: Build iOS binaries on CI by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/46
    • conn: treat HE_ERR_INCORRECT_PROTOCOL_VERSION as fatal error by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/47
    • android: Add CI for android platform by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/45

    NOTES

    • WolfSSL has been updated and includes security fixes. We encourage all users to update WolfSSL Release Notes

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.5.1...v1.6.0

    Source code(tar.gz)
    Source code(zip)
  • v1.5.1(May 23, 2022)

    What's Changed

    • Build: Update build flags by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/40
    • Reduce multiplier for renegotiation timers by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/41
    • utils: add utility functions for stringifying enums by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/44
    • macos: Fix deployment target by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/43
    • Misc cleanups by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/42

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.5...v1.5.1

    Source code(tar.gz)
    Source code(zip)
  • v1.5(May 6, 2022)

    What's Changed

    • Add Raihaan as an author by @expressvpn-pete-m in https://github.com/expressvpn/lightway-core/pull/35
    • build: use bullseye image for builds by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/33
    • conn: Test improvements by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/34
    • ci: add github actions workflow for CI by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/36
    • Fix windows tests by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/37
    • Upgrade WolfSSL to 5.3.0 by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/38
    • docs: trivial typo and spelling fix in documentations by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/39

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.4.1...v1.5

    Source code(tar.gz)
    Source code(zip)
  • v1.4.1(Apr 26, 2022)

    What's Changed

    • wolf: return want read if incoming data is null by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/32

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.4...v1.4.1

    Source code(tar.gz)
    Source code(zip)
  • v1.4(Apr 25, 2022)

    What's Changed

    • Add new auth type (HE_AUTH_TYPE_CB) and deprecate he_conn_set_auth_buffer by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/27
    • Clean up and simplify ios build script for WolfSSL by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/28
    • Update WolfSSL Visual Studio project file by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/29
    • Improve error handling when calling wolfSSL_read and wolfSSL_write by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/30
    • conn: send goodbye messages on more states by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/31

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.3...v1.4

    Source code(tar.gz)
    Source code(zip)
  • v1.3(Apr 19, 2022)

    This is a house keeping release that adds additional checks to prevent undefined behaviour within internal code. Although these bugs would only manifest if the function contracts were not upheld, we are always actively looking to reduce our attack surface and so adding such checks (particularly where there is no performance impact) is always worth doing.

    What's Changed

    • Add various security enhancements by @expressvpn-pete-m in https://github.com/expressvpn/lightway-core/pull/26

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.2...v1.3

    Source code(tar.gz)
    Source code(zip)
  • v1.2(Apr 13, 2022)

    What's Changed

    • msg_handlers: check auth buffer length before passing to auth_buffer_cb by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/23
    • Adding expressvpn-tom-l to CODEOWNERS by @expressvpn-lee-a in https://github.com/expressvpn/lightway-core/pull/25
    • Upgrade WolfSSL to 5.2.0 by @expressvpn-pete-m in https://github.com/expressvpn/lightway-core/pull/24

    New Contributors

    • @expressvpn-pete-m made their first contribution in https://github.com/expressvpn/lightway-core/pull/24

    Full Changelog: https://github.com/expressvpn/lightway-core/compare/v1.1...v1.2

    Source code(tar.gz)
    Source code(zip)
  • v1.1(Mar 15, 2022)

    This release is a stepping stone towards more frequent and versioned releases of Lightway Core.

    Projects that are currently using the main branch should now switch to v1.1.

    The majority of changes between this release and the first release of Lightway Core are primarily quality of life and minor code tweaks.

    What's Changed

    • Adding CLA by @expressvpn-lee-a in https://github.com/expressvpn/lightway-core/pull/1
    • Add FAQ document, cleanup versions in https://github.com/expressvpn/lightway-core/pull/3
    • Update README w/ doco links, add coming soon to some items in https://github.com/expressvpn/lightway-core/pull/6
    • adding code-of-conduct by @expressvpn-lee-a in https://github.com/expressvpn/lightway-core/pull/7
    • conn: fix documentation for parameters by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/14
    • plugin: fix memory leak when freeing plugin chains by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/15
    • public: fix parameter documentation by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/16
    • conn: const correct setting auth buffers by @expressvpn-raihaan-m in https://github.com/expressvpn/lightway-core/pull/17
    • public: use a specific error code HE_SERVER_GOODBYE when receiving a goodbye message from server by @expressvpn-tom-l in https://github.com/expressvpn/lightway-core/pull/22

    New Contributors

    • @expressvpn-lee-a made their first contribution in https://github.com/expressvpn/lightway-core/pull/1
    • @expressvpn-raihaan-m made their first contribution in https://github.com/expressvpn/lightway-core/pull/14
    • @expressvpn-tom-l made their first contribution in https://github.com/expressvpn/lightway-core/pull/22

    Full Changelog: https://github.com/expressvpn/lightway-core/commits/v1.1

    Source code(tar.gz)
    Source code(zip)
SoftEther VPN - Cross-platform multi-protocol VPN software.

SoftEther VPN - Cross-platform multi-protocol VPN software.

SoftEther 9.6k Jan 4, 2023
Level up your Beat Saber experience on Quest! AnyTweaks provides various tweaks to help boost your experience on Quest, such as Bloom, FPS Counter and more.

Need help/support? Ask in one of BSMG's support channels for Quest, or join my Discord server! AnyTweaks Level up your Beat Saber experience on Quest!

kaitlyn~ 19 Nov 20, 2022
LAN Party VPN - Run VPN on top of Discord. No installation required.

LAN Party VPN - VPN for Virtual LAN Parties Have you ever wanted to play a classic game with your friends but not able to because you or your friends

Yifan Gu 283 Dec 14, 2022
:zap: KCP - A Fast and Reliable ARQ Protocol

KCP - A Fast and Reliable ARQ Protocol README in English 简介 KCP是一个快速可靠协议,能以比 TCP 浪费 10%-20% 的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP

Linwei 12k Jan 4, 2023
GnuTLS implements the TLS/SSL (Transport Layer Security aka Secure Sockets Layer) protocol

GnuTLS implements the TLS/SSL (Transport Layer Security aka Secure Sockets Layer) protocol

Jonathan Bastien-Filiatrault 3 Jun 3, 2021
A protocol for secure client/server connections over UDP

netcode netcode is a simple connection based client/server protocol built on top of UDP. It has the following features: Encrypted and signed packets S

The Network Protocol Company 2.3k Dec 26, 2022
A protocol for secure client/server connections over UDP

netcode netcode is a simple connection based client/server protocol built on top of UDP. It has the following features: Encrypted and signed packets S

The Network Protocol Company 2.3k Jan 3, 2023
Husarnet is a Peer-to-Peer VPN to connect your laptops, servers and microcontrollers over the Internet with zero configuration.

Husarnet Client Husarnet is a Peer-to-Peer VPN to connect your laptops, servers and microcontrollers over the Internet with zero configuration. Key fe

Husarnet 180 Jan 1, 2023
A GlobalProtect VPN client (GUI) for Linux based on OpenConnect and built with Qt5, supports SAML auth mode.

A GlobalProtect VPN client (GUI) for Linux based on OpenConnect and built with Qt5, supports SAML auth mode.

Kevin Yue 603 Jan 2, 2023
A VPN client for Android based on OpenVPN made with Jetpack Compose.

Gear VPN - Free, Secure & Open sourced VPN Tech Stack Jetpack Compose - Google's new UI toolkit for developing native Android apps. Navigator-Compose

Kaustubh Patange 86 Dec 23, 2022
Simple and small reliable UDP networking library for games

libquicknet Simple and small reliable UDP networking library for games ❗ libquicknet is under development and not suitable for production code ❗ The m

null 25 Oct 26, 2022
ENet reliable UDP networking library

Please visit the ENet homepage at http://enet.bespin.org for installation and usage instructions. If you obtained this package from github, the quick

Lee Salzman 2.3k Dec 30, 2022
Reliable & unreliable messages over UDP. Robust message fragmentation & reassembly. P2P networking / NAT traversal. Encryption.

GameNetworkingSockets GameNetworkingSockets is a basic transport layer for games. The features are: Connection-oriented API (like TCP) ... but message

Valve Software 6.4k Dec 30, 2022
Data-oriented networking playground for the reliable UDP transports

NetDynamics is a data-oriented networking playground for the reliable UDP transports. The application was created for stress testing and debugging a p

Stanislav Denisov 92 Nov 9, 2022
Ole Christian Eidheim 741 Dec 27, 2022
A local DNS server to obtain the fastest website IP for the best Internet experience

A local DNS server to obtain the fastest website IP for the best Internet experience

Nick Peng 5.7k Jan 4, 2023
BabyCoin: secure, fast and anonymous currency // Dev-Pool:

BabyCoin BabyCoin (BABY) is a state-of-the-art cryptocurrency based on Arqma and Evolution projects. BabyCoin is well suited for CPU mining based on t

null 3 Nov 5, 2022
Simple, secure & standards compliant web server for the most demanding of applications

Simple, secure[1] & standards compliant[2] web server for the most demanding[3] of applications. Read more... ?? Optimized security Being meticulously

uNetworking AB 15k Dec 30, 2022
server secure chat

nem server api Register Login GetList Handshake Message Feed StatusOnline HandshakeKey HandshakeNotice FileAdd StorageFile GetFile Register { "type":

Dmitrii 6 Apr 3, 2022