def get_node(self): """Return decrypted HDNodeType (from stored mnemonic or encrypted HDNodeType)""" if not self.is_initialized(): raise NotInitializedException("Device not initalized") if self.is_locked(): raise Exception("Passphrase required") if self.struct.HasField("mnemonic") and self.struct.HasField("node"): raise Exception("Cannot have both mnemonic and node at the same time") if self.session.has_node(): # If we've already unlocked node, let's use it return self.session.node if self.struct.HasField("mnemonic"): print "Loading mnemonic" seed = Mnemonic(self.struct.language).to_seed( self.struct.mnemonic, passphrase=self.session.get_passphrase() ) self.session.set_node(BIP32.get_node_from_seed(seed)) else: print "Loading node" passphrase = self.session.get_passphrase() if passphrase: secret = PBKDF2( passphrase, "TREZORHD", iterations=2048, macmodule=hmac, digestmodule=hashlib.sha512 ).read(64) node = types.HDNodeType() node.CopyFrom(self.struct.node) aes_key = secret[:32] aes_iv = secret[32:48] aescbc = pyaes.AESModeOfOperationCBC(key=aes_key, iv=aes_iv) node.chain_code = aescbc.decrypt(node.chain_code[:16]) + aescbc.decrypt(node.chain_code[16:]) node.private_key = aescbc.decrypt(node.private_key[:16]) + aescbc.decrypt(node.private_key[16:]) self.session.set_node(node) else: self.session.set_node(self.struct.node) return self.session.node
def get_node(self): '''Return decrypted HDNodeType (from stored mnemonic or encrypted HDNodeType)''' if not self.is_initialized(): raise NotInitializedException("Device not initalized") if self.is_locked(): raise Exception("Passphrase required") if self.struct.HasField('mnemonic') and self.struct.HasField('node'): raise Exception("Cannot have both mnemonic and node at the same time") if self.session.has_node(): # If we've already unlocked node, let's use it return self.session.node if self.struct.HasField('mnemonic'): print "Loading mnemonic" seed = Mnemonic(self.struct.language).to_seed(self.struct.mnemonic, passphrase=self.session.get_passphrase()) self.session.set_node(BIP32.get_node_from_seed(seed)) else: print "Loading node" self.session.set_node(self.struct.node) return self.session.node