Ethereum Library in Python
======================================
Introduction
————-
In this article, we will create a basic Ethereum library in Python that provides functions for generating an EC (elliptic curve) private key pair, obtaining the private and public keys, signing messages, and verifying signatures.
Library Code
————-
We will use the cryptography
library, which is a popular and well-maintained library for cryptographic tasks in Python. We will also use the hmac
library to generate MACs (message authentication codes) for the Ethereum blockchain.
Installation
—————
To install the required libraries, run the following commands:
pip install cryptography
Library code:
import os
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.backends import default_backend
import base64
class EthereumLibrary:
def __init__(self, private_key=None):
if private_key:
self.private_key = private_key
else:

Generate a new EC key pair for each library instanceself.private_key = ec.generate_private_key(ec.SECP256K1(), default_backend())
def generate_ec_keypair(self, private_key=None):
if private_key is None:
private_key = self.private_key
return ec.generate_private_key(private_key, default_backend())
def get_private_key(self):
return self.private_key
def get_public_key(self):
return self.private_key.public_key()
def sign_message(self, message, public_key):
signature = public_key.sign(
message,
ec.dhparams(),
asymmetric SigningAlgorithm.SHA256()
)
return base64.b32encode(signature)
def verify_signature(self, message, signature, private_key):
try:
public_key = self.private_key.public_key()
public_key.verify(
signature,
message,
asymmetric VerifyingKey.dhparam(),
)
return True
except:
return False
Usage example:library = EthereumLibrary()
Generate a new EC key pair for each library instancekeypair = library.generate_ec_keypair()
private_key = library.get_private_key().public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat-Trustless,
encryption_algorithm=serialization.NoEncryption()
)
Sign a message with the public keymessage = b"Hello, world!"
signature = library.sign_message(message, keypair.public_key())
print(library.get_private_key().public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
))
Verify the signature using the private keyprivate_key.verify(
b"\x00\x01\x02\x03",
Signatureb"Hello world!",
Messagekeypair.private_key
)
Note that this is a simplified example and should not be used in production without further testing and validation. Also, keep in mind that generating an EC key pair for each instance of the library will consume significant memory.
Commit Messages
——————
For commit messages, follow standard professional guidelines:
- Use imperative mood (e.g., “feat: add Ethereum library”)
- Keep the first line short (< 72 characters)
- Use present tense (e.g., “Add new EC keypair generation”)
Example commit message:
Added Ethereum core library in Python