mirror of
https://github.com/monero-project/research-lab.git
synced 2024-12-23 12:09:58 +00:00
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
#monero paper wallet test code, shen noether mrl
|
|
#use at your own risk
|
|
import Crypto.Random.random as rand
|
|
import MiniNero
|
|
import mnemonic
|
|
l = 2**252 + 27742317777372353535851937790883648493
|
|
|
|
def skGen():
|
|
return MiniNero.intToHex( 8 * (rand.getrandbits(64 * 8)) % l)
|
|
|
|
def pkGen():
|
|
#The point of this is in testing functions where you need some arbitrary public key to test against
|
|
return MiniNero.scalarmultBase(MiniNero.intToHex( 8 * (rand.getrandbits(64 * 8)) % l))
|
|
|
|
def skpkGen():
|
|
#The point of this is in testing functions where you need some arbitrary public key to test against
|
|
sk = skGen()
|
|
return sk, MiniNero.scalarmultBase(sk)
|
|
|
|
|
|
|
|
def keysBoth():
|
|
print("This is for private testing purposes only, use at your own risk!")
|
|
print("this function will generate an address that is compatible both with the main client and with MyMonero")
|
|
print("shen noether- mrl")
|
|
print(" ")
|
|
while True:
|
|
print('.'),
|
|
sk = skGen()
|
|
|
|
#s = "3c817618dcbfed122a64e592bb441d73300da9123686224a84e0eab1f075117e"; for testing
|
|
|
|
vk = MiniNero.getViewMM(sk) #note this is the sc_reduced version..
|
|
worked = 1
|
|
#uncomment below lines to make viewkey a point..
|
|
try:
|
|
MiniNero.toPoint(vk)
|
|
except:
|
|
worked =0
|
|
print("bad vk")
|
|
|
|
if vk == MiniNero.sc_reduce_key(vk) and worked == 1: #already reduced
|
|
break
|
|
print("found key")
|
|
print("secret spend key:", sk)
|
|
print("secret view key:", vk)
|
|
pk = MiniNero.publicFromSecret(sk)
|
|
print("public spend key:", pk)
|
|
pvk = MiniNero.publicFromSecret(vk)
|
|
print("public view key:", pvk)
|
|
addr = MiniNero.getAddrMM(sk)
|
|
print("receiving address", addr)
|
|
wl = mnemonic.mn_encode(sk)
|
|
cks = MiniNero.electrumChecksum(wl)
|
|
print(cks)
|
|
print("mnemonic:", wl + " " + cks)
|
|
return sk, vk, pk, pvk, addr, wl, cks
|
|
|
|
if __name__ == "__main__":
|
|
keysBoth()
|