2023-06-30 09:54:08 +00:00
|
|
|
package payload
|
|
|
|
|
|
|
|
import (
|
|
|
|
"go.mau.fi/mautrix-gmessages/libgm/binary"
|
|
|
|
"go.mau.fi/mautrix-gmessages/libgm/crypto"
|
|
|
|
"go.mau.fi/mautrix-gmessages/libgm/util"
|
|
|
|
)
|
|
|
|
|
|
|
|
func RegisterPhoneRelay(jwk *crypto.JWK) ([]byte, *binary.Container, error) {
|
|
|
|
id := util.RandomUUIDv4()
|
|
|
|
decodedPrivateKey, err2 := jwk.PrivKeyB64Bytes()
|
|
|
|
if err2 != nil {
|
|
|
|
return nil, nil, err2
|
|
|
|
}
|
|
|
|
jwk.PrivateBytes = decodedPrivateKey
|
|
|
|
uncompressedPublicKey, err3 := jwk.UncompressPubKey()
|
|
|
|
if err3 != nil {
|
|
|
|
return nil, nil, err3
|
|
|
|
}
|
|
|
|
var emptyByteArray []byte
|
|
|
|
crypto.EncodeValues(&emptyByteArray, crypto.SequenceOne)
|
|
|
|
crypto.EncodeValues(&emptyByteArray, crypto.SequenceTwo)
|
|
|
|
|
|
|
|
var copiedByteArray []byte
|
|
|
|
copiedByteArray = crypto.AppendByteSequence(copiedByteArray, emptyByteArray, uncompressedPublicKey)
|
|
|
|
for _, value := range uncompressedPublicKey {
|
|
|
|
copiedByteArray = crypto.HelperAppendBytes(copiedByteArray, value)
|
|
|
|
}
|
|
|
|
|
|
|
|
var emptyByteArray2 []byte
|
|
|
|
emptyByteArray2 = crypto.AppendBytes(emptyByteArray2, copiedByteArray[0:])
|
|
|
|
|
|
|
|
payloadData := &binary.Container{
|
|
|
|
PhoneRelay: &binary.PhoneRelayBody{
|
2023-06-30 13:26:46 +00:00
|
|
|
ID: id,
|
2023-06-30 09:54:08 +00:00
|
|
|
Bugle: "Bugle",
|
|
|
|
Date: &binary.Date{
|
|
|
|
Year: 2023,
|
|
|
|
Seq1: 6,
|
|
|
|
Seq2: 8,
|
|
|
|
Seq3: 4,
|
|
|
|
Seq4: 6,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
BrowserDetails: &binary.BrowserDetails{
|
2023-06-30 13:31:35 +00:00
|
|
|
UserAgent: util.UserAgent,
|
2023-06-30 09:54:08 +00:00
|
|
|
SomeInt: 2,
|
|
|
|
SomeBool: true,
|
|
|
|
Os: util.OS,
|
|
|
|
},
|
|
|
|
PairDeviceData: &binary.PairDeviceData{
|
|
|
|
EcdsaKeys: &binary.ECDSAKeys{
|
|
|
|
ProtoVersion: 2,
|
|
|
|
EncryptedKeys: emptyByteArray2,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
encoded, err4 := binary.EncodeProtoMessage(payloadData)
|
|
|
|
if err4 != nil {
|
|
|
|
return nil, payloadData, err4
|
|
|
|
}
|
|
|
|
return encoded, payloadData, nil
|
|
|
|
}
|