automatically ignore known forwarded addresses, fixes #64
This commit is contained in:
59
vendor/maunium.net/go/mautrix/crypto/olm/pk.go
generated
vendored
59
vendor/maunium.net/go/mautrix/crypto/olm/pk.go
generated
vendored
@@ -109,3 +109,62 @@ func (p *PkSigning) SignJSON(obj interface{}) (string, error) {
|
||||
func (p *PkSigning) lastError() error {
|
||||
return convertError(C.GoString(C.olm_pk_signing_last_error((*C.OlmPkSigning)(p.int))))
|
||||
}
|
||||
|
||||
type PkDecryption struct {
|
||||
int *C.OlmPkDecryption
|
||||
mem []byte
|
||||
PublicKey []byte
|
||||
}
|
||||
|
||||
func pkDecryptionSize() uint {
|
||||
return uint(C.olm_pk_decryption_size())
|
||||
}
|
||||
|
||||
func pkDecryptionPublicKeySize() uint {
|
||||
return uint(C.olm_pk_key_length())
|
||||
}
|
||||
|
||||
func NewPkDecryption(privateKey []byte) (*PkDecryption, error) {
|
||||
memory := make([]byte, pkDecryptionSize())
|
||||
p := &PkDecryption{
|
||||
int: C.olm_pk_decryption(unsafe.Pointer(&memory[0])),
|
||||
mem: memory,
|
||||
}
|
||||
p.Clear()
|
||||
pubKey := make([]byte, pkDecryptionPublicKeySize())
|
||||
|
||||
if C.olm_pk_key_from_private((*C.OlmPkDecryption)(p.int),
|
||||
unsafe.Pointer(&pubKey[0]), C.size_t(len(pubKey)),
|
||||
unsafe.Pointer(&privateKey[0]), C.size_t(len(privateKey))) == errorVal() {
|
||||
return nil, p.lastError()
|
||||
}
|
||||
p.PublicKey = pubKey
|
||||
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func (p *PkDecryption) Decrypt(ephemeralKey []byte, mac []byte, ciphertext []byte) ([]byte, error) {
|
||||
maxPlaintextLength := uint(C.olm_pk_max_plaintext_length((*C.OlmPkDecryption)(p.int), C.size_t(len(ciphertext))))
|
||||
plaintext := make([]byte, maxPlaintextLength)
|
||||
|
||||
size := C.olm_pk_decrypt((*C.OlmPkDecryption)(p.int),
|
||||
unsafe.Pointer(&ephemeralKey[0]), C.size_t(len(ephemeralKey)),
|
||||
unsafe.Pointer(&mac[0]), C.size_t(len(mac)),
|
||||
unsafe.Pointer(&ciphertext[0]), C.size_t(len(ciphertext)),
|
||||
unsafe.Pointer(&plaintext[0]), C.size_t(len(plaintext)))
|
||||
if size == errorVal() {
|
||||
return nil, p.lastError()
|
||||
}
|
||||
|
||||
return plaintext[:size], nil
|
||||
}
|
||||
|
||||
// Clear clears the underlying memory of a PkDecryption object.
|
||||
func (p *PkDecryption) Clear() {
|
||||
C.olm_clear_pk_decryption((*C.OlmPkDecryption)(p.int))
|
||||
}
|
||||
|
||||
// lastError returns the last error that happened in relation to this PkDecryption object.
|
||||
func (p *PkDecryption) lastError() error {
|
||||
return convertError(C.GoString(C.olm_pk_decryption_last_error((*C.OlmPkDecryption)(p.int))))
|
||||
}
|
||||
|
||||
4
vendor/maunium.net/go/mautrix/crypto/olm/utility.go
generated
vendored
4
vendor/maunium.net/go/mautrix/crypto/olm/utility.go
generated
vendored
@@ -11,10 +11,10 @@ import (
|
||||
|
||||
"github.com/tidwall/gjson"
|
||||
"github.com/tidwall/sjson"
|
||||
"go.mau.fi/util/exgjson"
|
||||
|
||||
"maunium.net/go/mautrix/crypto/canonicaljson"
|
||||
"maunium.net/go/mautrix/id"
|
||||
"maunium.net/go/mautrix/util"
|
||||
)
|
||||
|
||||
// Utility stores the necessary state to perform hash and signature
|
||||
@@ -115,7 +115,7 @@ func (u *Utility) VerifySignatureJSON(obj interface{}, userID id.UserID, keyName
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
sig := gjson.GetBytes(objJSON, util.GJSONPath("signatures", string(userID), fmt.Sprintf("ed25519:%s", keyName)))
|
||||
sig := gjson.GetBytes(objJSON, exgjson.Path("signatures", string(userID), fmt.Sprintf("ed25519:%s", keyName)))
|
||||
if !sig.Exists() || sig.Type != gjson.String {
|
||||
return false, SignatureNotFound
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user