93 lines
2.7 KiB
Text
93 lines
2.7 KiB
Text
interface chiron
|
|
{
|
|
const int MD5_HASH_LEN = 0x10;
|
|
const int CHALLENGE_LEN = 0x9;
|
|
const int MSG_HDR_LEN = 0x4;
|
|
|
|
typedef [public,enum8bit] enum {
|
|
CHIRON_ACCOUNT = 0x41, /* 'A' */
|
|
CHIRON_CHALLENGE = 0x43, /* 'C' */
|
|
CHIRON_RESPONSE = 0x52, /* 'R' */
|
|
CHIRON_HANDSHAKE = 0x4B, /* 'K' */
|
|
CHIRON_ACK = 0x55, /* 'U' */
|
|
CHIRON_UNKNOWN = 0x48, /* 'H' */
|
|
CHIRON_TRANSPARENT = 0x54 /* 'T' */
|
|
} chiron_msg_type;
|
|
|
|
typedef [public,enum8bit] enum {
|
|
CHIRON_EL_DEVSTATE = 0x0C,
|
|
CHIRON_EL_UNKNOWN_BOOL1 = 0x16,
|
|
CHIRON_EL_DEVICEID1 = 0x17,
|
|
CHIRON_EL_DEVICEID2 = 0x18,
|
|
CHIRON_EL_MODE_ENABLED = 0x20, /* == 0x13 */
|
|
CHIRON_EL_GSM_SETTING_G6 = 0x21,
|
|
CHIRON_EL_UNKNOWN_BOOL2 = 0x22,
|
|
CHIRON_EL_THREEBYTE_STATUS = 0x26,
|
|
CHIRON_EL_GSM_SETTING_G3_G19 = 0x27,
|
|
CHIRON_EL_UNKNOWN_BYTE1 = 0x2C,
|
|
CHIRON_EL_TROUBLE_MESSAGE1 = 0x2D,
|
|
CHIRON_EL_TROUBLE_MESSAGE2 = 0x36,
|
|
CHIRON_EL_GSM_SETTING_G4 = 0x40
|
|
} chiron_element_tag;
|
|
|
|
typedef [public,flag(LIBNDR_FLAG_NOALIGN)] struct {
|
|
uint8 length;
|
|
uint8 account_code[length];
|
|
} chiron_msg_account;
|
|
|
|
typedef [public,flag(LIBNDR_FLAG_NOALIGN)] struct {
|
|
uint8 length;
|
|
uint8 md5_check[MD5_HASH_LEN];
|
|
uint8 challenge[length - 0x10];
|
|
} chiron_msg_challenge;
|
|
|
|
typedef [public,flag(LIBNDR_FLAG_NOALIGN)] struct {
|
|
uint8 length;
|
|
uint8 md5_check[MD5_HASH_LEN];
|
|
uint8 payload[length - MD5_HASH_LEN];
|
|
} chiron_msg_response;
|
|
|
|
typedef [public,flag(LIBNDR_FLAG_NOALIGN)] struct {
|
|
uint8 length;
|
|
uint8 data[length];
|
|
} chiron_msg_handshake;
|
|
|
|
typedef [public,flag(LIBNDR_FLAG_NOALIGN)] struct {
|
|
uint8 length; // Always 0
|
|
uint8 data[length];
|
|
} chiron_msg_ack;
|
|
|
|
typedef [public,flag(LIBNDR_FLAG_NOALIGN)] struct {
|
|
uint8 length;
|
|
uint8 data[length];
|
|
} chiron_msg_unknown;
|
|
|
|
typedef [nodiscriminant,public,flag(LIBNDR_FLAG_NOALIGN)] union {
|
|
[case(CHIRON_ACCOUNT)] chiron_msg_account account;
|
|
[case(CHIRON_CHALLENGE)] chiron_msg_challenge challenge;
|
|
[case(CHIRON_RESPONSE)] chiron_msg_response response;
|
|
[case(CHIRON_HANDSHAKE)] chiron_msg_handshake handshake;
|
|
[case(CHIRON_ACK)] chiron_msg_ack ack;
|
|
[default] chiron_msg_unknown unknown;
|
|
} chiron_msg_union;
|
|
|
|
// Alternative format
|
|
typedef [public,flag(LIBNDR_FLAG_NOALIGN)] struct {
|
|
uint8 something01; // seen only 01
|
|
uint8 otherthing01; // seen only 01
|
|
uint8 seq;
|
|
uint8 someflag; // seen 00 and 01, 01 after the response handshake, and message 0x48 'H' is issued.
|
|
uint8 something00; //seen only 00
|
|
uint8 length;
|
|
chiron_msg_type msg_type;
|
|
[switch_is(msg_type)] chiron_msg_union msg;
|
|
} chiron_alt_message;
|
|
|
|
typedef [public,flag(LIBNDR_FLAG_NOALIGN)] struct {
|
|
chiron_msg_type msg_type;
|
|
uint8 seq;
|
|
uint8 flags;
|
|
[switch_is(msg_type)] chiron_msg_union msg;
|
|
} chiron_message;
|
|
|
|
}
|