added vanity address support
parent
57791c34a5
commit
866f0ce501
|
@ -22,6 +22,7 @@ from flask import Blueprint, Response, request, g
|
||||||
import onionrblocks
|
import onionrblocks
|
||||||
from onionrcrypto import hashers
|
from onionrcrypto import hashers
|
||||||
from onionrutils import bytesconverter
|
from onionrutils import bytesconverter
|
||||||
|
from onionrutils import mnemonickeys
|
||||||
ib = Blueprint('insertblock', __name__)
|
ib = Blueprint('insertblock', __name__)
|
||||||
|
|
||||||
@ib.route('/insertblock', methods=['POST'])
|
@ib.route('/insertblock', methods=['POST'])
|
||||||
|
@ -48,7 +49,9 @@ def client_api_insert_block():
|
||||||
to = ''
|
to = ''
|
||||||
try:
|
try:
|
||||||
if bData['encrypt']:
|
if bData['encrypt']:
|
||||||
to = bData['to']
|
to = bData['to'].strip()
|
||||||
|
if " " in to:
|
||||||
|
to = mnemonickeys.get_base32(to)
|
||||||
encrypt = True
|
encrypt = True
|
||||||
encryptType = 'asym'
|
encryptType = 'asym'
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|
|
@ -46,6 +46,7 @@ def get_arguments():
|
||||||
('importblocks', 'import-blocks', 'import-block'): importnewblocks.import_new_blocks,
|
('importblocks', 'import-blocks', 'import-block'): importnewblocks.import_new_blocks,
|
||||||
('addid', 'add-id'): pubkeymanager.add_ID,
|
('addid', 'add-id'): pubkeymanager.add_ID,
|
||||||
('changeid', 'change-id'): pubkeymanager.change_ID,
|
('changeid', 'change-id'): pubkeymanager.change_ID,
|
||||||
|
('add-vanity', 'addvanity'): pubkeymanager.add_vanity,
|
||||||
('resettor', 'reset-tor'): resettor.reset_tor,
|
('resettor', 'reset-tor'): resettor.reset_tor,
|
||||||
('resetplugins', 'reset-plugins'): resetplugins.reset,
|
('resetplugins', 'reset-plugins'): resetplugins.reset,
|
||||||
('reset-tor-node-transport',): resettor.reset_tor_key_pair,
|
('reset-tor-node-transport',): resettor.reset_tor_key_pair,
|
||||||
|
|
|
@ -19,14 +19,19 @@
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import sys, getpass
|
import sys, getpass
|
||||||
|
|
||||||
|
import unpaddedbase32
|
||||||
|
import vanityonionr
|
||||||
|
import mnemonic
|
||||||
|
|
||||||
import logger, onionrexceptions
|
import logger, onionrexceptions
|
||||||
from onionrutils import stringvalidators, bytesconverter
|
from onionrutils import stringvalidators, bytesconverter
|
||||||
from onionrusers import onionrusers, contactmanager
|
from onionrusers import onionrusers, contactmanager
|
||||||
import config
|
import config
|
||||||
from coredb import keydb
|
from coredb import keydb
|
||||||
import keymanager, onionrcrypto
|
import keymanager, onionrcrypto
|
||||||
import unpaddedbase32
|
|
||||||
from etc import onionrvalues
|
from etc import onionrvalues
|
||||||
|
|
||||||
DETERMINISTIC_REQUIREMENT = onionrvalues.PASSWORD_LENGTH
|
DETERMINISTIC_REQUIREMENT = onionrvalues.PASSWORD_LENGTH
|
||||||
def add_ID():
|
def add_ID():
|
||||||
key_manager = keymanager.KeyManager()
|
key_manager = keymanager.KeyManager()
|
||||||
|
@ -80,3 +85,31 @@ def change_ID():
|
||||||
logger.warn('That key does not exist', terminal=True)
|
logger.warn('That key does not exist', terminal=True)
|
||||||
else:
|
else:
|
||||||
logger.warn('Invalid key %s' % (key,), terminal=True)
|
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)"
|
|
@ -17,6 +17,7 @@
|
||||||
<script defer src='/shared/node_modules/pnotify/dist/iife/PNotifyButtons.js'></script>
|
<script defer src='/shared/node_modules/pnotify/dist/iife/PNotifyButtons.js'></script>
|
||||||
<script defer src='/shared/navbar.js'></script>
|
<script defer src='/shared/navbar.js'></script>
|
||||||
<script defer src='/shared/misc.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/mail.js'></script>
|
||||||
<script defer src='/mail/sendmail.js'></script>
|
<script defer src='/mail/sendmail.js'></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -177,19 +177,25 @@ function loadInboxEntries(bHash){
|
||||||
humanDate.setUTCSeconds(resp['meta']['time'])
|
humanDate.setUTCSeconds(resp['meta']['time'])
|
||||||
humanDate = humanDate.toString()
|
humanDate = humanDate.toString()
|
||||||
validSig.style.display = 'none'
|
validSig.style.display = 'none'
|
||||||
if (resp['meta']['signer'] != ''){
|
if (typeof resp['meta']['signer'] != 'undefined' && resp['meta']['signer'] != ''){
|
||||||
senderInput.value = httpGet('/friends/getinfo/' + resp['meta']['signer'] + '/name')
|
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']){
|
if (! resp['meta']['validSig']){
|
||||||
validSig.style.display = 'inline'
|
validSig.style.display = 'inline'
|
||||||
validSig.innerText = 'Signature Validity: Bad'
|
validSig.innerText = 'Signature Validity: Bad'
|
||||||
validSig.style.color = 'red'
|
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)
|
//bHashDisplay.innerText = bHash.substring(0, 10)
|
||||||
entry.setAttribute('data-hash', bHash)
|
entry.setAttribute('data-hash', bHash)
|
||||||
entry.setAttribute('data-pubkey', resp['meta']['signer'])
|
entry.setAttribute('data-pubkey', resp['meta']['signer'])
|
||||||
|
|
|
@ -38,7 +38,9 @@ function sendMail(to, message, subject){
|
||||||
.then((resp) => resp.text()) // Transform the data into json
|
.then((resp) => resp.text()) // Transform the data into json
|
||||||
.then(function(data) {
|
.then(function(data) {
|
||||||
sendForm.style.display = 'block'
|
sendForm.style.display = 'block'
|
||||||
alert('Queued for sending!')
|
PNotify.success({
|
||||||
|
text: 'Queued for sending!'
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,12 +52,16 @@ friendPicker.onchange = function(){
|
||||||
sendForm.onsubmit = function(){
|
sendForm.onsubmit = function(){
|
||||||
if (friendPicker.value.trim().length !== 0 && to.value.trim().length !== 0){
|
if (friendPicker.value.trim().length !== 0 && to.value.trim().length !== 0){
|
||||||
if (friendPicker.value !== to.value){
|
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
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (to.value.length !== 56 && to.value.length !== 52){
|
if (! to.value.includes(" ") && to.value.length !== 56 && to.value.length !== 52){
|
||||||
alert('Public key is not valid')
|
PNotify.error({
|
||||||
|
text: 'User ID is not valid'
|
||||||
|
})
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
sendMail(to.value, messageContent.value, subject.value)
|
sendMail(to.value, messageContent.value, subject.value)
|
||||||
|
|
|
@ -11,3 +11,4 @@ streamedrequests==1.0.0
|
||||||
jinja2==2.10.1
|
jinja2==2.10.1
|
||||||
toomanyobjs==1.1.0
|
toomanyobjs==1.1.0
|
||||||
mnemonic==0.18
|
mnemonic==0.18
|
||||||
|
vanityonionr==0.0.0
|
|
@ -185,6 +185,8 @@ unpaddedbase32==0.1.0 \
|
||||||
urllib3==1.24.2 \
|
urllib3==1.24.2 \
|
||||||
--hash=sha256:4c291ca23bbb55c76518905869ef34bdd5f0e46af7afe6861e8375643ffee1a0 \
|
--hash=sha256:4c291ca23bbb55c76518905869ef34bdd5f0e46af7afe6861e8375643ffee1a0 \
|
||||||
--hash=sha256:9a247273df709c4fedb38c711e44292304f73f39ab01beda9f6b9fc375669ac3
|
--hash=sha256:9a247273df709c4fedb38c711e44292304f73f39ab01beda9f6b9fc375669ac3
|
||||||
|
vanityonionr==0.0.0 \
|
||||||
|
--hash=sha256:a61976c62363f05cc9f92e57c2c2deaad7753abc9e5d3ee9ad5745330b8d942e
|
||||||
werkzeug==0.15.5 \
|
werkzeug==0.15.5 \
|
||||||
--hash=sha256:87ae4e5b5366da2347eb3116c0e6c681a0e939a33b2805e2c0cbd282664932c4 \
|
--hash=sha256:87ae4e5b5366da2347eb3116c0e6c681a0e939a33b2805e2c0cbd282664932c4 \
|
||||||
--hash=sha256:a13b74dd3c45f758d4ebdb224be8f1ab8ef58b3c0ffc1783a8c7d9f4f50227e6 \
|
--hash=sha256:a13b74dd3c45f758d4ebdb224be8f1ab8ef58b3c0ffc1783a8c7d9f4f50227e6 \
|
||||||
|
|
Loading…
Reference in New Issue