|
|
|
//go:build e2ee
|
|
|
|
// +build e2ee
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
|
|
"maunium.net/go/mautrix/crypto/cryptohelper"
|
|
|
|
"maunium.net/go/mautrix/event"
|
|
|
|
"maunium.net/go/mautrix/id"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Crypto struct {
|
|
|
|
helper *cryptohelper.CryptoHelper
|
|
|
|
}
|
|
|
|
|
|
|
|
func BuildTagsE2EE() {
|
|
|
|
buildTags = append(buildTags, "e2ee")
|
|
|
|
}
|
|
|
|
|
|
|
|
func MatrixE2EE() bool { return true }
|
|
|
|
|
|
|
|
func InitMatrixCrypto(d *MatrixDaemon) error {
|
|
|
|
d.Encryption = d.app.config.Section("matrix").Key("encryption").MustBool(false)
|
|
|
|
if !d.Encryption {
|
|
|
|
// return fmt.Errorf("encryption disabled")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
dbPath := d.app.config.Section("files").Key("matrix_sql").String()
|
|
|
|
var err error
|
|
|
|
d.crypto = &Crypto{}
|
|
|
|
d.crypto.helper, err = cryptohelper.NewCryptoHelper(d.bot, []byte("jfa-go"), dbPath)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
err = d.crypto.helper.Init(context.TODO())
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
d.bot.Crypto = d.crypto.helper
|
|
|
|
|
|
|
|
d.Encryption = true
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func EncryptRoom(d *MatrixDaemon, roomID id.RoomID) error {
|
|
|
|
if !d.Encryption {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
_, err := d.bot.SendStateEvent(context.TODO(), roomID, event.StateEncryption, "", event.EncryptionEventContent{
|
|
|
|
Algorithm: id.AlgorithmMegolmV1,
|
|
|
|
RotationPeriodMillis: 7 * 24 * 60 * 60 * 1000,
|
|
|
|
RotationPeriodMessages: 100,
|
|
|
|
})
|
|
|
|
return err
|
|
|
|
}
|