31 data << WorldPackets::Bits<1>(virtualRealmInfo.
IsLocal);
33 data << WorldPackets::SizedString::BitsSize<8>(virtualRealmInfo.
RealmNameActual);
78 uint32 realmJoinTicketSize;
88 if (realmJoinTicketSize)
100 data << Bits<1>(gameTime.
IsInIGR);
110 for (std::size_t i = 0; i < 16; ++i)
128 data << Size<uint32>(successInfo.
Templates);
131 data << successInfo.
Time;
134 data << virtualRealm;
138 data <<
uint8(raceClassAvailability.RaceID);
139 data << Size<uint32>(raceClassAvailability.Classes);
143 data <<
uint8(classAvailability.ClassID);
144 data <<
uint8(classAvailability.ActiveExpansionLevel);
145 data <<
uint8(classAvailability.AccountExpansionLevel);
146 data <<
uint8(classAvailability.MinActiveExpansionLevel);
152 data <<
uint32(characterTemplate->TemplateSetId);
153 data << Size<uint32>(characterTemplate->Classes);
156 data <<
uint8(templateClass.ClassID);
157 data <<
uint8(templateClass.FactionGroup);
160 data << SizedString::BitsSize<7>(characterTemplate->Name);
161 data << SizedString::BitsSize<10>(characterTemplate->Description);
196 data << WorldPackets::Bits<1>(waitInfo.
HasFCM);
228std::string
const RSAPrivateKey = R
"(-----BEGIN RSA PRIVATE KEY-----
229MIIEpAIBAAKCAQEA7rPc1NPDtFRRzmZbyzK48PeSU8YZ8gyFL4omqXpFn2DE683q
230f41Z2FeyYHsJTJtouMft7x6ADeZrN1tTkOsYEw1/Q2SD2pjmrMIwooKlxsvH+4af
231n6kCagNJxTj7wMhVzMDOJZG+hc/R0TfOzIPS6jCAB3uAn51EVCIpvoba20jFqfkT
232NpUjdvEO3IQNlAISqJfzOxTuqm+YBSdOH6Ngpana2BffM8viE1SLGLDKubuIZAbf
233dabXYQC7sFoOetR3CE0V4hCDsASqnot3qQaJXQhdD7gua8HLZM9uXNtPWGUIUfsN
234SBpvtj0fC93+Gx3wv7Ana/WOvMdAAf+nC4DWXwIDAQABAoIBACKa5q/gB2Y0Nyvi
235APrDXrZoXclRVd+WWxSaRaKaPE+vuryovI9DUbwgcpa0H5QAj70CFwdsd4oMVozO
2366519x56zfTiq8MaXFhIDkQNuR1Q7pMFdMfT2jogJ8/7olO7M3EtzxC8EIwfJKhTX
237r15M2h3jbBwplmsNZKOB1GVvrXjOm1KtOZ4CTTM0WrPaLVDT9ax8pykjmFw16vGP
238j/R5Dky9VpabtfZOu/AEW259XDEiQgTrB4Eg+S4GJjHqAzPZBmMy/xhlDK4oMXef
239qXScfD4w0RxuuCFr6lxLPZz0S35BK1kIWmIkuv+9eQuI4Hr1CyVwch4fkfvrp84x
2408tvAFnkCgYEA87NZaG9a8/Mob6GgY4BVLHJVOSzzFdNyMA+4LfSbtzgON2RSZyeD
2410JpDowwXssw5XOyUUctj2cLLdlMCpDfdzk4F/PEakloDJWpason3lmur0/5Oq3T9
2423+fnNUl4d3UOs1jcJ1yGQ/BfrTyRTcEoZx8Mu9mJ4ituVkKuLeG5vX0CgYEA+r/w
243QBJS6kDyQPj1k/SMClUhWhyADwDod03hHTQHc9BleJyjXmVy+/pWhN7aELhjgLbf
244o/Gm3aKJjCxS4qBmqUKwAvGoSVux1Bo2ZjcfF7sX9BXBOlFTG+bPVCZUoaksTyXN
245g7GsA1frKkWWkgQuOeK3o/p9IZoBl93vEgcTGgsCgYEAv5ucCIjFMllUybCCsrkM
246Ps4GQ9YbqmV9ulwhq8BPTlc8lkDCqWhgM3uXAnNXjrUTxQQd+dG4yFZoMrhBs2xZ
247cQPXoXDQO5GaN6jPduETUamGiD/DCvwJQCrNlxAVL5dR36FWN3x/9JriHwsoE8Jz
248SeEX2frIdpM/RYNX/6sipuECgYEA+rwFRDxOdvm8hGWuQ2WMxyQ7Nn07PEV/LxVM
249HkSRkyh23vVakyDEqty3uSOSUJfgv6ud07TnU8ac3fLQatdT8LrDgB4fVkN/fYU8
250kldaGwO1vxgl4OfDQCo7dXzisciViwtVBvQZ+jnm6J0vJBFUHAPt9+WZTIlQQIjm
25171LtseMCgYBSAhs6lshtz+ujR3fmc4QqJVGqeXvEBPAVm6yYoKYRLwVs/rFv3WLN
252LOwwBQ6lz7P9RqYYB5wVlaRvEhb9+lCve/xVcxMeZ5GkOBPxVygYV9l/wNdE25Nz
253OHYtKG3GK3GEcFDwZU2LPHq21EroUAdtRfbrJ4KW2yc8igtXKxTBYw==
254-----END RSA PRIVATE KEY-----
257std::array<uint8, 32> constexpr EnterEncryptedModePrivateKey =
259 0x08, 0xBD, 0xC7, 0xA3, 0xCC, 0xC3, 0x4F, 0x3F,
260 0x6A, 0x0B, 0xFF, 0xCF, 0x31, 0xC1, 0xB6, 0x97,
261 0x69, 0x1E, 0x72, 0x9A, 0x0A, 0xAB, 0x2C, 0x77,
262 0xC3, 0x6F, 0x8A, 0xE7, 0x5A, 0x9A, 0xA7, 0xC9
265std::unique_ptr<Trinity::Crypto::RsaSignature> ConnectToRSA;
266std::unique_ptr<Trinity::Crypto::Ed25519> EnterEncryptedModeSigner;
271 data << SizedString::BitsSize<5>(bleepToken.
Token);
272 data << SizedCString::BitsSize<24>(bleepToken.
ProxyId);
273 data << SizedString::BitsSize<6>(bleepToken.
Address);
301 data << payload.
Token;
308 std::unique_ptr<Trinity::Crypto::RsaSignature> rsa = std::make_unique<Trinity::Crypto::RsaSignature>();
309 if (!rsa->LoadKeyFromString(RSAPrivateKey))
312 ConnectToRSA = std::move(rsa);
318 ConnectToRSA.reset();
323 _worldPacket << Size<uint32>(
Payload);
354 std::unique_ptr<Trinity::Crypto::Ed25519> ed25519 = std::make_unique<Trinity::Crypto::Ed25519>();
355 if (!ed25519->LoadFromByteArray(EnterEncryptedModePrivateKey))
358 EnterEncryptedModeSigner = std::move(ed25519);
364 EnterEncryptedModeSigner.reset();
367std::array<uint8, 32>
constexpr EnableEncryptionSeed = { 0x66, 0xBE, 0x29, 0x79, 0xEF, 0xF2, 0xD5, 0xB5, 0x61, 0x53, 0xF6, 0x5F, 0x45, 0xAE, 0x81, 0xCB,
368 0x32, 0xEC, 0x94, 0xEC, 0x75, 0xB3, 0x5F, 0x44, 0x6A, 0x63, 0x43, 0x67, 0x17, 0x20, 0x44, 0x34 };
369std::array<uint8, 16>
constexpr EnableEncryptionContext = { 0xA7, 0x1F, 0xB6, 0x9B, 0xC9, 0x7C, 0xDD, 0x96, 0xE9, 0xBB, 0xB8, 0x21, 0x39, 0x8D, 0x5A, 0xD4 };
378 std::vector<uint8> signature;
384 _worldPacket << Bits<1>(
Enabled);
void resize(size_t newsize)
static Digest GetDigestOf(Container const &seed, uint8 const *data, size_t len)
std::array< uint8, 32 > Challenge
WorldPacket const * Write() override
std::array< uint32, 8 > DosChallenge
uint32 NativeRealmAddress
std::array< uint8, DigestLength > Digest
std::array< uint8, 32 > LocalChallenge
uint32 Result
the result of the authentication process, possible values are BattlenetRpcErrorCode
WorldPacket const * Write() override
Optional< AuthWaitInfo > WaitInfo
contains the queue wait information in case the account is in the login queue.
Optional< AuthSuccessInfo > SuccessInfo
contains the packet data in case that it has account information (It is never set when WaitInfo is se...
std::array< uint8, 32 > LocalChallenge
std::string RealmJoinTicket
std::array< uint8, DigestLength > Digest
static void ShutdownEncryption()
WorldPacket const * Write() override
std::vector< ConnectPayload > Payload
uint32 NativeRealmAddress
static bool InitializeEncryption()
static bool InitializeEncryption()
static void ShutdownEncryption()
WorldPacket const * Write() override
std::array< uint8, 32 > const & EncryptionKey
WorldPacket const * Write() override
WorldPacket const * Write() override
std::array< uint8, 32 > constexpr EnableEncryptionSeed
ByteBuffer & operator<<(ByteBuffer &data, VirtualRealmNameInfo const &virtualRealmInfo)
std::array< uint8, 16 > constexpr EnableEncryptionContext
DataWriter< Container > Data(Container const &value)
DataWriter< Container > Data(Container const &value)
OptionalInitWriter< T > OptionalInit(Optional< T > const &value)
std::vector< RaceClassAvailability > const * AvailableClasses
the minimum AccountExpansion required to select race/class combinations
uint8 ActiveExpansionLevel
the current server expansion, the possible values are in Expansions
uint8 AccountExpansionLevel
the current expansion of this account, the possible values are in Expansions
bool ForceCharacterTemplate
forces the client to always use a character template when creating a new character.
uint32 TimeRested
affects the return value of the GetBillingTimeRested() client API call, it is the number of seconds y...
std::vector< CharacterTemplate const * > Templates
list of pre-made character templates.
Optional< Timestamp<> > ExpansionTrialExpiration
expansion trial expiration unix timestamp
Optional< uint16 > NumPlayersAlliance
number of alliance players in this realm.
uint32 VirtualRealmAddress
a special identifier made from the Index, BattleGroup and Region.
Optional< BaseBuildKey > CurrentBuild
uint32 TimeSecondsUntilPCKick
uint32 CurrencyID
this is probably used for the ingame shop.
std::vector< VirtualRealmInfo > VirtualRealms
list of realms connected to this one (inclusive)
Optional< uint16 > NumPlayersHorde
number of horde players in this realm.
bool HasFCM
true if the account has a forced character migration pending.
bool CanCreateOnlyIfExisting
Can create characters on realm only if player has other existing characters there.
uint8 AllowedFactionGroupForCharacterCreate
uint32 WaitCount
position of the account in the login queue
uint32 WaitTime
Wait time in login queue in minutes, if sent queued and this value is 0 client displays "unknown time...
std::array< uint8, 16 > ConfigKey
std::array< uint8, 16 > BuildKey
Duration< std::chrono::nanoseconds > TokenLifespan
union WorldPackets::Auth::ConnectTo::SocketAddress::@312 Address
std::array< char, 128 > Name
std::array< uint8, 4 > V4
std::array< uint8, 16 > V6
VirtualRealmNameInfo RealmNameInfo
uint32 RealmAddress
the virtual address of this realm, constructed as RealmHandle::Region << 24 | RealmHandle::Battlegrou...
std::string RealmNameActual
the name of the realm
std::string RealmNameNormalized
the name of the realm without spaces
bool IsLocal
true if the realm is the same as the account's home realm