aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeterminant <ted.sybil@gmail.com>2018-03-24 19:21:44 -0400
committerDeterminant <ted.sybil@gmail.com>2018-03-24 19:21:44 -0400
commitf4111040d84cbff1775f9ede3374c6f34b8684c6 (patch)
treed3deafb0135e8084ad360ae4cd29a22f508f6436
parent6ed178ecfad7fd885d462bea3f75c82bcfaa18e3 (diff)
add password entropy info
-rw-r--r--ethy.py16
1 files changed, 15 insertions, 1 deletions
diff --git a/ethy.py b/ethy.py
index b6eb735..4008496 100644
--- a/ethy.py
+++ b/ethy.py
@@ -41,12 +41,22 @@ import os, sys, json, argparse
from hashlib import scrypt
from uuid import uuid4
from getpass import getpass as _getpass
+from collections import Counter as Histogram
+from math import log
from Crypto.Cipher import AES
from Crypto.Util import Counter
from sha3 import keccak_256
from ecdsa import SigningKey, SECP256k1
err = sys.stderr
+
+import collections
+
+def entropy(data):
+ n = len(data)
+ return sum([-p * log(p, 2) for p in
+ [c / n for _,c in Histogram(data).items()]])
+
def getpass():
passwd = _getpass('Enter your wallet password (utf-8): ')
rpasswd = _getpass('Repeat the password: ')
@@ -120,7 +130,11 @@ if __name__ == '__main__':
r = 8
p = 1
passwd = getpass()
- err.write("your plain-text password has {} bytes\n".format(len(passwd)))
+ pwd_len = len(passwd)
+ pwd_ent = entropy(passwd)
+ err.write("pass length = {} bytes\n"
+ "pass entropy = {}, {:.2f}%\n".format(
+ pwd_len, pwd_ent, pwd_ent / log(pwd_len, 2) * 100))
enc_pk, mac = encrypt(passwd=passwd,
iv=iv, priv_key=priv_key, salt=salt, n=n, r=r, p=p, dklen=32)
addr = generate_addr(pub_key)