CMD_AUTH_LOGON_PROOF_Client
Protocol Version 2
Reply after successful CMD_AUTH_LOGON_CHALLENGE_Server.
Wowm Representation
Autogenerated from wowm
file at wow_message_parser/wowm/login/cmd_auth_logon/proof_client.wowm:13
.
clogin CMD_AUTH_LOGON_PROOF_Client = 0x01 {
u8[32] client_public_key;
u8[20] client_proof;
u8[20] crc_hash;
u8 number_of_telemetry_keys;
TelemetryKey[number_of_telemetry_keys] telemetry_keys;
}
Header
Login messages have a header of 1 byte with an opcode. Some messages also have a size field but this is not considered part of the header.
Login Header
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x00 | 1 / - | uint8 | opcode | Opcode that determines which fields the message contains. |
Body
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
0x01 | 32 / - | u8[32] | client_public_key | |
0x21 | 20 / - | u8[20] | client_proof | |
0x35 | 20 / - | u8[20] | crc_hash | |
0x49 | 1 / - | u8 | number_of_telemetry_keys | |
0x4A | ? / - | TelemetryKey[number_of_telemetry_keys] | telemetry_keys |
Examples
Example 1
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
2, // number_of_telemetry_keys: u8
255, 0, // [0].TelemetryKey.unknown1: u16
239, 190, 173, 222, // [0].TelemetryKey.unknown2: u32
1, 2, 3, 4, // [0].TelemetryKey.unknown3: u8[4]
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, // [0].TelemetryKey.cd_key_proof: u8[20]
254, 0, // [1].TelemetryKey.unknown1: u16
238, 190, 173, 222, // [1].TelemetryKey.unknown2: u32
0, 1, 2, 3, // [1].TelemetryKey.unknown3: u8[4]
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, // [1].TelemetryKey.cd_key_proof: u8[20]
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
Example 2
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
1, // number_of_telemetry_keys: u8
255, 0, // [0].TelemetryKey.unknown1: u16
239, 190, 173, 222, // [0].TelemetryKey.unknown2: u32
1, 2, 3, 4, // [0].TelemetryKey.unknown3: u8[4]
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, // [0].TelemetryKey.cd_key_proof: u8[20]
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
Example 3
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
0, // number_of_telemetry_keys: u8
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
Protocol Version 3
Reply after successful CMD_AUTH_LOGON_CHALLENGE_Server.
Wowm Representation
Autogenerated from wowm
file at wow_message_parser/wowm/login/cmd_auth_logon/proof_client.wowm:143
.
clogin CMD_AUTH_LOGON_PROOF_Client = 0x01 {
u8[32] client_public_key;
u8[20] client_proof;
u8[20] crc_hash;
u8 number_of_telemetry_keys;
TelemetryKey[number_of_telemetry_keys] telemetry_keys;
SecurityFlag security_flag;
if (security_flag == PIN) {
u8[16] pin_salt;
u8[20] pin_hash;
}
}
Header
Login messages have a header of 1 byte with an opcode. Some messages also have a size field but this is not considered part of the header.
Login Header
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x00 | 1 / - | uint8 | opcode | Opcode that determines which fields the message contains. |
Body
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
0x01 | 32 / - | u8[32] | client_public_key | |
0x21 | 20 / - | u8[20] | client_proof | |
0x35 | 20 / - | u8[20] | crc_hash | |
0x49 | 1 / - | u8 | number_of_telemetry_keys | |
0x4A | ? / - | TelemetryKey[number_of_telemetry_keys] | telemetry_keys | |
- | 1 / - | SecurityFlag | security_flag |
If security_flag is equal to PIN
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | 16 / - | u8[16] | pin_salt | |
- | 20 / - | u8[20] | pin_hash |
Examples
Example 1
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
2, // number_of_telemetry_keys: u8
255, 0, // [0].TelemetryKey.unknown1: u16
239, 190, 173, 222, // [0].TelemetryKey.unknown2: u32
1, 2, 3, 4, // [0].TelemetryKey.unknown3: u8[4]
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, // [0].TelemetryKey.cd_key_proof: u8[20]
254, 0, // [1].TelemetryKey.unknown1: u16
238, 190, 173, 222, // [1].TelemetryKey.unknown2: u32
0, 1, 2, 3, // [1].TelemetryKey.unknown3: u8[4]
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, // [1].TelemetryKey.cd_key_proof: u8[20]
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
0, // security_flag: SecurityFlag NONE (0x0)
Example 2
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
1, // number_of_telemetry_keys: u8
255, 0, // [0].TelemetryKey.unknown1: u16
239, 190, 173, 222, // [0].TelemetryKey.unknown2: u32
1, 2, 3, 4, // [0].TelemetryKey.unknown3: u8[4]
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, // [0].TelemetryKey.cd_key_proof: u8[20]
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
0, // security_flag: SecurityFlag NONE (0x0)
Example 3
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
0, // number_of_telemetry_keys: u8
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
0, // security_flag: SecurityFlag NONE (0x0)
Example 4
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
0, // number_of_telemetry_keys: u8
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
1, // security_flag: SecurityFlag PIN (0x1)
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // pin_salt: u8[16]
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, // pin_hash: u8[20]
Protocol Version 5, Protocol Version 6, Protocol Version 7
Reply after successful CMD_AUTH_LOGON_CHALLENGE_Server.
Wowm Representation
Autogenerated from wowm
file at wow_message_parser/wowm/login/cmd_auth_logon/proof_client.wowm:319
.
clogin CMD_AUTH_LOGON_PROOF_Client = 0x01 {
u8[32] client_public_key;
u8[20] client_proof;
u8[20] crc_hash;
u8 number_of_telemetry_keys;
TelemetryKey[number_of_telemetry_keys] telemetry_keys;
SecurityFlag security_flag;
if (security_flag & PIN) {
u8[16] pin_salt;
u8[20] pin_hash;
}
if (security_flag & MATRIX_CARD) {
u8[20] matrix_card_proof;
}
}
Header
Login messages have a header of 1 byte with an opcode. Some messages also have a size field but this is not considered part of the header.
Login Header
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x00 | 1 / - | uint8 | opcode | Opcode that determines which fields the message contains. |
Body
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
0x01 | 32 / - | u8[32] | client_public_key | |
0x21 | 20 / - | u8[20] | client_proof | |
0x35 | 20 / - | u8[20] | crc_hash | |
0x49 | 1 / - | u8 | number_of_telemetry_keys | |
0x4A | ? / - | TelemetryKey[number_of_telemetry_keys] | telemetry_keys | |
- | 1 / - | SecurityFlag | security_flag |
If security_flag contains PIN
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | 16 / - | u8[16] | pin_salt | |
- | 20 / - | u8[20] | pin_hash |
If security_flag contains MATRIX_CARD
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | 20 / - | u8[20] | matrix_card_proof | Client proof of matrix input. Implementation details at https://gist.github.com/barncastle/979c12a9c5e64d810a28ad1728e7e0f9 . |
Examples
Example 1
1, // opcode (1)
4, 73, 87, 221, 32, 81, 98, 245, 250, 254, 179, 103, 7, 114, 9, 81, 86, 32, 8, 8,
32, 193, 38, 202, 200, 247, 59, 70, 251, 136, 50, 6, // client_public_key: u8[32]
130, 201, 151, 96, 66, 228, 117, 249, 124, 96, 98, 228, 84, 102, 166, 254, 220,
233, 170, 124, // client_proof: u8[20]
254, 116, 218, 112, 136, 204, 118, 36, 196, 40, 136, 181, 239, 196, 29, 180, 107,
197, 44, 251, // crc_hash: u8[20]
0, // number_of_telemetry_keys: u8
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
3, // security_flag: SecurityFlag PIN| MATRIX_CARD (3)
221, 105, 240, 247, 88, 76, 88, 240, 134, 54, 58, 26, 190, 110, 30, 77, // pin_salt: u8[16]
90, 78, 192, 86, 88, 136, 230, 41, 1, 108, 191, 61, 247, 142, 130, 147, 111, 29,
190, 229, // pin_hash: u8[20]
105, 52, 205, 8, 130, 148, 239, 93, 15, 150, 159, 252, 23, 11, 228, 66, 8, 46, 209,
16, // matrix_card_proof: u8[20]
Protocol Version 8
Reply after successful CMD_AUTH_LOGON_CHALLENGE_Server.
Wowm Representation
Autogenerated from wowm
file at wow_message_parser/wowm/login/cmd_auth_logon/proof_client.wowm:365
.
clogin CMD_AUTH_LOGON_PROOF_Client = 0x01 {
u8[32] client_public_key;
u8[20] client_proof;
u8[20] crc_hash;
u8 number_of_telemetry_keys;
TelemetryKey[number_of_telemetry_keys] telemetry_keys;
SecurityFlag security_flag;
if (security_flag & PIN) {
u8[16] pin_salt;
u8[20] pin_hash;
}
if (security_flag & MATRIX_CARD) {
u8[20] matrix_card_proof;
}
if (security_flag & AUTHENTICATOR) {
String authenticator;
}
}
Header
Login messages have a header of 1 byte with an opcode. Some messages also have a size field but this is not considered part of the header.
Login Header
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x00 | 1 / - | uint8 | opcode | Opcode that determines which fields the message contains. |
Body
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
0x01 | 32 / - | u8[32] | client_public_key | |
0x21 | 20 / - | u8[20] | client_proof | |
0x35 | 20 / - | u8[20] | crc_hash | |
0x49 | 1 / - | u8 | number_of_telemetry_keys | |
0x4A | ? / - | TelemetryKey[number_of_telemetry_keys] | telemetry_keys | |
- | 1 / - | SecurityFlag | security_flag |
If security_flag contains PIN
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | 16 / - | u8[16] | pin_salt | |
- | 20 / - | u8[20] | pin_hash |
If security_flag contains MATRIX_CARD
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | 20 / - | u8[20] | matrix_card_proof | Client proof of matrix input. Implementation details at https://gist.github.com/barncastle/979c12a9c5e64d810a28ad1728e7e0f9 . |
If security_flag contains AUTHENTICATOR
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | - / - | String | authenticator | String entered by the user in the "Authenticator" popup. Can be empty and up to 16 characters. Is not used by the client in any way but just sent directly, so this could in theory be used for anything. |
Examples
Example 1
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
2, // number_of_telemetry_keys: u8
255, 0, // [0].TelemetryKey.unknown1: u16
239, 190, 173, 222, // [0].TelemetryKey.unknown2: u32
1, 2, 3, 4, // [0].TelemetryKey.unknown3: u8[4]
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, // [0].TelemetryKey.cd_key_proof: u8[20]
254, 0, // [1].TelemetryKey.unknown1: u16
238, 190, 173, 222, // [1].TelemetryKey.unknown2: u32
0, 1, 2, 3, // [1].TelemetryKey.unknown3: u8[4]
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, // [1].TelemetryKey.cd_key_proof: u8[20]
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
0, // security_flag: SecurityFlag NONE (0)
Example 2
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
1, // number_of_telemetry_keys: u8
255, 0, // [0].TelemetryKey.unknown1: u16
239, 190, 173, 222, // [0].TelemetryKey.unknown2: u32
1, 2, 3, 4, // [0].TelemetryKey.unknown3: u8[4]
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, // [0].TelemetryKey.cd_key_proof: u8[20]
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
0, // security_flag: SecurityFlag NONE (0)
Example 3
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
0, // number_of_telemetry_keys: u8
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
0, // security_flag: SecurityFlag NONE (0)
Example 4
1, // opcode (1)
241, 62, 229, 209, 131, 196, 200, 169, 80, 14, 63, 90, 93, 138, 238, 78, 46, 69,
225, 247, 204, 143, 28, 245, 238, 142, 17, 206, 211, 29, 215, 8, // client_public_key: u8[32]
107, 30, 72, 27, 77, 4, 161, 24, 216, 242, 222, 92, 89, 213, 92, 129, 46, 101, 236,
62, // client_proof: u8[20]
78, 245, 45, 225, 128, 94, 26, 103, 21, 236, 200, 65, 238, 184, 144, 138, 88, 187,
0, 208, // crc_hash: u8[20]
0, // number_of_telemetry_keys: u8
// telemetry_keys: TelemetryKey[number_of_telemetry_keys]
1, // security_flag: SecurityFlag PIN (1)
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // pin_salt: u8[16]
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, // pin_hash: u8[20]