blob: 75fcb627bbcbe0404772249464249fbb3280ff0e [file] [log] [blame]
Harald Weltee72cf552016-04-28 07:18:49 +02001#include <string.h>
2
3#include <osmocom/core/utils.h>
4#include <osmocom/core/application.h>
5
6#include "db.h"
7#include "rand.h"
8#include "logging.h"
9
10static struct db_context *g_dbc;
11
12static int test(const char *imsi)
13{
14 struct osmo_auth_vector vec[3];
15 int rc, i;
16
17 /* initialize all vectors with a known token pattern */
18 memset(vec, 0x55, sizeof(vec));
19 for (i = 0; i < ARRAY_SIZE(vec); i++)
20 vec[i].res_len = 0;
21
22 rc = db_get_auc(g_dbc, imsi, vec, ARRAY_SIZE(vec), NULL, NULL);
23 if (rc <= 0) {
24 LOGP(DMAIN, LOGL_ERROR, "Cannot obtain auth tuples for '%s'\n", imsi);
25 return rc;
26 }
27 LOGP(DMAIN, LOGL_INFO, "Obtained %u tuples for subscriber IMSI %s\n",
28 rc, imsi);
29
30 for (i = 0; i < rc; i++) {
31 struct osmo_auth_vector *v = vec + i;
32 LOGP(DMAIN, LOGL_DEBUG, "Tuple %u, auth_types=0x%x\n", i, v->auth_types);
33 LOGP(DMAIN, LOGL_DEBUG, "RAND=%s\n", osmo_hexdump_nospc(v->rand, sizeof(v->rand)));
34 LOGP(DMAIN, LOGL_DEBUG, "AUTN=%s\n", osmo_hexdump_nospc(v->autn, sizeof(v->autn)));
35 LOGP(DMAIN, LOGL_DEBUG, "CK=%s\n", osmo_hexdump_nospc(v->ck, sizeof(v->ck)));
36 LOGP(DMAIN, LOGL_DEBUG, "IK=%s\n", osmo_hexdump_nospc(v->ik, sizeof(v->ik)));
37 LOGP(DMAIN, LOGL_DEBUG, "RES=%s\n", osmo_hexdump_nospc(v->res, v->res_len));
38 LOGP(DMAIN, LOGL_DEBUG, "Kc=%s\n", osmo_hexdump_nospc(v->kc, sizeof(v->kc)));
39 LOGP(DMAIN, LOGL_DEBUG, "SRES=%s\n", osmo_hexdump_nospc(v->sres, sizeof(v->sres)));
40 }
41
42 return rc;
43}
44
45int main(int argc, char **argv)
46{
47 int rc;
48
49 rc = osmo_init_logging(&hlr_log_info);
50 if (rc < 0) {
51 fprintf(stderr, "Error initializing logging\n");
52 exit(1);
53 }
54 LOGP(DMAIN, LOGL_NOTICE, "hlr starting\n");
55
56 rc = rand_init();
57 if (rc < 0) {
58 LOGP(DMAIN, LOGL_ERROR, "Error initializing random source\n");
59 exit(1);
60 }
61
62 g_dbc = db_open(NULL, "hlr.db");
63 if (!g_dbc) {
64 LOGP(DMAIN, LOGL_ERROR, "Error opening database\n");
65 exit(1);
66 }
67
68 /* non-existing subscriber */
69 rc = test("901990123456789");
70 /* 2G only AUC data (COMP128v1 / MILENAGE) */
71 rc = test("901990000000001");
72 /* 2G + 3G AUC data (COMP128v1 / MILENAGE) */
73 rc = test("901990000000002");
74 /* 3G AUC data (MILENAGE) */
75 rc = test("901990000000003");
76
77 LOGP(DMAIN, LOGL_NOTICE, "Exiting\n");
78
79 db_close(g_dbc);
80
81 log_fini();
82
83 exit(0);
84}