Newer
Older
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bsspeke.h"
int demo_setup(uint8_t salt[32],
uint8_t P[32],
uint8_t V[32])
{
bsspeke_client_ctx client;
bsspeke_server_ctx server;
puts("");
puts("Starting Setup");
const char *client_id = "@alice:example.com";
const char *server_id = "bob.example.com";
const char *password = "P@ssword1";
puts("");
puts("Setup: Initializing client");
bsspeke_client_init(&client,
client_id, strlen(client_id),
server_id, strlen(server_id),
password, strlen(password));
puts("Setup: Initializing server");
bsspeke_server_init(&server,
server_id, strlen(server_id));
bsspeke_setup_msg1_t msg1;
bsspeke_setup_msg2_t msg2;
bsspeke_setup_msg3_t msg3;
puts("");
puts("Setup: Client generating message 1");
bsspeke_client_setup_generate_message1(&msg1, &client);
puts("");
puts("Setup: Server generating message 2");
bsspeke_server_setup_generate_message2(&msg2, &msg1,
salt, 32,
&server);
puts("");
puts("Setup: Client generating message 3");
bsspeke_client_setup_generate_message3(&msg3, &msg2,
100000, 3,
&client);
puts("");
puts("Setup: Saving parameters from setup");
memcpy(P, msg3.P, 32);
memcpy(V, msg3.V, 32);
puts("");
puts("Setup: Done");
return 0;
}
int demo_login(uint8_t salt[32],
uint8_t P[32],
uint8_t V[32])
{
bsspeke_client_ctx client;
bsspeke_server_ctx server;
puts("");
puts("Starting Login");
const char *client_id = "@alice:example.com";
const char *server_id = "bob.example.com";
const char *password = "P@ssword1";
puts("");
puts("Login: Initializing client");
bsspeke_client_init(&client,
client_id, strlen(client_id),
server_id, strlen(server_id),
password, strlen(password));
puts("Login: Initializing server");
bsspeke_server_init(&server,
server_id, strlen(server_id));
bsspeke_login_msg1_t msg1;
bsspeke_login_msg2_t msg2;
bsspeke_login_msg3_t msg3;
bsspeke_login_msg4_t msg4;
puts("");
puts("Login: Client generating message 1");
bsspeke_client_login_generate_message1(&msg1, &client);
puts("");
puts("Login: Server generating message 2");
bsspeke_server_login_generate_message2(&msg2, &msg1,
salt, 32,
P, V,
100000, 3,
&server);
puts("");
puts("Login: Client generating message 3");
bsspeke_client_login_generate_message3(&msg3, &msg2, &client);
return 0;
}
int main(int argc, char *argv[])
{
// Here we're pretending to be the server's long-term storage
// It needs to know the salt, V, and P for each registered user
uint8_t salt[32];
uint8_t V[32];
uint8_t P[32];
int rc = 0;
if( (rc = demo_setup(salt, P, V)) != 0 ) {
puts("Setup failed :(");
exit(-1);
}
if( (rc = demo_login(salt, P, V)) != 0 ) {
puts("Login failed :(");
exit(-1);
}
return 0;
}