loco-protocol 6.5.0

Loco protocol implementation
Documentation
# Loco protocol specification

Endianness: little

## Command

| name      | size              |
|-----------|-------------------|
| header    | (Header) 18 bytes |
| data_size | 4 bytes           |
| data      | data_size         |

### Header

| name      | size     |
|-----------|----------|
| id        | 4 bytes  |
| status    | 2 bytes  |
| name      | 11 bytes |
| data_type | 1 bytes  |

## Secure data

| name           | size               |
|----------------|--------------------|
| header         | (Header) 20 bytes  |
| encrypted data | header.size - 16   |

### Header

| name      | size     |
|-----------|----------|
| size      | 4 bytes  |
| iv        | 16 bytes |

### Handshake

| name             | size       |
|------------------|------------|
| key size         | 4 bytes    |
| key_encrypt_type | 4 bytes    |
| encrypt_type     | 4 bytes    |
| key              | 256 bytes  |

## Networking

### Command

Stream: `Command #0 | Response command #0 | Broadcast command #1`

Client -> Command #0  
Server <- Command #0  
Server -> Response command #0  
Client <- Response command #0  
Server -> Broadcast command #1  
Client <- Broadcast command #1 

Command is likely unordered. To match response and request, use header id.

### Secure data

Stream: `Handshake | Secure data #0 | Secure data #1`

Client -> Handshake  
Client -> Secure data #0  
Server <- Secure data #0  
Server -> Secure data #1  
Client <- Secure data #1