1#!/usr/bin/env python 2 3# This software is Copyright (c) 2017, Dhiru Kholia <dhiru.kholia at gmail.com> 4# and it is hereby released under GPL v2 license. 5# 6# Major parts are borrowed from the "btcrecover" program which is, 7# Copyright (C) 2014-2016 Christopher Gurnee and under GPL v2. 8# 9# See https://github.com/gurnec/btcrecover for details. 10# 11# References, 12# 13# https://github.com/gurnec/btcrecover/blob/master/btcrecover/btcrpass.py 14 15import os 16import sys 17import base64 18import binascii 19 20# The protobuf parsing code below is borrowed from the btcrecover, and was 21# initially automatically generated by Google's protoc utility. 22# 23# Generated by the protocol buffer compiler. DO NOT EDIT! 24# source: wallet.proto 25 26import sys 27_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) 28try: 29 from google.protobuf import descriptor as _descriptor 30 from google.protobuf import message as _message 31 from google.protobuf import reflection as _reflection 32 from google.protobuf import symbol_database as _symbol_database 33 from google.protobuf import descriptor_pb2 34except ImportError: 35 sys.stderr.write("Install the missing protobuf package, use 'pip install --user protobuf' command to do so.\n") 36 sys.exit(-1) 37# @@protoc_insertion_point(imports) 38 39_sym_db = _symbol_database.Default() 40 41DESCRIPTOR = _descriptor.FileDescriptor( 42 name='wallet.proto', 43 package='wallet', 44 serialized_pb=_b('\n\x0cwallet.proto\x12\x06wallet\"A\n\x0bPeerAddress\x12\x12\n\nip_address\x18\x01 \x02(\x0c\x12\x0c\n\x04port\x18\x02 \x02(\r\x12\x10\n\x08services\x18\x03 \x02(\x04\"M\n\rEncryptedData\x12\x1d\n\x15initialisation_vector\x18\x01 \x02(\x0c\x12\x1d\n\x15\x65ncrypted_private_key\x18\x02 \x02(\x0c\"y\n\x10\x44\x65terministicKey\x12\x12\n\nchain_code\x18\x01 \x02(\x0c\x12\x0c\n\x04path\x18\x02 \x03(\r\x12\x16\n\x0eissued_subkeys\x18\x03 \x01(\r\x12\x16\n\x0elookahead_size\x18\x04 \x01(\r\x12\x13\n\x0bisFollowing\x18\x05 \x01(\x08\"\x9a\x03\n\x03Key\x12\x1e\n\x04type\x18\x01 \x02(\x0e\x32\x10.wallet.Key.Type\x12\x14\n\x0csecret_bytes\x18\x02 \x01(\x0c\x12-\n\x0e\x65ncrypted_data\x18\x06 \x01(\x0b\x32\x15.wallet.EncryptedData\x12\x12\n\npublic_key\x18\x03 \x01(\x0c\x12\r\n\x05label\x18\x04 \x01(\t\x12\x1a\n\x12\x63reation_timestamp\x18\x05 \x01(\x03\x12\x33\n\x11\x64\x65terministic_key\x18\x07 \x01(\x0b\x32\x18.wallet.DeterministicKey\x12\x1a\n\x12\x64\x65terministic_seed\x18\x08 \x01(\x0c\x12;\n\x1c\x65ncrypted_deterministic_seed\x18\t \x01(\x0b\x32\x15.wallet.EncryptedData\"a\n\x04Type\x12\x0c\n\x08ORIGINAL\x10\x01\x12\x18\n\x14\x45NCRYPTED_SCRYPT_AES\x10\x02\x12\x1a\n\x16\x44\x45TERMINISTIC_MNEMONIC\x10\x03\x12\x15\n\x11\x44\x45TERMINISTIC_KEY\x10\x04\"5\n\x06Script\x12\x0f\n\x07program\x18\x01 \x02(\x0c\x12\x1a\n\x12\x63reation_timestamp\x18\x02 \x02(\x03\"\x92\x01\n\x10TransactionInput\x12\"\n\x1atransaction_out_point_hash\x18\x01 \x02(\x0c\x12#\n\x1btransaction_out_point_index\x18\x02 \x02(\r\x12\x14\n\x0cscript_bytes\x18\x03 \x02(\x0c\x12\x10\n\x08sequence\x18\x04 \x01(\r\x12\r\n\x05value\x18\x05 \x01(\x03\"\x7f\n\x11TransactionOutput\x12\r\n\x05value\x18\x01 \x02(\x03\x12\x14\n\x0cscript_bytes\x18\x02 \x02(\x0c\x12!\n\x19spent_by_transaction_hash\x18\x03 \x01(\x0c\x12\"\n\x1aspent_by_transaction_index\x18\x04 \x01(\x05\"\x89\x03\n\x15TransactionConfidence\x12\x30\n\x04type\x18\x01 \x01(\x0e\x32\".wallet.TransactionConfidence.Type\x12\x1a\n\x12\x61ppeared_at_height\x18\x02 \x01(\x05\x12\x1e\n\x16overriding_transaction\x18\x03 \x01(\x0c\x12\r\n\x05\x64\x65pth\x18\x04 \x01(\x05\x12)\n\x0c\x62roadcast_by\x18\x06 \x03(\x0b\x32\x13.wallet.PeerAddress\x12\x34\n\x06source\x18\x07 \x01(\x0e\x32$.wallet.TransactionConfidence.Source\"O\n\x04Type\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0c\n\x08\x42UILDING\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\x15\n\x11NOT_IN_BEST_CHAIN\x10\x03\x12\x08\n\x04\x44\x45\x41\x44\x10\x04\"A\n\x06Source\x12\x12\n\x0eSOURCE_UNKNOWN\x10\x00\x12\x12\n\x0eSOURCE_NETWORK\x10\x01\x12\x0f\n\x0bSOURCE_SELF\x10\x02\"\xb4\x05\n\x0bTransaction\x12\x0f\n\x07version\x18\x01 \x02(\x05\x12\x0c\n\x04hash\x18\x02 \x02(\x0c\x12&\n\x04pool\x18\x03 \x01(\x0e\x32\x18.wallet.Transaction.Pool\x12\x11\n\tlock_time\x18\x04 \x01(\r\x12\x12\n\nupdated_at\x18\x05 \x01(\x03\x12\x33\n\x11transaction_input\x18\x06 \x03(\x0b\x32\x18.wallet.TransactionInput\x12\x35\n\x12transaction_output\x18\x07 \x03(\x0b\x32\x19.wallet.TransactionOutput\x12\x12\n\nblock_hash\x18\x08 \x03(\x0c\x12 \n\x18\x62lock_relativity_offsets\x18\x0b \x03(\x05\x12\x31\n\nconfidence\x18\t \x01(\x0b\x32\x1d.wallet.TransactionConfidence\x12\x35\n\x07purpose\x18\n \x01(\x0e\x32\x1b.wallet.Transaction.Purpose:\x07UNKNOWN\x12+\n\rexchange_rate\x18\x0c \x01(\x0b\x32\x14.wallet.ExchangeRate\x12\x0c\n\x04memo\x18\r \x01(\t\"Y\n\x04Pool\x12\x0b\n\x07UNSPENT\x10\x04\x12\t\n\x05SPENT\x10\x05\x12\x0c\n\x08INACTIVE\x10\x02\x12\x08\n\x04\x44\x45\x41\x44\x10\n\x12\x0b\n\x07PENDING\x10\x10\x12\x14\n\x10PENDING_INACTIVE\x10\x12\"\x94\x01\n\x07Purpose\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x10\n\x0cUSER_PAYMENT\x10\x01\x12\x10\n\x0cKEY_ROTATION\x10\x02\x12\x1c\n\x18\x41SSURANCE_CONTRACT_CLAIM\x10\x03\x12\x1d\n\x19\x41SSURANCE_CONTRACT_PLEDGE\x10\x04\x12\x1b\n\x17\x41SSURANCE_CONTRACT_STUB\x10\x05\"N\n\x10ScryptParameters\x12\x0c\n\x04salt\x18\x01 \x02(\x0c\x12\x10\n\x01n\x18\x02 \x01(\x03:\x05\x31\x36\x33\x38\x34\x12\x0c\n\x01r\x18\x03 \x01(\x05:\x01\x38\x12\x0c\n\x01p\x18\x04 \x01(\x05:\x01\x31\"8\n\tExtension\x12\n\n\x02id\x18\x01 \x02(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x02(\x0c\x12\x11\n\tmandatory\x18\x03 \x02(\x08\" \n\x03Tag\x12\x0b\n\x03tag\x18\x01 \x02(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x02(\x0c\"5\n\x11TransactionSigner\x12\x12\n\nclass_name\x18\x01 \x02(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x89\x05\n\x06Wallet\x12\x1a\n\x12network_identifier\x18\x01 \x02(\t\x12\x1c\n\x14last_seen_block_hash\x18\x02 \x01(\x0c\x12\x1e\n\x16last_seen_block_height\x18\x0c \x01(\r\x12!\n\x19last_seen_block_time_secs\x18\x0e \x01(\x03\x12\x18\n\x03key\x18\x03 \x03(\x0b\x32\x0b.wallet.Key\x12(\n\x0btransaction\x18\x04 \x03(\x0b\x32\x13.wallet.Transaction\x12&\n\x0ewatched_script\x18\x0f \x03(\x0b\x32\x0e.wallet.Script\x12\x43\n\x0f\x65ncryption_type\x18\x05 \x01(\x0e\x32\x1d.wallet.Wallet.EncryptionType:\x0bUNENCRYPTED\x12\x37\n\x15\x65ncryption_parameters\x18\x06 \x01(\x0b\x32\x18.wallet.ScryptParameters\x12\x12\n\x07version\x18\x07 \x01(\x05:\x01\x31\x12$\n\textension\x18\n \x03(\x0b\x32\x11.wallet.Extension\x12\x13\n\x0b\x64\x65scription\x18\x0b \x01(\t\x12\x19\n\x11key_rotation_time\x18\r \x01(\x04\x12\x19\n\x04tags\x18\x10 \x03(\x0b\x32\x0b.wallet.Tag\x12\x36\n\x13transaction_signers\x18\x11 \x03(\x0b\x32\x19.wallet.TransactionSigner\x12\x1e\n\x13sigsRequiredToSpend\x18\x12 \x01(\r:\x01\x31\";\n\x0e\x45ncryptionType\x12\x0f\n\x0bUNENCRYPTED\x10\x01\x12\x18\n\x14\x45NCRYPTED_SCRYPT_AES\x10\x02\"R\n\x0c\x45xchangeRate\x12\x12\n\ncoin_value\x18\x01 \x02(\x03\x12\x12\n\nfiat_value\x18\x02 \x02(\x03\x12\x1a\n\x12\x66iat_currency_code\x18\x03 \x02(\tB\x1d\n\x13org.bitcoinj.walletB\x06Protos') 45) 46_sym_db.RegisterFileDescriptor(DESCRIPTOR) 47 48 49 50_KEY_TYPE = _descriptor.EnumDescriptor( 51 name='Type', 52 full_name='wallet.Key.Type', 53 filename=None, 54 file=DESCRIPTOR, 55 values=[ 56 _descriptor.EnumValueDescriptor( 57 name='ORIGINAL', index=0, number=1, 58 options=None, 59 type=None), 60 _descriptor.EnumValueDescriptor( 61 name='ENCRYPTED_SCRYPT_AES', index=1, number=2, 62 options=None, 63 type=None), 64 _descriptor.EnumValueDescriptor( 65 name='DETERMINISTIC_MNEMONIC', index=2, number=3, 66 options=None, 67 type=None), 68 _descriptor.EnumValueDescriptor( 69 name='DETERMINISTIC_KEY', index=3, number=4, 70 options=None, 71 type=None), 72 ], 73 containing_type=None, 74 options=None, 75 serialized_start=607, 76 serialized_end=704, 77) 78_sym_db.RegisterEnumDescriptor(_KEY_TYPE) 79 80_TRANSACTIONCONFIDENCE_TYPE = _descriptor.EnumDescriptor( 81 name='Type', 82 full_name='wallet.TransactionConfidence.Type', 83 filename=None, 84 file=DESCRIPTOR, 85 values=[ 86 _descriptor.EnumValueDescriptor( 87 name='UNKNOWN', index=0, number=0, 88 options=None, 89 type=None), 90 _descriptor.EnumValueDescriptor( 91 name='BUILDING', index=1, number=1, 92 options=None, 93 type=None), 94 _descriptor.EnumValueDescriptor( 95 name='PENDING', index=2, number=2, 96 options=None, 97 type=None), 98 _descriptor.EnumValueDescriptor( 99 name='NOT_IN_BEST_CHAIN', index=3, number=3, 100 options=None, 101 type=None), 102 _descriptor.EnumValueDescriptor( 103 name='DEAD', index=4, number=4, 104 options=None, 105 type=None), 106 ], 107 containing_type=None, 108 options=None, 109 serialized_start=1287, 110 serialized_end=1366, 111) 112_sym_db.RegisterEnumDescriptor(_TRANSACTIONCONFIDENCE_TYPE) 113 114_TRANSACTIONCONFIDENCE_SOURCE = _descriptor.EnumDescriptor( 115 name='Source', 116 full_name='wallet.TransactionConfidence.Source', 117 filename=None, 118 file=DESCRIPTOR, 119 values=[ 120 _descriptor.EnumValueDescriptor( 121 name='SOURCE_UNKNOWN', index=0, number=0, 122 options=None, 123 type=None), 124 _descriptor.EnumValueDescriptor( 125 name='SOURCE_NETWORK', index=1, number=1, 126 options=None, 127 type=None), 128 _descriptor.EnumValueDescriptor( 129 name='SOURCE_SELF', index=2, number=2, 130 options=None, 131 type=None), 132 ], 133 containing_type=None, 134 options=None, 135 serialized_start=1368, 136 serialized_end=1433, 137) 138_sym_db.RegisterEnumDescriptor(_TRANSACTIONCONFIDENCE_SOURCE) 139 140_TRANSACTION_POOL = _descriptor.EnumDescriptor( 141 name='Pool', 142 full_name='wallet.Transaction.Pool', 143 filename=None, 144 file=DESCRIPTOR, 145 values=[ 146 _descriptor.EnumValueDescriptor( 147 name='UNSPENT', index=0, number=4, 148 options=None, 149 type=None), 150 _descriptor.EnumValueDescriptor( 151 name='SPENT', index=1, number=5, 152 options=None, 153 type=None), 154 _descriptor.EnumValueDescriptor( 155 name='INACTIVE', index=2, number=2, 156 options=None, 157 type=None), 158 _descriptor.EnumValueDescriptor( 159 name='DEAD', index=3, number=10, 160 options=None, 161 type=None), 162 _descriptor.EnumValueDescriptor( 163 name='PENDING', index=4, number=16, 164 options=None, 165 type=None), 166 _descriptor.EnumValueDescriptor( 167 name='PENDING_INACTIVE', index=5, number=18, 168 options=None, 169 type=None), 170 ], 171 containing_type=None, 172 options=None, 173 serialized_start=1888, 174 serialized_end=1977, 175) 176_sym_db.RegisterEnumDescriptor(_TRANSACTION_POOL) 177 178_TRANSACTION_PURPOSE = _descriptor.EnumDescriptor( 179 name='Purpose', 180 full_name='wallet.Transaction.Purpose', 181 filename=None, 182 file=DESCRIPTOR, 183 values=[ 184 _descriptor.EnumValueDescriptor( 185 name='UNKNOWN', index=0, number=0, 186 options=None, 187 type=None), 188 _descriptor.EnumValueDescriptor( 189 name='USER_PAYMENT', index=1, number=1, 190 options=None, 191 type=None), 192 _descriptor.EnumValueDescriptor( 193 name='KEY_ROTATION', index=2, number=2, 194 options=None, 195 type=None), 196 _descriptor.EnumValueDescriptor( 197 name='ASSURANCE_CONTRACT_CLAIM', index=3, number=3, 198 options=None, 199 type=None), 200 _descriptor.EnumValueDescriptor( 201 name='ASSURANCE_CONTRACT_PLEDGE', index=4, number=4, 202 options=None, 203 type=None), 204 _descriptor.EnumValueDescriptor( 205 name='ASSURANCE_CONTRACT_STUB', index=5, number=5, 206 options=None, 207 type=None), 208 ], 209 containing_type=None, 210 options=None, 211 serialized_start=1980, 212 serialized_end=2128, 213) 214_sym_db.RegisterEnumDescriptor(_TRANSACTION_PURPOSE) 215 216_WALLET_ENCRYPTIONTYPE = _descriptor.EnumDescriptor( 217 name='EncryptionType', 218 full_name='wallet.Wallet.EncryptionType', 219 filename=None, 220 file=DESCRIPTOR, 221 values=[ 222 _descriptor.EnumValueDescriptor( 223 name='UNENCRYPTED', index=0, number=1, 224 options=None, 225 type=None), 226 _descriptor.EnumValueDescriptor( 227 name='ENCRYPTED_SCRYPT_AES', index=1, number=2, 228 options=None, 229 type=None), 230 ], 231 containing_type=None, 232 options=None, 233 serialized_start=2948, 234 serialized_end=3007, 235) 236_sym_db.RegisterEnumDescriptor(_WALLET_ENCRYPTIONTYPE) 237 238 239_PEERADDRESS = _descriptor.Descriptor( 240 name='PeerAddress', 241 full_name='wallet.PeerAddress', 242 filename=None, 243 file=DESCRIPTOR, 244 containing_type=None, 245 fields=[ 246 _descriptor.FieldDescriptor( 247 name='ip_address', full_name='wallet.PeerAddress.ip_address', index=0, 248 number=1, type=12, cpp_type=9, label=2, 249 has_default_value=False, default_value=_b(""), 250 message_type=None, enum_type=None, containing_type=None, 251 is_extension=False, extension_scope=None, 252 options=None), 253 _descriptor.FieldDescriptor( 254 name='port', full_name='wallet.PeerAddress.port', index=1, 255 number=2, type=13, cpp_type=3, label=2, 256 has_default_value=False, default_value=0, 257 message_type=None, enum_type=None, containing_type=None, 258 is_extension=False, extension_scope=None, 259 options=None), 260 _descriptor.FieldDescriptor( 261 name='services', full_name='wallet.PeerAddress.services', index=2, 262 number=3, type=4, cpp_type=4, label=2, 263 has_default_value=False, default_value=0, 264 message_type=None, enum_type=None, containing_type=None, 265 is_extension=False, extension_scope=None, 266 options=None), 267 ], 268 extensions=[ 269 ], 270 nested_types=[], 271 enum_types=[ 272 ], 273 options=None, 274 is_extendable=False, 275 extension_ranges=[], 276 oneofs=[ 277 ], 278 serialized_start=24, 279 serialized_end=89, 280) 281 282 283_ENCRYPTEDDATA = _descriptor.Descriptor( 284 name='EncryptedData', 285 full_name='wallet.EncryptedData', 286 filename=None, 287 file=DESCRIPTOR, 288 containing_type=None, 289 fields=[ 290 _descriptor.FieldDescriptor( 291 name='initialisation_vector', full_name='wallet.EncryptedData.initialisation_vector', index=0, 292 number=1, type=12, cpp_type=9, label=2, 293 has_default_value=False, default_value=_b(""), 294 message_type=None, enum_type=None, containing_type=None, 295 is_extension=False, extension_scope=None, 296 options=None), 297 _descriptor.FieldDescriptor( 298 name='encrypted_private_key', full_name='wallet.EncryptedData.encrypted_private_key', index=1, 299 number=2, type=12, cpp_type=9, label=2, 300 has_default_value=False, default_value=_b(""), 301 message_type=None, enum_type=None, containing_type=None, 302 is_extension=False, extension_scope=None, 303 options=None), 304 ], 305 extensions=[ 306 ], 307 nested_types=[], 308 enum_types=[ 309 ], 310 options=None, 311 is_extendable=False, 312 extension_ranges=[], 313 oneofs=[ 314 ], 315 serialized_start=91, 316 serialized_end=168, 317) 318 319 320_DETERMINISTICKEY = _descriptor.Descriptor( 321 name='DeterministicKey', 322 full_name='wallet.DeterministicKey', 323 filename=None, 324 file=DESCRIPTOR, 325 containing_type=None, 326 fields=[ 327 _descriptor.FieldDescriptor( 328 name='chain_code', full_name='wallet.DeterministicKey.chain_code', index=0, 329 number=1, type=12, cpp_type=9, label=2, 330 has_default_value=False, default_value=_b(""), 331 message_type=None, enum_type=None, containing_type=None, 332 is_extension=False, extension_scope=None, 333 options=None), 334 _descriptor.FieldDescriptor( 335 name='path', full_name='wallet.DeterministicKey.path', index=1, 336 number=2, type=13, cpp_type=3, label=3, 337 has_default_value=False, default_value=[], 338 message_type=None, enum_type=None, containing_type=None, 339 is_extension=False, extension_scope=None, 340 options=None), 341 _descriptor.FieldDescriptor( 342 name='issued_subkeys', full_name='wallet.DeterministicKey.issued_subkeys', index=2, 343 number=3, type=13, cpp_type=3, label=1, 344 has_default_value=False, default_value=0, 345 message_type=None, enum_type=None, containing_type=None, 346 is_extension=False, extension_scope=None, 347 options=None), 348 _descriptor.FieldDescriptor( 349 name='lookahead_size', full_name='wallet.DeterministicKey.lookahead_size', index=3, 350 number=4, type=13, cpp_type=3, label=1, 351 has_default_value=False, default_value=0, 352 message_type=None, enum_type=None, containing_type=None, 353 is_extension=False, extension_scope=None, 354 options=None), 355 _descriptor.FieldDescriptor( 356 name='isFollowing', full_name='wallet.DeterministicKey.isFollowing', index=4, 357 number=5, type=8, cpp_type=7, label=1, 358 has_default_value=False, default_value=False, 359 message_type=None, enum_type=None, containing_type=None, 360 is_extension=False, extension_scope=None, 361 options=None), 362 ], 363 extensions=[ 364 ], 365 nested_types=[], 366 enum_types=[ 367 ], 368 options=None, 369 is_extendable=False, 370 extension_ranges=[], 371 oneofs=[ 372 ], 373 serialized_start=170, 374 serialized_end=291, 375) 376 377 378_KEY = _descriptor.Descriptor( 379 name='Key', 380 full_name='wallet.Key', 381 filename=None, 382 file=DESCRIPTOR, 383 containing_type=None, 384 fields=[ 385 _descriptor.FieldDescriptor( 386 name='type', full_name='wallet.Key.type', index=0, 387 number=1, type=14, cpp_type=8, label=2, 388 has_default_value=False, default_value=1, 389 message_type=None, enum_type=None, containing_type=None, 390 is_extension=False, extension_scope=None, 391 options=None), 392 _descriptor.FieldDescriptor( 393 name='secret_bytes', full_name='wallet.Key.secret_bytes', index=1, 394 number=2, type=12, cpp_type=9, label=1, 395 has_default_value=False, default_value=_b(""), 396 message_type=None, enum_type=None, containing_type=None, 397 is_extension=False, extension_scope=None, 398 options=None), 399 _descriptor.FieldDescriptor( 400 name='encrypted_data', full_name='wallet.Key.encrypted_data', index=2, 401 number=6, type=11, cpp_type=10, label=1, 402 has_default_value=False, default_value=None, 403 message_type=None, enum_type=None, containing_type=None, 404 is_extension=False, extension_scope=None, 405 options=None), 406 _descriptor.FieldDescriptor( 407 name='public_key', full_name='wallet.Key.public_key', index=3, 408 number=3, type=12, cpp_type=9, label=1, 409 has_default_value=False, default_value=_b(""), 410 message_type=None, enum_type=None, containing_type=None, 411 is_extension=False, extension_scope=None, 412 options=None), 413 _descriptor.FieldDescriptor( 414 name='label', full_name='wallet.Key.label', index=4, 415 number=4, type=9, cpp_type=9, label=1, 416 has_default_value=False, default_value=_b("").decode('utf-8'), 417 message_type=None, enum_type=None, containing_type=None, 418 is_extension=False, extension_scope=None, 419 options=None), 420 _descriptor.FieldDescriptor( 421 name='creation_timestamp', full_name='wallet.Key.creation_timestamp', index=5, 422 number=5, type=3, cpp_type=2, label=1, 423 has_default_value=False, default_value=0, 424 message_type=None, enum_type=None, containing_type=None, 425 is_extension=False, extension_scope=None, 426 options=None), 427 _descriptor.FieldDescriptor( 428 name='deterministic_key', full_name='wallet.Key.deterministic_key', index=6, 429 number=7, type=11, cpp_type=10, label=1, 430 has_default_value=False, default_value=None, 431 message_type=None, enum_type=None, containing_type=None, 432 is_extension=False, extension_scope=None, 433 options=None), 434 _descriptor.FieldDescriptor( 435 name='deterministic_seed', full_name='wallet.Key.deterministic_seed', index=7, 436 number=8, type=12, cpp_type=9, label=1, 437 has_default_value=False, default_value=_b(""), 438 message_type=None, enum_type=None, containing_type=None, 439 is_extension=False, extension_scope=None, 440 options=None), 441 _descriptor.FieldDescriptor( 442 name='encrypted_deterministic_seed', full_name='wallet.Key.encrypted_deterministic_seed', index=8, 443 number=9, type=11, cpp_type=10, label=1, 444 has_default_value=False, default_value=None, 445 message_type=None, enum_type=None, containing_type=None, 446 is_extension=False, extension_scope=None, 447 options=None), 448 ], 449 extensions=[ 450 ], 451 nested_types=[], 452 enum_types=[ 453 _KEY_TYPE, 454 ], 455 options=None, 456 is_extendable=False, 457 extension_ranges=[], 458 oneofs=[ 459 ], 460 serialized_start=294, 461 serialized_end=704, 462) 463 464 465_SCRIPT = _descriptor.Descriptor( 466 name='Script', 467 full_name='wallet.Script', 468 filename=None, 469 file=DESCRIPTOR, 470 containing_type=None, 471 fields=[ 472 _descriptor.FieldDescriptor( 473 name='program', full_name='wallet.Script.program', index=0, 474 number=1, type=12, cpp_type=9, label=2, 475 has_default_value=False, default_value=_b(""), 476 message_type=None, enum_type=None, containing_type=None, 477 is_extension=False, extension_scope=None, 478 options=None), 479 _descriptor.FieldDescriptor( 480 name='creation_timestamp', full_name='wallet.Script.creation_timestamp', index=1, 481 number=2, type=3, cpp_type=2, label=2, 482 has_default_value=False, default_value=0, 483 message_type=None, enum_type=None, containing_type=None, 484 is_extension=False, extension_scope=None, 485 options=None), 486 ], 487 extensions=[ 488 ], 489 nested_types=[], 490 enum_types=[ 491 ], 492 options=None, 493 is_extendable=False, 494 extension_ranges=[], 495 oneofs=[ 496 ], 497 serialized_start=706, 498 serialized_end=759, 499) 500 501 502_TRANSACTIONINPUT = _descriptor.Descriptor( 503 name='TransactionInput', 504 full_name='wallet.TransactionInput', 505 filename=None, 506 file=DESCRIPTOR, 507 containing_type=None, 508 fields=[ 509 _descriptor.FieldDescriptor( 510 name='transaction_out_point_hash', full_name='wallet.TransactionInput.transaction_out_point_hash', index=0, 511 number=1, type=12, cpp_type=9, label=2, 512 has_default_value=False, default_value=_b(""), 513 message_type=None, enum_type=None, containing_type=None, 514 is_extension=False, extension_scope=None, 515 options=None), 516 _descriptor.FieldDescriptor( 517 name='transaction_out_point_index', full_name='wallet.TransactionInput.transaction_out_point_index', index=1, 518 number=2, type=13, cpp_type=3, label=2, 519 has_default_value=False, default_value=0, 520 message_type=None, enum_type=None, containing_type=None, 521 is_extension=False, extension_scope=None, 522 options=None), 523 _descriptor.FieldDescriptor( 524 name='script_bytes', full_name='wallet.TransactionInput.script_bytes', index=2, 525 number=3, type=12, cpp_type=9, label=2, 526 has_default_value=False, default_value=_b(""), 527 message_type=None, enum_type=None, containing_type=None, 528 is_extension=False, extension_scope=None, 529 options=None), 530 _descriptor.FieldDescriptor( 531 name='sequence', full_name='wallet.TransactionInput.sequence', index=3, 532 number=4, type=13, cpp_type=3, label=1, 533 has_default_value=False, default_value=0, 534 message_type=None, enum_type=None, containing_type=None, 535 is_extension=False, extension_scope=None, 536 options=None), 537 _descriptor.FieldDescriptor( 538 name='value', full_name='wallet.TransactionInput.value', index=4, 539 number=5, type=3, cpp_type=2, label=1, 540 has_default_value=False, default_value=0, 541 message_type=None, enum_type=None, containing_type=None, 542 is_extension=False, extension_scope=None, 543 options=None), 544 ], 545 extensions=[ 546 ], 547 nested_types=[], 548 enum_types=[ 549 ], 550 options=None, 551 is_extendable=False, 552 extension_ranges=[], 553 oneofs=[ 554 ], 555 serialized_start=762, 556 serialized_end=908, 557) 558 559 560_TRANSACTIONOUTPUT = _descriptor.Descriptor( 561 name='TransactionOutput', 562 full_name='wallet.TransactionOutput', 563 filename=None, 564 file=DESCRIPTOR, 565 containing_type=None, 566 fields=[ 567 _descriptor.FieldDescriptor( 568 name='value', full_name='wallet.TransactionOutput.value', index=0, 569 number=1, type=3, cpp_type=2, label=2, 570 has_default_value=False, default_value=0, 571 message_type=None, enum_type=None, containing_type=None, 572 is_extension=False, extension_scope=None, 573 options=None), 574 _descriptor.FieldDescriptor( 575 name='script_bytes', full_name='wallet.TransactionOutput.script_bytes', index=1, 576 number=2, type=12, cpp_type=9, label=2, 577 has_default_value=False, default_value=_b(""), 578 message_type=None, enum_type=None, containing_type=None, 579 is_extension=False, extension_scope=None, 580 options=None), 581 _descriptor.FieldDescriptor( 582 name='spent_by_transaction_hash', full_name='wallet.TransactionOutput.spent_by_transaction_hash', index=2, 583 number=3, type=12, cpp_type=9, label=1, 584 has_default_value=False, default_value=_b(""), 585 message_type=None, enum_type=None, containing_type=None, 586 is_extension=False, extension_scope=None, 587 options=None), 588 _descriptor.FieldDescriptor( 589 name='spent_by_transaction_index', full_name='wallet.TransactionOutput.spent_by_transaction_index', index=3, 590 number=4, type=5, cpp_type=1, label=1, 591 has_default_value=False, default_value=0, 592 message_type=None, enum_type=None, containing_type=None, 593 is_extension=False, extension_scope=None, 594 options=None), 595 ], 596 extensions=[ 597 ], 598 nested_types=[], 599 enum_types=[ 600 ], 601 options=None, 602 is_extendable=False, 603 extension_ranges=[], 604 oneofs=[ 605 ], 606 serialized_start=910, 607 serialized_end=1037, 608) 609 610 611_TRANSACTIONCONFIDENCE = _descriptor.Descriptor( 612 name='TransactionConfidence', 613 full_name='wallet.TransactionConfidence', 614 filename=None, 615 file=DESCRIPTOR, 616 containing_type=None, 617 fields=[ 618 _descriptor.FieldDescriptor( 619 name='type', full_name='wallet.TransactionConfidence.type', index=0, 620 number=1, type=14, cpp_type=8, label=1, 621 has_default_value=False, default_value=0, 622 message_type=None, enum_type=None, containing_type=None, 623 is_extension=False, extension_scope=None, 624 options=None), 625 _descriptor.FieldDescriptor( 626 name='appeared_at_height', full_name='wallet.TransactionConfidence.appeared_at_height', index=1, 627 number=2, type=5, cpp_type=1, label=1, 628 has_default_value=False, default_value=0, 629 message_type=None, enum_type=None, containing_type=None, 630 is_extension=False, extension_scope=None, 631 options=None), 632 _descriptor.FieldDescriptor( 633 name='overriding_transaction', full_name='wallet.TransactionConfidence.overriding_transaction', index=2, 634 number=3, type=12, cpp_type=9, label=1, 635 has_default_value=False, default_value=_b(""), 636 message_type=None, enum_type=None, containing_type=None, 637 is_extension=False, extension_scope=None, 638 options=None), 639 _descriptor.FieldDescriptor( 640 name='depth', full_name='wallet.TransactionConfidence.depth', index=3, 641 number=4, type=5, cpp_type=1, label=1, 642 has_default_value=False, default_value=0, 643 message_type=None, enum_type=None, containing_type=None, 644 is_extension=False, extension_scope=None, 645 options=None), 646 _descriptor.FieldDescriptor( 647 name='broadcast_by', full_name='wallet.TransactionConfidence.broadcast_by', index=4, 648 number=6, type=11, cpp_type=10, label=3, 649 has_default_value=False, default_value=[], 650 message_type=None, enum_type=None, containing_type=None, 651 is_extension=False, extension_scope=None, 652 options=None), 653 _descriptor.FieldDescriptor( 654 name='source', full_name='wallet.TransactionConfidence.source', index=5, 655 number=7, type=14, cpp_type=8, label=1, 656 has_default_value=False, default_value=0, 657 message_type=None, enum_type=None, containing_type=None, 658 is_extension=False, extension_scope=None, 659 options=None), 660 ], 661 extensions=[ 662 ], 663 nested_types=[], 664 enum_types=[ 665 _TRANSACTIONCONFIDENCE_TYPE, 666 _TRANSACTIONCONFIDENCE_SOURCE, 667 ], 668 options=None, 669 is_extendable=False, 670 extension_ranges=[], 671 oneofs=[ 672 ], 673 serialized_start=1040, 674 serialized_end=1433, 675) 676 677 678_TRANSACTION = _descriptor.Descriptor( 679 name='Transaction', 680 full_name='wallet.Transaction', 681 filename=None, 682 file=DESCRIPTOR, 683 containing_type=None, 684 fields=[ 685 _descriptor.FieldDescriptor( 686 name='version', full_name='wallet.Transaction.version', index=0, 687 number=1, type=5, cpp_type=1, label=2, 688 has_default_value=False, default_value=0, 689 message_type=None, enum_type=None, containing_type=None, 690 is_extension=False, extension_scope=None, 691 options=None), 692 _descriptor.FieldDescriptor( 693 name='hash', full_name='wallet.Transaction.hash', index=1, 694 number=2, type=12, cpp_type=9, label=2, 695 has_default_value=False, default_value=_b(""), 696 message_type=None, enum_type=None, containing_type=None, 697 is_extension=False, extension_scope=None, 698 options=None), 699 _descriptor.FieldDescriptor( 700 name='pool', full_name='wallet.Transaction.pool', index=2, 701 number=3, type=14, cpp_type=8, label=1, 702 has_default_value=False, default_value=4, 703 message_type=None, enum_type=None, containing_type=None, 704 is_extension=False, extension_scope=None, 705 options=None), 706 _descriptor.FieldDescriptor( 707 name='lock_time', full_name='wallet.Transaction.lock_time', index=3, 708 number=4, type=13, cpp_type=3, label=1, 709 has_default_value=False, default_value=0, 710 message_type=None, enum_type=None, containing_type=None, 711 is_extension=False, extension_scope=None, 712 options=None), 713 _descriptor.FieldDescriptor( 714 name='updated_at', full_name='wallet.Transaction.updated_at', index=4, 715 number=5, type=3, cpp_type=2, label=1, 716 has_default_value=False, default_value=0, 717 message_type=None, enum_type=None, containing_type=None, 718 is_extension=False, extension_scope=None, 719 options=None), 720 _descriptor.FieldDescriptor( 721 name='transaction_input', full_name='wallet.Transaction.transaction_input', index=5, 722 number=6, type=11, cpp_type=10, label=3, 723 has_default_value=False, default_value=[], 724 message_type=None, enum_type=None, containing_type=None, 725 is_extension=False, extension_scope=None, 726 options=None), 727 _descriptor.FieldDescriptor( 728 name='transaction_output', full_name='wallet.Transaction.transaction_output', index=6, 729 number=7, type=11, cpp_type=10, label=3, 730 has_default_value=False, default_value=[], 731 message_type=None, enum_type=None, containing_type=None, 732 is_extension=False, extension_scope=None, 733 options=None), 734 _descriptor.FieldDescriptor( 735 name='block_hash', full_name='wallet.Transaction.block_hash', index=7, 736 number=8, type=12, cpp_type=9, label=3, 737 has_default_value=False, default_value=[], 738 message_type=None, enum_type=None, containing_type=None, 739 is_extension=False, extension_scope=None, 740 options=None), 741 _descriptor.FieldDescriptor( 742 name='block_relativity_offsets', full_name='wallet.Transaction.block_relativity_offsets', index=8, 743 number=11, type=5, cpp_type=1, label=3, 744 has_default_value=False, default_value=[], 745 message_type=None, enum_type=None, containing_type=None, 746 is_extension=False, extension_scope=None, 747 options=None), 748 _descriptor.FieldDescriptor( 749 name='confidence', full_name='wallet.Transaction.confidence', index=9, 750 number=9, type=11, cpp_type=10, label=1, 751 has_default_value=False, default_value=None, 752 message_type=None, enum_type=None, containing_type=None, 753 is_extension=False, extension_scope=None, 754 options=None), 755 _descriptor.FieldDescriptor( 756 name='purpose', full_name='wallet.Transaction.purpose', index=10, 757 number=10, type=14, cpp_type=8, label=1, 758 has_default_value=True, default_value=0, 759 message_type=None, enum_type=None, containing_type=None, 760 is_extension=False, extension_scope=None, 761 options=None), 762 _descriptor.FieldDescriptor( 763 name='exchange_rate', full_name='wallet.Transaction.exchange_rate', index=11, 764 number=12, type=11, cpp_type=10, label=1, 765 has_default_value=False, default_value=None, 766 message_type=None, enum_type=None, containing_type=None, 767 is_extension=False, extension_scope=None, 768 options=None), 769 _descriptor.FieldDescriptor( 770 name='memo', full_name='wallet.Transaction.memo', index=12, 771 number=13, type=9, cpp_type=9, label=1, 772 has_default_value=False, default_value=_b("").decode('utf-8'), 773 message_type=None, enum_type=None, containing_type=None, 774 is_extension=False, extension_scope=None, 775 options=None), 776 ], 777 extensions=[ 778 ], 779 nested_types=[], 780 enum_types=[ 781 _TRANSACTION_POOL, 782 _TRANSACTION_PURPOSE, 783 ], 784 options=None, 785 is_extendable=False, 786 extension_ranges=[], 787 oneofs=[ 788 ], 789 serialized_start=1436, 790 serialized_end=2128, 791) 792 793 794_SCRYPTPARAMETERS = _descriptor.Descriptor( 795 name='ScryptParameters', 796 full_name='wallet.ScryptParameters', 797 filename=None, 798 file=DESCRIPTOR, 799 containing_type=None, 800 fields=[ 801 _descriptor.FieldDescriptor( 802 name='salt', full_name='wallet.ScryptParameters.salt', index=0, 803 number=1, type=12, cpp_type=9, label=2, 804 has_default_value=False, default_value=_b(""), 805 message_type=None, enum_type=None, containing_type=None, 806 is_extension=False, extension_scope=None, 807 options=None), 808 _descriptor.FieldDescriptor( 809 name='n', full_name='wallet.ScryptParameters.n', index=1, 810 number=2, type=3, cpp_type=2, label=1, 811 has_default_value=True, default_value=16384, 812 message_type=None, enum_type=None, containing_type=None, 813 is_extension=False, extension_scope=None, 814 options=None), 815 _descriptor.FieldDescriptor( 816 name='r', full_name='wallet.ScryptParameters.r', index=2, 817 number=3, type=5, cpp_type=1, label=1, 818 has_default_value=True, default_value=8, 819 message_type=None, enum_type=None, containing_type=None, 820 is_extension=False, extension_scope=None, 821 options=None), 822 _descriptor.FieldDescriptor( 823 name='p', full_name='wallet.ScryptParameters.p', index=3, 824 number=4, type=5, cpp_type=1, label=1, 825 has_default_value=True, default_value=1, 826 message_type=None, enum_type=None, containing_type=None, 827 is_extension=False, extension_scope=None, 828 options=None), 829 ], 830 extensions=[ 831 ], 832 nested_types=[], 833 enum_types=[ 834 ], 835 options=None, 836 is_extendable=False, 837 extension_ranges=[], 838 oneofs=[ 839 ], 840 serialized_start=2130, 841 serialized_end=2208, 842) 843 844 845_EXTENSION = _descriptor.Descriptor( 846 name='Extension', 847 full_name='wallet.Extension', 848 filename=None, 849 file=DESCRIPTOR, 850 containing_type=None, 851 fields=[ 852 _descriptor.FieldDescriptor( 853 name='id', full_name='wallet.Extension.id', index=0, 854 number=1, type=9, cpp_type=9, label=2, 855 has_default_value=False, default_value=_b("").decode('utf-8'), 856 message_type=None, enum_type=None, containing_type=None, 857 is_extension=False, extension_scope=None, 858 options=None), 859 _descriptor.FieldDescriptor( 860 name='data', full_name='wallet.Extension.data', index=1, 861 number=2, type=12, cpp_type=9, label=2, 862 has_default_value=False, default_value=_b(""), 863 message_type=None, enum_type=None, containing_type=None, 864 is_extension=False, extension_scope=None, 865 options=None), 866 _descriptor.FieldDescriptor( 867 name='mandatory', full_name='wallet.Extension.mandatory', index=2, 868 number=3, type=8, cpp_type=7, label=2, 869 has_default_value=False, default_value=False, 870 message_type=None, enum_type=None, containing_type=None, 871 is_extension=False, extension_scope=None, 872 options=None), 873 ], 874 extensions=[ 875 ], 876 nested_types=[], 877 enum_types=[ 878 ], 879 options=None, 880 is_extendable=False, 881 extension_ranges=[], 882 oneofs=[ 883 ], 884 serialized_start=2210, 885 serialized_end=2266, 886) 887 888 889_TAG = _descriptor.Descriptor( 890 name='Tag', 891 full_name='wallet.Tag', 892 filename=None, 893 file=DESCRIPTOR, 894 containing_type=None, 895 fields=[ 896 _descriptor.FieldDescriptor( 897 name='tag', full_name='wallet.Tag.tag', index=0, 898 number=1, type=9, cpp_type=9, label=2, 899 has_default_value=False, default_value=_b("").decode('utf-8'), 900 message_type=None, enum_type=None, containing_type=None, 901 is_extension=False, extension_scope=None, 902 options=None), 903 _descriptor.FieldDescriptor( 904 name='data', full_name='wallet.Tag.data', index=1, 905 number=2, type=12, cpp_type=9, label=2, 906 has_default_value=False, default_value=_b(""), 907 message_type=None, enum_type=None, containing_type=None, 908 is_extension=False, extension_scope=None, 909 options=None), 910 ], 911 extensions=[ 912 ], 913 nested_types=[], 914 enum_types=[ 915 ], 916 options=None, 917 is_extendable=False, 918 extension_ranges=[], 919 oneofs=[ 920 ], 921 serialized_start=2268, 922 serialized_end=2300, 923) 924 925 926_TRANSACTIONSIGNER = _descriptor.Descriptor( 927 name='TransactionSigner', 928 full_name='wallet.TransactionSigner', 929 filename=None, 930 file=DESCRIPTOR, 931 containing_type=None, 932 fields=[ 933 _descriptor.FieldDescriptor( 934 name='class_name', full_name='wallet.TransactionSigner.class_name', index=0, 935 number=1, type=9, cpp_type=9, label=2, 936 has_default_value=False, default_value=_b("").decode('utf-8'), 937 message_type=None, enum_type=None, containing_type=None, 938 is_extension=False, extension_scope=None, 939 options=None), 940 _descriptor.FieldDescriptor( 941 name='data', full_name='wallet.TransactionSigner.data', index=1, 942 number=2, type=12, cpp_type=9, label=1, 943 has_default_value=False, default_value=_b(""), 944 message_type=None, enum_type=None, containing_type=None, 945 is_extension=False, extension_scope=None, 946 options=None), 947 ], 948 extensions=[ 949 ], 950 nested_types=[], 951 enum_types=[ 952 ], 953 options=None, 954 is_extendable=False, 955 extension_ranges=[], 956 oneofs=[ 957 ], 958 serialized_start=2302, 959 serialized_end=2355, 960) 961 962 963_WALLET = _descriptor.Descriptor( 964 name='Wallet', 965 full_name='wallet.Wallet', 966 filename=None, 967 file=DESCRIPTOR, 968 containing_type=None, 969 fields=[ 970 _descriptor.FieldDescriptor( 971 name='network_identifier', full_name='wallet.Wallet.network_identifier', index=0, 972 number=1, type=9, cpp_type=9, label=2, 973 has_default_value=False, default_value=_b("").decode('utf-8'), 974 message_type=None, enum_type=None, containing_type=None, 975 is_extension=False, extension_scope=None, 976 options=None), 977 _descriptor.FieldDescriptor( 978 name='last_seen_block_hash', full_name='wallet.Wallet.last_seen_block_hash', index=1, 979 number=2, type=12, cpp_type=9, label=1, 980 has_default_value=False, default_value=_b(""), 981 message_type=None, enum_type=None, containing_type=None, 982 is_extension=False, extension_scope=None, 983 options=None), 984 _descriptor.FieldDescriptor( 985 name='last_seen_block_height', full_name='wallet.Wallet.last_seen_block_height', index=2, 986 number=12, type=13, cpp_type=3, label=1, 987 has_default_value=False, default_value=0, 988 message_type=None, enum_type=None, containing_type=None, 989 is_extension=False, extension_scope=None, 990 options=None), 991 _descriptor.FieldDescriptor( 992 name='last_seen_block_time_secs', full_name='wallet.Wallet.last_seen_block_time_secs', index=3, 993 number=14, type=3, cpp_type=2, label=1, 994 has_default_value=False, default_value=0, 995 message_type=None, enum_type=None, containing_type=None, 996 is_extension=False, extension_scope=None, 997 options=None), 998 _descriptor.FieldDescriptor( 999 name='key', full_name='wallet.Wallet.key', index=4, 1000 number=3, type=11, cpp_type=10, label=3, 1001 has_default_value=False, default_value=[], 1002 message_type=None, enum_type=None, containing_type=None, 1003 is_extension=False, extension_scope=None, 1004 options=None), 1005 _descriptor.FieldDescriptor( 1006 name='transaction', full_name='wallet.Wallet.transaction', index=5, 1007 number=4, type=11, cpp_type=10, label=3, 1008 has_default_value=False, default_value=[], 1009 message_type=None, enum_type=None, containing_type=None, 1010 is_extension=False, extension_scope=None, 1011 options=None), 1012 _descriptor.FieldDescriptor( 1013 name='watched_script', full_name='wallet.Wallet.watched_script', index=6, 1014 number=15, type=11, cpp_type=10, label=3, 1015 has_default_value=False, default_value=[], 1016 message_type=None, enum_type=None, containing_type=None, 1017 is_extension=False, extension_scope=None, 1018 options=None), 1019 _descriptor.FieldDescriptor( 1020 name='encryption_type', full_name='wallet.Wallet.encryption_type', index=7, 1021 number=5, type=14, cpp_type=8, label=1, 1022 has_default_value=True, default_value=1, 1023 message_type=None, enum_type=None, containing_type=None, 1024 is_extension=False, extension_scope=None, 1025 options=None), 1026 _descriptor.FieldDescriptor( 1027 name='encryption_parameters', full_name='wallet.Wallet.encryption_parameters', index=8, 1028 number=6, type=11, cpp_type=10, label=1, 1029 has_default_value=False, default_value=None, 1030 message_type=None, enum_type=None, containing_type=None, 1031 is_extension=False, extension_scope=None, 1032 options=None), 1033 _descriptor.FieldDescriptor( 1034 name='version', full_name='wallet.Wallet.version', index=9, 1035 number=7, type=5, cpp_type=1, label=1, 1036 has_default_value=True, default_value=1, 1037 message_type=None, enum_type=None, containing_type=None, 1038 is_extension=False, extension_scope=None, 1039 options=None), 1040 _descriptor.FieldDescriptor( 1041 name='extension', full_name='wallet.Wallet.extension', index=10, 1042 number=10, type=11, cpp_type=10, label=3, 1043 has_default_value=False, default_value=[], 1044 message_type=None, enum_type=None, containing_type=None, 1045 is_extension=False, extension_scope=None, 1046 options=None), 1047 _descriptor.FieldDescriptor( 1048 name='description', full_name='wallet.Wallet.description', index=11, 1049 number=11, type=9, cpp_type=9, label=1, 1050 has_default_value=False, default_value=_b("").decode('utf-8'), 1051 message_type=None, enum_type=None, containing_type=None, 1052 is_extension=False, extension_scope=None, 1053 options=None), 1054 _descriptor.FieldDescriptor( 1055 name='key_rotation_time', full_name='wallet.Wallet.key_rotation_time', index=12, 1056 number=13, type=4, cpp_type=4, label=1, 1057 has_default_value=False, default_value=0, 1058 message_type=None, enum_type=None, containing_type=None, 1059 is_extension=False, extension_scope=None, 1060 options=None), 1061 _descriptor.FieldDescriptor( 1062 name='tags', full_name='wallet.Wallet.tags', index=13, 1063 number=16, type=11, cpp_type=10, label=3, 1064 has_default_value=False, default_value=[], 1065 message_type=None, enum_type=None, containing_type=None, 1066 is_extension=False, extension_scope=None, 1067 options=None), 1068 _descriptor.FieldDescriptor( 1069 name='transaction_signers', full_name='wallet.Wallet.transaction_signers', index=14, 1070 number=17, type=11, cpp_type=10, label=3, 1071 has_default_value=False, default_value=[], 1072 message_type=None, enum_type=None, containing_type=None, 1073 is_extension=False, extension_scope=None, 1074 options=None), 1075 _descriptor.FieldDescriptor( 1076 name='sigsRequiredToSpend', full_name='wallet.Wallet.sigsRequiredToSpend', index=15, 1077 number=18, type=13, cpp_type=3, label=1, 1078 has_default_value=True, default_value=1, 1079 message_type=None, enum_type=None, containing_type=None, 1080 is_extension=False, extension_scope=None, 1081 options=None), 1082 ], 1083 extensions=[ 1084 ], 1085 nested_types=[], 1086 enum_types=[ 1087 _WALLET_ENCRYPTIONTYPE, 1088 ], 1089 options=None, 1090 is_extendable=False, 1091 extension_ranges=[], 1092 oneofs=[ 1093 ], 1094 serialized_start=2358, 1095 serialized_end=3007, 1096) 1097 1098 1099_EXCHANGERATE = _descriptor.Descriptor( 1100 name='ExchangeRate', 1101 full_name='wallet.ExchangeRate', 1102 filename=None, 1103 file=DESCRIPTOR, 1104 containing_type=None, 1105 fields=[ 1106 _descriptor.FieldDescriptor( 1107 name='coin_value', full_name='wallet.ExchangeRate.coin_value', index=0, 1108 number=1, type=3, cpp_type=2, label=2, 1109 has_default_value=False, default_value=0, 1110 message_type=None, enum_type=None, containing_type=None, 1111 is_extension=False, extension_scope=None, 1112 options=None), 1113 _descriptor.FieldDescriptor( 1114 name='fiat_value', full_name='wallet.ExchangeRate.fiat_value', index=1, 1115 number=2, type=3, cpp_type=2, label=2, 1116 has_default_value=False, default_value=0, 1117 message_type=None, enum_type=None, containing_type=None, 1118 is_extension=False, extension_scope=None, 1119 options=None), 1120 _descriptor.FieldDescriptor( 1121 name='fiat_currency_code', full_name='wallet.ExchangeRate.fiat_currency_code', index=2, 1122 number=3, type=9, cpp_type=9, label=2, 1123 has_default_value=False, default_value=_b("").decode('utf-8'), 1124 message_type=None, enum_type=None, containing_type=None, 1125 is_extension=False, extension_scope=None, 1126 options=None), 1127 ], 1128 extensions=[ 1129 ], 1130 nested_types=[], 1131 enum_types=[ 1132 ], 1133 options=None, 1134 is_extendable=False, 1135 extension_ranges=[], 1136 oneofs=[ 1137 ], 1138 serialized_start=3009, 1139 serialized_end=3091, 1140) 1141 1142_KEY.fields_by_name['type'].enum_type = _KEY_TYPE 1143_KEY.fields_by_name['encrypted_data'].message_type = _ENCRYPTEDDATA 1144_KEY.fields_by_name['deterministic_key'].message_type = _DETERMINISTICKEY 1145_KEY.fields_by_name['encrypted_deterministic_seed'].message_type = _ENCRYPTEDDATA 1146_KEY_TYPE.containing_type = _KEY 1147_TRANSACTIONCONFIDENCE.fields_by_name['type'].enum_type = _TRANSACTIONCONFIDENCE_TYPE 1148_TRANSACTIONCONFIDENCE.fields_by_name['broadcast_by'].message_type = _PEERADDRESS 1149_TRANSACTIONCONFIDENCE.fields_by_name['source'].enum_type = _TRANSACTIONCONFIDENCE_SOURCE 1150_TRANSACTIONCONFIDENCE_TYPE.containing_type = _TRANSACTIONCONFIDENCE 1151_TRANSACTIONCONFIDENCE_SOURCE.containing_type = _TRANSACTIONCONFIDENCE 1152_TRANSACTION.fields_by_name['pool'].enum_type = _TRANSACTION_POOL 1153_TRANSACTION.fields_by_name['transaction_input'].message_type = _TRANSACTIONINPUT 1154_TRANSACTION.fields_by_name['transaction_output'].message_type = _TRANSACTIONOUTPUT 1155_TRANSACTION.fields_by_name['confidence'].message_type = _TRANSACTIONCONFIDENCE 1156_TRANSACTION.fields_by_name['purpose'].enum_type = _TRANSACTION_PURPOSE 1157_TRANSACTION.fields_by_name['exchange_rate'].message_type = _EXCHANGERATE 1158_TRANSACTION_POOL.containing_type = _TRANSACTION 1159_TRANSACTION_PURPOSE.containing_type = _TRANSACTION 1160_WALLET.fields_by_name['key'].message_type = _KEY 1161_WALLET.fields_by_name['transaction'].message_type = _TRANSACTION 1162_WALLET.fields_by_name['watched_script'].message_type = _SCRIPT 1163_WALLET.fields_by_name['encryption_type'].enum_type = _WALLET_ENCRYPTIONTYPE 1164_WALLET.fields_by_name['encryption_parameters'].message_type = _SCRYPTPARAMETERS 1165_WALLET.fields_by_name['extension'].message_type = _EXTENSION 1166_WALLET.fields_by_name['tags'].message_type = _TAG 1167_WALLET.fields_by_name['transaction_signers'].message_type = _TRANSACTIONSIGNER 1168_WALLET_ENCRYPTIONTYPE.containing_type = _WALLET 1169DESCRIPTOR.message_types_by_name['PeerAddress'] = _PEERADDRESS 1170DESCRIPTOR.message_types_by_name['EncryptedData'] = _ENCRYPTEDDATA 1171DESCRIPTOR.message_types_by_name['DeterministicKey'] = _DETERMINISTICKEY 1172DESCRIPTOR.message_types_by_name['Key'] = _KEY 1173DESCRIPTOR.message_types_by_name['Script'] = _SCRIPT 1174DESCRIPTOR.message_types_by_name['TransactionInput'] = _TRANSACTIONINPUT 1175DESCRIPTOR.message_types_by_name['TransactionOutput'] = _TRANSACTIONOUTPUT 1176DESCRIPTOR.message_types_by_name['TransactionConfidence'] = _TRANSACTIONCONFIDENCE 1177DESCRIPTOR.message_types_by_name['Transaction'] = _TRANSACTION 1178DESCRIPTOR.message_types_by_name['ScryptParameters'] = _SCRYPTPARAMETERS 1179DESCRIPTOR.message_types_by_name['Extension'] = _EXTENSION 1180DESCRIPTOR.message_types_by_name['Tag'] = _TAG 1181DESCRIPTOR.message_types_by_name['TransactionSigner'] = _TRANSACTIONSIGNER 1182DESCRIPTOR.message_types_by_name['Wallet'] = _WALLET 1183DESCRIPTOR.message_types_by_name['ExchangeRate'] = _EXCHANGERATE 1184 1185PeerAddress = _reflection.GeneratedProtocolMessageType('PeerAddress', (_message.Message,), dict( 1186 DESCRIPTOR = _PEERADDRESS, 1187 __module__ = 'wallet_pb2' 1188 # @@protoc_insertion_point(class_scope:wallet.PeerAddress) 1189 )) 1190_sym_db.RegisterMessage(PeerAddress) 1191 1192EncryptedData = _reflection.GeneratedProtocolMessageType('EncryptedData', (_message.Message,), dict( 1193 DESCRIPTOR = _ENCRYPTEDDATA, 1194 __module__ = 'wallet_pb2' 1195 # @@protoc_insertion_point(class_scope:wallet.EncryptedData) 1196 )) 1197_sym_db.RegisterMessage(EncryptedData) 1198 1199DeterministicKey = _reflection.GeneratedProtocolMessageType('DeterministicKey', (_message.Message,), dict( 1200 DESCRIPTOR = _DETERMINISTICKEY, 1201 __module__ = 'wallet_pb2' 1202 # @@protoc_insertion_point(class_scope:wallet.DeterministicKey) 1203 )) 1204_sym_db.RegisterMessage(DeterministicKey) 1205 1206Key = _reflection.GeneratedProtocolMessageType('Key', (_message.Message,), dict( 1207 DESCRIPTOR = _KEY, 1208 __module__ = 'wallet_pb2' 1209 # @@protoc_insertion_point(class_scope:wallet.Key) 1210 )) 1211_sym_db.RegisterMessage(Key) 1212 1213Script = _reflection.GeneratedProtocolMessageType('Script', (_message.Message,), dict( 1214 DESCRIPTOR = _SCRIPT, 1215 __module__ = 'wallet_pb2' 1216 # @@protoc_insertion_point(class_scope:wallet.Script) 1217 )) 1218_sym_db.RegisterMessage(Script) 1219 1220TransactionInput = _reflection.GeneratedProtocolMessageType('TransactionInput', (_message.Message,), dict( 1221 DESCRIPTOR = _TRANSACTIONINPUT, 1222 __module__ = 'wallet_pb2' 1223 # @@protoc_insertion_point(class_scope:wallet.TransactionInput) 1224 )) 1225_sym_db.RegisterMessage(TransactionInput) 1226 1227TransactionOutput = _reflection.GeneratedProtocolMessageType('TransactionOutput', (_message.Message,), dict( 1228 DESCRIPTOR = _TRANSACTIONOUTPUT, 1229 __module__ = 'wallet_pb2' 1230 # @@protoc_insertion_point(class_scope:wallet.TransactionOutput) 1231 )) 1232_sym_db.RegisterMessage(TransactionOutput) 1233 1234TransactionConfidence = _reflection.GeneratedProtocolMessageType('TransactionConfidence', (_message.Message,), dict( 1235 DESCRIPTOR = _TRANSACTIONCONFIDENCE, 1236 __module__ = 'wallet_pb2' 1237 # @@protoc_insertion_point(class_scope:wallet.TransactionConfidence) 1238 )) 1239_sym_db.RegisterMessage(TransactionConfidence) 1240 1241Transaction = _reflection.GeneratedProtocolMessageType('Transaction', (_message.Message,), dict( 1242 DESCRIPTOR = _TRANSACTION, 1243 __module__ = 'wallet_pb2' 1244 # @@protoc_insertion_point(class_scope:wallet.Transaction) 1245 )) 1246_sym_db.RegisterMessage(Transaction) 1247 1248ScryptParameters = _reflection.GeneratedProtocolMessageType('ScryptParameters', (_message.Message,), dict( 1249 DESCRIPTOR = _SCRYPTPARAMETERS, 1250 __module__ = 'wallet_pb2' 1251 # @@protoc_insertion_point(class_scope:wallet.ScryptParameters) 1252 )) 1253_sym_db.RegisterMessage(ScryptParameters) 1254 1255Extension = _reflection.GeneratedProtocolMessageType('Extension', (_message.Message,), dict( 1256 DESCRIPTOR = _EXTENSION, 1257 __module__ = 'wallet_pb2' 1258 # @@protoc_insertion_point(class_scope:wallet.Extension) 1259 )) 1260_sym_db.RegisterMessage(Extension) 1261 1262Tag = _reflection.GeneratedProtocolMessageType('Tag', (_message.Message,), dict( 1263 DESCRIPTOR = _TAG, 1264 __module__ = 'wallet_pb2' 1265 # @@protoc_insertion_point(class_scope:wallet.Tag) 1266 )) 1267_sym_db.RegisterMessage(Tag) 1268 1269TransactionSigner = _reflection.GeneratedProtocolMessageType('TransactionSigner', (_message.Message,), dict( 1270 DESCRIPTOR = _TRANSACTIONSIGNER, 1271 __module__ = 'wallet_pb2' 1272 # @@protoc_insertion_point(class_scope:wallet.TransactionSigner) 1273 )) 1274_sym_db.RegisterMessage(TransactionSigner) 1275 1276Wallet = _reflection.GeneratedProtocolMessageType('Wallet', (_message.Message,), dict( 1277 DESCRIPTOR = _WALLET, 1278 __module__ = 'wallet_pb2' 1279 # @@protoc_insertion_point(class_scope:wallet.Wallet) 1280 )) 1281_sym_db.RegisterMessage(Wallet) 1282 1283ExchangeRate = _reflection.GeneratedProtocolMessageType('ExchangeRate', (_message.Message,), dict( 1284 DESCRIPTOR = _EXCHANGERATE, 1285 __module__ = 'wallet_pb2' 1286 # @@protoc_insertion_point(class_scope:wallet.ExchangeRate) 1287 )) 1288_sym_db.RegisterMessage(ExchangeRate) 1289 1290 1291DESCRIPTOR.has_options = True 1292DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\023org.bitcoinj.walletB\006Protos')) 1293# @@protoc_insertion_point(module_scope) 1294 1295# End of automatically generated code. 1296 1297 1298def process_file(filename): 1299 bname = os.path.basename(filename) 1300 try: 1301 f = open(filename, "rb") 1302 data = f.read() 1303 except IOError: 1304 e = sys.exc_info()[1] 1305 sys.stderr.write("%s\n" % str(e)) 1306 return 1307 1308 if "wallet" in bname or b"org.bitcoin.production" in data: 1309 sys.stderr.write("[WARNING] Cracking .wallet files is a very slow process, try cracking the associated .key file instead!\n") 1310 version = 3 # MultiBit Classic .wallet file 1311 # def is_wallet_file(wallet_file) from btcrecover 1312 wallet_file = open(filename, "rb") 1313 wallet_file.seek(0) 1314 is_valid_bitcoinj_wallet = False 1315 if wallet_file.read(1) == b"\x0a": # protobuf field number 1 of type length-delimited 1316 network_identifier_len = ord(wallet_file.read(1)) 1317 if 1 <= network_identifier_len < 128: 1318 wallet_file.seek(2 + network_identifier_len) 1319 c = wallet_file.read(1) 1320 if c and c in b"\x12\x1a": # field number 2 or 3 of type length-delimited 1321 is_valid_bitcoinj_wallet = True 1322 if is_valid_bitcoinj_wallet: 1323 pb_wallet = Wallet() 1324 pb_wallet.ParseFromString(data) 1325 if pb_wallet.encryption_type == Wallet.UNENCRYPTED: 1326 raise ValueError("bitcoinj wallet is not encrypted") 1327 if pb_wallet.encryption_type != Wallet.ENCRYPTED_SCRYPT_AES: 1328 raise NotImplementedError("Unsupported bitcoinj encryption type "+unicode(pb_wallet.encryption_type)) 1329 if not pb_wallet.HasField("encryption_parameters"): 1330 raise ValueError("bitcoinj wallet is missing its scrypt encryption parameters") 1331 for key in pb_wallet.key: 1332 if key.type in (Key.ENCRYPTED_SCRYPT_AES, Key.DETERMINISTIC_KEY) and key.HasField("encrypted_data"): 1333 encrypted_len = len(key.encrypted_data.encrypted_private_key) 1334 if encrypted_len == 48: 1335 # only need the final 2 encrypted blocks (half of it padding) plus the scrypt parameters 1336 part_encrypted_key = key.encrypted_data.encrypted_private_key[-32:] 1337 salt = pb_wallet.encryption_parameters.salt 1338 n = pb_wallet.encryption_parameters.n 1339 r = pb_wallet.encryption_parameters.r 1340 p = pb_wallet.encryption_parameters.p 1341 encrypted_data = binascii.hexlify(part_encrypted_key).decode("ascii") 1342 salt = binascii.hexlify(salt).decode("ascii") 1343 sys.stdout.write("%s:$multibit$%d*%s*%s*%s*%s*%s\n" % (bname, version, n, r, p, salt, encrypted_data)) 1344 return 1345 return 1346 1347 version = 1 # MultiBit Classic 1348 pdata = b"".join(data.split()) 1349 if len(pdata) < 64: 1350 sys.stderr.write("%s: Short length for a MultiBit wallet file!\n" % bname) 1351 return 1352 1353 try: 1354 pdata = base64.b64decode(pdata[:64]) 1355 if not pdata.startswith("Salted__"): 1356 version = 2 1357 if len(pdata) < 48: 1358 # sys.stderr.write("%s: Short length for a MultiBit wallet file!\n" % bname) 1359 # return 1360 version = 2 # MultiBit HD possibly? 1361 except: 1362 version = 2 # MultiBit HD possibly? 1363 1364 if version == 1: 1365 encrypted_data = pdata[16:48] # two AES blocks 1366 salt = pdata[8:16] 1367 encrypted_data = binascii.hexlify(encrypted_data).decode("ascii") 1368 salt = binascii.hexlify(salt).decode("ascii") 1369 sys.stdout.write("%s:$multibit$%d*%s*%s\n" % (bname, version, salt, encrypted_data)) 1370 return 1371 else: 1372 version = 2 1373 # sanity check but not a very good one 1374 if "wallet" not in bname and "aes" not in bname: 1375 sys.stderr.write("%s: Make sure that this is a MultiBit HD wallet!\n" % bname) 1376 # two possibilities 1377 iv = data[:16] # v0.5.0+ 1378 block_iv = data[16:32] # v0.5.0+ 1379 block_noiv = data[:16] # encrypted using hardcoded iv, < v0.5.0 1380 iv = binascii.hexlify(iv).decode("ascii") 1381 block_iv = binascii.hexlify(block_iv).decode("ascii") 1382 block_noiv = binascii.hexlify(block_noiv).decode("ascii") 1383 sys.stdout.write("%s:$multibit$%d*%s*%s*%s\n" % (bname, version, iv, block_iv, block_noiv)) 1384 return 1385 1386 f.close() 1387 1388if __name__ == "__main__": 1389 if len(sys.argv) < 2: 1390 sys.stderr.write("Usage: %s [MultiBit Classic or HD wallets files (.key, mbhd.wallet.aes, .wallet)]\n" % sys.argv[0]) 1391 sys.stderr.write("\nMultiBit Classic -> for a wallet named 'xyz', we need the xyz-data/key-backup/xyz*.key OR xyz-data/wallet-backup/xyz*.wallet file\n") 1392 sys.exit(-1) 1393 1394 for j in range(1, len(sys.argv)): 1395 process_file(sys.argv[j]) 1396