Blame tests/torture_pki.c

Packit Service 31306d
#include "config.h"
Packit Service 31306d
Packit Service 31306d
#include <stdio.h>
Packit Service 31306d
#include <stdlib.h>
Packit Service 31306d
#include <string.h>
Packit Service 31306d
#include <sys/types.h>
Packit Service 31306d
#include <sys/stat.h>
Packit Service 31306d
#include <fcntl.h>
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_UNISTD_H
Packit Service 31306d
#include <unistd.h>
Packit Service 31306d
#elif (defined _WIN32) || (defined _WIN64)
Packit Service 31306d
#include <io.h>
Packit Service 31306d
#define read _read
Packit Service 31306d
#define open _open
Packit Service 31306d
#define write _write
Packit Service 31306d
#define close _close
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
#include "torture_pki.h"
Packit Service 31306d
Packit Service 31306d
char *torture_pki_read_file(const char *filename)
Packit Service 31306d
{
Packit Service 31306d
    char *key;
Packit Service 31306d
    int fd;
Packit Service 31306d
    int size;
Packit Service 31306d
    int rc;
Packit Service 31306d
    struct stat sb;
Packit Service 31306d
Packit Service 31306d
    if (filename == NULL || filename[0] == '\0') {
Packit Service 31306d
        return NULL;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    fd = open(filename, O_RDONLY);
Packit Service 31306d
    if (fd < 0) {
Packit Service 31306d
        return NULL;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    rc = fstat(fd, &sb);
Packit Service 31306d
    if (rc != 0) {
Packit Service 31306d
        close(fd);
Packit Service 31306d
        return NULL;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    key = malloc(sb.st_size + 1);
Packit Service 31306d
    if (key == NULL) {
Packit Service 31306d
        close(fd);
Packit Service 31306d
        return NULL;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    size = read(fd, key, sb.st_size);
Packit Service 31306d
    close(fd);
Packit Service 31306d
    if (size != sb.st_size) {
Packit Service 31306d
        free(key);
Packit Service 31306d
        return NULL;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    key[size] = '\0';
Packit Service 31306d
    return key;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
int torture_read_one_line(const char *filename, char *buffer, size_t len)
Packit Service 31306d
{
Packit Service 31306d
    FILE *fp;
Packit Service 31306d
    size_t nmemb;
Packit Service 31306d
Packit Service 31306d
    fp = fopen(filename, "r");
Packit Service 31306d
    if (fp == NULL) {
Packit Service 31306d
        return -1;
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    nmemb = fread(buffer, len - 2, 1, fp);
Packit Service 31306d
    if (nmemb != 0 || ferror(fp)) {
Packit Service 31306d
        fclose(fp);
Packit Service 31306d
        return -1;
Packit Service 31306d
    }
Packit Service 31306d
    buffer[len - 1] = '\0';
Packit Service 31306d
Packit Service 31306d
    fclose(fp);
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}
Packit Service 31306d
Packit Service 31306d
/**
Packit Service 31306d
 * @internal
Packit Service 31306d
 *
Packit Service 31306d
 * Returns the character len of a public key string, omitting the comment part
Packit Service 31306d
 */
Packit Service 31306d
size_t torture_pubkey_len(const char *pubkey)
Packit Service 31306d
{
Packit Service 31306d
    const char *ptr;
Packit Service 31306d
Packit Service 31306d
    ptr = strchr(pubkey, ' ');
Packit Service 31306d
    if (ptr != NULL) {
Packit Service 31306d
        ptr = strchr(ptr + 1, ' ');
Packit Service 31306d
        if (ptr != NULL) {
Packit Service 31306d
            return ptr - pubkey;
Packit Service 31306d
        }
Packit Service 31306d
    }
Packit Service 31306d
Packit Service 31306d
    return 0;
Packit Service 31306d
}