From: aiden@kaizenos.com Subject: Add SHA-512 support to mtree To: tech@openbsd.org Date: Sun, 1 Jun 2025 21:47:39 +0100 Hi @tech The following diff adds SHA-512 support to mtree. Would this be welcome? Thanks diff /usr/src path + /usr/src commit - 225f0e6a7aa305433103bcae9018d1fe77e2fd53 blob - dc051e65d60a0801b9446c6a1171db442dce60a3 file + usr.sbin/mtree/create.c --- usr.sbin/mtree/create.c +++ usr.sbin/mtree/create.c @@ -234,6 +234,15 @@ statf(int indent, FTSENT *p) else output(indent, &offset, "sha256digest=%s", sha256digest); } + if (keys & F_SHA512 && S_ISREG(p->fts_statp->st_mode)) { + char *sha512digest, buf[SHA512_DIGEST_STRING_LENGTH]; + + sha512digest = SHA512File(p->fts_accpath,buf); + if (!sha512digest) + error("%s: %s", p->fts_accpath, strerror(errno)); + else + output(indent, &offset, "sha512digest=%s", sha512digest); + } if (keys & F_SLINK && (p->fts_info == FTS_SL || p->fts_info == FTS_SLNONE)) { name = rlink(p->fts_accpath); commit - 225f0e6a7aa305433103bcae9018d1fe77e2fd53 blob - b79dfc9cbf69851d77791f9677f8ab2cf74cb014 file + usr.sbin/mtree/misc.c --- usr.sbin/mtree/misc.c +++ usr.sbin/mtree/misc.c @@ -65,6 +65,7 @@ static KEY keylist[] = { {"rmd160digest",F_RMD160, NEEDVALUE}, {"sha1digest", F_SHA1, NEEDVALUE}, {"sha256digest",F_SHA256, NEEDVALUE}, + {"sha512digest",F_SHA512, NEEDVALUE}, {"size", F_SIZE, NEEDVALUE}, {"time", F_TIME, NEEDVALUE}, {"type", F_TYPE, NEEDVALUE}, commit - 225f0e6a7aa305433103bcae9018d1fe77e2fd53 blob - 4968238d0d8a35196f6a62e3db65eb975b4cc181 file + usr.sbin/mtree/mtree.8 --- usr.sbin/mtree/mtree.8 +++ usr.sbin/mtree/mtree.8 @@ -195,6 +195,8 @@ The RIPEMD-160 message digest of the file. The SHA-1 message digest of the file. .It Cm sha256digest The SHA-256 message digest of the file. +.It Cm sha512digest +The SHA-512 message digest of the file. .It Cm size The size, in bytes, of the file. .It Cm time commit - 225f0e6a7aa305433103bcae9018d1fe77e2fd53 blob - 2957d30876d4f0edba23dfd473fa5bd83dec6b92 file + usr.sbin/mtree/mtree.h --- usr.sbin/mtree/mtree.h +++ usr.sbin/mtree/mtree.h @@ -54,6 +54,7 @@ typedef struct _node { char *rmd160digest; /* RIPEMD-160 digest */ char *sha1digest; /* SHA-1 digest */ char *sha256digest; /* SHA-256 digest */ + char *sha512digest; /* SHA-512 digest */ char *slink; /* symbolic link reference */ uid_t st_uid; /* uid */ gid_t st_gid; /* gid */ @@ -84,6 +85,7 @@ typedef struct _node { #define F_FLAGS 0x080000 /* file flags */ #define F_NOCHANGE 0x100000 /* do not change owner/mode */ #define F_SHA256 0x200000 /* SHA-256 digest */ +#define F_SHA512 0x400000 /* SHA-512 digest */ u_int32_t flags; /* items set */ #define F_BLOCK 0x001 /* block special */ commit - 225f0e6a7aa305433103bcae9018d1fe77e2fd53 blob - 88af6a050743baa20abc08445a8afc5c02898912 file + usr.sbin/mtree/spec.c --- usr.sbin/mtree/spec.c +++ usr.sbin/mtree/spec.c @@ -237,6 +237,11 @@ set(char *t, NODE *ip) if (!ip->sha256digest) error("%s", strerror(errno)); break; + case F_SHA512: + ip->sha512digest = strdup(val); + if (!ip->sha512digest) + error("%s", strerror(errno)); + break; case F_SIZE: ip->st_size = strtoll(val, &ep, 10); if (*ep)