| /* $OpenBSD: common.c,v 1.1 2014/06/24 01:14:18 djm Exp $ */ |
| /* |
| * Helpers for key API tests |
| * |
| * Placed in the public domain |
| */ |
| |
| #include "includes.h" |
| |
| #include <sys/types.h> |
| #include <sys/param.h> |
| #include <sys/stat.h> |
| #include <fcntl.h> |
| #include <stdio.h> |
| #ifdef HAVE_STDINT_H |
| #include <stdint.h> |
| #endif |
| #include <stdlib.h> |
| #include <string.h> |
| #include <unistd.h> |
| |
| #include <openssl/bn.h> |
| #include <openssl/rsa.h> |
| #include <openssl/dsa.h> |
| #include <openssl/objects.h> |
| #ifdef OPENSSL_HAS_NISTP256 |
| # include <openssl/ec.h> |
| #endif |
| |
| #include "../test_helper/test_helper.h" |
| |
| #include "ssherr.h" |
| #include "authfile.h" |
| #include "sshkey.h" |
| #include "sshbuf.h" |
| |
| #include "common.h" |
| |
| struct sshbuf * |
| load_file(const char *name) |
| { |
| int fd; |
| struct sshbuf *ret; |
| |
| ASSERT_PTR_NE(ret = sshbuf_new(), NULL); |
| ASSERT_INT_NE(fd = open(test_data_file(name), O_RDONLY), -1); |
| ASSERT_INT_EQ(sshkey_load_file(fd, name, ret), 0); |
| close(fd); |
| return ret; |
| } |
| |
| struct sshbuf * |
| load_text_file(const char *name) |
| { |
| struct sshbuf *ret = load_file(name); |
| const u_char *p; |
| |
| /* Trim whitespace at EOL */ |
| for (p = sshbuf_ptr(ret); sshbuf_len(ret) > 0;) { |
| if (p[sshbuf_len(ret) - 1] == '\r' || |
| p[sshbuf_len(ret) - 1] == '\t' || |
| p[sshbuf_len(ret) - 1] == ' ' || |
| p[sshbuf_len(ret) - 1] == '\n') |
| ASSERT_INT_EQ(sshbuf_consume_end(ret, 1), 0); |
| else |
| break; |
| } |
| /* \0 terminate */ |
| ASSERT_INT_EQ(sshbuf_put_u8(ret, 0), 0); |
| return ret; |
| } |
| |
| BIGNUM * |
| load_bignum(const char *name) |
| { |
| BIGNUM *ret = NULL; |
| struct sshbuf *buf; |
| |
| buf = load_text_file(name); |
| ASSERT_INT_NE(BN_hex2bn(&ret, (const char *)sshbuf_ptr(buf)), 0); |
| sshbuf_free(buf); |
| return ret; |
| } |
| |