From 3b19508a9ddad4addb968f7453238b0fab339b3f Mon Sep 17 00:00:00 2001 From: slush0 Date: Wed, 8 Jan 2014 15:59:18 +0100 Subject: [PATCH] xprv checksum --- trezorlib/client.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/trezorlib/client.py b/trezorlib/client.py index e7423b284..a5edb1a1b 100644 --- a/trezorlib/client.py +++ b/trezorlib/client.py @@ -1,6 +1,7 @@ import os import time import binascii +import hashlib import ckd_public import tools @@ -311,13 +312,17 @@ class TrezorClient(object): if data[90:92] != '00': raise Exception("Contain invalid private key") + checksum = hashlib.sha256(hashlib.sha256(binascii.unhexlify(data[:156])).digest()).hexdigest()[:8] + if checksum != data[156:]: + raise Exception("Checksum doesn't match") + # version 0488ade4 # depth 00 # fingerprint 00000000 # child_num 00000000 # chaincode 873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508 # privkey 00e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35 - # wtf is this? e77e9d71 + # checksum e77e9d71 node.version = int(data[0:8], 16) node.depth = int(data[8:10], 16) @@ -325,9 +330,7 @@ class TrezorClient(object): node.child_num = int(data[18:26], 16) node.chain_code = data[26:90].decode('hex') node.private_key = data[92:156].decode('hex') # skip 0x00 indicating privkey - print 'wtf is this?', len(data[156:]) - # FIXME - + resp = self.call(proto.LoadDevice(node=node, pin=pin, passphrase_protection=passphrase_protection,