summaryrefslogtreecommitdiff
path: root/cesar/cp2/msg/inc/cm_get_key.h
blob: 806f2e705afc1e97750ba67c7a9bcf1f453758cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#ifndef cp2_msg_inc_cm_get_key_h
#define cp2_msg_inc_cm_get_key_h
/* Cesar project {{{
 *
 * Copyright (C) 2008 Spidcom
 *
 * <<<Licence>>>
 *
 * }}} */
/**
 * \file    cp2/msg/inc/cm_get_key.h
 * \brief   CM_GET_KEY messages.
 * \ingroup cp2_msg
 */

/** CM_GET_KEY.CNF result. */
enum cp_msg_cm_get_key_cnf_result_t
{
    CP_MSG_CM_GET_KEY_CNF_RESULT_KEY_GRANTED,
    CP_MSG_CM_GET_KEY_CNF_RESULT_REQUEST_REFUSED,
    CP_MSG_CM_GET_KEY_CNF_RESULT_UNSUPPORTED_METHOD_KEY_TYPE,
    CP_MSG_CM_GET_KEY_CNF_RESULT_NB
};

/** Data associated with a CM_GET_KEY.REQ message. */
struct cp_msg_cm_get_key_req_t
{
    /** Request type: direct or relayed. */
    bool relayed;
    /** Requested key type. */
    enum cp_msg_key_type_t key_type;
    /** NID. */
    cp_nid_t nid;
    /** Protocol ID. */
    u8 pid;
    /** Hash key if present. */
    u8 hash_key[CP_HASH_KEY_SIZE];
};
typedef struct cp_msg_cm_get_key_req_t cp_msg_cm_get_key_req_t;

/** Data associated with a CM_GET_KEY.CNF message. */
struct cp_msg_cm_get_key_cnf_t
{
    /** Result. */
    enum cp_msg_cm_get_key_cnf_result_t result;
    /** Requested key type. */
    enum cp_msg_key_type_t key_type;
    /** NID. */
    cp_nid_t nid;
    /** EKS. */
    u8 eks;
    /** Protocol ID. */
    u8 pid;
    union {
        /** Hash key if present. */
        u8 hash_key[CP_HASH_KEY_SIZE];
        /** Key if present. */
        cp_key_t key;
    };
};
typedef struct cp_msg_cm_get_key_cnf_t cp_msg_cm_get_key_cnf_t;

#endif /* cp2_msg_inc_cm_get_key_h */