2 from twisted.python import usage
3 from allmydata.scripts.common import BaseOptions
5 class GenerateKeypairOptions(BaseOptions):
7 def getUsage(self, width=None):
8 t = BaseOptions.getUsage(self, width)
10 Generate a public/private keypair, dumped to stdout as two lines of ASCII..
15 def print_keypair(options):
16 from allmydata.util.keyutil import make_keypair
18 privkey_vs, pubkey_vs = make_keypair()
19 print >>out, "private:", privkey_vs
20 print >>out, "public:", pubkey_vs
22 class DerivePubkeyOptions(BaseOptions):
23 def parseArgs(self, privkey):
24 self.privkey = privkey
26 def getSynopsis(self):
27 return "Usage: tahoe [global-options] admin derive-pubkey PRIVKEY"
29 def getUsage(self, width=None):
30 t = BaseOptions.getUsage(self, width)
32 Given a private (signing) key that was previously generated with
33 generate-keypair, derive the public key and print it to stdout.
38 def derive_pubkey(options):
40 from allmydata.util import keyutil
41 privkey_vs = options.privkey
42 sk, pubkey_vs = keyutil.parse_privkey(privkey_vs)
43 print >>out, "private:", privkey_vs
44 print >>out, "public:", pubkey_vs
47 class AdminCommand(BaseOptions):
49 ("generate-keypair", None, GenerateKeypairOptions,
50 "Generate a public/private keypair, write to stdout."),
51 ("derive-pubkey", None, DerivePubkeyOptions,
52 "Derive a public key from a private key."),
54 def postOptions(self):
55 if not hasattr(self, 'subOptions'):
56 raise usage.UsageError("must specify a subcommand")
57 def getSynopsis(self):
58 return "Usage: tahoe [global-options] admin SUBCOMMAND"
59 def getUsage(self, width=None):
60 t = BaseOptions.getUsage(self, width)
62 Please run e.g. 'tahoe admin generate-keypair --help' for more details on
68 "generate-keypair": print_keypair,
69 "derive-pubkey": derive_pubkey,
72 def do_admin(options):
73 so = options.subOptions
74 so.stdout = options.stdout
75 so.stderr = options.stderr
76 f = subDispatch[options.subCommand]
81 ["admin", None, AdminCommand, "admin subcommands: use 'tahoe admin' for a list"],