summaryrefslogtreecommitdiff
path: root/cp/test/src/test_msg.c
blob: 6a2172dedfb02942e96be9fba37c467bea5f5ecd (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/* Cesar project {{{
 *
 * Copyright (C) 2007 Spidcom
 *
 * <<<Licence>>>
 *
 * }}} */
/**
 * \file    cp/test/test_msg.c
 * \brief   unit tests for msg module
 * \ingroup cp_test
 */

#include "common/std.h"
#include "cp/test/inc/test_msg.h"


/*
 * test de void msg_init(void)
 */
int msg_init_test (void)
{
    msg_init();
    return 0;
}

/*
 * test de void msg_xxx_mme_const_values
 */
int msg_set_mme_const_values_test (void)
{
    msg_mme_t msg;
    msg_set_mme_const_values (&msg);
    return msg_check_wrong_mme_const_values (&msg);
}


/*
 * u16 msg_get_number (msg_mme_t *msg)
 */

int msg_get_number_test(void)
{
    msg_mme_t msg;
    msg_set_mme_const_values(& msg);
    msg.mm_type = 0;
    if(msg_get_number(&msg) != 0) return 1;
    msg.mm_type = 63;
    if(msg_get_number(&msg) != MSG_UNKNOW) return 2;
    msg.mm_type = 0xE;
    if(msg_get_number(&msg) != MSG_UNKNOW) return 3;
    msg.mm_type = 0xD;
    if(msg_get_number(&msg) != 9) return 4;
    return 0;    
}

/*
 * test cm_encrypted payload
 */
void
int_test_enc(void)
{
    //char msg_orig[] = "\x00\x31\x32\x33\x34\x35\x00\x46\x47\x48\x49\x50\x88\xe1\x01\x08\x60\x00\x00\x01\x00\x11\x22\x33\x44\x33\x22\x11\x02\x2d\x37\x03\x02\x02\x6b\xcb\xa5\x35\x4e\x18\x01\xb5\x93\x19\xd7\xe8\x15\x7b\xa0\x01\xb0\x18\x66\x9c\xce\xe3\x0d";
    unsigned char msg[] = "\x00\x31\x32\x33\x34\x35\x00\x46\x47\x48\x49\x50\x88\xe1\x01\x06\x60\x00\x00\x00\x05\x02\x2d\x37\x03\xfe\xdc\xba\x98\x76\x54\x32\x10\xfe\xdc\xba\x98\x76\x54\x32\x10\x39\x00\x24\x68\xac\xe0\x35\x00\x31\x32\x33\x34\x35\x00\x46\x47\x48\x49\x50\x88\xe1\x01\x08\x60\x00\x00\x01\x00\x11\x22\x33\x44\x33\x22\x11\x02\x2d\x37\x03\x02\x02\x6b\xcb\xa5\x35\x4e\x18\x01\xb5\x93\x19\xd7\xe8\x15\x7b\xa0\x01\xb0\x18\x66\x9c\xce\xe3\x0d\xf1\x66\x28\x20\x02\x2d\x37\x03\xac\xbc\xd2\x11\x4d\xae\x15\x77\xc6\x05";
    unsigned char iv[] = "\xfe\xdc\xba\x98\x76\x54\x32\x10\xfe\xdc\xba\x98\x76\x54\x32\x10";
    unsigned char key[] = "\xEE\x7F\x57\x88\xE2\xA0\x21\xC9\x99\x46\x9A\xC5\x2A\xF3\x0A\x06";
    unsigned char enc[1518];
    aes_context ctx;

    aes_set_key(&ctx, key, sizeof(aes_key_t)*8);
    aes_cbc_encrypt (&ctx, iv, &msg[43], enc, 0x50);
    return ;

}

int 
msg_cm_encrypted_payload_ind_send_test(void)
{
    msg_mme_t msg;
    cm_set_key_req_t *cm_set_key_req;
    msg_param_t msg_param;
    tei_t tei = 1;

    int_test_enc();
    
    // create the message cm_set_key.REQ such as in table 13-144
    memcpy(&msg.oda, "\x00\x31\x32\x33\x34\x35", 6);
    memcpy(&msg.osa, "\x00\x46\x47\x48\x49\x50", 6);    
    msg_set_mme_const_values((msg_mme_t *)&msg);
    msg.mm_type = CM_SET_KEY_REQ;
    msg.fmi.fmsn = 0;
    msg.fmi.fn_mi = 0;
    msg.fmi.nf_mi = 0;
    cm_set_key_req = (cm_set_key_req_t *) msg.mm_entry;
    cm_set_key_req->key_type = 1;
    cm_set_key_req->my_nonce = 0x33221100;
    cm_set_key_req->your_nonce = 0x11223344;
    cm_set_key_req->pid = 2;
    cm_set_key_req->prn = 0x372D;
    cm_set_key_req->pmn = 3;
    cm_set_key_req->cco_capa = 2;
    memcpy(cm_set_key_req->nid,  "\x02\x6B\xCB\xA5\x35\x4E\x18", 7);
    cm_set_key_req->new_eks = 1;
    memcpy(cm_set_key_req->new_key, "\xB5\x93\x19\xD7\xE8\x15\x7B\xA0\x01\xB0\x18\x66\x9C\xCE\xE3\x0D", 16);
    
    msg_param.peks = PEKS_DESTINATION_STA_DAK;
    secu_set_sta_s_dak(tei, "\xEE\x7F\x57\x88\xE2\xA0\x21\xC9\x99\x46\x9A\xC5\x2A\xF3\x0A\x06");
    station_set_mac_address("\x00\x46\x47\x48\x49\x50");
        
    msg_cm_encrypted_payload_ind_send(
                                    (msg_mme_t *)&msg, 
                                    msg_param,
                                    tei,
                                    false,
                                    2,
                                    sizeof(cm_set_key_req_t) + MSG_MME_HEADER_SIZE
                                    );
    return 0;
}

struct msg_test_t
{
    int(*func) (void);
    char func_name[30];
};

int msg_test (void)
{
    bool verbose = false;
    unsigned int i;
    int res, return_value = 0;
    struct msg_test_t my_test[]= 
            { 
                { msg_init_test, "msg_init"},
                { msg_set_mme_const_values_test, "msg_xxx_mme_const_values" },
                { msg_get_number_test, "msg_get_number"},
                { msg_cm_encrypted_payload_ind_send_test, "cm_encrypted_payload_ind"}
            };

    printf ("test du module msg\n");
    for (i=0 ; i<COUNT (my_test) ; i++)
    {
        res = my_test[i].func ();
        if(verbose || (res != 0))
        {
            printf ("    %-50s", my_test[i].func_name);
            if (res == 0) printf ("OK\n");
            else printf ("FAILED : %i\n", res);
        }
        if(res != 0) return_value++;
    }
    if (i != COUNT(my_test)) return 1;
    return return_value;
}