Metadata-Version: 2.1
Name: rc-protocol
Version: 0.0.5
Summary: Implementation of random checksum protocol
Home-page: https://github.com/myOmikron/rcp/
Author: Niklas Pfister
Author-email: kontakt@omikron.dev
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)
Classifier: Operating System :: OS Independent
Requires-Python: >2.7
Description-Content-Type: text/markdown
License-File: LICENSE

# RCP - Random Checksum Protocol

RCP's main use case is providing a checksum to validate requests between HTTP Servers. Therefore each server has a shared secret to which all the others have to have access to.

## How to implement
- Put all your data from your POST or GET Request in a dictionary 
- Sort the dictionary alphanumerical by its keys.
- Concat its values to the respective key and join them: `key1value1key2value2...`
- Append the shared secret of your target
- Append current utc timestamp (unix epoch - just seconds)
- Optional: Add a salt (this may be the methods endpoint): `saltkey1value1...`
- Hash with SHA512
- Represent the hash as hex string (lowercase)
- The endpoint you're trying to reach should have the key stated, it expects the checksum to be in. In the reference implementation this defaults to `checksum`.


**Watch out**
As this protocol heavily depends on retrieving the correct time, it may be required to enable NTP on your servers.

## How to use the reference implementation

**Get checksum**

```python
from rc_protocol import get_checksum

SHARED_SECRET = "s3cr3t_p@ssw0rd"

my_dict = {
    "key1": "value1",
    "key2": "value2"
}

my_dict["checksum"] = get_checksum(my_dict, SHARED_SECRET)
```

**Validate checksum**

```python
from rc_protocol import validate_checksum

SHARED_SECRET = "s3cr3t_p@ssw0rd"

my_dict = {
    "key1": "value1",
    "key2": "value2",
    "checksum": "d0690e3c924e18bad866e2867698be75f64bdc6e809b76ffedb5c5095c9fbe15d36636b2df1fc47d2a3f348aea272ffc2fed4dc8ee08e0d13631ef646e1648c4"
}

if validate_checksum(my_dict, SHARED_SECRET):
    do_random_things()
else:
    print("You shall not pass.")
```



