commit 3b80287bb113d1fb58ab646cf467a488bc13b102
parent 1cccd2255f8ef0da491afdc5c7e114b48ad41a62
Author: Carlosokumu <carlosokumu254@gmail.com>
Date: Sat, 14 Mar 2026 09:46:52 +0300
decrypt using secretbox
Diffstat:
1 file changed, 30 insertions(+), 10 deletions(-)
diff --git a/dummy/usawa/core/usawa_wallet.py b/dummy/usawa/core/usawa_wallet.py
@@ -1,19 +1,39 @@
-import gnupg
import logging
-
from usawa.crypto import DemoWallet
+from nacl.secret import SecretBox
+from nacl.pwhash import argon2i
+
logg = logging.getLogger("usawawallet")
class UsawaWallet(DemoWallet):
-
- def __init__(self, keyfile, gpgdir="~/.gnupg", passphrase=None):
- self.gpg = gnupg.GPG(gnupghome=gpgdir)
+ def __init__(self, keyfile, passphrase=None):
self.keyfile = keyfile
- f = open(self.keyfile, "rb")
- pk = self.gpg.decrypt_file(f, passphrase=passphrase)
- f.close()
- logg.debug("decrypted pk with key {}".format(pk.key_id))
- super(UsawaWallet, self).__init__(privatekey=pk.data)
+
+ with open(self.keyfile, "rb") as f:
+ data = f.read()
+
+ if passphrase is not None:
+ # Extract salt and decrypt
+ salt = data[: argon2i.SALTBYTES]
+ encrypted = data[argon2i.SALTBYTES :]
+ key = argon2i.kdf(
+ SecretBox.KEY_SIZE,
+ passphrase.encode(),
+ salt,
+ )
+ box = SecretBox(key)
+ try:
+ seed = box.decrypt(encrypted)
+ except Exception:
+ raise ValueError("decryption failed: wrong passphrase?")
+ else:
+ seed = data
+
+ if len(seed) != 32:
+ raise ValueError("expected 32 bytes, got {}".format(len(seed)))
+
+ logg.debug("wallet unlocked from keyfile")
+ super(UsawaWallet, self).__init__(privatekey=seed)