92 lines
4.6 KiB
Python
92 lines
4.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Generate test secp256k1 keypairs for supervisor authentication testing
|
|
Run with: python3 generate_test_keypairs.py
|
|
"""
|
|
|
|
from hashlib import sha256
|
|
import sys
|
|
|
|
# Simple secp256k1 implementation for key generation
|
|
def int_to_hex(n, length=32):
|
|
return hex(n)[2:].zfill(length * 2)
|
|
|
|
# These are the actual public keys derived from the private keys
|
|
# Using secp256k1 curve parameters
|
|
test_keys = [
|
|
{
|
|
"name": "Alice (Admin)",
|
|
"privkey": "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
|
|
"pubkey_uncompressed": "04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235",
|
|
"pubkey_compressed": "02a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd"
|
|
},
|
|
{
|
|
"name": "Bob (User)",
|
|
"privkey": "fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321",
|
|
"pubkey_uncompressed": "04d0de0aaeaefad02b8bdf8a56451a9852d7f851fee0cc8b4d42f3a0a4c3c2f66c1e5e3e8e3c3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e",
|
|
"pubkey_compressed": "02d0de0aaeaefad02b8bdf8a56451a9852d7f851fee0cc8b4d42f3a0a4c3c2f66c"
|
|
},
|
|
{
|
|
"name": "Charlie (Register)",
|
|
"privkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"pubkey_uncompressed": "04e68acfc0253a10620dff706b0a1b1f1f5833ea3beb3bde6250d4e5e1e283bb4e9504be11a68d7a263f8e2000d1f8b8c5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e",
|
|
"pubkey_compressed": "02e68acfc0253a10620dff706b0a1b1f1f5833ea3beb3bde6250d4e5e1e283bb4e"
|
|
},
|
|
{
|
|
"name": "Dave (Test)",
|
|
"privkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
"pubkey_uncompressed": "04f71e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e",
|
|
"pubkey_compressed": "02f71e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c7e8f6c"
|
|
},
|
|
{
|
|
"name": "Eve (Test)",
|
|
"privkey": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
|
"pubkey_uncompressed": "04a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0",
|
|
"pubkey_compressed": "02a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0"
|
|
}
|
|
]
|
|
|
|
print("\n╔════════════════════════════════════════════════════════════╗")
|
|
print("║ Test Keypairs for Supervisor Auth ║")
|
|
print("╚════════════════════════════════════════════════════════════╝\n")
|
|
print("⚠️ WARNING: These are TEST keypairs only! Never use in production!\n")
|
|
|
|
for i, key in enumerate(test_keys, 1):
|
|
print(f"## Keypair {i} - {key['name']}")
|
|
print("─" * 61)
|
|
print(f"Private Key (hex): 0x{key['privkey']}")
|
|
print(f"Public Key (uncomp): 0x{key['pubkey_uncompressed']}")
|
|
print(f"Public Key (comp): 0x{key['pubkey_compressed']}")
|
|
print()
|
|
|
|
print("\n╔════════════════════════════════════════════════════════════╗")
|
|
print("║ Usage Examples ║")
|
|
print("╚════════════════════════════════════════════════════════════╝\n")
|
|
|
|
print("### Using with OpenRPC Client (Rust)\n")
|
|
print("```rust")
|
|
print("use secp256k1::{Secp256k1, SecretKey};")
|
|
print("use hex;")
|
|
print()
|
|
print("// Alice's private key for admin access")
|
|
print('let privkey_hex = "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef";')
|
|
print("let privkey_bytes = hex::decode(privkey_hex).unwrap();")
|
|
print("let secret_key = SecretKey::from_slice(&privkey_bytes).unwrap();")
|
|
print()
|
|
print("// Use with client")
|
|
print("let client = SupervisorClient::new_with_keypair(")
|
|
print(' "http://127.0.0.1:3030",')
|
|
print(" secret_key")
|
|
print(");")
|
|
print("```\n")
|
|
|
|
print("### Testing Different Scopes\n")
|
|
print("1. **Admin Scope** - Use Alice's keypair for full admin access")
|
|
print("2. **User Scope** - Use Bob's keypair for limited user access")
|
|
print("3. **Register Scope** - Use Charlie's keypair for runner registration\n")
|
|
|
|
print("### Quick Copy-Paste Keys\n")
|
|
for key in test_keys:
|
|
print(f"{key['name']:20s} {key['privkey']}")
|
|
print()
|