Description
Python implementation of EIP 1577 content hash.
This is a simple package made for encoding and decoding content hashes has specified in the EIP 1577. This package will be useful for every Ethereum developer wanting to interact with EIP 1577 compliant ENS resolvers.
ContentHash for Python alternatives and similar packages
Based on the "Cryptography" category.
Alternatively, view ContentHash for Python alternatives based on common mentions on social networks and blogs.
-
Paramiko
The leading native Python SSHv2 protocol library. -
cryptography
cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. -
Themis
Easy to use cryptographic framework for data protection: secure messaging with forward secrecy and secure data storage. Has unified APIs across 14 platforms. -
pyOpenSSL -- A Python wrapper around the OpenSSL library
A Python wrapper around the OpenSSL library -
hashids
Implementation of hashids (http://hashids.org) in Python. Compatible with Python 2 and Python 3 -
PyNacl
Python binding to the Networking and Cryptography (NaCl) library -
Passlib
Secure password storage/hashing library, very high level. -
HashLib4Python-CPPWrapper
HashLib4Python is a cython wrapper around HashLib4CPP library that provides an easy to use interface for computing hashes and checksums of strings, files and bytearrays.
Collect and Analyze Billions of Data Points in Real Time
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of ContentHash for Python or a related project?
README
ContentHash for Python
Python implementation of EIP 1577 content hash.
Description
This is a simple package made for encoding and decoding content hashes has specified in the EIP 1577. This package will be useful for every Ethereum developer wanting to interact with EIP 1577 compliant ENS resolvers.
For JavaScript implementation, see pldespaigne/content-hash
.
Installation
Requirements
ContentHash requires Python 3.5 or higher.
From PyPI
The recommended way to install ContentHash is from PyPI with PIP.
pip install content-hash
From Source
Alternatively, you can also install it from the source.
git clone https://github.com/filips123/ContentHashPy.git
cd ContentHashPy
python setup.py install
Usage
Supported Codecs
The following codecs are currently supported:
swarm-ns
ipfs-ns
ipns-ns
Every other codec supported by multicodec
will be encoded by default in utf-8
. You can see the full list of the supported codecs here.
Getting Codec
You can use a get_codec
function to get codec from the content hash.
It takes a content hash as a HEX string and returns the codec name. A content hash can be prefixed with a 0x
, but it's not mandatory.
import content_hash
chash = 'bc037a716b746c776934666563766f367269'
codec = content_hash.get_codec(chash)
print(codec) # onion
Decoding
You can use a decode
function to decode a content hash.
It takes a content hash as a HEX string and returns the decoded content as a string. A content hash can be prefixed with a 0x
, but it's not mandatory.
import content_hash
chash = 'e3010170122029f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f'
value = content_hash.decode(chash)
print(value) # QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4
Encoding
You can use an encode
function to encode a content hash.
It takes a supported codec as a string and a value as a string and returns the corresponding content hash as a HEX string. The output will not be prefixed with a 0x
.
import content_hash
codec = 'swarm-ns'
value = 'd1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162'
chash = content_hash.encode(codec, value)
print(chash) # e40101701b20d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162
Creating Codecs
All supported codec profiles are available in content_hash/profiles/__init__.py
, in PROFILES
dictionary. You need to add a new profile there. You only need to add a new profile if your codec encoding and decoding are different from utf-8
.
Each profile must have the same name as the corresponding codec in the multicodec
library.
A profile must also have decode and encode function. They should be passed as a string containing the name of the module for required decode or encode. All such modules are available in content_hash/decodes
and content_hash/encodes
.
Each module name should describe it as much as possible. Its name can only contain valid characters for Python modules.
Each decode module must have a decode
function. It must be a function that takes a bytes
input and returns a str
result.
Each encode module must have an encode
function. It must be a function that takes a str
input and returns a bytes
result.
All inputs and outputs must be the same as in the JavaScript implementation. Multiple profiles can share the same decodes and encodes.
Versioning
This library uses SemVer for versioning. For the versions available, see the tags on this repository.
License
This library is licensed under the MIT license. See the LICENSE file for details.
*Note that all licence references and agreements mentioned in the ContentHash for Python README section above
are relevant to that project's source code only.