public inbox for linux-ext4@vger.kernel.org
 help / color / mirror / Atom feed
From: "Theodore Ts'o" <tytso@mit.edu>
To: Avi Deitcher <avi@deitcher.net>
Cc: linux-ext4@vger.kernel.org
Subject: Re: algorithm for half-md4 used in htree directories
Date: Mon, 11 Oct 2021 16:20:35 -0400	[thread overview]
Message-ID: <YWSck57bsX/LqAKr@mit.edu> (raw)
In-Reply-To: <CAF1vpkhwSOfGfErUUrp0YU5hSt58TtykTECiJXTcgqDtG0WVVg@mail.gmail.com>

On Mon, Oct 11, 2021 at 08:30:36AM -0700, Avi Deitcher wrote:
> Does someone know how this is constructed and used?
> 
> On Mon, Oct 4, 2021 at 12:57 AM Avi Deitcher <avi@deitcher.net> wrote:
> >
> > Hi Andreas,
> >
> > I had looked in __ext4fs_dirhash(). Yes, it does reference the seed -
> > and create a default if none is there at the filesystem level - but it
> > doesn't appear to use it, in that function. hinfo is populated in the
> > function - hash, minor-hash, seed - but it never uses the seed to
> > manipulate the hash.

The seed is used to initialize the buf array, so long as the seed is
not all zero's.  If it is all zeros, then the default seed is used
instead (right above this bit of code:

	if (hinfo->seed) {
		for (i = 0; i < 4; i++) {
			if (hinfo->seed[i]) {
				memcpy(buf, hinfo->seed, sizeof(buf));
				break;
			}
		}
	}

The legacy hash doesn't use the seed, yes.  But for the other hash
types (hash_version), they mix the filename (in different ways
depending on the hash type.  For example, for half md4:

	case DX_HASH_HALF_MD4:
		p = name;
		while (len > 0) {
			(*str2hashbuf)(p, len, in, 8);
			half_md4_transform(buf, in);
			                   ^^^
			len -= 32;
			p += 32;
		}
		minor_hash = buf[2];
		hash = buf[1];
		break;

When the hash seed is different, that means the initial state of the
buf array will different, and this influences the resulting hash.

Cheers,

					- Ted

  reply	other threads:[~2021-10-11 20:20 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-01 11:49 algorithm for half-md4 used in htree directories Avi Deitcher
2021-10-03 12:47 ` Avi Deitcher
2021-10-03 16:43   ` Andreas Dilger
2021-10-04  7:57     ` Avi Deitcher
2021-10-11 15:30       ` Avi Deitcher
2021-10-11 20:20         ` Theodore Ts'o [this message]
2021-10-12  2:58           ` Avi Deitcher
2021-10-12 17:30             ` Theodore Ts'o
2021-10-13  2:20               ` Avi Deitcher
2021-10-15 18:43               ` Avi Deitcher
2021-10-15 19:10                 ` Theodore Ts'o
2021-10-15 19:43                   ` Avi Deitcher
2021-10-15 20:30                     ` Theodore Ts'o
2021-10-15 19:50                   ` Theodore Ts'o
2021-10-18 16:56                     ` Avi Deitcher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YWSck57bsX/LqAKr@mit.edu \
    --to=tytso@mit.edu \
    --cc=avi@deitcher.net \
    --cc=linux-ext4@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox