1*f3c4d887Schristos #ifndef OCONFIGURE_CONFIG_H 2*f3c4d887Schristos #define OCONFIGURE_CONFIG_H 3*f3c4d887Schristos 4*f3c4d887Schristos #ifdef __cplusplus 5*f3c4d887Schristos # error "Do not use C++: this is a C application." 6*f3c4d887Schristos #endif 7*f3c4d887Schristos #if !defined(__GNUC__) || (__GNUC__ < 4) 8*f3c4d887Schristos # define __attribute__(x) 9*f3c4d887Schristos #endif 10*f3c4d887Schristos #if defined(__linux__) || defined(__MINT__) || defined(__wasi__) 11*f3c4d887Schristos # define _GNU_SOURCE /* memmem, memrchr, setresuid... */ 12*f3c4d887Schristos # define _DEFAULT_SOURCE /* le32toh, crypt, ... */ 13*f3c4d887Schristos #endif 14*f3c4d887Schristos #if defined(__NetBSD__) 15*f3c4d887Schristos # define _OPENBSD_SOURCE /* reallocarray, etc. */ 16*f3c4d887Schristos #endif 17*f3c4d887Schristos #if defined(__sun) 18*f3c4d887Schristos # ifndef _XOPEN_SOURCE /* SunOS already defines */ 19*f3c4d887Schristos # define _XOPEN_SOURCE /* XPGx */ 20*f3c4d887Schristos # endif 21*f3c4d887Schristos # define _XOPEN_SOURCE_EXTENDED 1 /* XPG4v2 */ 22*f3c4d887Schristos # ifndef __EXTENSIONS__ /* SunOS already defines */ 23*f3c4d887Schristos # define __EXTENSIONS__ /* reallocarray, etc. */ 24*f3c4d887Schristos # endif 25*f3c4d887Schristos #endif 26*f3c4d887Schristos #if !defined(__BEGIN_DECLS) 27*f3c4d887Schristos # define __BEGIN_DECLS 28*f3c4d887Schristos #endif 29*f3c4d887Schristos #if !defined(__END_DECLS) 30*f3c4d887Schristos # define __END_DECLS 31*f3c4d887Schristos #endif 32*f3c4d887Schristos 33*f3c4d887Schristos #include <sys/types.h> /* size_t, mode_t, dev_t */ 34*f3c4d887Schristos 35*f3c4d887Schristos #include <stdint.h> /* C99 [u]int[nn]_t types */ 36*f3c4d887Schristos 37*f3c4d887Schristos /* 38*f3c4d887Schristos * Results of configuration feature-testing. 39*f3c4d887Schristos */ 40*f3c4d887Schristos #define HAVE_ARC4RANDOM 1 41*f3c4d887Schristos #define HAVE_B64_NTOP 1 42*f3c4d887Schristos #define HAVE_CAPSICUM 0 43*f3c4d887Schristos #define HAVE_CRYPT 1 44*f3c4d887Schristos #define HAVE_CRYPT_NEWHASH 0 45*f3c4d887Schristos #define HAVE_ENDIAN_H 1 46*f3c4d887Schristos #define HAVE_ERR 1 47*f3c4d887Schristos #define HAVE_EXPLICIT_BZERO 0 48*f3c4d887Schristos #define HAVE_FTS 1 49*f3c4d887Schristos #define HAVE_GETEXECNAME 0 50*f3c4d887Schristos #define HAVE_GETPROGNAME 1 51*f3c4d887Schristos #define HAVE_INFTIM 1 52*f3c4d887Schristos #define HAVE_LANDLOCK 0 53*f3c4d887Schristos #define HAVE_MD5 1 54*f3c4d887Schristos #define HAVE_MEMMEM 1 55*f3c4d887Schristos #define HAVE_MEMRCHR 1 56*f3c4d887Schristos #define HAVE_MEMSET_S 0 57*f3c4d887Schristos #define HAVE_MKFIFOAT 1 58*f3c4d887Schristos #define HAVE_MKNODAT 1 59*f3c4d887Schristos #define HAVE_OSBYTEORDER_H 0 60*f3c4d887Schristos #define HAVE_PATH_MAX 1 61*f3c4d887Schristos #define HAVE_PLEDGE 0 62*f3c4d887Schristos #define HAVE_PROGRAM_INVOCATION_SHORT_NAME 0 63*f3c4d887Schristos #define HAVE_READPASSPHRASE 0 64*f3c4d887Schristos #define HAVE_REALLOCARRAY 1 65*f3c4d887Schristos #define HAVE_RECALLOCARRAY 0 66*f3c4d887Schristos #define HAVE_SANDBOX_INIT 0 67*f3c4d887Schristos #define HAVE_SCAN_SCALED 0 68*f3c4d887Schristos #define HAVE_SECCOMP_FILTER 0 69*f3c4d887Schristos #define HAVE_SETRESGID 0 70*f3c4d887Schristos #define HAVE_SETRESUID 0 71*f3c4d887Schristos #define HAVE_SHA2 0 72*f3c4d887Schristos #define HAVE_SHA2_H 0 73*f3c4d887Schristos #define HAVE_SOCK_NONBLOCK 1 74*f3c4d887Schristos #define HAVE_STRLCAT 1 75*f3c4d887Schristos #define HAVE_STRLCPY 1 76*f3c4d887Schristos #define HAVE_STRNDUP 1 77*f3c4d887Schristos #define HAVE_STRNLEN 1 78*f3c4d887Schristos #define HAVE_STRTONUM 1 79*f3c4d887Schristos #define HAVE_SYS_BYTEORDER_H 0 80*f3c4d887Schristos #define HAVE_SYS_ENDIAN_H 1 81*f3c4d887Schristos #define HAVE_SYS_MKDEV_H 0 82*f3c4d887Schristos #define HAVE_SYS_QUEUE 1 83*f3c4d887Schristos #define HAVE_SYS_SYSMACROS_H 0 84*f3c4d887Schristos #define HAVE_SYS_TREE 1 85*f3c4d887Schristos #define HAVE_SYSTRACE 0 86*f3c4d887Schristos #define HAVE_UNVEIL 0 87*f3c4d887Schristos #define HAVE_TERMIOS 1 88*f3c4d887Schristos #define HAVE_WAIT_ANY 1 89*f3c4d887Schristos #define HAVE___PROGNAME 1 90*f3c4d887Schristos 91*f3c4d887Schristos /* 92*f3c4d887Schristos * Handle the various major()/minor() header files. 93*f3c4d887Schristos * Use sys/mkdev.h before sys/sysmacros.h because SunOS 94*f3c4d887Schristos * has both, where only the former works properly. 95*f3c4d887Schristos */ 96*f3c4d887Schristos #if HAVE_SYS_MKDEV_H 97*f3c4d887Schristos # define COMPAT_MAJOR_MINOR_H <sys/mkdev.h> 98*f3c4d887Schristos #elif HAVE_SYS_SYSMACROS_H 99*f3c4d887Schristos # define COMPAT_MAJOR_MINOR_H <sys/sysmacros.h> 100*f3c4d887Schristos #else 101*f3c4d887Schristos # define COMPAT_MAJOR_MINOR_H <sys/types.h> 102*f3c4d887Schristos #endif 103*f3c4d887Schristos 104*f3c4d887Schristos /* 105*f3c4d887Schristos * Make it easier to include endian.h forms. 106*f3c4d887Schristos */ 107*f3c4d887Schristos #if HAVE_ENDIAN_H 108*f3c4d887Schristos # define COMPAT_ENDIAN_H <endian.h> 109*f3c4d887Schristos #elif HAVE_SYS_ENDIAN_H 110*f3c4d887Schristos # define COMPAT_ENDIAN_H <sys/endian.h> 111*f3c4d887Schristos #elif HAVE_OSBYTEORDER_H 112*f3c4d887Schristos # define COMPAT_ENDIAN_H <libkern/OSByteOrder.h> 113*f3c4d887Schristos #elif HAVE_SYS_BYTEORDER_H 114*f3c4d887Schristos # define COMPAT_ENDIAN_H <sys/byteorder.h> 115*f3c4d887Schristos #else 116*f3c4d887Schristos # warning No suitable endian.h could be found. 117*f3c4d887Schristos # warning Please e-mail the maintainers with your OS. 118*f3c4d887Schristos # define COMPAT_ENDIAN_H <endian.h> 119*f3c4d887Schristos #endif 120*f3c4d887Schristos 121*f3c4d887Schristos /* 122*f3c4d887Schristos * Compatibility for sha2(3). 123*f3c4d887Schristos */ 124*f3c4d887Schristos 125*f3c4d887Schristos /*** SHA-256/384/512 Various Length Definitions ***********************/ 126*f3c4d887Schristos #define SHA256_BLOCK_LENGTH 64 127*f3c4d887Schristos #define SHA256_DIGEST_LENGTH 32 128*f3c4d887Schristos #define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1) 129*f3c4d887Schristos #define SHA384_BLOCK_LENGTH 128 130*f3c4d887Schristos #define SHA384_DIGEST_LENGTH 48 131*f3c4d887Schristos #define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1) 132*f3c4d887Schristos #define SHA512_BLOCK_LENGTH 128 133*f3c4d887Schristos #define SHA512_DIGEST_LENGTH 64 134*f3c4d887Schristos #define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) 135*f3c4d887Schristos #define SHA512_256_BLOCK_LENGTH 128 136*f3c4d887Schristos #define SHA512_256_DIGEST_LENGTH 32 137*f3c4d887Schristos #define SHA512_256_DIGEST_STRING_LENGTH (SHA512_256_DIGEST_LENGTH * 2 + 1) 138*f3c4d887Schristos 139*f3c4d887Schristos /*** SHA-224/256/384/512 Context Structure *******************************/ 140*f3c4d887Schristos typedef struct _SHA2_CTX { 141*f3c4d887Schristos union { 142*f3c4d887Schristos uint32_t st32[8]; 143*f3c4d887Schristos uint64_t st64[8]; 144*f3c4d887Schristos } state; 145*f3c4d887Schristos uint64_t bitcount[2]; 146*f3c4d887Schristos uint8_t buffer[SHA512_BLOCK_LENGTH]; 147*f3c4d887Schristos } SHA2_CTX; 148*f3c4d887Schristos 149*f3c4d887Schristos void SHA256Init(SHA2_CTX *); 150*f3c4d887Schristos void SHA256Transform(uint32_t state[8], const uint8_t [SHA256_BLOCK_LENGTH]); 151*f3c4d887Schristos void SHA256Update(SHA2_CTX *, const uint8_t *, size_t); 152*f3c4d887Schristos void SHA256Pad(SHA2_CTX *); 153*f3c4d887Schristos void SHA256Final(uint8_t [SHA256_DIGEST_LENGTH], SHA2_CTX *); 154*f3c4d887Schristos char *SHA256End(SHA2_CTX *, char *); 155*f3c4d887Schristos char *SHA256File(const char *, char *); 156*f3c4d887Schristos char *SHA256FileChunk(const char *, char *, off_t, off_t); 157*f3c4d887Schristos char *SHA256Data(const uint8_t *, size_t, char *); 158*f3c4d887Schristos 159*f3c4d887Schristos void SHA384Init(SHA2_CTX *); 160*f3c4d887Schristos void SHA384Transform(uint64_t state[8], const uint8_t [SHA384_BLOCK_LENGTH]); 161*f3c4d887Schristos void SHA384Update(SHA2_CTX *, const uint8_t *, size_t); 162*f3c4d887Schristos void SHA384Pad(SHA2_CTX *); 163*f3c4d887Schristos void SHA384Final(uint8_t [SHA384_DIGEST_LENGTH], SHA2_CTX *); 164*f3c4d887Schristos char *SHA384End(SHA2_CTX *, char *); 165*f3c4d887Schristos char *SHA384File(const char *, char *); 166*f3c4d887Schristos char *SHA384FileChunk(const char *, char *, off_t, off_t); 167*f3c4d887Schristos char *SHA384Data(const uint8_t *, size_t, char *); 168*f3c4d887Schristos 169*f3c4d887Schristos void SHA512Init(SHA2_CTX *); 170*f3c4d887Schristos void SHA512Transform(uint64_t state[8], const uint8_t [SHA512_BLOCK_LENGTH]); 171*f3c4d887Schristos void SHA512Update(SHA2_CTX *, const uint8_t *, size_t); 172*f3c4d887Schristos void SHA512Pad(SHA2_CTX *); 173*f3c4d887Schristos void SHA512Final(uint8_t [SHA512_DIGEST_LENGTH], SHA2_CTX *); 174*f3c4d887Schristos char *SHA512End(SHA2_CTX *, char *); 175*f3c4d887Schristos char *SHA512File(const char *, char *); 176*f3c4d887Schristos char *SHA512FileChunk(const char *, char *, off_t, off_t); 177*f3c4d887Schristos char *SHA512Data(const uint8_t *, size_t, char *); 178*f3c4d887Schristos 179*f3c4d887Schristos #define FMT_SCALED_STRSIZE 7 /* minus sign, 4 digits, suffix, null byte */ 180*f3c4d887Schristos int fmt_scaled(long long, char *); 181*f3c4d887Schristos int scan_scaled(char *, long long *); 182*f3c4d887Schristos /* 183*f3c4d887Schristos * Compatibility for explicit_bzero(3). 184*f3c4d887Schristos */ 185*f3c4d887Schristos extern void explicit_bzero(void *, size_t); 186*f3c4d887Schristos 187*f3c4d887Schristos /* 188*f3c4d887Schristos * Macros and function required for readpassphrase(3). 189*f3c4d887Schristos */ 190*f3c4d887Schristos #define RPP_ECHO_OFF 0x00 191*f3c4d887Schristos #define RPP_ECHO_ON 0x01 192*f3c4d887Schristos #define RPP_REQUIRE_TTY 0x02 193*f3c4d887Schristos #define RPP_FORCELOWER 0x04 194*f3c4d887Schristos #define RPP_FORCEUPPER 0x08 195*f3c4d887Schristos #define RPP_SEVENBIT 0x10 196*f3c4d887Schristos #define RPP_STDIN 0x20 197*f3c4d887Schristos char *readpassphrase(const char *, char *, size_t, int); 198*f3c4d887Schristos 199*f3c4d887Schristos /* 200*f3c4d887Schristos * Compatibility for recallocarray(3). 201*f3c4d887Schristos */ 202*f3c4d887Schristos extern void *recallocarray(void *, size_t, size_t, size_t); 203*f3c4d887Schristos 204*f3c4d887Schristos /* 205*f3c4d887Schristos * Compatibility for setresgid(2). 206*f3c4d887Schristos */ 207*f3c4d887Schristos int setresgid(gid_t rgid, gid_t egid, gid_t sgid); 208*f3c4d887Schristos 209*f3c4d887Schristos /* 210*f3c4d887Schristos * Compatibility for setresuid(2). 211*f3c4d887Schristos */ 212*f3c4d887Schristos int setresuid(uid_t ruid, uid_t euid, uid_t suid); 213*f3c4d887Schristos 214*f3c4d887Schristos #endif /*!OCONFIGURE_CONFIG_H*/ 215