syntax = "proto3";

import "constants.proto";

/* Data structure of Session command1 packet */
message SessionCmd1 {
    bytes client_verify_data = 2;
}

/* Data structure of Session response1 packet */
message SessionResp1 {
    Status status = 1;
    bytes device_verify_data = 3;
}

/* Data structure of Session command0 packet */
message SessionCmd0 {
    bytes client_pubkey = 1;
}

/* Data structure of Session response0 packet */
message SessionResp0 {
    Status status = 1;
    bytes device_pubkey = 2;
    bytes device_random = 3;
}

/* A message must be of type Cmd0 / Cmd1 / Resp0 / Resp1 */
enum Sec1MsgType {
    Session_Command0 = 0;
    Session_Response0 = 1;
    Session_Command1 = 2;
    Session_Response1 = 3;
}

/* Payload structure of session data */
message Sec1Payload {
    Sec1MsgType msg = 1;        /*!< Type of message */
    oneof payload {
        SessionCmd0 sc0 = 20;   /*!< Payload data interpreted as Cmd0 */
        SessionResp0 sr0 = 21;  /*!< Payload data interpreted as Resp0 */
        SessionCmd1 sc1 = 22;   /*!< Payload data interpreted as Cmd1 */
        SessionResp1 sr1 = 23;  /*!< Payload data interpreted as Resp1 */
    }
}
