60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package bloat
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"fmt"
|
|
|
|
"aead.dev/minisign"
|
|
"filippo.io/age"
|
|
)
|
|
|
|
type BloatPlain[T any] struct {
|
|
SignPub minisign.PublicKey
|
|
SignPriv minisign.PrivateKey
|
|
}
|
|
type BloatEnc[T any] struct {
|
|
BloatPlain[T]
|
|
EncPub age.X25519Recipient
|
|
EncPriv age.X25519Identity // Scrypt is the password one?
|
|
}
|
|
|
|
func NewPlainBloat[T any]() (BloatPlain[T], error) {
|
|
pub, sign, err := minisign.GenerateKey(rand.Reader)
|
|
if err != nil {
|
|
fmt.Println("problem generating minisign")
|
|
fmt.Println(err)
|
|
return BloatPlain[T]{}, err
|
|
}
|
|
res := BloatPlain[T]{
|
|
SignPub: pub,
|
|
SignPriv: sign,
|
|
}
|
|
return res, nil
|
|
}
|
|
func NewEncBloat[T any]() (BloatEnc[T], error) {
|
|
var res BloatEnc[T]
|
|
pubres, err := NewPlainBloat[T]()
|
|
if err != nil {
|
|
fmt.Println("problem generating signing part")
|
|
}
|
|
enc, err := age.GenerateX25519Identity()
|
|
if err != nil {
|
|
fmt.Println("unable to generate")
|
|
fmt.Println(err)
|
|
return BloatEnc[T]{}, err
|
|
}
|
|
res.SignPub = pubres.SignPub
|
|
res.SignPriv = pubres.SignPriv
|
|
|
|
res.EncPriv = *enc
|
|
res.EncPub = *enc.Recipient()
|
|
// fmt.Printf("made age key: %s\n", enc.Recipient().String())
|
|
return res, nil
|
|
|
|
}
|
|
func plainFromEnc[T any](p BloatEnc[T]) BloatPlain[T] {
|
|
var r BloatPlain[T]
|
|
r.SignPriv = p.SignPriv
|
|
r.SignPub = p.SignPub
|
|
return r
|
|
}
|