Now, v2 works.
[gnuk/gnuk.git] / src / ac.c
1 /*
2  * ac.c -- Check access condition
3  */
4
5 #include "ch.h"
6 #include "gnuk.h"
7
8 #include "polarssl/config.h"
9 #include "polarssl/sha1.h"
10
11 static uint8_t auth_status = AC_NONE_AUTHORIZED;
12
13 int
14 ac_check_status (uint8_t ac_flag)
15 {
16   if (ac_flag == AC_ALWAYS)
17     return 1;
18   else if (ac_flag == AC_NEVER)
19     return 0;
20   else
21     return (ac_flag & auth_status)? 1 : 0;
22 }
23
24 /*
25  * XXX: should be implemented
26  *
27  * string --S2K(SHA1,SALT,ITERATE)--> key
28  * load params from flash with key (key,enc_params --decrypt--> params)
29  * check magic in params
30  */
31
32 uint8_t keystring_pw1[KEYSTRING_LEN] = {
33   0x62, 0x10, 0x27, 0x44, 0x34, 0x05, 0x2f, 0x20,
34   0xfc, 0xb8, 0x3e, 0x1d, 0x0f, 0x49, 0x22, 0x04,
35   0xfc, 0xb1, 0x18, 0x84
36 };
37
38 int
39 verify_pso_cds (uint8_t *pw, int pw_len)
40 {
41   int r;
42
43   sha1 (pw, pw_len, keystring_pw1);
44   if ((r = gpg_load_key (GPG_KEY_FOR_SIGNATURE)) < 0)
45     return r;
46
47   auth_status |= AC_PSO_CDS_AUTHORIZED;
48   return 0;
49 }
50
51 int
52 verify_pso_other (uint8_t *pw, int pw_len)
53 {
54   auth_status |= AC_PSO_OTHER_AUTHORIZED;
55   return 0;
56 }
57
58 int
59 verify_pso_admin (uint8_t *pw, int pw_len)
60 {
61 #if 0
62   compute_hash;
63   if (cmp_hash (pw3_hash, hash) == 0)
64     good;
65   else
66     return -1;
67 #endif
68   auth_status |= AC_ADMIN_AUTHORIZED;
69   return 0;
70 }