summaryrefslogtreecommitdiff
path: root/cesar/cp/msg/inc/cm_get_key.h
blob: e8af57f3870288f2d2f725f6436f98d0fb4bae8b (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
#ifndef cp_msg_inc_cm_get_key_h
#define cp_msg_inc_cm_get_key_h
/* Cesar project {{{
 *
 * Copyright (C) 2008 Spidcom
 *
 * <<<Licence>>>
 *
 * }}} */
/**
 * \file    cp/msg/inc/cm_get_key.h
 * \brief   CM_GET_KEY messages.
 * \ingroup cp_msg
 */
#include "mac/common/defs.h"

/** 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. */
    uint relayed;
    /** Requested key type. */
    enum cp_msg_key_type_t key_type;
    /** NID. */
    cp_nid_t nid;
    /** Hash key if present. */
    u32 hash_key[CP_HASH_KEY_SIZE / sizeof (u32)];
};
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. */
    mac_eks_t eks;
    union {
        /** Hash key if present. */
        u32 hash_key[CP_HASH_KEY_SIZE / sizeof (u32)];
        /** Key if present. */
        cp_key_t key;
    };
};
typedef struct cp_msg_cm_get_key_cnf_t cp_msg_cm_get_key_cnf_t;

#endif /* cp_msg_inc_cm_get_key_h */