233 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// Advanced Rhai script example for Hero Vault Cryptography Module
 | 
						|
// This script demonstrates conditional logic, error handling, and more complex operations
 | 
						|
 | 
						|
// Function to create a key space with error handling
 | 
						|
fn setup_key_space(name, password) {
 | 
						|
    print("Attempting: Create key space: " + name);
 | 
						|
    let result = create_key_space(name, password);
 | 
						|
    
 | 
						|
    if result {
 | 
						|
        print("✅ Create key space succeeded!");
 | 
						|
        return true;
 | 
						|
    } else {
 | 
						|
        print("❌ Create key space failed!");
 | 
						|
    }
 | 
						|
    
 | 
						|
    return false;
 | 
						|
}
 | 
						|
 | 
						|
// Function to create and select a keypair
 | 
						|
fn setup_keypair(name, password) {
 | 
						|
    print("Attempting: Create keypair: " + name);
 | 
						|
    let result = create_keypair(name, password);
 | 
						|
    
 | 
						|
    if result {
 | 
						|
        print("✅ Create keypair succeeded!");
 | 
						|
        
 | 
						|
        print("Attempting: Select keypair: " + name);
 | 
						|
        let selected = select_keypair(name);
 | 
						|
        
 | 
						|
        if selected {
 | 
						|
            print("✅ Select keypair succeeded!");
 | 
						|
            return true;
 | 
						|
        } else {
 | 
						|
            print("❌ Select keypair failed!");
 | 
						|
        }
 | 
						|
    } else {
 | 
						|
        print("❌ Create keypair failed!");
 | 
						|
    }
 | 
						|
    
 | 
						|
    return false;
 | 
						|
}
 | 
						|
 | 
						|
// Function to sign multiple messages
 | 
						|
fn sign_messages(messages) {
 | 
						|
    let signatures = [];
 | 
						|
    
 | 
						|
    for message in messages {
 | 
						|
        print("Signing message: " + message);
 | 
						|
        print("Attempting: Sign message");
 | 
						|
        let signature = sign(message);
 | 
						|
        
 | 
						|
        if signature != "" {
 | 
						|
            print("✅ Sign message succeeded!");
 | 
						|
            signatures.push(#{
 | 
						|
                message: message,
 | 
						|
                signature: signature
 | 
						|
            });
 | 
						|
        } else {
 | 
						|
            print("❌ Sign message failed!");
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    return signatures;
 | 
						|
}
 | 
						|
 | 
						|
// Function to verify signatures
 | 
						|
fn verify_signatures(signed_messages) {
 | 
						|
    let results = [];
 | 
						|
    
 | 
						|
    for item in signed_messages {
 | 
						|
        let message = item.message;
 | 
						|
        let signature = item.signature;
 | 
						|
        
 | 
						|
        print("Verifying signature for: " + message);
 | 
						|
        print("Attempting: Verify signature");
 | 
						|
        let is_valid = verify(message, signature);
 | 
						|
        
 | 
						|
        if is_valid {
 | 
						|
            print("✅ Verify signature succeeded!");
 | 
						|
        } else {
 | 
						|
            print("❌ Verify signature failed!");
 | 
						|
        }
 | 
						|
        
 | 
						|
        results.push(#{
 | 
						|
            message: message,
 | 
						|
            valid: is_valid
 | 
						|
        });
 | 
						|
    }
 | 
						|
    
 | 
						|
    return results;
 | 
						|
}
 | 
						|
 | 
						|
// Function to encrypt multiple messages
 | 
						|
