from twisted.python import usage
+from allmydata.scripts.common import BaseOptions
-class GenerateKeypairOptions(usage.Options):
+class GenerateKeypairOptions(BaseOptions):
def getSynopsis(self):
return "Usage: tahoe admin generate-keypair"
def getUsage(self, width=None):
- t = usage.Options.getUsage(self, width)
+ t = BaseOptions.getUsage(self, width)
t += """
-Generate an ECDSA192 public/private keypair, dumped to stdout as two lines of
-base32-encoded text.
+Generate a public/private keypair, dumped to stdout as two lines of ASCII..
"""
return t
-def generate_keypair(options):
- from pycryptopp.publickey import ecdsa
- from allmydata.util import base32
+def print_keypair(options):
+ from allmydata.util.keyutil import make_keypair
out = options.stdout
- privkey = ecdsa.generate(192)
- print >>out, "private: priv-v0-%s" % base32.b2a(privkey.serialize())
- pubkey = privkey.get_verifying_key()
- print >>out, "public: pub-v0-%s" % base32.b2a(pubkey.serialize())
+ privkey_vs, pubkey_vs = make_keypair()
+ print >>out, "private:", privkey_vs
+ print >>out, "public:", pubkey_vs
-class AdminCommand(usage.Options):
+class DerivePubkeyOptions(BaseOptions):
+ def parseArgs(self, privkey):
+ self.privkey = privkey
+
+ def getSynopsis(self):
+ return "Usage: tahoe admin derive-pubkey PRIVKEY"
+
+ def getUsage(self, width=None):
+ t = BaseOptions.getUsage(self, width)
+ t += """
+Given a private (signing) key that was previously generated with
+generate-keypair, derive the public key and print it to stdout.
+
+"""
+ return t
+
+def derive_pubkey(options):
+ out = options.stdout
+ from allmydata.util import keyutil
+ privkey_vs = options.privkey
+ sk, pubkey_vs = keyutil.parse_privkey(privkey_vs)
+ print >>out, "private:", privkey_vs
+ print >>out, "public:", pubkey_vs
+ return 0
+
+class AdminCommand(BaseOptions):
subCommands = [
- ["generate-keypair", None, GenerateKeypairOptions,
- "Generate a public/private keypair, write to stdout."],
+ ("generate-keypair", None, GenerateKeypairOptions,
+ "Generate a public/private keypair, write to stdout."),
+ ("derive-pubkey", None, DerivePubkeyOptions,
+ "Derive a public key from a private key."),
]
def postOptions(self):
if not hasattr(self, 'subOptions'):
def getSynopsis(self):
return "Usage: tahoe admin SUBCOMMAND"
def getUsage(self, width=None):
- #t = usage.Options.getUsage(self, width)
- t = """
-Subcommands:
- tahoe admin generate-keypair Generate a public/private keypair,
- write to stdout.
-
+ t = BaseOptions.getUsage(self, width)
+ t += """
Please run e.g. 'tahoe admin generate-keypair --help' for more details on
each subcommand.
"""
return t
subDispatch = {
- "generate-keypair": generate_keypair,
+ "generate-keypair": print_keypair,
+ "derive-pubkey": derive_pubkey,
}
def do_admin(options):