dont cache bls private key

This commit is contained in:
Bill Blanke 2021-03-02 22:22:02 -05:00 committed by Gene Hoffman
parent 4132d76d1a
commit fb9eac5fdb
5 changed files with 55 additions and 16 deletions

View File

@ -88,9 +88,7 @@ class Harvester:
"plot-seed": prover.get_id(), "plot-seed": prover.get_id(),
"pool_public_key": plot_info.pool_public_key, "pool_public_key": plot_info.pool_public_key,
"pool_contract_puzzle_hash": plot_info.pool_contract_puzzle_hash, "pool_contract_puzzle_hash": plot_info.pool_contract_puzzle_hash,
"farmer_public_key": plot_info.farmer_public_key,
"plot_public_key": plot_info.plot_public_key, "plot_public_key": plot_info.plot_public_key,
"local_sk": plot_info.local_sk,
"file_size": plot_info.file_size, "file_size": plot_info.file_size,
"time_modified": plot_info.time_modified, "time_modified": plot_info.time_modified,
} }

View File

@ -21,6 +21,8 @@ from src.types.blockchain_format.sized_bytes import bytes32
from src.util.api_decorators import api_request, peer_required from src.util.api_decorators import api_request, peer_required
from src.util.ints import uint8, uint64, uint32 from src.util.ints import uint8, uint64, uint32
from src.plotting.plot_tools import parse_plot_info
from src.wallet.derive_keys import master_sk_to_local_sk
class HarvesterAPI: class HarvesterAPI:
harvester: Harvester harvester: Harvester
@ -116,8 +118,15 @@ class HarvesterAPI:
self.harvester.log.error(f"Exception fetching full proof for {filename}") self.harvester.log.error(f"Exception fetching full proof for {filename}")
continue continue
# Look up local_sk from plot to save locked memory
(
pool_public_key_or_puzzle_hash,
farmer_public_key,
local_master_sk,
) = parse_plot_info(plot_info.prover.get_memo())
local_sk = master_sk_to_local_sk(local_master_sk)
plot_public_key = ProofOfSpace.generate_plot_public_key( plot_public_key = ProofOfSpace.generate_plot_public_key(
plot_info.local_sk.get_g1(), plot_info.farmer_public_key local_sk.get_g1(), farmer_public_key
) )
responses.append( responses.append(
( (
@ -213,8 +222,15 @@ class HarvesterAPI:
self.harvester.log.warning(f"KeyError plot {plot_filename} does not exist.") self.harvester.log.warning(f"KeyError plot {plot_filename} does not exist.")
return return
local_sk = plot_info.local_sk # Look up local_sk from plot to save locked memory
agg_pk = ProofOfSpace.generate_plot_public_key(local_sk.get_g1(), plot_info.farmer_public_key) (
pool_public_key_or_puzzle_hash,
farmer_public_key,
local_master_sk,
) = parse_plot_info(plot_info.prover.get_memo())
local_sk = master_sk_to_local_sk(local_master_sk)
agg_pk = ProofOfSpace.generate_plot_public_key(local_sk.get_g1(), farmer_public_key)
# This is only a partial signature. When combined with the farmer's half, it will # This is only a partial signature. When combined with the farmer's half, it will
# form a complete PrependSignature. # form a complete PrependSignature.
@ -228,7 +244,7 @@ class HarvesterAPI:
request.challenge_hash, request.challenge_hash,
request.sp_hash, request.sp_hash,
local_sk.get_g1(), local_sk.get_g1(),
plot_info.farmer_public_key, farmer_public_key,
message_signatures, message_signatures,
) )

View File

@ -10,6 +10,9 @@ from src.plotting.plot_tools import load_plots, get_plot_filenames, find_duplica
from src.util.hash import std_hash from src.util.hash import std_hash
from src.wallet.derive_keys import master_sk_to_farmer_sk from src.wallet.derive_keys import master_sk_to_farmer_sk
from src.plotting.plot_tools import parse_plot_info
from src.wallet.derive_keys import master_sk_to_local_sk
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -83,8 +86,16 @@ def check_plots(root_path, num, challenge_start, grep_string, list_duplicates, d
pr = plot_info.prover pr = plot_info.prover
log.info(f"Testing plot {plot_path} k={pr.get_size()}") log.info(f"Testing plot {plot_path} k={pr.get_size()}")
log.info(f"\tPool public key: {plot_info.pool_public_key}") log.info(f"\tPool public key: {plot_info.pool_public_key}")
log.info(f"\tFarmer public key: {plot_info.farmer_public_key}")
log.info(f"\tLocal sk: {plot_info.local_sk}") # Look up local_sk from plot to save locked memory
(
pool_public_key_or_puzzle_hash,
farmer_public_key,
local_master_sk,
) = parse_plot_info(pr.get_memo())
local_sk = master_sk_to_local_sk(local_master_sk)
log.info(f"\tFarmer public key: {farmer_public_key}")
log.info(f"\tLocal sk: {local_sk}")
total_proofs = 0 total_proofs = 0
caught_exception: bool = False caught_exception: bool = False
for i in range(num_start, num_end): for i in range(num_start, num_end):

View File

@ -22,9 +22,7 @@ class PlotInfo:
prover: DiskProver prover: DiskProver
pool_public_key: Optional[G1Element] pool_public_key: Optional[G1Element]
pool_contract_puzzle_hash: Optional[bytes32] pool_contract_puzzle_hash: Optional[bytes32]
farmer_public_key: G1Element
plot_public_key: G1Element plot_public_key: G1Element
local_sk: PrivateKey
file_size: int file_size: int
time_modified: float time_modified: float
@ -238,9 +236,7 @@ def load_plots(
prover, prover,
pool_public_key, pool_public_key,
pool_contract_puzzle_hash, pool_contract_puzzle_hash,
farmer_public_key,
plot_public_key, plot_public_key,
local_sk,
stat_info.st_size, stat_info.st_size,
stat_info.st_mtime, stat_info.st_mtime,
) )

View File

@ -70,6 +70,9 @@ from src.wallet.derive_keys import (
) )
from src.consensus.default_constants import DEFAULT_CONSTANTS from src.consensus.default_constants import DEFAULT_CONSTANTS
from src.plotting.plot_tools import parse_plot_info
from src.wallet.derive_keys import master_sk_to_local_sk
test_constants = DEFAULT_CONSTANTS.replace( test_constants = DEFAULT_CONSTANTS.replace(
**{ **{
"DIFFICULTY_STARTING": 2 ** 12, "DIFFICULTY_STARTING": 2 ** 12,
@ -217,9 +220,16 @@ class BlockTools:
""" """
farmer_sk = master_sk_to_farmer_sk(self.all_sks[0]) farmer_sk = master_sk_to_farmer_sk(self.all_sks[0])
for _, plot_info in self.plots.items(): for _, plot_info in self.plots.items():
agg_pk = ProofOfSpace.generate_plot_public_key(plot_info.local_sk.get_g1(), plot_info.farmer_public_key) # Look up local_sk from plot to save locked memory
(
pool_public_key_or_puzzle_hash,
farmer_public_key,
local_master_sk,
) = parse_plot_info(plot_info.prover.get_memo())
local_sk = master_sk_to_local_sk(local_master_sk)
agg_pk = ProofOfSpace.generate_plot_public_key(local_sk.get_g1(), farmer_public_key)
if agg_pk == plot_pk: if agg_pk == plot_pk:
harv_share = AugSchemeMPL.sign(plot_info.local_sk, m, agg_pk) harv_share = AugSchemeMPL.sign(local_sk, m, agg_pk)
farm_share = AugSchemeMPL.sign(farmer_sk, m, agg_pk) farm_share = AugSchemeMPL.sign(farmer_sk, m, agg_pk)
return AugSchemeMPL.aggregate([harv_share, farm_share]) return AugSchemeMPL.aggregate([harv_share, farm_share])
@ -892,9 +902,17 @@ class BlockTools:
) )
if required_iters < calculate_sp_interval_iters(constants, sub_slot_iters): if required_iters < calculate_sp_interval_iters(constants, sub_slot_iters):
proof_xs: bytes = plot_info.prover.get_full_proof(new_challenge, proof_index) proof_xs: bytes = plot_info.prover.get_full_proof(new_challenge, proof_index)
# Look up local_sk from plot to save locked memory
(
pool_public_key_or_puzzle_hash,
farmer_public_key,
local_master_sk,
) = parse_plot_info(plot_info.prover.get_memo())
local_sk = master_sk_to_local_sk(local_master_sk)
plot_pk = ProofOfSpace.generate_plot_public_key( plot_pk = ProofOfSpace.generate_plot_public_key(
plot_info.local_sk.get_g1(), local_sk.get_g1(),
plot_info.farmer_public_key, farmer_public_key,
) )
proof_of_space: ProofOfSpace = ProofOfSpace( proof_of_space: ProofOfSpace = ProofOfSpace(
new_challenge, new_challenge,