UBF -- The Ultimate Bitmessage Forum

User info

Welcome, Guest! Please login or register.


You are here » UBF -- The Ultimate Bitmessage Forum » pyBitmessage » chan generator


chan generator

Posts 1 to 5 of 5

1

2

Code:

#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
'''

This is the python script file named " chanGenerator2.py " , which is copyleft freeware.

Usage: $ python2 chanGenerator.py [passphrase]

https://web.archive.org/web/20171202221818/http://bitmessage.mybb.im/viewtopic.php?id=30%23p106

https://web.archive.org/http://bitmessage.mybb.im

The chanGenerator generates a bitmessage stream 1 chan address on the bash-Konsole command line. does not need to be placed inside the pyBM subdirectory but works "stand alone".
A bash alias to the script makes it useful for fast testing, or run this bash script:

#!/bin/bash
##  call this script named "shscr"  as:            ./shscr          ./file1words
##  with your chan names / passphrases contained inside of the file ./file1words
touch ./keys.dat--generated
while IFS='' read -r line <&3 || [[ -n "$line" ]]; do echo \[chan\] $line; python2 ./chanGenerator2.py $line >> ./keys.dat--generated  ; done 3<"$1"

________________________________________________________________________________________

[chan] 𝕓𝕚𝕥𝕞𝕖𝕤𝕤𝕒𝕘𝕖 BM-2cULYXn1VJAqoHjsQxME9UGRft3KHMYABh
________________________________________________________________________________________
Modeled after Bitmessage "VanityGen" by "nimda" and a later version called "bmgen.py" 

https://bitmessage.org/forum/index.php?topic=1727.0
https://gist.github.com/anonymous/43c7d9690e57558b10e59720b29dc2d6
https://web.archive.org/save/http://mx.forum.cool/viewforum.php?id=4
https://web.archive.org/save/http://bitmessage.mybb.im

'''
import sys, os, base64, hashlib, time

from struct import *
from pyelliptic.openssl import OpenSSL

import ctypes

from pyelliptic import arithmetic
from binascii import hexlify


def encodeVarint(integer):
    if integer < 0:
        print 'varint cannot be < 0'
        raise SystemExit
    if integer < 253:
        return pack('>B',integer)
    if integer >= 253 and integer < 65536:
        return pack('>B',253) + pack('>H',integer)
    if integer >= 65536 and integer < 4294967296:
        return pack('>B',254) + pack('>I',integer)
    if integer >= 4294967296 and integer < 18446744073709551616:
        return pack('>B',255) + pack('>Q',integer)
    if integer >= 18446744073709551616:
        print 'varint cannot be >= 18446744073709551616'
        raise SystemExit
    
def encodeAddress(version,stream,ripe):
    if version >= 2 and version < 4:
        if len(ripe) != 20:
            raise Exception("Programming error in encodeAddress: The length of a given ripe hash was not 20.")
        if ripe[:2] == '\x00\x00':
            ripe = ripe[2:]
        elif ripe[:1] == '\x00':
            ripe = ripe[1:]
    elif version == 4:
        if len(ripe) != 20:
            raise Exception("Programming error in encodeAddress: The length of a given ripe hash was not 20.")
        ripe = ripe.lstrip('\x00')

    verVar = encodeVarint(version)
    strVar = encodeVarint(stream)
    storedBinaryData = encodeVarint(version) + encodeVarint(stream) + ripe
    

    sha = hashlib.new('sha512')
    sha.update(storedBinaryData)
    currentHash = sha.digest()
    sha = hashlib.new('sha512')
    sha.update(currentHash)
    checksum = sha.digest()[0:4]

    asInt = int(hexlify(storedBinaryData) + hexlify(checksum),16)
    return 'BM-'+ encodeBase58(asInt)

ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"

def encodeBase58(num, alphabet=ALPHABET):
   
    if (num == 0):
        return alphabet[0]
    arr = []
    base = len(alphabet)
    while num:
        rem = num % base
        num = num // base
        arr.append(alphabet[rem])
    arr.reverse()
    return ''.join(arr)

