Skip to content
This repository has been archived by the owner on Aug 26, 2019. It is now read-only.

Commit

Permalink
Refactor project information
Browse files Browse the repository at this point in the history
  • Loading branch information
Hexawolf committed Oct 6, 2018
1 parent 3be3554 commit 54e73d1
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 48 deletions.
20 changes: 20 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
MIT License
Copyright (c) 2018 Hexawolf

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
48 changes: 47 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,47 @@
"# SSProto"
# SSProto

SSProto is a fairly simple but flexible and secure TCP protocol for deploying
game client updates. Initially, it was developed as a part of Hexamine project
(a Minecraft server) but turns out to be useful outside of Minecraft
environment. You may read about it more on
[Hexawolf's blog](https://hexawolf.me/blog/ssproto/)

## What?

This applications connects to a server (ss-server) that implements SSProto,
"indexes" (hashes) files in current directory and sends list of files and their
hashes to the server. After doing so, it listens to "update packets" from the
server. They contain files, their paths and signatures, that client need to
download and save.

Basically, this application tries to keep working directory in synchronization
with server. For example, if some essential game files were modified on the
server side, this client will download them from the server and game will be
compatible with it's game server again.

## Why?

SSProto is a really simple, hand-made protocol that was made because of all the
problems that appeared with deploying [Hexamine](https://hexawolf.me/hexamine)
updates. Mainly, because people found installing updates (that were deployed
almost every day those days) too painful or even faced problems due to improper
update as a result of customized client setup. While ss-client is tuned
specifically for Hexamine client, it is obvious that SSProto (as well as this
program) may be tuned for more applications where it is essential to keep only
specific server files in sync with clients.

## Is it secure?

All communications are secured by hardcoded TLS key. However, it is expected
that received files may contain executable data. For this reason, files are
also signed by ed448-decaf key, which is fast enough if you care about the
speed.

## Copyrights?

Copyright © 2018 Hexawolf

This software and most of it's code (except utils.go file) is available under
MIT license. The utils.go is not licensed at all: you are hereby granted to do
anything you want with the code there.

36 changes: 2 additions & 34 deletions ss-client/README.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,4 @@
# ss-client

ss-client is a SSProto client that performs filesystem update operations similarly to rsync.

## What?

This applications connects to a server (ss-server) that implements SSProto, "indexes" (hashes) files in current
directory and sends list of files and their hashes to the server. After doing so, it listens to "update packets"
from the server. They contain files, their paths and signatures, that client need to download and save.

Basically, this application tries to keep working directory in synchronization with server. For example, if some
essential game files were modified on the server side, this client will download them from the server and game will be
compatible with it's game server again.

## Why?

SSProto is a really simple, hand-made protocol that was made because of all the problems that appeared with deploying
[Hexamine](https://hexawolf.me/hexamine) updates. Mainly, because people found installing updates (that were deployed
almost every day those days) too painful or even faced problems due to improper update as a result of customized client
setup. While ss-client is tuned specifically for Hexamine client, it is obvious that SSProto (as well as this
program) may be tuned for more applications where it is essential to keep only specific server files in sync with
clients.

## Is it secure?

All communications are secured by hardcoded TLS key. However, it is expected that received files may contain executable
data. For this reason, they are also signed by ed448-decaf key, which is fast enough if you care about the speed.

## Copyrights?

Copyright © 2018 Hexawolf

This software and most of it's code (except utils.go file) is available under MIT license. The utils.go is not licensed
at all: you are hereby granted to do anything you want with the code there.

[Server code](https://github.com/Hexawolf/ss-server)
ss-client is a SSProto client implementation for Hexamine server that performs
filesystem update operations similarly to rsync.
15 changes: 2 additions & 13 deletions ss-server/README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,9 @@
# ss-server

ss-server is a default implementation of SSProto update protocol used by Hexamine server.

## How does it works?

After setting up TCP connection, client sends it's generated identifier to the server. Server records it but does not
saves to the logs, he sends ed448-signed identifier back to confirm his identity. After that, server and client agree on
SSProto version: if it differs, client must close connection and suggest user to update the updater application.

After doing all the setup work, server expects list of file paths and their hashes. After receiving, it generates a
difference between server and client file indexes. Resulting difference is being sent file-by-file to the client, all
files are signed with ed448-decaf key hard-coded to the client.
ss-server is a default implementation of SSProto update protocol used by
Hexamine server.

## Copyright

Copyright (C) 2018 Hexawolf.
This work uses MIT license.

[Client code](https://github.com/Hexawolf/ss-client)

0 comments on commit 54e73d1

Please sign in to comment.