package main import ( "crypto/openpgp" "epoint/key" "fmt" "log" "os" ) const usage = "usage: ./genkey [issuer] denomination seckeyfile pubkeyfile < seed > fingerprint" func serialize(e *openpgp.Entity, sk, pk string) (err error) { f, err := os.Create(sk) if err != nil { return } err = e.SerializePrivate(f) if err != nil { return } err = f.Sync() if err != nil { return } err = f.Close() if err != nil { return } // public key f, err = os.Create(pk) if err != nil { return } /* // TODO: maybe Serialize should do this internally for _, ident := range e.Identities { err = ident.SelfSignature.SignUserId(ident.UserId.Id, e.PrimaryKey, e.PrivateKey) if err != nil { return } } for _, subkey := range e.Subkeys { err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey) if err != nil { return } } */ err = e.Serialize(f) if err != nil { return } err = f.Sync() if err != nil { return } err = f.Close() return } func main() { isIssuer := false issuer := "" denom := "" sk := "" pk := "" if len(os.Args) == 4 { isIssuer = true denom = os.Args[1] sk = os.Args[2] pk = os.Args[3] } else if len(os.Args) == 5 { issuer = os.Args[1] denom = os.Args[2] sk = os.Args[3] pk = os.Args[4] } else { log.Fatal(usage) } b := make([]byte, 1000) n, err := os.Stdin.Read(b) if err != nil { log.Print(err) log.Fatal(usage) } var e *openpgp.Entity if isIssuer { e, err = key.Issuer(b[:n], denom) } else { e, err = key.Holder(b[:n], issuer, denom) } if err != nil { log.Fatal(err) } err = serialize(e, sk, pk) if err != nil { log.Fatal(err) } fmt.Println(key.Id(e)) }