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;
}

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

OffsetSize / EndiannessTypeNameDescription
0x001 / -uint8opcodeOpcode that determines which fields the message contains.

Body

OffsetSize / EndiannessTypeNameComment
0x0132 / -u8[32]client_public_key
0x2120 / -u8[20]client_proof
0x3520 / -u8[20]crc_hash
0x491 / -u8number_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

OffsetSize / EndiannessTypeNameDescription
0x001 / -uint8opcodeOpcode that determines which fields the message contains.

Body

OffsetSize / EndiannessTypeNameComment
0x0132 / -u8[32]client_public_key
0x2120 / -u8[20]client_proof
0x3520 / -u8[20]crc_hash
0x491 / -u8number_of_telemetry_keys
0x4A? / -TelemetryKey[number_of_telemetry_keys]telemetry_keys
-1 / -SecurityFlagsecurity_flag

If security_flag is equal to PIN:

OffsetSize / EndiannessTypeNameComment
-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

OffsetSize / EndiannessTypeNameDescription
0x001 / -uint8opcodeOpcode that determines which fields the message contains.

Body

OffsetSize / EndiannessTypeNameComment
0x0132 / -u8[32]client_public_key
0x2120 / -u8[20]client_proof
0x3520 / -u8[20]crc_hash
0x491 / -u8number_of_telemetry_keys
0x4A? / -TelemetryKey[number_of_telemetry_keys]telemetry_keys
-1 / -SecurityFlagsecurity_flag

If security_flag contains PIN:

OffsetSize / EndiannessTypeNameComment
-16 / -u8[16]pin_salt
-20 / -u8[20]pin_hash

If security_flag contains MATRIX_CARD:

OffsetSize / EndiannessTypeNameComment
-20 / -u8[20]matrix_card_proofClient 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

OffsetSize / EndiannessTypeNameDescription
0x001 / -uint8opcodeOpcode that determines which fields the message contains.

Body

OffsetSize / EndiannessTypeNameComment
0x0132 / -u8[32]client_public_key
0x2120 / -u8[20]client_proof
0x3520 / -u8[20]crc_hash
0x491 / -u8number_of_telemetry_keys
0x4A? / -TelemetryKey[number_of_telemetry_keys]telemetry_keys
-1 / -SecurityFlagsecurity_flag

If security_flag contains PIN:

OffsetSize / EndiannessTypeNameComment
-16 / -u8[16]pin_salt
-20 / -u8[20]pin_hash

If security_flag contains MATRIX_CARD:

OffsetSize / EndiannessTypeNameComment
-20 / -u8[20]matrix_card_proofClient proof of matrix input.
Implementation details at https://gist.github.com/barncastle/979c12a9c5e64d810a28ad1728e7e0f9.

If security_flag contains AUTHENTICATOR:

OffsetSize / EndiannessTypeNameComment
-- / -StringauthenticatorString 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]