Ppcl.vala 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. public static int main(string[] args) {
  2. if(args.length < 2) {
  3. print(@"USAGE: $(args[0]) [COMMAND]\nCommands:\n\tnew [output]: create new PPCL and private key\n\tnew-member [member name]: generates a new keypair for a member\n\tadd-member [collection] [member name] [member key]: add a member to the member register\n\tadd-domain [collection] [DNS name]: add an authorative domain\n\tpublish [collection] [publication] [member]: publish the specified PPUB to the collection\n");
  4. return -1;
  5. }
  6. if(args[1] == "new") {
  7. uint8[] signing_key;
  8. var collection = new Ppub.Collection(out signing_key);
  9. var col_str = collection.to_string(signing_key);
  10. FileUtils.set_contents(args[2], col_str, col_str.length);
  11. var key_str = Base64.encode(signing_key);
  12. FileUtils.set_contents(args[2] + ".private.key", key_str, key_str.length);
  13. return 0;
  14. }
  15. if(args[1] == "new-member") {
  16. uint8[] sk;
  17. uint8[] pk;
  18. Ppub.CollectionMember.new_keypair(out sk, out pk);
  19. var sk_str = Base64.encode(sk);
  20. FileUtils.set_contents(args[2] + ".private.key", sk_str, sk_str.length);
  21. var pk_str = Base64.encode(pk);
  22. FileUtils.set_contents(args[2] + ".public.key", pk_str, pk_str.length);
  23. return 0;
  24. }
  25. var collection_name = args[2];
  26. string key_str;
  27. FileUtils.get_contents(args[2] + ".private.key", out key_str, null);
  28. var signing_key = Base64.decode(key_str);
  29. var collection_stream = new DataInputStream(File.new_for_path(collection_name).read());
  30. var collection = new Ppub.Collection.from_stream(collection_stream);
  31. if(args[1] == "add-member") {
  32. collection.increment_serial();
  33. collection.members.add(new Ppub.CollectionMember(args[3], Base64.decode(args[4])));
  34. }
  35. else if(args[1] == "add-domain") {
  36. collection.increment_serial();
  37. collection.domains.add(args[3]);
  38. }
  39. else if(args[1] == "publish") {
  40. var checksum = Ppub.CollectionPublication.generate_ppub_checksum(File.new_for_path(args[3]));
  41. string mem_key_str;
  42. FileUtils.get_contents(args[4] + ".private.key", out mem_key_str, null);
  43. var mem_signing_key = Base64.decode(mem_key_str);
  44. var publication = new Ppub.CollectionPublication(args[3], new DateTime.now_local(), args[4], checksum, mem_signing_key);
  45. collection.publications.add(publication);
  46. }
  47. else {
  48. print(@"Unrecognised command $(args[1])\n");
  49. return -2;
  50. }
  51. collection.touch();
  52. var col_str = collection.to_string(signing_key);
  53. FileUtils.set_contents(args[2], col_str, col_str.length);
  54. return 0;
  55. }