2 from twisted.python import usage
3 from allmydata.scripts.common import BaseOptions
5 class GenerateKeypairOptions(BaseOptions):
7 return "Usage: tahoe [global-opts] admin generate-keypair"
9 def getUsage(self, width=None):
10 t = BaseOptions.getUsage(self, width)
12 Generate a public/private keypair, dumped to stdout as two lines of ASCII..
17 def print_keypair(options):
18 from allmydata.util.keyutil import make_keypair
20 privkey_vs, pubkey_vs = make_keypair()
21 print >>out, "private:", privkey_vs
22 print >>out, "public:", pubkey_vs
24 class DerivePubkeyOptions(BaseOptions):
25 def parseArgs(self, privkey):
26 self.privkey = privkey
28 def getSynopsis(self):
29 return "Usage: tahoe [global-opts] admin derive-pubkey PRIVKEY"
31 def getUsage(self, width=None):
32 t = BaseOptions.getUsage(self, width)
34 Given a private (signing) key that was previously generated with
35 generate-keypair, derive the public key and print it to stdout.
40 def derive_pubkey(options):
42 from allmydata.util import keyutil
43 privkey_vs = options.privkey
44 sk, pubkey_vs = keyutil.parse_privkey(privkey_vs)
45 print >>out, "private:", privkey_vs
46 print >>out, "public:", pubkey_vs
49 class AdminCommand(BaseOptions):
51 ("generate-keypair", None, GenerateKeypairOptions,
52 "Generate a public/private keypair, write to stdout."),
53 ("derive-pubkey", None, DerivePubkeyOptions,
54 "Derive a public key from a private key."),
56 def postOptions(self):
57 if not hasattr(self, 'subOptions'):
58 raise usage.UsageError("must specify a subcommand")
59 def getSynopsis(self):
60 return "Usage: tahoe [global-opts] admin SUBCOMMAND"
61 def getUsage(self, width=None):
62 t = BaseOptions.getUsage(self, width)
64 Please run e.g. 'tahoe admin generate-keypair --help' for more details on
70 "generate-keypair": print_keypair,
71 "derive-pubkey": derive_pubkey,
74 def do_admin(options):
75 so = options.subOptions
76 so.stdout = options.stdout
77 so.stderr = options.stderr
78 f = subDispatch[options.subCommand]
83 ["admin", None, AdminCommand, "admin subcommands: use 'tahoe admin' for a list"],