1295367Sdes/* 	$OpenBSD: common.c,v 1.2 2015/01/08 13:10:58 djm Exp $ */
2276707Sdes/*
3276707Sdes * Helpers for key API tests
4276707Sdes *
5276707Sdes * Placed in the public domain
6276707Sdes */
7276707Sdes
8276707Sdes#include "includes.h"
9276707Sdes
10276707Sdes#include <sys/types.h>
11276707Sdes#include <sys/param.h>
12276707Sdes#include <sys/stat.h>
13276707Sdes#include <fcntl.h>
14276707Sdes#include <stdio.h>
15276707Sdes#ifdef HAVE_STDINT_H
16276707Sdes#include <stdint.h>
17276707Sdes#endif
18276707Sdes#include <stdlib.h>
19276707Sdes#include <string.h>
20276707Sdes#include <unistd.h>
21276707Sdes
22276707Sdes#include <openssl/bn.h>
23276707Sdes#include <openssl/rsa.h>
24276707Sdes#include <openssl/dsa.h>
25276707Sdes#include <openssl/objects.h>
26276707Sdes#ifdef OPENSSL_HAS_NISTP256
27276707Sdes# include <openssl/ec.h>
28276707Sdes#endif
29276707Sdes
30276707Sdes#include "../test_helper/test_helper.h"
31276707Sdes
32276707Sdes#include "ssherr.h"
33276707Sdes#include "authfile.h"
34276707Sdes#include "sshkey.h"
35276707Sdes#include "sshbuf.h"
36276707Sdes
37276707Sdes#include "common.h"
38276707Sdes
39276707Sdesstruct sshbuf *
40276707Sdesload_file(const char *name)
41276707Sdes{
42276707Sdes	int fd;
43276707Sdes	struct sshbuf *ret;
44276707Sdes
45276707Sdes	ASSERT_PTR_NE(ret = sshbuf_new(), NULL);
46276707Sdes	ASSERT_INT_NE(fd = open(test_data_file(name), O_RDONLY), -1);
47295367Sdes	ASSERT_INT_EQ(sshkey_load_file(fd, ret), 0);
48276707Sdes	close(fd);
49276707Sdes	return ret;
50276707Sdes}
51276707Sdes
52276707Sdesstruct sshbuf *
53276707Sdesload_text_file(const char *name)
54276707Sdes{
55276707Sdes	struct sshbuf *ret = load_file(name);
56276707Sdes	const u_char *p;
57276707Sdes
58276707Sdes	/* Trim whitespace at EOL */
59276707Sdes	for (p = sshbuf_ptr(ret); sshbuf_len(ret) > 0;) {
60276707Sdes		if (p[sshbuf_len(ret) - 1] == '\r' ||
61276707Sdes		    p[sshbuf_len(ret) - 1] == '\t' ||
62276707Sdes		    p[sshbuf_len(ret) - 1] == ' ' ||
63276707Sdes		    p[sshbuf_len(ret) - 1] == '\n')
64276707Sdes			ASSERT_INT_EQ(sshbuf_consume_end(ret, 1), 0);
65276707Sdes		else
66276707Sdes			break;
67276707Sdes	}
68276707Sdes	/* \0 terminate */
69276707Sdes	ASSERT_INT_EQ(sshbuf_put_u8(ret, 0), 0);
70276707Sdes	return ret;
71276707Sdes}
72276707Sdes
73276707SdesBIGNUM *
74276707Sdesload_bignum(const char *name)
75276707Sdes{
76276707Sdes	BIGNUM *ret = NULL;
77276707Sdes	struct sshbuf *buf;
78276707Sdes
79276707Sdes	buf = load_text_file(name);
80276707Sdes	ASSERT_INT_NE(BN_hex2bn(&ret, (const char *)sshbuf_ptr(buf)), 0);
81276707Sdes	sshbuf_free(buf);
82276707Sdes	return ret;
83276707Sdes}
84276707Sdes
85