Files
herolib/examples/crypt/crypt_example.vsh
2025-10-12 12:30:19 +03:00

104 lines
3.9 KiB
GLSL
Executable File

#!/usr/bin/env -S v -n -w -cg -gc none -cc tcc -d use_openssl -enable-globals -no-skip-unused run
import incubaid.herolib.crypt.herocrypt
import time
// Initialize the HeroCrypt client
// Assumes herodb is running on localhost:6381
mut client := herocrypt.new_default()!
println('HeroCrypt client initialized')
// -- Stateless (Ephemeral) Workflow --
println('\n--- Stateless (Ephemeral) Workflow ---')
// 1. Generate ephemeral encryption keypair
println('Generating ephemeral encryption keypair...')
enc_keypair := client.gen_enc_keypair()!
recipient_pub := enc_keypair[0]
identity_sec := enc_keypair[1]
println(' Recipient Public Key: ${recipient_pub[..30]}...')
println(' Identity Secret Key: ${identity_sec[..30]}...')
// 2. Encrypt a message
message := 'Hello, Stateless World!'
println('\nEncrypting message: "${message}"')
ciphertext := client.encrypt(recipient_pub, message)!
println(' Ciphertext: ${ciphertext[..30]}...')
// 3. Decrypt the message
println('\nDecrypting ciphertext...')
decrypted_message := client.decrypt(identity_sec, ciphertext)!
println(' Decrypted Message: ${decrypted_message}')
assert decrypted_message == message
// 4. Generate ephemeral signing keypair
println('\nGenerating ephemeral signing keypair...')
sign_keypair := client.gen_sign_keypair()!
verify_pub_b64 := sign_keypair[0]
sign_sec_b64 := sign_keypair[1]
println(' Verify Public Key (b64): ${verify_pub_b64[..30]}...')
println(' Sign Secret Key (b64): ${sign_sec_b64[..30]}...')
// 5. Sign a message
sign_message := 'This message is signed.'
println('\nSigning message: "${sign_message}"')
signature := client.sign(sign_sec_b64, sign_message)!
println(' Signature: ${signature[..30]}...')
// 6. Verify the signature
println('\nVerifying signature...')
is_valid := client.verify(verify_pub_b64, sign_message, signature)!
println(' Signature is valid: ${is_valid}')
assert is_valid
// -- Key-Managed (Persistent, Named) Workflow --
println('\n--- Key-Managed (Persistent, Named) Workflow ---')
// 1. Generate and persist a named encryption keypair
enc_key_name := 'my_app_enc_key'
println('\nGenerating and persisting named encryption keypair: "${enc_key_name}"')
client.keygen(enc_key_name)!
// 2. Encrypt a message by name
persistent_message := 'Hello, Persistent World!'
println('Encrypting message by name: "${persistent_message}"')
persistent_ciphertext := client.encrypt_by_name(enc_key_name, persistent_message)!
println(' Ciphertext: ${persistent_ciphertext[..30]}...')
// 3. Decrypt the message by name
println('Decrypting ciphertext by name...')
decrypted_persistent_message := client.decrypt_by_name(enc_key_name, persistent_ciphertext)!
println(' Decrypted Message: ${decrypted_persistent_message}')
assert decrypted_persistent_message == persistent_message
// 4. Generate and persist a named signing keypair
sign_key_name := 'my_app_sign_key'
println('\nGenerating and persisting named signing keypair: "${sign_key_name}"')
client.sign_keygen(sign_key_name)!
// 5. Sign a message by name
persistent_sign_message := 'This persistent message is signed.'
println('Signing message by name: "${persistent_sign_message}"')
persistent_signature := client.sign_by_name(sign_key_name, persistent_sign_message)!
println(' Signature: ${persistent_signature[..30]}...')
// 6. Verify the signature by name
println('Verifying signature by name...')
is_persistent_valid := client.verify_by_name(sign_key_name, persistent_sign_message, persistent_signature)!
println(' Signature is valid: ${is_persistent_valid}')
assert is_persistent_valid
// // 7. List all stored keys
// println('\n--- Listing Stored Keys ---')
// keys := client.list_keys()!
// println('Stored keys: ${keys}')
// // -- Clean up created keys --
// println('\n--- Cleaning up ---')
// client.redis_client.del('age:enc:${enc_key_name}')!
// client.redis_client.del('age:sign:${sign_key_name}')!
// println('Cleaned up persistent keys.')
println('\nHeroCrypt example finished successfully!')