diff --git a/src/hashes.c b/src/hashes.c index 4171e30..856c1a7 100644 --- a/src/hashes.c +++ b/src/hashes.c @@ -24,6 +24,10 @@ static const struct hash_info { { MH_H_BLAKE2S, "blake2s", 32 } }; +// REVIEW NOTE: +// This could just be a table where the index into the array is the hash +// function. This would make the lookups much simpler. + mh_assert_static(sizeof(hash_infos) / sizeof(hash_infos[0]) == MH_H_COUNT); // Searches for given hash in hash info table @@ -40,7 +44,8 @@ static const struct hash_info *find_hash(int hash) { const char *mh_hash_name(int hash) { const struct hash_info *info = find_hash(hash); - return info ? info->name : NULL; + return (info != NULL) ? info->name : NULL; + // I prefer explicit checks against null pointers } diff --git a/src/multihash.c b/src/multihash.c index bae1453..9f0d0dd 100644 --- a/src/multihash.c +++ b/src/multihash.c @@ -10,66 +10,69 @@ #define VARINT_MASK (1 << 7) static int check_len(size_t len) { - if (len < 1) { + if (len < 1) return MH_E_TOO_SHORT; - } else if (len >= 128) { + else if (len >= 128) return MH_E_TOO_LONG; - } - return MH_E_NO_ERROR; + return 0; } static int check_multihash(const unsigned char mh[], size_t len) { - int error; + int err; if (len < 3) return MH_E_TOO_SHORT; if (mh[0] & VARINT_MASK) { - // In near future multihash format will be - // extended with varints, this is how we are protecting - // against it. + // This value is a varint, but there are currently no supported values + // that require more than a single byte to represent. return MH_E_VARINT_NOT_SUPPORTED; } else if (mh[1] & VARINT_MASK) { return MH_E_VARINT_NOT_SUPPORTED; } - error = check_len(mh[1]); - if (error) - return error; + err = check_len(mh[1]); + if (err) + return err; - return MH_E_NO_ERROR; + return 0; } // returns hash code or error (which is < 0) int mh_multihash_hash(const unsigned char *mh, size_t len) { - if (check_multihash(mh, len)) - return check_multihash(mh, len); + int err; + err = check_multihash(mh, len); + return err; + return (int) mh[0]; } // returns length of multihash or error (which is < 0) int mh_multihash_length(const unsigned char *mh, size_t len) { - if (check_multihash(mh, len)) - return check_multihash(mh, len); + int err; + err = check_multihash(mh, len); + if (err) + return err; + return (int) mh[1]; } -// gives access to raw digset inside multihash buffer +// gives access to raw digest inside multihash buffer // returns 0 or negative error -int mh_multihash_digset(unsigned char *multihash, size_t len, unsigned char **digset, - size_t *digset_len) { +int mh_multihash_digest(unsigned char *multihash, size_t len, unsigned char **digest, + size_t *digest_len) { int error = check_multihash(multihash, len); if (error) return error; - (*digset_len) = (size_t) mh_multihash_length(multihash, len); - (*digset) = multihash + 2; // Always true without varint + (*digest_len) = (size_t) mh_multihash_length(multihash, len); + (*digest) = multihash + 2; // Always true without varint - return MH_E_NO_ERROR; + return 0; } int mh_new_length(int code, size_t hash_len) { @@ -79,17 +82,17 @@ int mh_new_length(int code, size_t hash_len) { return 2 + hash_len; } -int mh_new(unsigned char *buffer, int code, const unsigned char *digset, - size_t digset_len) { +int mh_new(unsigned char *buffer, int code, const unsigned char *digest, + size_t digest_len) { if (code & VARINT_MASK) return MH_E_VARINT_NOT_SUPPORTED; - if (digset_len > 127) + if (digest_len > 127) return MH_E_DIGSET_TOO_LONG; buffer[0] = (unsigned char) ((unsigned int) code) & 255; - buffer[1] = (unsigned char) digset_len; - memcpy(buffer + 2, digset, digset_len); + buffer[1] = (unsigned char) digest_len; + memcpy(buffer + 2, digest, digest_len); - return MH_E_NO_ERROR; + return 0; }