xref: /freebsd/crypto/openssh/regress/unittests/sshkey/common.c (revision a0ee8cc636cd5c2374ec44ca71226564ea0bca95)
1*a0ee8cc6SDag-Erling Smørgrav /* 	$OpenBSD: common.c,v 1.1 2014/06/24 01:14:18 djm Exp $ */
2*a0ee8cc6SDag-Erling Smørgrav /*
3*a0ee8cc6SDag-Erling Smørgrav  * Helpers for key API tests
4*a0ee8cc6SDag-Erling Smørgrav  *
5*a0ee8cc6SDag-Erling Smørgrav  * Placed in the public domain
6*a0ee8cc6SDag-Erling Smørgrav  */
7*a0ee8cc6SDag-Erling Smørgrav 
8*a0ee8cc6SDag-Erling Smørgrav #include "includes.h"
9*a0ee8cc6SDag-Erling Smørgrav 
10*a0ee8cc6SDag-Erling Smørgrav #include <sys/types.h>
11*a0ee8cc6SDag-Erling Smørgrav #include <sys/param.h>
12*a0ee8cc6SDag-Erling Smørgrav #include <sys/stat.h>
13*a0ee8cc6SDag-Erling Smørgrav #include <fcntl.h>
14*a0ee8cc6SDag-Erling Smørgrav #include <stdio.h>
15*a0ee8cc6SDag-Erling Smørgrav #ifdef HAVE_STDINT_H
16*a0ee8cc6SDag-Erling Smørgrav #include <stdint.h>
17*a0ee8cc6SDag-Erling Smørgrav #endif
18*a0ee8cc6SDag-Erling Smørgrav #include <stdlib.h>
19*a0ee8cc6SDag-Erling Smørgrav #include <string.h>
20*a0ee8cc6SDag-Erling Smørgrav #include <unistd.h>
21*a0ee8cc6SDag-Erling Smørgrav 
22*a0ee8cc6SDag-Erling Smørgrav #include <openssl/bn.h>
23*a0ee8cc6SDag-Erling Smørgrav #include <openssl/rsa.h>
24*a0ee8cc6SDag-Erling Smørgrav #include <openssl/dsa.h>
25*a0ee8cc6SDag-Erling Smørgrav #include <openssl/objects.h>
26*a0ee8cc6SDag-Erling Smørgrav #ifdef OPENSSL_HAS_NISTP256
27*a0ee8cc6SDag-Erling Smørgrav # include <openssl/ec.h>
28*a0ee8cc6SDag-Erling Smørgrav #endif
29*a0ee8cc6SDag-Erling Smørgrav 
30*a0ee8cc6SDag-Erling Smørgrav #include "../test_helper/test_helper.h"
31*a0ee8cc6SDag-Erling Smørgrav 
32*a0ee8cc6SDag-Erling Smørgrav #include "ssherr.h"
33*a0ee8cc6SDag-Erling Smørgrav #include "authfile.h"
34*a0ee8cc6SDag-Erling Smørgrav #include "sshkey.h"
35*a0ee8cc6SDag-Erling Smørgrav #include "sshbuf.h"
36*a0ee8cc6SDag-Erling Smørgrav 
37*a0ee8cc6SDag-Erling Smørgrav #include "common.h"
38*a0ee8cc6SDag-Erling Smørgrav 
39*a0ee8cc6SDag-Erling Smørgrav struct sshbuf *
40*a0ee8cc6SDag-Erling Smørgrav load_file(const char *name)
41*a0ee8cc6SDag-Erling Smørgrav {
42*a0ee8cc6SDag-Erling Smørgrav 	int fd;
43*a0ee8cc6SDag-Erling Smørgrav 	struct sshbuf *ret;
44*a0ee8cc6SDag-Erling Smørgrav 
45*a0ee8cc6SDag-Erling Smørgrav 	ASSERT_PTR_NE(ret = sshbuf_new(), NULL);
46*a0ee8cc6SDag-Erling Smørgrav 	ASSERT_INT_NE(fd = open(test_data_file(name), O_RDONLY), -1);
47*a0ee8cc6SDag-Erling Smørgrav 	ASSERT_INT_EQ(sshkey_load_file(fd, name, ret), 0);
48*a0ee8cc6SDag-Erling Smørgrav 	close(fd);
49*a0ee8cc6SDag-Erling Smørgrav 	return ret;
50*a0ee8cc6SDag-Erling Smørgrav }
51*a0ee8cc6SDag-Erling Smørgrav 
52*a0ee8cc6SDag-Erling Smørgrav struct sshbuf *
53*a0ee8cc6SDag-Erling Smørgrav load_text_file(const char *name)
54*a0ee8cc6SDag-Erling Smørgrav {
55*a0ee8cc6SDag-Erling Smørgrav 	struct sshbuf *ret = load_file(name);
56*a0ee8cc6SDag-Erling Smørgrav 	const u_char *p;
57*a0ee8cc6SDag-Erling Smørgrav 
58*a0ee8cc6SDag-Erling Smørgrav 	/* Trim whitespace at EOL */
59*a0ee8cc6SDag-Erling Smørgrav 	for (p = sshbuf_ptr(ret); sshbuf_len(ret) > 0;) {
60*a0ee8cc6SDag-Erling Smørgrav 		if (p[sshbuf_len(ret) - 1] == '\r' ||
61*a0ee8cc6SDag-Erling Smørgrav 		    p[sshbuf_len(ret) - 1] == '\t' ||
62*a0ee8cc6SDag-Erling Smørgrav 		    p[sshbuf_len(ret) - 1] == ' ' ||
63*a0ee8cc6SDag-Erling Smørgrav 		    p[sshbuf_len(ret) - 1] == '\n')
64*a0ee8cc6SDag-Erling Smørgrav 			ASSERT_INT_EQ(sshbuf_consume_end(ret, 1), 0);
65*a0ee8cc6SDag-Erling Smørgrav 		else
66*a0ee8cc6SDag-Erling Smørgrav 			break;
67*a0ee8cc6SDag-Erling Smørgrav 	}
68*a0ee8cc6SDag-Erling Smørgrav 	/* \0 terminate */
69*a0ee8cc6SDag-Erling Smørgrav 	ASSERT_INT_EQ(sshbuf_put_u8(ret, 0), 0);
70*a0ee8cc6SDag-Erling Smørgrav 	return ret;
71*a0ee8cc6SDag-Erling Smørgrav }
72*a0ee8cc6SDag-Erling Smørgrav 
73*a0ee8cc6SDag-Erling Smørgrav BIGNUM *
74*a0ee8cc6SDag-Erling Smørgrav load_bignum(const char *name)
75*a0ee8cc6SDag-Erling Smørgrav {
76*a0ee8cc6SDag-Erling Smørgrav 	BIGNUM *ret = NULL;
77*a0ee8cc6SDag-Erling Smørgrav 	struct sshbuf *buf;
78*a0ee8cc6SDag-Erling Smørgrav 
79*a0ee8cc6SDag-Erling Smørgrav 	buf = load_text_file(name);
80*a0ee8cc6SDag-Erling Smørgrav 	ASSERT_INT_NE(BN_hex2bn(&ret, (const char *)sshbuf_ptr(buf)), 0);
81*a0ee8cc6SDag-Erling Smørgrav 	sshbuf_free(buf);
82*a0ee8cc6SDag-Erling Smørgrav 	return ret;
83*a0ee8cc6SDag-Erling Smørgrav }
84*a0ee8cc6SDag-Erling Smørgrav 
85