66 lines
2.3 KiB
Markdown
66 lines
2.3 KiB
Markdown
|
# PARanodi SECuruty 3 protocol
|
||
|
|
||
|
This is a connection-agnostic, full-duplex RPC type binary protocol, effective to work with binary data, such as encrypted data, keys, multimedia, etc. Its key points are:
|
||
|
|
||
|
- simple and practical transport RPC layer, which is a primary choice when, for exaple, `wss://` level by TSL is enough, e.g. when there is no sensitive data being transmitted (games, etc).
|
||
|
|
||
|
- can easily be used with UDP (it has not too big binary frames that do not depend on the reception order)
|
||
|
|
||
|
- asynchronous full-duplex multithreaded RPC: any number commands from both parties can be executed in parallel.
|
||
|
|
||
|
- coroutine-based, fast implementation.
|
||
|
|
||
|
- compile-time types/invokation checks
|
||
|
|
||
|
- out of the box fast coroutine based websocket client (JVM+JS) and setver (JVM:ktor) implementations are provided.
|
||
|
|
||
|
- Kotlin Multiplatform: works the same in JVM/JS (and android too)
|
||
|
|
||
|
The protocol is a result of reconsidering the pratcial usage of its predecessor, parsec2 protocol. This version is not a part of the Universa effort but an independent personal project of universa CTO.
|
||
|
|
||
|
## Status
|
||
|
|
||
|
Transport layer for wbesockets is being tested in commercial environment, while its public interface still is in aplpha stage and is not yet frozen.
|
||
|
|
||
|
Secure layer is not yet published, as R&D and desting are still under way.
|
||
|
|
||
|
You can try and use transport layer but be prepared to minor interface changes.
|
||
|
|
||
|
## Installation
|
||
|
|
||
|
Insofar, we use localMaven: clone it and use `./gradlew publishToMavenLocal`, then add dependency:
|
||
|
|
||
|
```kotlin
|
||
|
repsitories {
|
||
|
// ...
|
||
|
mavenLocal()
|
||
|
}
|
||
|
|
||
|
//...
|
||
|
dependencies {
|
||
|
api("net.sergeych:parsec3:0.0.1-SNAPSHOT")
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
## FAQ
|
||
|
|
||
|
### Why not github?
|
||
|
|
||
|
Two reasons:
|
||
|
|
||
|
1. I don't want to depend on US crazy ideas like limit usage of its services to anybody who their governent won't like next week.
|
||
|
2. My ethic is against usage of open source in _paid services_ like gothub's copilot.
|
||
|
|
||
|
### Why not universa?
|
||
|
|
||
|
Again, two reasons:
|
||
|
|
||
|
1. This is my own project, I don't want to get under any trademark, codes and whatever limits.
|
||
|
|
||
|
2. Its security model is intended to be more universal than just universa to use more trust sources, so it is again not ethically adequate to develop it using universa resources.
|
||
|
|
||
|
## LICENSE
|
||
|
|
||
|
Will soon be published under MIT or similar.
|