diff options
-rw-r--r-- | Makefile | 9 | ||||
-rw-r--r-- | b32.c | 5 | ||||
-rw-r--r-- | b32.h | 1 | ||||
-rw-r--r-- | main.c | 27 |
4 files changed, 24 insertions, 18 deletions
@@ -1,7 +1,10 @@ CC = cc -CFLAGS = -Wall -Wextra -Wpedantic -Werror \ - -O3 -march=native -mtune=native \ - -fomit-frame-pointer -pipe +CFLAGS = \ + -Wall -Wextra -pedantic -Wshadow -Wpointer-arith -Wcast-align \ + -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations \ + -Wredundant-decls -Wnested-externs -Winline -Wno-long-long \ + -Wconversion -Wstrict-prototypes \ + -O3 -march=native -mtune=native -pipe LDLIBS = -luriparser -lssl -lcrypto PREFIX = /usr/local @@ -2,6 +2,10 @@ #include <stddef.h> #include <stdint.h> +#include "b32.h" + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" static const uint8_t ctov[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -20,6 +24,7 @@ static const uint8_t ctov[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; +#pragma GCC diagnostic pop bool b32toa(uint8_t *dst, const char *src, size_t len) @@ -2,6 +2,7 @@ #define B32_B32_H #include <stdbool.h> +#include <stddef.h> #include <stdint.h> bool b32toa(uint8_t *, const char *, size_t); @@ -30,18 +30,17 @@ typedef unsigned char uchar; struct totp_config { const char *enc_sec; - long len, p; + long len, p; }; extern char *__progname; static int rv; -static const char *bad_scheme = "Invalid scheme ‘%.*s’; expected ‘otpauth’"; -static const char *bad_param = "Invalid ‘%s’ parameter provided"; +static const char *bad_scheme = "Invalid scheme ‘%.*s’; expected ‘otpauth’"; +static const char *bad_param = "Invalid ‘%s’ parameter provided"; static const char *empty_param = "Empty ‘%s’ parameter provided"; -static const char *usage_s = - "Usage: %s [-d digits] [-p period] [-u] [secret ...]\n"; +static const char *usage_s = "Usage: %s [-d digits] [-p period] [-u] [secret ...]\n"; static void usage(void); static void totp_print(struct totp_config, char *, bool); @@ -141,13 +140,13 @@ uri_parse(struct totp_config *conf, const char *uri_raw) const char *epos; if (uriParseSingleUriA(&uri, uri_raw, &epos) != URI_SUCCESS) { - len = epos - uri_raw + 24 + strlen(__progname); + len = (size_t)(epos - uri_raw) + 24 + strlen(__progname); WARNX_AND_RET("Failed to parse URI ‘%s’\n" "%*c Error detected here", uri_raw, (int)len, '^'); } - len = uri.scheme.afterLast - uri.scheme.first; + len = (size_t)(uri.scheme.afterLast - uri.scheme.first); reject = len != strlen("otpauth"); reject = reject || strncasecmp(uri.scheme.first, "otpauth", len) != 0; @@ -209,7 +208,7 @@ totp(struct totp_config conf, uint32_t *code) clean = true; } - keylen = old / 1.6; + keylen = (size_t)((double)old / 1.6); if ((key = calloc(keylen + 1, sizeof(char))) == NULL) err(EXIT_FAILURE, "calloc"); b32toa(key, enc_sec, enc_sec_len); @@ -223,12 +222,10 @@ totp(struct totp_config conf, uint32_t *code) if (big_endian()) memcpy(buf, &epoch, sizeof(time_t)); - else { - for (size_t i = 0; i < sizeof(buf); i++) - buf[i] = (epoch >> (8 * (sizeof(buf) - 1 - i))) & 0xFF; - } + else for (size_t i = sizeof(buf); i --> 0;) + buf[sizeof(buf)-1-i] = (uint8_t)((epoch >> 8 * i) & 0xFF); - mac = HMAC(EVP_sha1(), key, keylen, buf, sizeof(buf), NULL, NULL); + mac = HMAC(EVP_sha1(), key, (int)keylen, buf, sizeof(buf), NULL, NULL); if (mac == NULL) WARNX_AND_RET("Failed to compute HMAC SHA-1 hash"); @@ -238,7 +235,7 @@ totp(struct totp_config conf, uint32_t *code) | (mac[off + 1] & 0xFF) << 16 | (mac[off + 2] & 0xFF) << 8 | (mac[off + 3] & 0xFF) << 0; - *code = binc % pow32(10, conf.len); + *code = binc % pow32(10, (uint32_t)conf.len); if (clean) free(enc_sec); @@ -258,7 +255,7 @@ strtol_safe(long *n, const char *s) uint32_t pow32(uint32_t x, uint32_t y) { - int n = x; + uint32_t n = x; if (y == 0) return 1; while (--y != 0) |