def main(): parser = argparse.ArgumentParser( description='Generate CSV table with brain key, pub key and private key' ) parser.add_argument('--number', type=int, help='Number of brain keys to generate') parser.add_argument('--filename', type=str, help='filename to store CSV file in') parser.set_defaults(number=10) args = parser.parse_args() t = PrettyTable(["wif", "pub", "brainkey"]) for i in range(0, args.number): b = BrainKey() t.add_row([b.get_private(), b.get_private().pubkey, b.get_brainkey()]) print(t.get_string()) if args.filename: with open(args.filename, 'w') as csvfile: spamwriter = csv.writer(csvfile, delimiter=' ; ') spamwriter.writerow(t.field_names) for r in t._rows: spamwriter.writerow(r)
def test_BrainKey(self): b = BrainKey("COLORER BICORN KASBEKE FAERIE LOCHIA GOMUTI SOVKHOZ Y GERMAL AUNTIE PERFUMY TIME FEATURE GANGAN CELEMIN MATZO") keys = ["5Hsbn6kXio4bb7eW5bX7kTp2sdkmbzP8kGWoau46Cf7en7T1RRE", "5K9MHEyiSye5iFL2srZu3ZVjzAZjcQxUgUvuttcVrymovFbU4cc", "5JBXhzDWQdYPAzRxxuGtzqM7ULLKPK7GZmktHTyF9foGGfbtDLT", "5Kbbfbs6DmJFNddWiP1XZfDKwhm5dkn9KX5AENQfQke2RYBBDcz", "5JUqLwgxn8f7myNz4gDwo5e77HZgopHMDHv4icNVww9Rxu1GDG5", "5JNBVj5QVh86N8MUUwY3EVUmsZwChZftxnuJx22DzEtHWC4rmvK", "5JdvczYtxPPjQdXMki1tpNvuSbvPMxJG5y4ndEAuQsC5RYMQXuC", "5HsUSesU2YB4EA3dmpGtHh8aPAwEdkdhidG8hcU2Nd2tETKk85t", "5JpveiQd1mt91APyQwvsCdAXWJ7uag3JmhtSxpGienic8vv1k2W", "5KDGhQUqQmwcGQ9tegimSyyT4vmH8h2fMzoNe1MT9bEGvRvR6kD"] for i in keys: p = b.next_sequence().get_private() self.assertEqual(str(p), i)
def test_BrainKey_sequences(self): b = BrainKey("COLORER BICORN KASBEKE FAERIE LOCHIA GOMUTI SOVKHOZ Y GERMAL AUNTIE PERFUMY TIME FEATURE GANGAN CELEMIN MATZO") keys = ["5Hsbn6kXio4bb7eW5bX7kTp2sdkmbzP8kGWoau46Cf7en7T1RRE", "5K9MHEyiSye5iFL2srZu3ZVjzAZjcQxUgUvuttcVrymovFbU4cc", "5JBXhzDWQdYPAzRxxuGtzqM7ULLKPK7GZmktHTyF9foGGfbtDLT", "5Kbbfbs6DmJFNddWiP1XZfDKwhm5dkn9KX5AENQfQke2RYBBDcz", "5JUqLwgxn8f7myNz4gDwo5e77HZgopHMDHv4icNVww9Rxu1GDG5", "5JNBVj5QVh86N8MUUwY3EVUmsZwChZftxnuJx22DzEtHWC4rmvK", "5JdvczYtxPPjQdXMki1tpNvuSbvPMxJG5y4ndEAuQsC5RYMQXuC", "5HsUSesU2YB4EA3dmpGtHh8aPAwEdkdhidG8hcU2Nd2tETKk85t", "5JpveiQd1mt91APyQwvsCdAXWJ7uag3JmhtSxpGienic8vv1k2W", "5KDGhQUqQmwcGQ9tegimSyyT4vmH8h2fMzoNe1MT9bEGvRvR6kD"] for i in keys: p = b.next_sequence().get_private() self.assertEqual(str(p), i)
def suggest_brain_key(): from graphenebase.account import BrainKey bkObject = BrainKey() newBrainkey = BrainKey(bkObject.suggest()) result = { "brain_private_key": newBrainkey.get_brainkey(), "public_key": str(newBrainkey.get_public()), "private_key": str(newBrainkey.get_private()) } return result
def main() : parser = argparse.ArgumentParser(description='Generate CSV table with brain key, pub key and private key') parser.add_argument('--number', type=int, help='Number of brain keys to generate') parser.add_argument('--filename', type=str, help='filename to store CSV file in') parser.set_defaults(number=10) args = parser.parse_args() t = PrettyTable(["wif","pub","brainkey"]) for i in range(0,args.number) : b = BrainKey() t.add_row([ b.get_private(), b.get_private().pubkey, b.get_brainkey()]) print(t.get_string()) if args.filename : with open(args.filename, 'w') as csvfile: spamwriter = csv.writer(csvfile, delimiter=' ; ') spamwriter.writerow(t.field_names) for r in t._rows : spamwriter.writerow(r)
def main() : parser = argparse.ArgumentParser(description='Generate CSV table with brain key, pub key and private key') parser.add_argument('--number', type=int, help='Number of brain keys to generate') parser.add_argument('--filename', type=str, help='filename to store CSV file in') parser.add_argument('-encrypt', help='Encrypt private key with BIP38!', action='store_true') parser.set_defaults(number=10) args = parser.parse_args() ''' Optionally encrypt with BIP38 ''' pw = "" if args.encrypt : import getpass while True : pw = getpass.getpass('Passphrase: ') pwck = getpass.getpass('Retype passphrase: ') if(pw == pwck) : break else : print("Given Passphrases do not match!") t = PrettyTable(["wif", "pub", "sequence"]) b = BrainKey() for i in range(0, args.number) : wif = b.get_private() pub = format(b.get_private().pubkey, prefix) if args.encrypt : # (optionally) encrypt paper wallet try : wif = format(bip38.encrypt(wif, pw), "encwif") except : raise Exception("Error encoding the privkey for pubkey %s. Already encrypted?" % pub) assert format(b.get_private(), 'wif') == format(bip38.decrypt(wif, pw), 'wif') t.add_row([wif, pub, b.sequence]) b.next_sequence() print("This is your (unencrypted) Brainkey. Make sure to store it savely:") print("\n\n\t%s\n\n" % b.get_brainkey()) print(t.get_string()) if args.filename : with open(args.filename, 'w') as file: file.write("# This is your (unencrypted) Brainkey. Make sure to store it savely:\n") file.write("#\n#\t%s\n#\n" % b.get_brainkey()) with open(args.filename, 'a') as csvfile: spamwriter = csv.writer(csvfile, delimiter=';') spamwriter.writerow(t.field_names) for r in t._rows : spamwriter.writerow(r)
def test_BrainKey_normalize(self): b = "COLORER BICORN KASBEKE FAERIE LOCHIA GOMUTI SOVKHOZ Y GERMAL AUNTIE PERFUMY TIME FEATURE GANGAN CELEMIN MATZO" self.assertEqual([BrainKey(b + "").get_brainkey(), BrainKey(b + " ").get_brainkey(), BrainKey(b + " ").get_brainkey(), BrainKey(b + "\t").get_brainkey(), BrainKey(b + "\t\t").get_brainkey(), BrainKey(b.replace(" ", "\t")).get_brainkey(), BrainKey(b.replace(" ", " ")).get_brainkey(), ], [b, b, b, b, b, b, b])
def test_BrainKey(self): self.assertEqual([str(BrainKey("COLORER BICORN KASBEKE FAERIE LOCHIA GOMUTI SOVKHOZ Y GERMAL AUNTIE PERFUMY TIME FEATURE GANGAN CELEMIN MATZO").get_private()), str(BrainKey("NAK TILTING MOOTING TAVERT SCREENY MAGIC BARDIE UPBORNE CONOID MAUVE CARBON NOTAEUM BITUMEN HOOEY KURUMA COWFISH").get_private()), str(BrainKey("CORKITE CORDAGE FONDISH UNDER FORGET BEFLEA OUTBUD ZOOGAMY BERLINE ACANTHA STYLO YINCE TROPISM TUNKET FALCULA TOMENT").get_private()), str(BrainKey("MURZA PREDRAW FIT LARIGOT CRYOGEN SEVENTH LISP UNTAWED AMBER CRETIN KOVIL TEATED OUTGRIN POTTAGY KLAFTER DABB").get_private()), str(BrainKey("VERDICT REPOUR SUNRAY WAMBLY UNFILM UNCOUS COWMAN REBUOY MIURUS KEACORN BENZOLE BEMAUL SAXTIE DOLENT CHABUK BOUGHED").get_private()), str(BrainKey("HOUGH TRUMPH SUCKEN EXODY MAMMATE PIGGIN CRIME TEPEE URETHAN TOLUATE BLINDLY CACOEPY SPINOSE COMMIE GRIECE FUNDAL").get_private()), str(BrainKey("OERSTED ETHERIN TESTIS PEGGLE ONCOST POMME SUBAH FLOODER OLIGIST ACCUSE UNPLAT OATLIKE DEWTRY CYCLIZE PIMLICO CHICOT").get_private()), ], ["5JfwDztjHYDDdKnCpjY6cwUQfM4hbtYmSJLjGd9KTpk9J4H2jDZ", "5JcdQEQjBS92rKqwzQnpBndqieKAMQSiXLhU7SFZoCja5c1JyKM", "5JsmdqfNXegnM1eA8HyL6uimHp6pS9ba4kwoiWjjvqFC1fY5AeV", "5J2KeFptc73WTZPoT1Sd59prFep6SobGobCYm7T5ZnBKtuW9RL9", "5HryThsy6ySbkaiGK12r8kQ21vNdH81T5iifFEZNTe59wfPFvU9", "5Ji4N7LSSv3MAVkM3Gw2kq8GT5uxZYNaZ3d3y2C4Ex1m7vshjBN", "5HqSHfckRKmZLqqWW7p2iU18BYvyjxQs2sksRWhXMWXsNEtxPZU", ])
def main() : parser = argparse.ArgumentParser(description='Generate CSV table with brain key, pub key and private key') parser.add_argument('--number', type=int, help='Number of brain keys to generate') parser.add_argument('--filename', type=str, help='filename to store CSV file in') parser.add_argument('-encrypt', help='Encrypt private key with BIP38!', action='store_true') parser.set_defaults(number=10) args = parser.parse_args() ''' Optionally encrypt with BIP38 ''' pw = "" if args.encrypt : import getpass while True : pw = getpass.getpass('Passphrase: ') pwck = getpass.getpass('Retype passphrase: ') if(pw == pwck) : break else : print("Given Passphrases do not match!") t = PrettyTable(["wif", "pub", "sequence"]) b = BrainKey() for i in range(0, args.number) : wif = b.get_private() pub = format(b.get_private().pubkey, prefix) if args.encrypt : # (optionally) encrypt paper wallet try : wif = format(bip38.encrypt(wif, pw), "encwif") except : raise Exception("Error encoding the privkey for pubkey %s. Already encrypted?" % pub) assert format(b.get_private(), 'wif') == format(bip38.decrypt(wif, pw), 'wif') qrwif = StringIO() qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_H) qr.add_data(wif) qr.print_ascii(out=qrwif, tty=False, invert=False) qrpub = StringIO() qr = qrcode.QRCode(error_correction=qrcode.ERROR_CORRECT_H) qr.add_data(pub) qr.print_ascii(out=qrpub, tty=False, invert=False) t.add_row(["%s%s" % (qrwif.getvalue(), wif), "%s%s" % (qrpub.getvalue(), pub), b.sequence]) b.next_sequence() print("This is your (unencrypted) Brainkey. Make sure to store it savely:") print("\n\n\t%s\n\n" % b.get_brainkey()) t.hrules = 1 t.vrules = 1 t.padding_width = 1 t.header = False data = t.get_string() print(data) if args.filename : with open(args.filename, 'w') as file: file.write("# This is your (unencrypted) Brainkey. Make sure to store it savely:\n") file.write("#\n#\t%s\n#\n" % b.get_brainkey()) with open(args.filename, 'a') as csvfile: spamwriter = csv.writer(csvfile, delimiter=';') spamwriter.writerow(t.field_names) for r in t._rows : spamwriter.writerow(r)
def create_account(self, account_name, json_meta="", creator=None, additional_owner_keys=[], additional_active_keys=[], additional_posting_keys=[], additional_owner_accounts=[], additional_active_accounts=[], additional_posting_accounts=[], storekeys=True, ): """ Create new account in Steem and store new keys in the wallet automatically and return the brain key. The brainkey can be used to recover all generated keys (see `graphenebase.account` for more details. By default, this call will use ``default_author`` to register a new name ``account_name`` with all keys being derived from a new brain key that will be returned. The corresponding keys will automatically be installed in the wallet. :param str account_name: (**required**) new account name :param str json_meta: Optional meta data for the account :param str creator: which account should pay the registration fee (defaults to ``default_author``) :param array additional_owner_keys: Additional owner public keys :param array additional_active_keys: Additional active public keys :param array additional_posting_keys: Additional posting public keys :param array additional_owner_accounts: Additional owner account names :param array additional_active_accounts: Additional acctive account names :param array additional_posting_accounts: Additional posting account names :param bool storekeys: Store new keys in the wallet (default: ``True``) """ if not creator and config["default_author"]: creator = config["default_author"] if not creator: raise ValueError( "Not creator account given. Define it with " + "creator=x, or set the default_author in piston") if storekeys: wallet = Wallet(self.rpc) " Generate new keys " from graphenebase.account import BrainKey # owner key = BrainKey() brain_key = key.get_brainkey() if storekeys: wallet.addPrivateKey(key.get_private_key()) owner = format(key.get_public_key(), prefix) # active key = key.next_sequence() if storekeys: wallet.addPrivateKey(key.get_private_key()) active = format(key.get_public_key(), prefix) # posting key = key.next_sequence() if storekeys: wallet.addPrivateKey(key.get_private_key()) posting = format(key.get_public_key(), prefix) # memo key = key.next_sequence() if storekeys: wallet.addPrivateKey(key.get_private_key()) memo = format(key.get_public_key(), prefix) owner_key_authority = [[owner, 1]] active_key_authority = [[active, 1]] posting_key_authority = [[posting, 1]] owner_accounts_authority = [] active_accounts_authority = [] posting_accounts_authority = [] # additional authorities for k in additional_owner_keys: owner_key_authority.append([k, 1]) for k in additional_active_keys: active_key_authority.append([k, 1]) for k in additional_posting_keys: posting_key_authority.append([k, 1]) for k in additional_owner_accounts: owner_accounts_authority.append([k, 1]) for k in additional_active_accounts: active_accounts_authority.append([k, 1]) for k in additional_posting_accounts: posting_accounts_authority.append([k, 1]) props = self.rpc.get_chain_properties() fee = props["account_creation_fee"] s = {'creator': creator, 'fee': fee, 'json_metadata': json_meta, 'memo_key': memo, 'new_account_name': account_name, 'owner': {'account_auths': owner_accounts_authority, 'key_auths': owner_key_authority, 'weight_threshold': 1}, 'active': {'account_auths': active_accounts_authority, 'key_auths': active_key_authority, 'weight_threshold': 1}, 'posting': {'account_auths': posting_accounts_authority, 'key_auths': posting_key_authority, 'weight_threshold': 1}} op = transactions.Account_create(**s) if not self.wif: wif = Wallet(self.rpc).getPostingKeyForAccount(creator) self.executeOp(op, wif) else: self.executeOp(op) return brain_key