package lib import ( "crypto/ed25519" "crypto/rand" "fmt" "io" "os" "time" ) var PrivateKey ed25519.PrivateKey var PublicKey ed25519.PublicKey var filePrivateKey string = "/keys/privatekey.pem" var filePublicKey string = "/keys/publickey.pem" func InitLoginBiscuit() error { if _, err := os.Stat(filePrivateKey); os.IsNotExist(err) { rng := rand.Reader PublicKey, PrivateKey, _ = ed25519.GenerateKey(rng) if file, err := os.Create(filePrivateKey); err != nil { return err } else { defer func() { if cerr := file.Close(); cerr != nil { // ici tu peux logger ou faire quelque chose fmt.Printf("Erreur à la fermeture: %v\n", cerr) } }() if _, err = io.WriteString(file, string(PrivateKey)); err != nil { return err } if err := file.Chmod(0600); err != nil { return err } } if file, err := os.Create(filePublicKey); err != nil { return err } else { defer func() { if cerr := file.Close(); cerr != nil { // ici tu peux logger ou faire quelque chose fmt.Printf("Erreur à la fermeture: %v\n", cerr) } }() if _, err = io.WriteString(file, string(PublicKey)); err != nil { return err } if err := file.Chmod(0600); err != nil { return err } } } else { if file, err := os.Open(filePrivateKey); err != nil { return err } else { defer func() { if cerr := file.Close(); cerr != nil { // ici tu peux logger ou faire quelque chose fmt.Printf("Erreur à la fermeture: %v\n", cerr) } }() PrivateKey, err = io.ReadAll(file) if err != nil { return err } } if file, err := os.Open(filePublicKey); err != nil { return err } else { defer func() { if cerr := file.Close(); cerr != nil { // ici tu peux logger ou faire quelque chose fmt.Printf("Erreur à la fermeture: %v\n", cerr) } }() PublicKey, err = io.ReadAll(file) if err != nil { return err } } } return nil } func InitGlobalBiscuit() error { for { time.Sleep(1 * time.Second) _, err := os.Stat(filePublicKey) if err == nil { break } } for { time.Sleep(1 * time.Second) _, err := os.Stat(filePrivateKey) if err == nil { break } } if file, err := os.Open(filePrivateKey); err != nil { return err } else { defer func() { if cerr := file.Close(); cerr != nil { // ici tu peux logger ou faire quelque chose fmt.Printf("Erreur à la fermeture: %v\n", cerr) } }() PrivateKey, err = io.ReadAll(file) if err != nil { return err } } if file, err := os.Open(filePublicKey); err != nil { return err } else { defer func() { if cerr := file.Close(); cerr != nil { // ici tu peux logger ou faire quelque chose fmt.Printf("Erreur à la fermeture: %v\n", cerr) } }() PublicKey, err = io.ReadAll(file) if err != nil { return err } } return nil }