Implementation of random checksum protocol
Project description
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 method's endpoint):
saltkey1value1...
- Hash with SHA512
- Represent the hash as hex string (lowercase)
- The endpoint you're trying to reach should have the position stated, where the checksum should be put. This may be as a key in a POST request, or via Authentication Header.
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
from rc_protocol import get_checksum
SHARED_SECRET = "s3cr3t_p@ssw0rd"
my_dict = {
"key1": "value1",
"key2": "value2"
}
checksum = get_checksum(my_dict, SHARED_SECRET)
Validate checksum
from rc_protocol import validate_checksum
SHARED_SECRET = "s3cr3t_p@ssw0rd"
my_dict = {
"key1": "value1",
"key2": "value2",
}
checksum = "d0690e3c924e18bad866e2867698be75f64bdc6e809b76ffedb5c5095c9fbe15d36636b2df1fc47d2a3f348aea272ffc2fed4dc8ee08e0d13631ef646e1648c4"
if validate_checksum(my_dict, checksum, SHARED_SECRET):
do_random_things()
else:
print("You shall not pass.")
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
rc-protocol-0.1.0.tar.gz
(9.9 kB
view details)
File details
Details for the file rc-protocol-0.1.0.tar.gz
.
File metadata
- Download URL: rc-protocol-0.1.0.tar.gz
- Upload date:
- Size: 9.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6dcf3f91858de6fe05a2ccda0843fa5d7769356c578fd6c32ea00993016553a7 |
|
MD5 | ddcba4918337a73801dfd91c0ae41787 |
|
BLAKE2b-256 | a1abc1d11106285bc6a39a8c14450f1f5cec82fdfb50fc2428831693c10dae29 |