| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 | 
							- /*
 
-  * defs.h: initial definitions for PuTTY.
 
-  *
 
-  * The rule about this header file is that it can't depend on any
 
-  * other header file in this code base. This is where we define
 
-  * things, as much as we can, that other headers will want to refer
 
-  * to, such as opaque structure types and their associated typedefs,
 
-  * or macros that are used by other headers.
 
-  */
 
- #ifndef PUTTY_DEFS_H
 
- #define PUTTY_DEFS_H
 
- #ifndef WINSCP
 
- #ifdef NDEBUG
 
- /*
 
-  * PuTTY is a security project, so assertions are important - if an
 
-  * assumption is violated, proceeding anyway may have far worse
 
-  * consequences than simple program termination. This check and #error
 
-  * should arrange that we don't ever accidentally compile assertions
 
-  * out.
 
-  */
 
- #error Do not compile this code base with NDEBUG defined!
 
- #endif
 
- #endif
 
- #if HAVE_CMAKE_H
 
- #include "cmake.h"
 
- #endif
 
- #include <stddef.h>
 
- #include <stdint.h>
 
- #include <stdio.h>                     /* for __MINGW_PRINTF_FORMAT */
 
- #include <stdbool.h>
 
- #ifdef WINSCP
 
- #define HAVE_AES_NI 1
 
- #endif
 
- #if (!defined WINSCP) && defined _MSC_VER && _MSC_VER < 1800
 
- /* Work around lack of inttypes.h and strtoumax in older MSVC */
 
- #define PRIx32 "x"
 
- #define PRIu32 "u"
 
- #define PRIu64 "I64u"
 
- #define PRIdMAX "I64d"
 
- #define PRIXMAX "I64X"
 
- #define SCNu64 "I64u"
 
- #define SIZEx "Ix"
 
- #define SIZEu "Iu"
 
- /* Also, define a LEGACY_WINDOWS flag to enable other workarounds */
 
- #define LEGACY_WINDOWS
 
- #else
 
- #ifndef WINSCP
 
- // Not needed by the code WinSCP uses
 
- #include <inttypes.h>
 
- #else
 
- #define PRIu32 "u"
 
- #endif
 
- /* Because we still support older MSVC libraries which don't recognise the
 
-  * standard C "z" modifier for size_t-sized integers, we must use an
 
-  * inttypes.h-style macro for those */
 
- #define SIZEx "zx"
 
- #define SIZEu "zu"
 
- #endif
 
- uintmax_t strtoumax(const char *nptr, char **endptr, int base);
 
- #if defined __GNUC__ || defined __clang__
 
- /*
 
-  * On MinGW, the correct compiler format checking for vsnprintf() etc
 
-  * can depend on compile-time flags; these control whether you get
 
-  * ISO C or Microsoft's non-standard format strings.
 
-  * We sometimes use __attribute__ ((format)) for our own printf-like
 
-  * functions, which are ultimately interpreted by the toolchain-chosen
 
-  * printf, so we need to take that into account to get correct warnings.
 
-  */
 
- #ifdef __MINGW_PRINTF_FORMAT
 
- #define PRINTF_LIKE(fmt_index, ellipsis_index) \
 
-     __attribute__ ((format (__MINGW_PRINTF_FORMAT, fmt_index, ellipsis_index)))
 
- #else
 
- #define PRINTF_LIKE(fmt_index, ellipsis_index) \
 
-     __attribute__ ((format (printf, fmt_index, ellipsis_index)))
 
- #endif
 
- #else /* __GNUC__ */
 
- #define PRINTF_LIKE(fmt_index, ellipsis_index)
 
- #endif /* __GNUC__ */
 
- typedef struct conf_tag Conf;
 
- typedef struct terminal_tag Terminal;
 
- typedef struct term_utf8_decode term_utf8_decode;
 
- typedef struct Filename Filename;
 
- typedef struct FontSpec FontSpec;
 
- typedef struct bufchain_tag bufchain;
 
- typedef struct strbuf strbuf;
 
- typedef struct LoadedFile LoadedFile;
 
- typedef struct RSAKey RSAKey;
 
