grim/josetool

add support for outputting the keys to files
draft
2017-02-07, Gary Kramlich
c5f0ccd2dd62
Parents 8403cd8ce5bf
Children 291d68fdd3a3
add support for outputting the keys to files
  • +9 -11
    ecdsa.go
  • +39 -10
    gen.go
  • +9 -11
    rsa.go
  • --- a/ecdsa.go Tue Feb 07 04:56:18 2017 +0000
    +++ b/ecdsa.go Tue Feb 07 05:21:05 2017 +0000
    @@ -12,6 +12,7 @@
    ecdsaCurve = ecdsaCmd.Arg("curve", "the curve to use").Default("P-384").Enum("P-256", "P-384", "P-521")
    ecdsaKid = ecdsaCmd.Flag("key-id", "the key id to use").Short('i').String()
    ecdsaUse = ecdsaCmd.Flag("use", "how this key will be used").Short('u').Default("sig").Enum("sig", "enc")
    + ecdsaFilename = ecdsaCmd.Flag("filename", "the base filename to output the key to").Short('f').Default("-").String()
    )
    func genECDSA() error {
    @@ -28,15 +29,12 @@
    return err
    }
    - err = outputPrivate(priv, *ecdsaKid, *ecdsaAlgorithm, *ecdsaUse)
    - if err != nil {
    - return err
    - }
    -
    - err = outputPublic(priv.Public(), *ecdsaKid, *ecdsaAlgorithm, *ecdsaUse)
    - if err != nil {
    - return err
    - }
    -
    - return nil
    + return output(
    + priv,
    + priv.Public(),
    + *ecdsaFilename,
    + *ecdsaKid,
    + *ecdsaAlgorithm,
    + *ecdsaUse,
    + )
    }
    --- a/gen.go Tue Feb 07 04:56:18 2017 +0000
    +++ b/gen.go Tue Feb 07 05:21:05 2017 +0000
    @@ -3,11 +3,12 @@
    import (
    "crypto"
    "fmt"
    + "io/ioutil"
    "github.com/mendsley/gojwk"
    )
    -func outputPrivate(key crypto.PrivateKey, kid, algorithm, use string) error {
    +func outputPrivate(key crypto.PrivateKey, filename, kid, algorithm, use string) error {
    jwkPriv, err := gojwk.PrivateKey(key)
    if err != nil {
    return err
    @@ -22,14 +23,18 @@
    return err
    }
    - fmt.Printf("----- begin private key -----\n")
    - fmt.Printf("%s\n", string(jsonPriv[:]))
    - fmt.Printf("------ end private key ------\n")
    + if filename == "-" {
    + fmt.Printf("----- begin private key -----\n")
    + fmt.Printf("%s\n", string(jsonPriv[:]))
    + fmt.Printf("------ end private key ------\n")
    - return nil
    + return nil
    + }
    +
    + return ioutil.WriteFile(filename+".priv", jsonPriv, 0644)
    }
    -func outputPublic(key crypto.PublicKey, kid, algorithm, use string) error {
    +func outputPublic(key crypto.PublicKey, filename, kid, algorithm, use string) error {
    jwkPub, err := gojwk.PublicKey(key)
    if err != nil {
    return err
    @@ -44,9 +49,33 @@
    return err
    }
    - fmt.Printf("----- begin public key -----\n")
    - fmt.Printf("%s\n", string(jsonPub[:]))
    - fmt.Printf("------ end public key ------\n")
    + if filename == "-" {
    + fmt.Printf("----- begin public key -----\n")
    + fmt.Printf("%s\n", string(jsonPub[:]))
    + fmt.Printf("------ end public key ------\n")
    + return nil
    + }
    +
    + return ioutil.WriteFile(filename+".pub", jsonPub, 0644)
    +}
    - return nil
    +func output(priv crypto.PrivateKey, pub crypto.PublicKey, filename, kid, algorithm, use string) error {
    + err := outputPrivate(
    + priv,
    + filename,
    + kid,
    + algorithm,
    + use,
    + )
    + if err != nil {
    + return err
    + }
    +
    + return outputPublic(
    + pub,
    + filename,
    + kid,
    + algorithm,
    + use,
    + )
    }
    --- a/rsa.go Tue Feb 07 04:56:18 2017 +0000
    +++ b/rsa.go Tue Feb 07 05:21:05 2017 +0000
    @@ -13,6 +13,7 @@
    rsaBits = rsaCmd.Arg("bits", "the number of bits for the key").Default("2048").Int()
    rsaKid = rsaCmd.Flag("key-id", "the key id to use").Short('i').String()
    rsaUse = rsaCmd.Flag("use", "how this key will be used").Short('u').Default("sig").Enum("sig", "enc")
    + rsaFilename = rsaCmd.Flag("filename", "the base filename to output the key to").Short('f').Default("-").String()
    )
    func genRSA() error {
    @@ -23,15 +24,12 @@
    return err
    }
    - err = outputPrivate(priv, *rsaKid, *rsaAlgorithm, *rsaUse)
    - if err != nil {
    - return err
    - }
    -
    - err = outputPublic(priv.Public(), *rsaKid, *rsaAlgorithm, *rsaUse)
    - if err != nil {
    - return err
    - }
    -
    - return nil
    + return output(
    + priv,
    + priv.Public(),
    + *rsaFilename,
    + *rsaKid,
    + *rsaAlgorithm,
    + *rsaUse,
    + )
    }