139 lines
2.8 KiB
Go
139 lines
2.8 KiB
Go
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
|
|
}
|