12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #!/usr/bin/env python3
- #
- # mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
- # Copyright (C)2013-2023 The MMGen Project <mmgen@tuta.io>
- # Licensed under the GNU General Public License, Version 3:
- # https://www.gnu.org/licenses
- # Public project repositories:
- # https://github.com/mmgen/mmgen
- # https://gitlab.com/mmgen/mmgen
- """
- proto.zec.keygen: Zcash-Z public key generation backend for the MMGen suite
- """
- from ...key import PubKey
- from ...keygen import keygen_base
- class backend:
- class nacl(keygen_base):
- def __init__(self):
- from nacl.bindings import crypto_scalarmult_base
- self.crypto_scalarmult_base = crypto_scalarmult_base
- from ...sha2 import Sha256
- self.Sha256 = Sha256
- def zhash256(self,s,t):
- s = bytearray(s + bytes(32))
- s[0] |= 0xc0
- s[32] = t
- return self.Sha256(s,preprocess=False).digest()
- def to_pubkey(self,privkey):
- return PubKey(
- self.zhash256(privkey,0)
- + self.crypto_scalarmult_base(self.zhash256(privkey,1)),
- compressed = privkey.compressed
- )
- def to_viewkey(self,privkey):
- vk = bytearray( self.zhash256(privkey,0) + self.zhash256(privkey,1) )
- vk[32] &= 0xf8
- vk[63] &= 0x7f
- vk[63] |= 0x40
- return vk
|