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