- typedef struct BinarySink BinarySink;
 
- typedef struct BinarySource BinarySource;
 
- typedef struct stdio_sink stdio_sink;
 
- typedef struct bufchain_sink bufchain_sink;
 
- typedef struct handle_sink handle_sink;
 
- typedef struct IdempotentCallback IdempotentCallback;
 
- typedef struct SockAddr SockAddr;
 
- typedef struct Socket Socket;
 
- typedef struct Plug Plug;
 
- typedef struct SocketPeerInfo SocketPeerInfo;
 
- typedef struct DeferredSocketOpener DeferredSocketOpener;
 
- typedef struct DeferredSocketOpenerVtable DeferredSocketOpenerVtable;
 
- typedef struct Backend Backend;
 
- typedef struct BackendVtable BackendVtable;
 
- typedef struct Interactor Interactor;
 
- typedef struct InteractorVtable InteractorVtable;
 
- typedef struct InteractionReadySeat InteractionReadySeat;
 
- typedef struct Ldisc_tag Ldisc;
 
- typedef struct LogContext LogContext;
 
- typedef struct LogPolicy LogPolicy;
 
- typedef struct LogPolicyVtable LogPolicyVtable;
 
- typedef struct Seat Seat;
 
- typedef struct SeatVtable SeatVtable;
 
- typedef struct SeatDialogText SeatDialogText;
 
- typedef struct SeatDialogTextItem SeatDialogTextItem;
 
- typedef struct SeatDialogPromptDescriptions SeatDialogPromptDescriptions;
 
- typedef struct SeatPromptResult SeatPromptResult;
 
- typedef struct cmdline_get_passwd_input_state cmdline_get_passwd_input_state;
 
- typedef struct TermWin TermWin;
 
- typedef struct TermWinVtable TermWinVtable;
 
- typedef struct Ssh Ssh;
 
- typedef struct mp_int mp_int;
 
- typedef struct MontyContext MontyContext;
 
- typedef struct WeierstrassCurve WeierstrassCurve;
 
- typedef struct WeierstrassPoint WeierstrassPoint;
 
- typedef struct MontgomeryCurve MontgomeryCurve;
 
- typedef struct MontgomeryPoint MontgomeryPoint;
 
- typedef struct EdwardsCurve EdwardsCurve;
 
- typedef struct EdwardsPoint EdwardsPoint;
 
- typedef struct SshServerConfig SshServerConfig;
 
- typedef struct SftpServer SftpServer;
 
- typedef struct SftpServerVtable SftpServerVtable;
 
- typedef struct Channel Channel;
 
- typedef struct SshChannel SshChannel;
 
- typedef struct mainchan mainchan;
 
- typedef struct CertExprBuilder CertExprBuilder;
 
- typedef struct ssh_sharing_state ssh_sharing_state;
 
- typedef struct ssh_sharing_connstate ssh_sharing_connstate;
 
- typedef struct share_channel share_channel;
 
- typedef struct PortFwdManager PortFwdManager;
 
- typedef struct PortFwdRecord PortFwdRecord;
 
- typedef struct ConnectionLayer ConnectionLayer;
 
- typedef struct prng prng;
 
- typedef struct ssh_hashalg ssh_hashalg;
 
- typedef struct ssh_hash ssh_hash;
 
- typedef struct ssh_kex ssh_kex;
 
- typedef struct ssh_kexes ssh_kexes;
 
- typedef struct ssh_keyalg ssh_keyalg;
 
- typedef struct ssh_key ssh_key;
 
- typedef struct ssh_compressor ssh_compressor;
 
- typedef struct ssh_decompressor ssh_decompressor;
 
- typedef struct ssh_compression_alg ssh_compression_alg;
 
- typedef struct ssh2_userkey ssh2_userkey;
 
- typedef struct ssh2_macalg ssh2_macalg;
 
- typedef struct ssh2_mac ssh2_mac;
 
- typedef struct ssh_cipheralg ssh_cipheralg;
 
- typedef struct ssh_cipher ssh_cipher;
 
- typedef struct ssh2_ciphers ssh2_ciphers;
 
