📄 tmsgauth1loginhl.h
字号:
#ifndef _TMsgAuth1LoginHL_H
#define _TMsgAuth1LoginHL_H
// TMsgAuth1LoginHL.h
// AuthServer messages implementing the Auth1 Family login Half-Life protocol.
// This header/source implements messages:
// Auth1LoginRequestHL
// Auth1ChallengeHL
// Auth1ConfirmHL
// It also included the Auth1LoginReply which is implemented in its own header
// and source module (it is shared).
// Auth1LoginRequestHL begins login for Half-Life and is sent from the Client to
// the AuthServer.
// Auth1ChallengeHL is sent in response to Auth1LoginRequest from the AuthServer
// to the client.
// Auth1ConfirmHL is sent in response to Auth1ChallengeHL from the Client to the
// AuthServer.
// Auth1RefreshHL is from the Client to the AuthServer to request extension of an
// Login session and AuthCertificate.
// Auth1LoginReply is sent in response to Auth1ConfirmHL from the AuthServer
// to the client and completes the login. It is also sent in response to
// Auth1RefreshHL, extending the login session.
#include "TMsgAuthRawBufferBase.h"
#include "TMsgAuthLastRawBufferBase.h"
#include "TMsgAuth1LoginBase2.h"
#include "msg/TServiceTypes.h"
#include "msg/ServerStatus.h"
#include "auth/Auth1PublicKeyBlock.h"
#include "crypt/BFSymmetricKey.h"
// Forwards from WONSocket
namespace WONMsg {
// TMsgAuth1LoginRequestHL - begin login
// Contains login data encrypted with public key. Public key used is specified
// by the KeyBlockId. Login data is expected to contain:
// Key Block ID (2 bytes) Must match key block Id in message
// Session Key len (2 bytes)
// Session Key (var bytes == Session Key Len)
// Half-Life CD Key (? bytes)
class TMsgAuth1LoginRequestHL : public TMsgAuthRawBufferBase
{
public:
// Default ctor
TMsgAuth1LoginRequestHL();
// TMessage ctor - will throw if TMessage type is not of this type
explicit TMsgAuth1LoginRequestHL(const TMessage& theMsgR);
// Copy ctor
TMsgAuth1LoginRequestHL(const TMsgAuth1LoginRequestHL& theMsgR);
// Destructor
~TMsgAuth1LoginRequestHL();
// Assignment
TMsgAuth1LoginRequestHL& operator=(const TMsgAuth1LoginRequestHL& theMsgR);
// Virtual Duplicate from TMessage
TRawMsg* Duplicate() const;
// Pack and Unpack the message
// Unpack will throw a BadMsgException is message is not of this type
void* Pack();
void Unpack();
// KeyBlock ID access
unsigned short GetKeyBlockId() const;
void SetKeyBlockId(unsigned short theId);
// NeedKey flag access
bool GetNeedKey() const;
void SetNeedKey(bool theFlag);
private:
unsigned short mKeyBlockId; // Id of AuthServ pub key block used to encrypt
bool mNeedKey; // Flag, client requesting to pub/priv key
};
// TMsgAuth1ChallengeHL - Challenge the client's validity
// Contains challenge seed encrypted with session key. Session key was specified
// in the TMsgAuth1LoginRequestHL message.
class TMsgAuth1ChallengeHL : public TMsgAuthRawBufferBase
{
public:
// Default ctor
TMsgAuth1ChallengeHL();
// TMessage ctor - will throw if TMessage type is not of this type
explicit TMsgAuth1ChallengeHL(const TMessage& theMsgR);
// Copy ctor
TMsgAuth1ChallengeHL(const TMsgAuth1ChallengeHL& theMsgR);
// Destructor
~TMsgAuth1ChallengeHL();
// Assignment
TMsgAuth1ChallengeHL& operator=(const TMsgAuth1ChallengeHL& theMsgR);
// Virtual Duplicate from TMessage
TRawMsg* Duplicate() const;
// Pack and Unpack the message
// Unpack will throw a BadMsgException is message is not of this type
void* Pack();
void Unpack();
private:
};
// TMsgAuth1ConfirmHL - Confirm the client's validity
// Contains confirm seed encrypted with session key. Session key was specified
// in the TMsgAuth1LoginRequestHL message.
class TMsgAuth1ConfirmHL : public TMsgAuthRawBufferBase
{
public:
// Default ctor
TMsgAuth1ConfirmHL();
// TMessage ctor - will throw if TMessage type is not of this type
explicit TMsgAuth1ConfirmHL(const TMessage& theMsgR);
// Copy ctor
TMsgAuth1ConfirmHL(const TMsgAuth1ConfirmHL& theMsgR);
// Destructor
~TMsgAuth1ConfirmHL();
// Assignment
TMsgAuth1ConfirmHL& operator=(const TMsgAuth1ConfirmHL& theMsgR);
// Virtual Duplicate from TMessage
TRawMsg* Duplicate() const;
// Pack and Unpack the message
// Unpack will throw a BadMsgException is message is not of this type
void* Pack();
void Unpack();
private:
};
// TMsgAuth1RefreshHL - request extension
// Contains Refresh Data encrypted with session key. The session key
// matches the key sent in the Auth1LoginRequestHL message.
// RawBuf is expected to contain:
// Random Pad (6 bytes) Must be different for each Refresh request.
// User ID (4 bytes) Must match key block Id in message
class TMsgAuth1RefreshHL : public TMsgAuthLastRawBufferBase
{
public:
// Default ctor
TMsgAuth1RefreshHL();
// TMessage ctor - will throw if TMessage type is not of this type
explicit TMsgAuth1RefreshHL(const TMessage& theMsgR);
// Copy ctor
TMsgAuth1RefreshHL(const TMsgAuth1RefreshHL& theMsgR);
// Destructor
~TMsgAuth1RefreshHL();
// Assignment
TMsgAuth1RefreshHL& operator=(const TMsgAuth1RefreshHL& theMsgR);
// Virtual Duplicate from TMessage
TRawMsg* Duplicate() const;
// Pack and Unpack the message
// Unpack will throw a BadMsgException is message is not of this type
void* Pack();
void Unpack();
// User ID access
unsigned long GetUserId() const;
void SetUserId(unsigned long theId);
private:
unsigned long mUserId;
};
// TMsgAuth1CheckHLKey -
// Key Block ID (2 bytes) Must match key block Id in encrypted block
// Session Block Length(2 bytes)
// Session Key Block (variable) Session key Encrypted with AuthPublicKey
// Data Block (variable) encrypted with Session Key
// Before encryption, Data Block contains:
// KeyBlockID (2 bytes) Must match key block Id in message
// NeedKeyFlg (1 byte )
// CreateAcctFlg (1 byte )
// UserName len (2 bytes)
// UserName (variable)
// CommunityNameLen (2 bytes)
// CommunityName (variable)
// NicknameKeyLen (2 bytes)
// NicknameKey (variable)
// Password len (2 bytes)
// Password (var bytes == Password Len)
// NewPassword len (2 Bytes)
// NewPassword (var bytes == newPassword Len) (May be 0)
// // LoginSessionID is typically a CD key, but could be something else.
// // The AuthServer only allows one login session per key. It may also
// // do validation checks on the key.
// CDKey len (2 bytes)
// CDKey (var bytes == LoginSessionKeyLen) - typically a CD Key
// Login data is encrypted with the and stored in the
// raw buffer from the TMsgAuthRawBufferBase class.
class TMsgAuth1CheckHLKey : public TMsgAuth1LoginBase2
{
public:
// Default ctor
TMsgAuth1CheckHLKey();
// TMessage ctor - will throw if TMessage type is not of this type
explicit TMsgAuth1CheckHLKey(const TMessage& theMsgR);
// Copy ctor
TMsgAuth1CheckHLKey(const TMsgAuth1CheckHLKey& theMsgR);
// Destructor
~TMsgAuth1CheckHLKey();
// Assignment
TMsgAuth1CheckHLKey& operator=(const TMsgAuth1CheckHLKey& theMsgR);
// Virtual Duplicate from TMessage
TRawMsg* Duplicate() const;
// Pack and Unpack the message
// Unpack will throw a BadMsgException is message is not of this type
void* Pack();
void Unpack();
bool GetNeedKeyFlg(void) { return mNeedKeyFlg; }
bool GetCreateAcctFlg(void) { return mCreateAcctFlg; }
const std::wstring& GetUserName(void) { return mUserName; }
const std::wstring& GetCommunityName(void) { return mCommunityName; }
const std::wstring& GetNicknameKey(void) { return mNicknameKey; }
const std::wstring& GetPassword(void) { return mPassword; }
const std::wstring& GetNewPassword(void) { return mNewPassword; }
const WONCommon::RawBuffer& GetCDKey(void) { return mCDKey; }
void SetNeedKeyFlg(bool theNeedKeyFlg) { mNeedKeyFlg = theNeedKeyFlg; }
void SetCreateAcctFlg(bool theCreateAcctFlg) { mCreateAcctFlg = theCreateAcctFlg; }
void SetUserName(const std::wstring &theUserName) { mUserName = theUserName; }
void SetCommunityName(const std::wstring &theCommunityName) { mCommunityName = theCommunityName; }
void SetNicknameKey(const std::wstring &theNicknameKey) { mNicknameKey = theNicknameKey; }
void SetPassword(const std::wstring &thePassword) { mPassword = thePassword; }
void SetNewPassword(const std::wstring &theNewPassword) { mNewPassword = theNewPassword; }
void SetCDKey(const unsigned char *theKey, unsigned short theKeyLen) { mCDKey.assign(theKey,theKeyLen); }
bool BuildBuffer(const WONAuth::Auth1PublicKeyBlock &thePubKeyBlock, const WONCrypt::BFSymmetricKey &theSessionKey);
bool ExtractBuffer(const WONCrypt::EGPrivateKey &thePrivateKey, WONCrypt::BFSymmetricKey *theSessionKey);
private:
bool mNeedKeyFlg;
bool mCreateAcctFlg;
std::wstring mUserName;
std::wstring mCommunityName;
std::wstring mNicknameKey;
std::wstring mPassword;
std::wstring mNewPassword;
WONCommon::RawBuffer mCDKey;
unsigned char *mKeyBuf;
unsigned char *mDataBuf;
};
// Inlines
inline TRawMsg*
TMsgAuth1LoginRequestHL::Duplicate(void) const
{ return new TMsgAuth1LoginRequestHL(*this); }
inline unsigned short
TMsgAuth1LoginRequestHL::GetKeyBlockId() const
{ return mKeyBlockId; }
inline void
TMsgAuth1LoginRequestHL::SetKeyBlockId(unsigned short theId)
{ mKeyBlockId = theId; }
inline bool
TMsgAuth1LoginRequestHL::GetNeedKey() const
{ return mNeedKey; }
inline void
TMsgAuth1LoginRequestHL::SetNeedKey(bool theFlag)
{ mNeedKey = theFlag; }
inline TRawMsg*
TMsgAuth1ChallengeHL::Duplicate(void) const
{ return new TMsgAuth1ChallengeHL(*this); }
inline TRawMsg*
TMsgAuth1ConfirmHL::Duplicate(void) const
{ return new TMsgAuth1ConfirmHL(*this); }
inline TRawMsg*
TMsgAuth1RefreshHL::Duplicate(void) const
{ return new TMsgAuth1RefreshHL(*this); }
inline unsigned long
TMsgAuth1RefreshHL::GetUserId() const
{ return mUserId; }
inline void
TMsgAuth1RefreshHL::SetUserId(unsigned long theId)
{ mUserId = theId; }
inline TRawMsg*
TMsgAuth1CheckHLKey::Duplicate(void) const
{ return new TMsgAuth1CheckHLKey(*this); }
}; // Namespace WONMsg
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -