package main import ( "errors" "fmt" "git.openprivacy.ca/openprivacy/libricochet-go/log" "os" //"bufio" //"cwtch.im/cwtch/storage" ) func convertTorFile(filename string, password string) error { return errors.New("this code doesn't work and can never work :( it's a math thing") /*name, _ := diceware.Generate(2) sk, err := ioutil.ReadFile("hs_ed25519_secret_key") if err != nil { return err } sk = sk[32:] pk, err := ioutil.ReadFile("hs_ed25519_public_key") if err != nil { return err } pk = pk[32:] onion, err := ioutil.ReadFile("hostname") if err != nil { return err } onion = onion[:56] peer := libpeer.NewCwtchPeer(strings.Join(name, "-")) fmt.Printf("%d %d %s\n", len(peer.GetProfile().Ed25519PublicKey), len(peer.GetProfile().Ed25519PrivateKey), peer.GetProfile().Onion) peer.GetProfile().Ed25519PrivateKey = sk peer.GetProfile().Ed25519PublicKey = pk peer.GetProfile().Onion = string(onion) fileStore := storage2.NewFileStore(filename, password) err = fileStore.save(peer) if err != nil { return err } log.Infof("success! loaded %d byte pk and %d byte sk for %s.onion\n", len(pk), len(sk), onion) return nil*/ } /* func vanity() error { for { pk, sk, err := ed25519.GenerateKey(rand.Reader) if err != nil { continue } onion := utils.GetTorV3Hostname(pk) for i := 4; i < len(os.Args); i++ { if strings.HasPrefix(onion, os.Args[i]) { peer := libpeer.NewCwtchPeer(os.Args[i]) peer.GetProfile().Ed25519PrivateKey = sk peer.GetProfile().Ed25519PublicKey = pk peer.GetProfile().Onion = onion profileStore, _ := storage2.NewProfileStore(nil, os.Args[3], onion+".cwtch") profileStore.Init("") // need to signal new onion? impossible log.Infof("found %s.onion\n", onion) } } } }*/ func printHelp() { log.Infoln("usage: cwtchutil {help, convert-cwtch-file, convert-tor-file, changepw, vanity}") } func main() { log.SetLevel(log.LevelInfo) if len(os.Args) < 2 { printHelp() os.Exit(1) } switch os.Args[1] { default: printHelp() case "help": printHelp() case "convert-tor-file": if len(os.Args) != 4 { fmt.Println("example: cwtchutil convert-tor-file /var/lib/tor/hs1 passw0rd") os.Exit(1) } err := convertTorFile(os.Args[2], os.Args[3]) if err != nil { log.Errorln(err) } /*case "vanity": if len(os.Args) < 5 { fmt.Println("example: cwtchutil vanity 4 passw0rd erinn openpriv") os.Exit(1) } goroutines, err := strconv.Atoi(os.Args[2]) if err != nil { log.Errorf("first parameter after vanity should be a number\n") os.Exit(1) } log.Infoln("searching. press ctrl+c to stop") for i := 0; i < goroutines; i++ { go vanity() } for { // run until ctrl+c time.Sleep(time.Hour * 24) }*/ /*case "changepw": if len(os.Args) != 3 { fmt.Println("example: cwtch changepw ~/.cwtch/profiles/XXX") os.Exit(1) } fmt.Printf("old password: ") reader := bufio.NewReader(os.Stdin) pw, err := reader.ReadString('\n') if err != nil { log.Errorln(err) os.Exit(1) } pw = pw[:len(pw)-1] profileStore, _ := storage.NewProfileStore(nil, os.Args[2], pw) err = profileStore.Read() if err != nil { log.Errorln(err) os.Exit(1) } fmt.Printf("new password: ") newpw1, err := reader.ReadString('\n') if err != nil { log.Errorln(err) os.Exit(1) } newpw1 = newpw1[:len(newpw1)-1] // fuck go with this linebreak shit ^ea fileStore2, _ := storage.NewProfileStore(nil, os.Args[2], newpw1) // No way to copy, populate this method err = fileStore2.save(peer) if err != nil { log.Errorln(err) os.Exit(1) } log.Infoln("success!") */ } }