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.");
|
|
} |