X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=misc.h;h=a16a2fa0f5896c7f19d009fbd10e2c9f84da3122;hb=a063e522970946bf7d5dc052079d7773c0dee76d;hp=a361d706b45d40fd8c7908a97fb17520c67f7dc3;hpb=70ab076d839072357dab75590287d44961302de8;p=PuTTY.git diff --git a/misc.h b/misc.h index a361d706..a16a2fa0 100644 --- a/misc.h +++ b/misc.h @@ -39,6 +39,15 @@ char *dupprintf(const char *fmt, ...) char *dupvprintf(const char *fmt, va_list ap); void burnstr(char *string); +/* String-to-Unicode converters that auto-allocate the destination and + * work around the rather deficient interface of mb_to_wc. + * + * These actually live in miscucs.c, not misc.c (the distinction being + * that the former is only linked into tools that also have the main + * Unicode support). */ +wchar_t *dup_mb_to_wc_c(int codepage, int flags, const char *string, int len); +wchar_t *dup_mb_to_wc(int codepage, int flags, const char *string); + int toint(unsigned); char *fgetline(FILE *fp); @@ -64,8 +73,20 @@ int validate_manual_hostkey(char *key); struct tm ltime(void); +/* Wipe sensitive data out of memory that's about to be freed. Simpler + * than memset because we don't need the fill char parameter; also + * attempts (by fiddly use of volatile) to inhibit the compiler from + * over-cleverly trying to optimise the memset away because it knows + * the variable is going out of scope. */ void smemclr(void *b, size_t len); +/* Compare two fixed-length chunks of memory for equality, without + * data-dependent control flow (so an attacker with a very accurate + * stopwatch can't try to guess where the first mismatching byte was). + * Returns 0 for mismatch or 1 for equality (unlike memcmp), hinted at + * by the 'eq' in the name. */ +int smemeq(const void *av, const void *bv, size_t len); + /* * Debugging functions. *