#!/usr/bin/env python3
"""
CryptoVault Backup Tool
Implements Shamir's Secret Sharing for mnemonic backup
"""

import hashlib
import secrets

def split_secret(secret: str, shards: int = 3, threshold: int = 2) -> list:
    """
    Split a secret into shards using simple XOR-based sharing
    Real implementation uses libgfshare or similar
    """
    shards_data = []
    for i in range(shards):
        random_bytes = secrets.token_bytes(len(secret.encode()))
        combined = bytes(a ^ b for a, b in zip(secret.encode(), random_bytes))
        shards_data.append(random_bytes.hex() + ":" + combined.hex())
    return shards_data

def combine_secret(shards: list) -> str:
    """Combine shards to recover secret"""
    if len(shards) < 2:
        raise ValueError("Need at least 2 shards")
    
    first_part = bytes.fromhex(shards[0].split(":")[0])
    second_part = bytes.fromhex(shards[0].split(":")[1])
    
    recovered = bytes(a ^ b for a, b in zip(first_part, second_part))
    return recovered.decode()

if __name__ == "__main__":
    # Example mnemonic
    mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
    
    print("CryptoVault Backup Tool")
    print("=" * 40)
    print(f"Original: {mnemonic}")
    print()
    
    shards = split_secret(mnemonic)
    print(f"Generated {len(shards)} shards (threshold: 2)")
    for i, s in enumerate(shards):
        print(f"Shard {i+1}: {s[:40]}...")
    print()
    
    # Can recover with any 2 shards
    recovered = combine_secret(shards[:2])
    print(f"Recovered: {recovered}")
