aboutsummaryrefslogtreecommitdiff
path: root/tests/torture_pki.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/torture_pki.c')
-rw-r--r--tests/torture_pki.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/tests/torture_pki.c b/tests/torture_pki.c
new file mode 100644
index 00000000..07c01094
--- /dev/null
+++ b/tests/torture_pki.c
@@ -0,0 +1,91 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "torture_pki.h"
+
+char *torture_pki_read_file(const char *filename)
+{
+ char *key;
+ int fd;
+ int size;
+ int rc;
+ struct stat sb;
+
+ if (filename == NULL || filename[0] == '\0') {
+ return NULL;
+ }
+
+ fd = open(filename, O_RDONLY);
+ if (fd < 0) {
+ return NULL;
+ }
+
+ rc = fstat(fd, &sb);
+ if (rc != 0) {
+ close(fd);
+ return NULL;
+ }
+
+ key = malloc(sb.st_size + 1);
+ if (key == NULL) {
+ close(fd);
+ return NULL;
+ }
+
+ size = read(fd, key, sb.st_size);
+ close(fd);
+ if (size != sb.st_size) {
+ free(key);
+ return NULL;
+ }
+
+ key[size] = '\0';
+ return key;
+}
+
+int torture_read_one_line(const char *filename, char *buffer, size_t len)
+{
+ FILE *fp;
+ size_t nmemb;
+
+ fp = fopen(filename, "r");
+ if (fp == NULL) {
+ return -1;
+ }
+
+ nmemb = fread(buffer, len - 2, 1, fp);
+ if (nmemb != 0 || ferror(fp)) {
+ fclose(fp);
+ return -1;
+ }
+ buffer[len - 1] = '\0';
+
+ fclose(fp);
+
+ return 0;
+}
+
+/**
+ * @internal
+ *
+ * Returns the character len of a public key string, omitting the comment part
+ */
+size_t torture_pubkey_len(const char *pubkey)
+{
+ const char *ptr;
+
+ ptr = strchr(pubkey, ' ');
+ if (ptr != NULL) {
+ ptr = strchr(ptr + 1, ' ');
+ if (ptr != NULL) {
+ return ptr - pubkey;
+ }
+ }
+
+ return 0;
+}