Newer
Older
/*
* demo.c - Example use of the BS-SPEKE functions
*
* Author: Charles V. Wright <cvwright@futo.org>
*
* Copyright (c) 2022 FUTO Holdings, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bsspeke.h"
int demo_setup(bsspeke_user_info_t *user_info)
{
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,
&server);
puts("");
puts("Setup: Client generating message 3");
bsspeke_client_setup_generate_message3(&msg3, &msg2,
100000, 3,
&client);
puts("");
puts("Setup: Server processing message 3");
bsspeke_server_setup_process_message3(&msg3, user_info, &server);
puts("");
puts("Setup: Done");
return 0;
}
int demo_login(bsspeke_user_info_t *user_info)
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
{
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,
user_info,
&server);
puts("");
puts("Login: Client generating message 3");
bsspeke_client_login_generate_message3(&msg3, &msg2, &client);
puts("");
puts("Login: Server generating message 4");
bsspeke_server_login_generate_message4(&msg4, &msg3, user_info, &server);
puts("");
puts("Login: Client verifying message 4");
bsspeke_client_login_verify_message4(&msg4, &client);
return 0;
}
int main(int argc, char *argv[])
{
// Here we're pretending to be the server's long-term storage
if( (rc = demo_setup(&user_info)) != 0 ) {
puts("Setup failed :(");
exit(-1);
}
if( (rc = demo_login(&user_info)) != 0 ) {
puts("Login failed :(");
exit(-1);
}
return 0;
}