- int fd = -1;
- int pos = 0;
- int nb = 0;
- int len = 0;
-
- char *buf = NULL;
- char **res = NULL;
-
- struct stat stat_buf;
-
- if (stat(sfile, &stat_buf)) {
- perror("stat");
- exit(1);
- }
-
- if (stat_buf.st_size > MAX_SIZE) {
- fprintf(stderr, "the secret file is too big\n");
- exit(1);
- }
-
- buf = p_new(char, stat_buf.st_size + 1);
-
- if ((fd = open(sfile, O_RDONLY)) < 0) {
- perror("open");
- exit (1);
- }
-
- for (;;) {
- if ((nb = read(fd, &(buf[pos]), stat_buf.st_size)) < 0) {
- if (errno == EINTR)
- continue;
- perror("read");
- exit(1);
- }
- pos += nb;
- if (nb == 0 || pos == stat_buf.st_size) {
- close(fd);
- fd = -1;
- break;
- }
- }
-
- for (nb = pos = 0; pos < stat_buf.st_size ; pos++) {
- if (buf[pos] == '\n') {
- nb++;
- buf[pos] = 0;
- }
- }
-
- res = p_new(char*, nb + 2);
-
- nb = pos = 0;
- while (pos < stat_buf.st_size) {
- len = strlen(&(buf[pos]));
- if (len) {
- res[nb++] = &(buf[pos]);
- }
- pos += len+1;
- }
-
- return res;
-}
-
-
-static char *encode(char *secret, char *sender, char *alias)
-{
- int err = 0;
- char *res = NULL;
- srs_t *srs = srs_new();
-
- srs_add_secret(srs, secret);
- err = srs_forward_alloc(srs, &res, sender, alias);
-
- if (res == NULL) {
- fprintf(stderr, "%s\n", srs_strerror(err));
- exit (1);