fn encrypt_messages(messages) {
 | 
						|
    // Generate a symmetric key
 | 
						|
    print("Attempting: Generate symmetric key");
 | 
						|
    let key = generate_key();
 | 
						|
    
 | 
						|
    if key == "" {
 | 
						|
        print("❌ Generate symmetric key failed!");
 | 
						|
        return [];
 | 
						|
    }
 | 
						|
    
 | 
						|
    print("✅ Generate symmetric key succeeded!");
 | 
						|
    print("Using key: " + key);
 | 
						|
    let encrypted_messages = [];
 | 
						|
    
 | 
						|
    for message in messages {
 | 
						|
        print("Encrypting message: " + message);
 | 
						|
        print("Attempting: Encrypt message");
 | 
						|
        let encrypted = encrypt(key, message);
 | 
						|
        
 | 
						|
        if encrypted != "" {
 | 
						|
            print("✅ Encrypt message succeeded!");
 | 
						|
            encrypted_messages.push(#{
 | 
						|
                original: message,
 | 
						|
                encrypted: encrypted,
 | 
						|
                key: key
 | 
						|
            });
 | 
						|
        } else {
 | 
						|
            print("❌ Encrypt message failed!");
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    return encrypted_messages;
 | 
						|
}
 | 
						|
 | 
						|
// Function to decrypt messages
 | 
						|
fn decrypt_messages(encrypted_messages) {
 | 
						|
    let decrypted_messages = [];
 | 
						|
    
 | 
						|
    for item in encrypted_messages {
 | 
						|
        let encrypted = item.encrypted;
 | 
						|
        let key = item.key;
 | 
						|
        let original = item.original;
 | 
						|
        
 | 
						|
        print("Decrypting message...");
 | 
						|
        print("Attempting: Decrypt message");
 | 
						|
        let decrypted = decrypt(key, encrypted);
 | 
						|
        
 | 
						|
        if decrypted != false {
 | 
						|
            let success = decrypted == original;
 | 
						|
            
 | 
						|
            decrypted_messages.push(#{
 | 
						|
                decrypted: decrypted,
 | 
						|
                original: original,
 | 
						|
                success: success
 | 
						|
            });
 | 
						|
            
 | 
						|
            if success {
 | 
						|
                print("Decryption matched original ✅");
 | 
						|
            } else {
 | 
						|
                print("Decryption did not match original ❌");
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    return decrypted_messages;
 | 
						|
}
 | 
						|
 | 
						|
// Main script execution
 | 
						|
print("=== Advanced Cryptography Script ===");
 | 
						|
 | 
						|
// Set up key space
 | 
						|
let space_name = "advanced_space";
 | 
						|
let password = "secure_password123";
 | 
						|
 | 
						|
if setup_key_space(space_name, password) {
 | 
						|
    print("\n--- Key space setup complete ---\n");
 | 
						|
    
 | 
						|
    // Set up keypair
 | 
						|
    if setup_keypair("advanced_keypair", password) {
 | 
						|
        print("\n--- Keypair setup complete ---\n");
 | 
						|
        
 | 
						|
        // Define messages to sign
 | 
						|
        let messages = [
 | 
						|
            "This is the first message to sign",
 | 
						|
            "Here's another message that needs signing",
 | 
						|
            "And a third message for good measure"
 | 
						|
        ];
 | 
						|
        
 | 
						|
        // Sign messages
 | 
						|
        print("\n--- Signing Messages ---\n");
 | 
						|
        let signed_messages = sign_messages(messages);
 | 
						|
        
 | 
						|
        // Verify signatures
 | 
						|
        print("\n--- Verifying Signatures ---\n");
 | 
						|
        let verification_results = verify_signatures(signed_messages);
 | 
						|
        
 | 
						|
        // Count successful verifications
 | 
						|
        let successful_verifications = verification_results.filter(|r| r.valid).len();
 | 
						|
        print("Successfully verified " + successful_verifications + " out of " + verification_results.len() + " signatures");
 | 
						|
        
 | 
						|
        // Encrypt messages
 | 
						|
        print("\n--- Encrypting Messages ---\n");
 | 
						|
        let encrypted_messages = encrypt_messages(messages);
 | 
						|
        
 | 
						|
        // Decrypt messages
 | 
						|
        print("\n--- Decrypting Messages ---\n");
 | 
						|
        let decryption_results = decrypt_messages(encrypted_messages);
 | 
						|
        
 | 
						|
        // Count successful decryptions
 | 
						|
        let successful_decryptions = decryption_results.filter(|r| r.success).len();
 | 
						|
        print("Successfully decrypted " + successful_decryptions + " out of " + decryption_results.len() + " messages");
 | 
						|
        
 | 
						|
        // Create Ethereum wallet
 | 
						|
        print("\n--- Creating Ethereum Wallet ---\n");
 | 
						|
        print("Attempting: Create Ethereum wallet");
 | 
						|
        let wallet_created = create_ethereum_wallet();
 | 
						|
        
 | 
						|
        if wallet_created {
 | 
						|
            print("✅ Create Ethereum wallet succeeded!");
 | 
						|
            
 | 
						|
            print("Attempting: Get Ethereum address");
 | 
						|
            let address = get_ethereum_address();
 | 
						|
            
 | 
						|
            if address != "" {
 | 
						|
                print("✅ Get Ethereum address succeeded!");
 | 
						|
                print("Ethereum wallet address: " + address);
 | 
						|
            } else {
 | 
						|
                print("❌ Get Ethereum address failed!");
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            print("❌ Create Ethereum wallet failed!");
 | 
						|
        }
 | 
						|
        
 | 
						|
        print("\n=== Script execution completed successfully! ===");
 | 
						|
    } else {
 | 
						|
        print("Failed to set up keypair. Aborting script.");
 | 
						|
    }
 | 
						|
} else {
 | 
						|
    print("Failed to set up key space. Aborting script.");
 | 
						|
} |