def pointMult(secret):
    k = OpenSSL.EC_KEY_new_by_curve_name(OpenSSL.get_curve('secp256k1')) 
    priv_key = OpenSSL.BN_bin2bn(secret, 32, 0)
    group = OpenSSL.EC_KEY_get0_group(k)
    pub_key = OpenSSL.EC_POINT_new(group)

    OpenSSL.EC_POINT_mul(group, pub_key, priv_key, None, None, None)
    OpenSSL.EC_KEY_set_private_key(k, priv_key)
    OpenSSL.EC_KEY_set_public_key(k, pub_key)
    
    size = OpenSSL.i2o_ECPublicKey(k, 0)
    mb = ctypes.create_string_buffer(size)
    OpenSSL.i2o_ECPublicKey(k, ctypes.byref(ctypes.pointer(mb)))
    
    OpenSSL.EC_POINT_free(pub_key)
    OpenSSL.BN_free(priv_key)
    OpenSSL.EC_KEY_free(k)
    return mb.raw

found_one = False

def chanerate():
    global found_one
    passphrase = args[0]
    deterministicNonce = 0
    startTime = time.time()
    while found_one != True:
        
        deterministicNall = str(passphrase)
        address=""
        while found_one != True:
            
            signingKeyNonce = 0
            encryptionKeyNonce = 1
            numberOfAddressesWeHadToMakeBeforeWeFoundOneWithTheCorrectRipePrefix = 0
            deterministicPassphrase = deterministicNall
            while found_one != True:
                numberOfAddressesWeHadToMakeBeforeWeFoundOneWithTheCorrectRipePrefix += 1
                potentialPrivSigningKey = hashlib.sha512(deterministicPassphrase + encodeVarint(signingKeyNonce)).digest()[:32]
                potentialPrivEncryptionKey = hashlib.sha512(deterministicPassphrase + encodeVarint(encryptionKeyNonce)).digest()[:32]
                potentialPubSigningKey = pointMult(potentialPrivSigningKey)
                potentialPubEncryptionKey = pointMult(potentialPrivEncryptionKey)
                signingKeyNonce += 2
                encryptionKeyNonce += 2
                ripe = hashlib.new('ripemd160')
                sha = hashlib.new('sha512')
                sha.update(potentialPubSigningKey+potentialPubEncryptionKey)
                ripe.update(sha.digest())
                
                if ripe.digest()[:1] == '\x00':
                        break
                

            address = encodeAddress(4,1,ripe.digest())

            privSigningKey = '\x80' + potentialPrivSigningKey
            checksum = hashlib.sha256(hashlib.sha256(
                privSigningKey).digest()).digest()[0:4]
            privSigningKeyWIF = arithmetic.changebase(
                privSigningKey + checksum, 256, 58)

            privEncryptionKey = '\x80' + potentialPrivEncryptionKey
            checksum = hashlib.sha256(hashlib.sha256(
                privEncryptionKey).digest()).digest()[0:4]
            privEncryptionKeyWIF = arithmetic.changebase(
                privEncryptionKey + checksum, 256, 58)

            deterministicNonce += 1
            if (address[:2] == "BM"):
                print " " # for >> keys.dat
                print "[" + address+ "]"
                print "label = [chan] " + str(deterministicPassphrase)
                print "enabled = true"
                print "decoy = false"
                print "chan = true"
                print "noncetrialsperbyte = 1000"
                print "payloadlengthextrabytes = 1000"
                print "privsigningkey = " + privSigningKeyWIF
                print "privencryptionkey = " + privEncryptionKeyWIF
                found_one = True
                
                break

        if (found_one == True):
            break

from optparse import OptionParser
usage = "usage: %prog [options] passphrase"
parser = OptionParser(usage=usage)

parser.add_option("-i", "--info",
                  action="store_true", dest="info", default=False,
                  help="Show license and author info.")
                  
parser.add_option("-l", "--logo",
                  action="store_true", dest="logo", default=False,
                  help="Show logo and contact info.")

(options, args) = parser.parse_args()

if options.info:
    print """  ---   """
    print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
    print ""
    print "chan Generator"
    print ""
    print "contact / subscribe broadcast: (chanerator) < BM-NBTqJ12baBSKxqdnQedyhFVUWborkho3 >"
    print ""
    print "Generates a bitmessage stream 1 chan address on the command line."
    print ""
    print "A bash alias to the script makes it useful for fast testing."
    print ""
    print "Adapted from Bitmessage VanityGen and a later version, bmgen.py."
    print "https://bitmessage.org/forum/index.php?topic=1727.0"
    print "https://gist.github.com/anonymous/43c7d9690e57558b10e59720b29dc2d6"
    print ""
    print "Usage: $ python2 chanGenerator.py [passphrase]"
    print ""
    print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
    sys.exit()
    
