]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/scripts/admin.py
581224d69c93165348279f2083002cee7d78304f
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / scripts / admin.py
1
2 from twisted.python import usage
3
4 class GenerateKeypairOptions(usage.Options):
5     def getSynopsis(self):
6         return "Usage: tahoe admin generate-keypair"
7
8     def getUsage(self, width=None):
9         t = usage.Options.getUsage(self, width)
10         t += """
11 Generate a public/private keypair, dumped to stdout as two lines of ASCII..
12
13 """
14         return t
15
16 def print_keypair(options):
17     from allmydata.util.keyutil import make_keypair
18     out = options.stdout
19     privkey_vs, pubkey_vs = make_keypair()
20     print >>out, "private:", privkey_vs
21     print >>out, "public:", pubkey_vs
22
23 class DerivePubkeyOptions(usage.Options):
24     def parseArgs(self, privkey):
25         self.privkey = privkey
26
27     def getSynopsis(self):
28         return "Usage: tahoe admin derive-pubkey PRIVKEY"
29
30     def getUsage(self, width=None):
31         t = usage.Options.getUsage(self, width)
32         t += """
33 Given a private (signing) key that was previously generated with
34 generate-keypair, derive the public key and print it to stdout.
35
36 """
37         return t
38
39 def derive_pubkey(options):
40     out = options.stdout
41     from allmydata.util import keyutil
42     privkey_vs = options.privkey
43     sk, pubkey_vs = keyutil.parse_privkey(privkey_vs)
44     print >>out, "private:", privkey_vs
45     print >>out, "public:", pubkey_vs
46     return 0
47
48 class AdminCommand(usage.Options):
49     subCommands = [
50         ("generate-keypair", None, GenerateKeypairOptions,
51          "Generate a public/private keypair, write to stdout."),
52         ("derive-pubkey", None, DerivePubkeyOptions,
53          "Derive a public key from a private key."),
54         ]
55     def postOptions(self):
56         if not hasattr(self, 'subOptions'):
57             raise usage.UsageError("must specify a subcommand")
58     def getSynopsis(self):
59         return "Usage: tahoe admin SUBCOMMAND"
60     def getUsage(self, width=None):
61         t = usage.Options.getUsage(self, width)
62         t += """
63 Please run e.g. 'tahoe admin generate-keypair --help' for more details on
64 each subcommand.
65 """
66         return t
67
68 subDispatch = {
69     "generate-keypair": print_keypair,
70     "derive-pubkey": derive_pubkey,
71     }
72
73 def do_admin(options):
74     so = options.subOptions
75     so.stdout = options.stdout
76     so.stderr = options.stderr
77     f = subDispatch[options.subCommand]
78     return f(so)
79
80
81 subCommands = [
82     ["admin", None, AdminCommand, "admin subcommands: use 'tahoe admin' for a list"],
83     ]
84
85 dispatch = {
86     "admin": do_admin,
87     }