Watch
1
0
Fork
You've already forked mautrix-discord
0
mirror of https://github.com/mautrix/discord.git synced 2026-08-22 12:04:54 -04:00
mautrix-discord/pkg/meowcord/launchsig.go
Skip R e2d47d7d32 meow: import beeper fork
[skip ci] for now, will fix lints and checks in a later pass.
2026-07-14 11:36:09 -07:00

61 lines
2.1 KiB
Go

// mautrix-discord - A Matrix-Discord puppeting bridge.
// Copyright (C) 2026 The mautrix-discord contributors
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
package meowcord
import (
"encoding"
"fmt"
"github.com/google/uuid"
)
const uuidv4ByteSize = 16
// A LaunchSignature is a valid version 4 UUID that doubles as a bitfield denoting the presence
// of certain properties on the JavaScript window object.
//
// In the first-party client, launch signatures are generated by libdiscore.
type LaunchSignature uuid.UUID
// A bitmask that, when ANDed with the bytes of a version 4 UUID, produces a launch signature reflecting
// no detected properties.
//
// Note that this incidentally includes the bits that must be zeroed in a valid version 4 UUID.
var vanillaBitmask = [uuidv4ByteSize]byte{0xff, 0x7f, 0xef, 0xef, 0xf7, 0xef, 0x47, 0xff, 0x9f, 0x7e, 0xff, 0xbf, 0xfe, 0xff, 0xf7, 0xff}
// NewVanillaSignature randomly generates a valid launch signature corresponding to a completely unmodified
// client, i.e. a browser environment that does not trip any of the property checks.
func NewVanillaSignature() (LaunchSignature, error) {
uuid := uuid.New()
for i := 0; i < uuidv4ByteSize; i++ {
uuid[i] &= vanillaBitmask[i]
}
return LaunchSignature(uuid), nil
}
var _ encoding.TextMarshaler = (*LaunchSignature)(nil)
var _ fmt.Stringer = (*LaunchSignature)(nil)
func (l LaunchSignature) MarshalText() (text []byte, err error) {
return uuid.UUID(l).MarshalText()
}
func (l LaunchSignature) String() string {
return uuid.UUID(l).String()
}