added vanity address support

This commit is contained in:
Kevin Froman 2019-09-09 03:23:09 -05:00
parent 57791c34a5
commit 866f0ce501
8 changed files with 66 additions and 13 deletions

View File

@ -22,6 +22,7 @@ from flask import Blueprint, Response, request, g
import onionrblocks
from onionrcrypto import hashers
from onionrutils import bytesconverter
from onionrutils import mnemonickeys
ib = Blueprint('insertblock', __name__)
@ib.route('/insertblock', methods=['POST'])
@ -48,7 +49,9 @@ def client_api_insert_block():
to = ''
try:
if bData['encrypt']:
to = bData['to']
to = bData['to'].strip()
if " " in to:
to = mnemonickeys.get_base32(to)
encrypt = True
encryptType = 'asym'
except KeyError:

View File

@ -46,6 +46,7 @@ def get_arguments():
('importblocks', 'import-blocks', 'import-block'): importnewblocks.import_new_blocks,
('addid', 'add-id'): pubkeymanager.add_ID,
('changeid', 'change-id'): pubkeymanager.change_ID,
('add-vanity', 'addvanity'): pubkeymanager.add_vanity,
('resettor', 'reset-tor'): resettor.reset_tor,
('resetplugins', 'reset-plugins'): resetplugins.reset,
('reset-tor-node-transport',): resettor.reset_tor_key_pair,

View File

@ -19,14 +19,19 @@
'''
import sys, getpass
import unpaddedbase32
import vanityonionr
import mnemonic
import logger, onionrexceptions
from onionrutils import stringvalidators, bytesconverter
from onionrusers import onionrusers, contactmanager
import config
from coredb import keydb
import keymanager, onionrcrypto
import unpaddedbase32
from etc import onionrvalues
DETERMINISTIC_REQUIREMENT = onionrvalues.PASSWORD_LENGTH
def add_ID():
key_manager = keymanager.KeyManager()
@ -80,3 +85,31 @@ def change_ID():
logger.warn('That key does not exist', terminal=True)
else:
logger.warn('Invalid key %s' % (key,), terminal=True)
def add_vanity():
key_manager = keymanager.KeyManager()
tell = lambda tell: logger.info(tell, terminal=True)
words = ''
m = mnemonic.Mnemonic('english')
length = len(sys.argv) - 2
if length == 0: return
for i in range(2, len(sys.argv)):
words += ' '
words += sys.argv[i]
try:
if length == 1:
tell('Finding vanity, this should only take a few moments.')
else:
tell('Finding vanity, this will probably take a really long time.')
try:
vanity = vanityonionr.find_multiprocess(words)
except ValueError:
logger.warn('Vanity words must be valid english bip39', terminal=True)
else:
b32_pub = unpaddedbase32.b32encode(vanity[0])
tell('Found vanity address:\n' + m.to_mnemonic(vanity[0]))
tell('Base32 Public key: %s' % (b32_pub.decode(),))
key_manager.addKey(b32_pub, unpaddedbase32.b32encode(vanity[1]))
except KeyboardInterrupt:
pass
add_vanity.onionr_help = "<space separated bip32 words> - Generates and stores an Onionr vanity address (see https://github.com/trezor/python-mnemonic/blob/master/mnemonic/wordlist/english.txt)"

View File

@ -17,6 +17,7 @@
<script defer src='/shared/node_modules/pnotify/dist/iife/PNotifyButtons.js'></script>
<script defer src='/shared/navbar.js'></script>
<script defer src='/shared/misc.js'></script>
<script defer src='/mail/sethumanreadable.js'></script>
<script defer src='/mail/mail.js'></script>
<script defer src='/mail/sendmail.js'></script>
</head>

View File

@ -177,19 +177,25 @@ function loadInboxEntries(bHash){
humanDate.setUTCSeconds(resp['meta']['time'])
humanDate = humanDate.toString()
validSig.style.display = 'none'
if (resp['meta']['signer'] != ''){
senderInput.value = httpGet('/friends/getinfo/' + resp['meta']['signer'] + '/name')
if (typeof resp['meta']['signer'] != 'undefined' && resp['meta']['signer'] != ''){
let name = httpGet('/friends/getinfo/' + resp['meta']['signer'] + '/name')
if (name.length == 0){
setHumanReadableValue(senderInput, resp['meta']['signer'])
entry.setAttribute('data-nameSet', false)
}
else{
entry.setAttribute('data-nameSet', true)
}
}
else{
senderInput.value = 'Anonymous'
entry.setAttribute('data-nameSet', false)
}
if (! resp['meta']['validSig']){
validSig.style.display = 'inline'
validSig.innerText = 'Signature Validity: Bad'
validSig.style.color = 'red'
}
entry.setAttribute('data-nameSet', true)
if (senderInput.value == ''){
senderInput.value = resp['meta']['signer'] || 'Anonymous'
entry.setAttribute('data-nameSet', false)
}
//bHashDisplay.innerText = bHash.substring(0, 10)
entry.setAttribute('data-hash', bHash)
entry.setAttribute('data-pubkey', resp['meta']['signer'])

View File

@ -38,7 +38,9 @@ function sendMail(to, message, subject){
.then((resp) => resp.text()) // Transform the data into json
.then(function(data) {
sendForm.style.display = 'block'
alert('Queued for sending!')
PNotify.success({
text: 'Queued for sending!'
})
})
}
@ -50,12 +52,16 @@ friendPicker.onchange = function(){
sendForm.onsubmit = function(){
if (friendPicker.value.trim().length !== 0 && to.value.trim().length !== 0){
if (friendPicker.value !== to.value){
alert('You have selected both a friend and entered a public key manually.')
PNotify.error({
text: 'You have selected both a friend and entered a public key manually.'
})
return false
}
}
if (to.value.length !== 56 && to.value.length !== 52){
alert('Public key is not valid')
if (! to.value.includes(" ") && to.value.length !== 56 && to.value.length !== 52){
PNotify.error({
text: 'User ID is not valid'
})
}
else{
sendMail(to.value, messageContent.value, subject.value)

View File

@ -11,3 +11,4 @@ streamedrequests==1.0.0
jinja2==2.10.1
toomanyobjs==1.1.0
mnemonic==0.18
vanityonionr==0.0.0

View File

@ -185,6 +185,8 @@ unpaddedbase32==0.1.0 \
urllib3==1.24.2 \
--hash=sha256:4c291ca23bbb55c76518905869ef34bdd5f0e46af7afe6861e8375643ffee1a0 \
--hash=sha256:9a247273df709c4fedb38c711e44292304f73f39ab01beda9f6b9fc375669ac3
vanityonionr==0.0.0 \
--hash=sha256:a61976c62363f05cc9f92e57c2c2deaad7753abc9e5d3ee9ad5745330b8d942e
werkzeug==0.15.5 \
--hash=sha256:87ae4e5b5366da2347eb3116c0e6c681a0e939a33b2805e2c0cbd282664932c4 \
--hash=sha256:a13b74dd3c45f758d4ebdb224be8f1ab8ef58b3c0ffc1783a8c7d9f4f50227e6 \