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