parse_scriptSig
[electrum-nvc.git] / lib / bitcoin.py
index f0e4d67..aba02f8 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-
-import hashlib, base64, ecdsa, re
+import hashlib
+import base64
+import re
+import sys
 import hmac
-import aes
+
+
+try:
+    import ecdsa
+except ImportError:
+    sys.exit("Error: python-ecdsa does not seem to be installed. Try 'sudo pip install ecdsa'")
+
+try:
+    import aes
+except ImportError:
+    sys.exit("Error: AES does not seem to be installed. Try 'sudo pip install slowaes'")
+
+try:
+    import pbkdf2
+except ImportError:
+    sys.exit("Error: pbkdf2 does not seem to be installed. Try 'sudo pip install pbkdf2'")
+
+
+
 from util import print_error
 
+
+
 # AES encryption
 EncodeAES = lambda secret, s: base64.b64encode(aes.encryptData(secret,s))
 DecodeAES = lambda secret, e: aes.decryptData(secret, base64.b64decode(e))
@@ -711,21 +733,21 @@ class Test_bitcoin(unittest.TestCase):
         addr_c = public_key_to_bc_address(pubkey_c)
         addr_u = public_key_to_bc_address(pubkey_u)
 
-        print "Private key            ", '%064x'%pvk
+        #print "Private key            ", '%064x'%pvk
         eck = EC_KEY(number_to_string(pvk,_r))
 
-        print "Compressed public key  ", pubkey_c.encode('hex')
+        #print "Compressed public key  ", pubkey_c.encode('hex')
         enc = EC_KEY.encrypt_message(message, pubkey_c)
         dec = eck.decrypt_message(enc)
         assert dec == message
 
-        print "Uncompressed public key", pubkey_u.encode('hex')
+        #print "Uncompressed public key", pubkey_u.encode('hex')
         enc2 = EC_KEY.encrypt_message(message, pubkey_u)
         dec2 = eck.decrypt_message(enc)
         assert dec2 == message
 
         signature = eck.sign_message(message, True, addr_c)
-        print signature
+        #print signature
         EC_KEY.verify_message(addr_c, signature, message)
 
 
@@ -758,6 +780,14 @@ class Test_bitcoin(unittest.TestCase):
         return xpub, xprv
 
 
+    def test_aes(self):
+        s = u'\u66f4\u7a33\u5b9a\u7684\u4ea4\u6613\u5e73\u53f0'
+        self.do_test_aes(s, s)
+
+    def do_test_aes(self, s, p):
+        enc = pw_encode(s, p)
+        dec = pw_decode(enc, p)
+        assert dec == s
 
 
 if __name__ == "__main__":