- typedef struct dh_ctx dh_ctx;
 
- typedef struct ecdh_key ecdh_key;
 
- typedef struct ecdh_keyalg ecdh_keyalg;
 
- typedef struct NTRUKeyPair NTRUKeyPair;
 
- typedef struct NTRUEncodeSchedule NTRUEncodeSchedule;
 
- typedef struct dlgparam dlgparam;
 
- typedef struct dlgcontrol dlgcontrol;
 
- typedef struct settings_w settings_w;
 
- typedef struct settings_r settings_r;
 
- typedef struct settings_e settings_e;
 
- typedef struct ca_options ca_options;
 
- typedef struct host_ca host_ca;
 
- typedef struct host_ca_enum host_ca_enum;
 
- typedef struct SessionSpecial SessionSpecial;
 
- typedef struct StripCtrlChars StripCtrlChars;
 
- typedef struct BidiContext BidiContext;
 
- /*
 
-  * A small structure wrapping up a (pointer, length) pair so that it
 
-  * can be conveniently passed to or from a function.
 
-  */
 
- typedef struct ptrlen {
 
-     const void *ptr;
 
-     size_t len;
 
- } ptrlen;
 
- typedef struct logblank_t logblank_t;
 
- typedef struct BinaryPacketProtocol BinaryPacketProtocol;
 
- typedef struct PacketProtocolLayer PacketProtocolLayer;
 
- struct unicode_data;
 
- /* Do a compile-time type-check of 'to_check' (without evaluating it),
 
-  * as a side effect of returning the value 'to_return'. Note that
 
-  * although this macro double-*expands* to_return, it always
 
-  * *evaluates* exactly one copy of it, so it's side-effect safe. */
 
- #define TYPECHECK(to_check, to_return)                  \
 
-     (sizeof(to_check) ? (to_return) : (to_return))
 
- /* Return a pointer to the object of structure type 'type' whose field
 
-  * with name 'field' is pointed at by 'object'. */
 
- #define container_of(object, type, field)                               \
 
-     TYPECHECK(object == &((type *)0)->field,                            \
 
-               ((type *)(((char *)(object)) - offsetof(type, field))))
 
- #if defined __GNUC__ || defined __clang__
 
- #define NORETURN __attribute__((__noreturn__))
 
- #elif defined _MSC_VER
 
- #define NORETURN __declspec(noreturn)
 
- #else
 
- #define NORETURN
 
- #endif
 
- /*
 
-  * Standard macro definitions. STR() behaves like the preprocessor
 
-  * stringification # operator, and CAT() behaves like the token paste
 
-  * ## operator, except that each one macro-expands its argument(s)
 
-  * first, unlike the raw version. E.g.
 
-  *
 
-  *   #__LINE__               ->    "__LINE__"
 
-  *   STR(__LINE__)           ->    "1234"             (or whatever)
 
-  *
 
-  * and similarly,
 
-  *
 
-  *   foo ## __LINE__         ->    foo__LINE__
 
-  *   CAT(foo, __LINE__)      ->    foo1234            (or whatever)
 
-  *
 
-  * The expansion is achieved by having each macro pass its arguments
 
-  * to a secondary inner macro, because parameter lists of a macro call
 
-  * get expanded before the called macro is invoked. So STR(__LINE__)
 
-  * -> STR_INNER(1234) -> #1234 -> "1234", and similarly for CAT.
 
-  */
 
- #define STR_INNER(x) #x
 
- #define STR(x) STR_INNER(x)
 
- #define CAT_INNER(x,y) x ## y
 
- #define CAT(x,y) CAT_INNER(x,y)
 
- /*
 
-  * Structure shared between ssh.h and storage.h, giving strictness
 
-  * options relating to checking of an OpenSSH certificate. It's a bit
 
-  * cheaty to put something so specific in here, but more painful to
 
-  * put it in putty.h.
 
-  */
 
- struct ca_options {
 
-     bool permit_rsa_sha1, permit_rsa_sha256, permit_rsa_sha512;
 
- };
 
- #endif /* PUTTY_DEFS_H */
 
 
  |