Ethereum KMS Signer
Sign ETH transactions with keys stored in AWS KMS
- Free software: MIT
- Documentation: https://meetmangukiya.github.io/ethereum-kms-signer
Features
- Sign Transactions
Video Demo
Why?
In the crypto world, all the assets, tokens, crypto you might own is protected by the secrecy of the private key. This leads to a single point of failure in cases of leaking of private keys or losing keys because of lack of backup or any number of reasons. It becomes even harder when you want to share these keys as an organization among many individuals.
Using something like AWS KMS can help with that and can provide full benefits of all the security features it provides. Sigantures can be created without the key ever leaving the AWS's infrastructure and could be effectively shared among individuals.
This library provides a simple and an easy-to-use API for using AWS KMS to sign ethereum
transactions and an easy integration with web3.py making it practical for using KMS to
manage your private keys.
Quickstart
Get ethereum address from KMS key
from ethereum_kms_signer import get_eth_address
address = get_eth_address('THE-AWS-KMS-ID')
print(address)
Sign a transaction object with KMS key
from ethereum_kms_signer import sign_transaction
dai_txn = dai.functions.transfer(
web3.toChecksumAddress(to_address.lower()), amount
).buildTransaction(
{
"nonce": nonce,
}
)
# Signing the transaction with KMS key
signed_tx = sign_transaction(dai_txn, key_id)
# send transaction
tx_hash = web3.eth.sendRawTransaction(signed_tx.rawTransaction)
Provisioning AWS KMS key with terraform
An ECC_SECG_P256K1 key can be provisioned using terraform by using the following
configuration along with the aws provider. More details can be found on
provider docs
resource "aws_kms_key" "my_very_secret_eth_account" {
description = "ETH account #1"
key_usage = "SIGN_VERIFY"
customer_master_key_spec = "ECC_SECG_P256K1"
}
resource "aws_kms_alias" "my_very_secret_eth_account" {
name = "eth-account-1"
target_key_id = aws_kms_key.my_very_secret_eth_account.id
}
Examples
Few examples can be found here.
Credits
This package was created with Cookiecutter and the zillionare/cookiecutter-pypackage project template.
This article has served as a good resource for implementing the functionality
Metadata
Release files for ethereum-kms-signer 0.1.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ethereum_kms_signer-0.1.6.tar.gz | 8.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ethereum_kms_signer-0.1.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.6 kB
Release files / ethereum_kms_signer-0.1.6.tar.gz
| Download URL | ethereum_kms_signer-0.1.6.tar.gz |
|---|---|
| Size | 8.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
681f40e84fafd13e20cdecc27cec5af1f65a7d69de6b13b0df6934aa5d408748
|
|
BLAKE2b-256 checksum How to use checksums |
ee391c472f6d204aeae65e5b949997030aab3ad30f876abc4242577d28de2977
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8
|
Release files / ethereum_kms_signer-0.1.6-py3-none-any.whl
| Download URL | ethereum_kms_signer-0.1.6-py3-none-any.whl |
|---|---|
| Size | 7.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3902609834836d1bf46e0e7175cdf71794db1eb789de69e0bf550bc796f94095
|
|
BLAKE2b-256 checksum How to use checksums |
74a8c7d839b7f5e82fa80859bc33bcc63fa166f3bdc6b03008e1fc3d526e9429
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8
|