if options.logo:
    shield = """ --- """
    print shield
    sys.exit()

if len(args) == 0:
    parser.print_help()
    sys.exit()
    
chanerate()



'''
content of file1words :

Bagdad Bitcoin Meetups
Bangalore Bitcoin Meetups
Bangkok Bitcoin Meetups
Beijing Bitcoin Meetups
Berlin Bitcoin Meetups
Buenos Aires Bitcoin Meetups
Saint Petersburg Bitcoin Meetups
Sao Paulo Bitcoin Meetups
Shanghai Bitcoin Meetups
Singapore Bitcoin Meetups
Singapore Bitcoin Meetups
Stockholm Bitcoin Meetups
Sydney Bitcoin Meetups
Teheran Bitcoin Meetups
Tokyo Bitcoin Meetups  
Jakarta Bitcoin Meetups
Johannesburg Bitcoin Meetups
Lagos Bitcoin Meetups
London Bitcoin Meetups
Los Angeles Bitcoin Meetups
Melbourne Bitcoin Meetups
Montreal Bitcoin Meetups
Moscow Bitcoin Meetups
Nairobi Bitcoin Meetups
New Delhi Bitcoin Meetups
New York Bitcoin Meetups
Paris Bitcoin Meetups
Rio De Janeiro Bitcoin Meetups
github.com/kristovatlas/entrances.github.com
Metzdwood Cryptography Internal Chan
Belarus chan
#bitcoin-otc
#opbundy
#virus
$peculation$
/bb/
/cp/
/lc/
/po/
100
10000/50000
123
200
2ch
2ch.hk/b/
2ch.ru
320
4
4Chan
4chan
BUY AND SELL TECHNICAL PRODUCTS AND SERVICES CHAN
end.chan
ANONYMOUS INTERNATIONAL
Adult Chat - Chat Adulto
Agenda
Anime
Anonymous
Anonymous Netherlands
AsianGirls
Astrology
BAC
BDC
BIGBOOBS
BSD
BTCXINDIA
BTSync
Bible
BitBounty
BitDate-Boys2Girls
BitDate-Girls2Boys
BitGigs
Chan
(Created by BM-2cVZJonHbYBBZrPMwb9eMwdUwPVQb3GgV7)
Bitchan /JB/
Bitcoin Crowdfunding incubator
(Created by BM-2cVPTkVZo2mDoJyXmaGkujtJNovVhu6W1H)
Bitcoin Dividend Experiment
Bitmessage
Bitmessage The Netherlands
BitmessageSocialNetworks
Bitseal
BlackJobNoCriminal
Bmr
Brasil
Brazil
C#
CGL
CRAP!
Chicago Ghetto Lottery
China
Christian
CivChan
Coaching
CoinMarketXChange
Darknet Markets
Debian
Devuan
Discovery
DogeCoin
Emacs
Euromaidan
FREEDOM
FinBM
France
Free energy
FreeBSD
Full Disclosure
GIT Project
Gaming
Germany
GetMotivated
Goat's penis
Greeks
HKGolden
HPVAC
Hacking
Haskell
Hobbies
HydBitcoin
I2ES
I2P
Imperial Reserve Bank
Italia
Italiani
Italy
Japan
Jokes
MMM
Long Live Liberty
Long Live Liberty
Manila
Manila
Minichan
Mojucoin
NMC CoinJoin
News
NoAgenda
Nutcoin
OOBE
Oldfags
Open-Science
OpenBSD
OpenBazaar
PHP
POLICE
Parallella
Philippines
Piracy
Police
Primecoin
Project Bitcoin Real Estate
Project Forge Bitmessage Chan
QuarkCoin
Quarkcoin
Quotes
RU.Politics
R[4/fep,lq=
RacialSlurs
Random Acts of Pizza
RetroShare
RusMarket
Russia
SEELE
SEX
SLAVYANSKIY-KRUG
SNUFF
Salvage BitCoin

SaveTheWhales
Sex Chat

SilkRoad
Skeptics
Spain
Spillcoin
StartUp
SubGenius
Survival
Taohacker Channel
The Dark Room I
The Dollars
The Red Pill
TheVenusProject
Tips&Tricks
Tolkien_Chan
Torrents
Tox
UK
UKRAINE
Vestichan
WWE
Whispers
Wizardchan
World Cup 2014 Live Update
Wrestling
ZeroNet
ZeroNet Decentralised Websites Talk
Zerocoin
[the] {new} (SecStash)
abu2ch
adult
altcoins
amish
anarchism
anon
anonymity/privacy/security
anonymous
anti-american
anti-forensics
antimatter
arcane.crypto.shamanism
archlinux
archlinux.ru
art
atheism
austrianeconomics
bandwagonjumpers
belarus
birds
bitcoin-brasil
bitcoin-italia
bitmessage-retards
blowjobs
bmc
bmf_support
bmfr
books
bounty books
bounty hunters
bro
btc-e.com
btcollab
c
catpix
chan-gri-la
chanlist
chanmessage
chanosphere
chans
chess
chickswithdicks
chit-chat
christian
chubbygirls
cisco
cjdns-ru
classical
clean-and-sober
clowns
coinchat
computerscience
coolhack
coursera
crowd funded DDOS
cryptocat
cumpix
darknets
darkwallet
deutsch
diaspora
dimensionalnomads
divan.crypto.autism
dmt
doctor_who
drugs
ecology
esperanto
ethereum
euCae7if
explosives
fakeologist
femanon
finland
floss
food
français
freenet
french
gallery of fine art
gambling
games
gaychan
geektimes
general2
gentoo
gnu
golang
greencharter
hackerspaces
hackthissite
half-life
hiddenchan.i2p users
hobbits
i2p
iceland
illuminati
jazz
jokes
jokes no censorship
juick
juicy
juniper
keyexchange
kilts
koreaunderground
ladies_nsfw
latex
lemonparty
lesbian
libertarian
loli
lolicon
lolks
lor
macacada rabuda
magnet
marketplace
mathaba
mathematica
matlab
mesbit
milf
nametrade
netflix
netsukuku
news
npobepka
null
nullnet
olist
omorashi
openmw
orgasms
paysty_development
pedobear
pibang
poker
politics
polygraph
pony
postsecret
preppers
preteengirls
prettypecs
prettytitties
profanity
professional_scientists
programming
pt
pt-br
queens
rape
reddit
religion
reversing
revolution
romance
ru.2ch.hk/b/
ru.anekdot.israel
ru.bitcoin
ru.c-lang
ru.humor
ru.linux.anime
ru.movie
ru.programming
ru.python
ru.security
ru.torrents
ru.webmasters
ruby
russian
sciencefiction
security
sharereactor.ru
shotacat
shotachan
silkroad
skycoin
slackware
softcore
space
spam
suicide
swingers
tatoeba
teenfem.nonude
timecube
toki pona
torrent invites
tox
travel
troll
trolleyville
turkce
ubuntu
ubuntu.ru
underthebridge
unicorns
velociraptors
vk.com
vulcan
walkingdead
webehigh
white.race
wisdom
xenophiles
xxx
xxxchat
ytcracker
zerocoin
zionists
   bitmessage

 - CryptoLight
 
  Ш
_

 
 
�
WTF
you guess this chan name
====



'''


Last edited by UBF4 (Dec 3 2017 00:40)

3

archived :

https://web.archive.org/web/http://bitmessage.mybb.im

Last edited by UBF4 (Dec 2 2017 22:08)

4

wayback machine :

  https://web.archive.org/web/20171202215905/http://bitmessage.mybb.im/viewtopic.php?id=30#p104

copy + paste :

  web.archive.org/web/20171202215905/http://bitmessage.mybb.im/viewtopic.php?id=30%23p104

way back

Last edited by UBF4 (Dec 2 2017 22:16)

5

web.archive.org/web/20171202215905/http://bitmessage.mybb.im/viewtopic.php?id=30%23p106

Last edited by UBF4 (Dec 2 2017 22:17)


You are here » UBF -- The Ultimate Bitmessage Forum » pyBitmessage » chan generator