示例#1
0
    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
示例#2
0
    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