Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add raw checksums types.
Vsevolod Stakhov committed 11 years ago
commit 5bf264fba6c9ed43e6448b5aa5684957835c2fc4
parent 35ceaa8
2 files changed +25 -4
modified libpkg/pkg_checksum.c
@@ -76,6 +76,18 @@ static const struct _pkg_cksum_type {
		pkg_checksum_hash_blake2,
		pkg_checksum_encode_hex
	},
+
	[PKG_HASH_TYPE_SHA256_RAW] = {
+
		"sha256_raw",
+
		SHA256_DIGEST_LENGTH,
+
		pkg_checksum_hash_sha256,
+
		NULL
+
	},
+
	[PKG_HASH_TYPE_BLAKE2_RAW] = {
+
		"blake2_raw",
+
		BLAKE2B_OUTBYTES,
+
		pkg_checksum_hash_blake2,
+
		NULL
+
	},
	[PKG_HASH_TYPE_UNKNOWN] = {
		NULL,
		-1,
@@ -192,10 +204,17 @@ pkg_checksum_generate(struct pkg *pkg, char *dest, size_t destlen,
		return (EPKG_FATAL);
	}

-
	i = snprintf(dest, destlen, "%d%c%d%c", PKG_CHECKSUM_CUR_VERSION,
-
		PKG_CKSUM_SEPARATOR, type, PKG_CKSUM_SEPARATOR);
-
	assert(i < destlen);
-
	checksum_types[type].encfunc(bdigest, blen, dest + i, destlen - i);
+
	if (checksum_types[type].encfunc) {
+
		i = snprintf(dest, destlen, "%d%c%d%c", PKG_CHECKSUM_CUR_VERSION,
+
				PKG_CKSUM_SEPARATOR, type, PKG_CKSUM_SEPARATOR);
+
		assert(i < destlen);
+
		checksum_types[type].encfunc(bdigest, blen, dest + i, destlen - i);
+
	}
+
	else {
+
		/* For raw formats we just output digest */
+
		assert(destlen >= blen);
+
		memcpy(dest, bdigest, blen);
+
	}

	free(bdigest);
	LL_FREE(entries, free);
modified libpkg/private/pkg.h
@@ -272,6 +272,8 @@ typedef enum pkg_checksum_type_e {
	PKG_HASH_TYPE_SHA256_BASE32 = 0,
	PKG_HASH_TYPE_SHA256_HEX,
	PKG_HASH_TYPE_BLAKE2_BASE32,
+
	PKG_HASH_TYPE_SHA256_RAW,
+
	PKG_HASH_TYPE_BLAKE2_RAW,
	PKG_HASH_TYPE_UNKNOWN
} pkg_checksum_type_t;