statum-genkeys.vala 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Sodium;
  2. namespace Statum.Tools {
  3. /**
  4. * `statum-genkeys` — generates the static key pairs for signing and
  5. * encryption and prints a ready-to-paste `statum` section for
  6. * `web-config.json`.
  7. *
  8. * With these keys configured, signed frames and encrypted private blobs
  9. * survive a server restart (the same keys verify/decrypt across restarts).
  10. */
  11. public class Genkeys : Object {
  12. public static int main(string[] args) {
  13. // Signing (Ed25519) key pair.
  14. var sign_sk = new uint8[Sodium.Asymmetric.Signing.SECRET_KEY_BYTES];
  15. var sign_pk = new uint8[Sodium.Asymmetric.Signing.PUBLIC_KEY_BYTES];
  16. Sodium.Asymmetric.Signing.generate_keypair(sign_pk, sign_sk);
  17. // Encryption signing (Ed25519) key pair.
  18. var esign_sk = new uint8[Sodium.Asymmetric.Signing.SECRET_KEY_BYTES];
  19. var esign_pk = new uint8[Sodium.Asymmetric.Signing.PUBLIC_KEY_BYTES];
  20. Sodium.Asymmetric.Signing.generate_keypair(esign_pk, esign_sk);
  21. // Encryption sealing (X25519) key pair.
  22. var seal_sk = new uint8[Sodium.Asymmetric.Sealing.SECRET_KEY_BYTES];
  23. var seal_pk = new uint8[Sodium.Asymmetric.Sealing.PUBLIC_KEY_BYTES];
  24. Sodium.Asymmetric.Sealing.generate_keypair(seal_pk, seal_sk);
  25. stdout.printf("{\n");
  26. stdout.printf(" \"statum\": {\n");
  27. stdout.printf(" \"signing_secret_key\": \"%s\",\n", Base64.encode(sign_sk));
  28. stdout.printf(" \"signing_public_key\": \"%s\",\n", Base64.encode(sign_pk));
  29. stdout.printf(" \"encryption_signing_secret_key\": \"%s\",\n", Base64.encode(esign_sk));
  30. stdout.printf(" \"encryption_signing_public_key\": \"%s\",\n", Base64.encode(esign_pk));
  31. stdout.printf(" \"encryption_sealing_secret_key\": \"%s\",\n", Base64.encode(seal_sk));
  32. stdout.printf(" \"encryption_sealing_public_key\": \"%s\"\n", Base64.encode(seal_pk));
  33. stdout.printf(" }\n");
  34. stdout.printf("}\n");
  35. return 0;
  36. }
  37. }
  38. }