client: Add authenticatemessage example
[libisds.git] / client / authenticatemessage.c
blobfbfbe5c231370bd102daaeb551fa0f63f74f5298
1 #define _XOPEN_SOURCE 500
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <locale.h>
5 #include <time.h>
6 #include <string.h>
7 #include <isds.h>
8 #include "common.h"
9 #include <libgen.h>
12 int main(int argc, char **argv) {
13 struct isds_ctx *ctx = NULL;
14 isds_error err;
16 setlocale(LC_ALL, "");
18 if (argc != 2 || !argv[1] || !*argv[1]) {
19 printf("Usage: %s CMS_SIGNED_MESSAGE_IN_LOCAL_FILE\n",
20 basename(argv[0]));
21 exit(EXIT_FAILURE);
24 err = isds_init();
25 if (err) {
26 printf("isds_init() failed: %s\n", isds_strerror(err));
27 exit(EXIT_FAILURE);
30 isds_set_logging(ILF_ALL & ~ILF_HTTP, ILL_ALL);
32 ctx = isds_ctx_create();
33 if (!ctx) {
34 printf("isds_ctx_create() failed");
37 err = isds_set_timeout(ctx, 10000);
38 if (err) {
39 printf("isds_set_timeout() failed: %s\n", isds_strerror(err));
42 /* err = isds_set_tls(ctx, ITLS_VERIFY_SERVER, 0);
43 if (err) {
44 printf("isds_set_tls(ITLS_VERIFY_SERVER) failed: %s\n",
45 isds_strerror(err));
48 err = isds_set_tls(ctx, ITLS_CA_FILE, "/etc/ssl/certs/ca-certificates.crt");
49 if (err) {
50 printf("isds_set_tls(ITLS_CA_FILE) failed: %s\n",
51 isds_strerror(err));
52 }*/
54 err = isds_login(ctx, url, username, password, NULL);
55 if (err) {
56 printf("isds_login() failed: %s: %s\n", isds_strerror(err),
57 isds_long_message(ctx));
58 } else {
59 printf("Logged in :)\n");
64 /* Authenticate message saved in local file */
65 int fd;
66 void *buffer;
67 size_t length;
69 if (mmap_file(argv[1], &fd, &buffer, &length))
70 exit(EXIT_FAILURE);
72 printf("Sending message from file `%s' to ISDS for authenticity "
73 "check...\n", argv[1]);
74 err = isds_authenticate_message(ctx, buffer, length);
75 if (!err)
76 printf("ISDS states: message is original\n");
77 else if (err == IE_NOTEQUAL)
78 printf("ISDS states: message is unkown or tampered\n");
79 else
80 printf("isds_authenticate_message() failed: %s: %s\n",
81 isds_strerror(err), isds_long_message(ctx));
83 munmap_file(fd, buffer,length);
87 err = isds_logout(ctx);
88 if (err) {
89 printf("isds_logout() failed: %s\n", isds_strerror(err));
92 err = isds_ctx_free(&ctx);
93 if (err) {
94 printf("isds_ctx_free() failed: %s\n", isds_strerror(err));
97 err = isds_cleanup();
98 if (err) {
99 printf("isds_cleanup() failed: %s\n", isds_strerror(err));
102 exit (EXIT_SUCCESS);