On Fri, 19 Jan 2024 at 21:03, Hans Henrik Bergan <divinit...@gmail.com>
wrote:

> Having looked into it, it seems difficult after all,
> I would want a new $options argument for hash_final(), and some
> internal changes to struct php_hash_blake3_ops,
> and that internal change would have to be updated for all other hashes
> PHP support..
> I'm not up for doing that now.
>
> And I think it should be a separate PR, after the initial support gets
> merged.
>
> On Fri, 19 Jan 2024 at 21:42, Hans Henrik Bergan <divinit...@gmail.com>
> wrote:
> >
> > >BLAKE3 has 2 default sizes
> >
> > Nope, only 1 canonical size, 256 bits.
> > *BUT* BLAKE3 is XOF, it can be exactly as long as you want it to be:
> >
> > $ echo test | b3sum --length 5
> > dea2b412aa  -
> > $ echo test | b3sum --length 10
> > dea2b412aa90f1b43a06  -
> > $ echo test | b3sum --length 32
> > dea2b412aa90f1b43a06ca5e8b8feafec45ae1357971322749480f4e1572eaa2  -
> > $ echo test | b3sum --length 64
> >
> dea2b412aa90f1b43a06ca5e8b8feafec45ae1357971322749480f4e1572eaa2ea67cf3c73a3acbfa2bdab694345d8ecf5e353dd1a3d5a9628aec9bffc3e4cca
> >  -
> > $ echo test | b3sum --length 999
> >
> dea2b412aa90f1b43a06ca5e8b8feafec45ae1357971322749480f4e1572eaa2ea67cf3c73a3acbfa2bdab694345d8ecf5e353dd1a3d5a9628aec9bffc3e4ccaa32f434df18da6161cabb08b6278dcebca9833fe8d9f65d64db922cecf78c55b521f60dbd77d8ad8378a8f481f2941fedc817d7e1fdeb9c9c9915f3e0a8a8b3cbd4849e21dbe4e359b21224dee5b75bcee0f2083bb8c25559b109727d23b02bde4d2e212529106a1b23be564007909fa23e39c8fdca42a86e75f1568d77a85b0efb0acfa0258907f6d9bfae259234d782d53276f823fe32e29b7165818cbc75e4860188d60f6bb31b00308b1a7293b75e007eaf2de846709bb1856ed398e1c354a093b4f4853b9127ba2e9d85b5336b3e09eb802eef8168f1954c34cc9c61bb933de56790caaff3e03b43f85febfc175e3534e687527a757c2b2e5474efa6db51873da140f5ebc65dca5545b73dd64ac7585fe1d123475e128878962ff8952cd2c8372c4808c4893c8038e6ffb52ef7cf9416ad71588d779c8d60d19c997524b6f756b1d0d5934d41a8e3644fb3fc23e2403bf8b94b95a36f66fb108b6ed824b117f3de9314566bd7042bdd5116e096f0846121ba7034559b234074eac403d2d0f9a4386745375c54d2c22cc970a1cd9836cc9ad1bc3b8c511e5674f05cd5cb8d844c3e802199f0d8b9f3b6e2abd8e830b5768c1539b2d445181fbdcf77c51c330c67aa7b62691d18ecdb7d3124ac4e5fd83a8251ec072740aa4029624ad0a51ebfc8281a5e098ceda2b468e0f936a93b3498b0f11484c4e04cd7be657614ddebe9c08eb0c912431239605e1924009d32afeb965e9c7bbde77bc8efc2ebbc7eb3555286bb7b97fc30fe33806b36aef129d975251a737f0a285fd7cb617b9326211d22924704a2760e235ffa0c125eabb556698120229880b3af0f6dc81336af17fc90f3e889142a5e338a28816c0b6b3944d2f05b7a70189d3e8a19a1e6f6ca0041d4eb165ab4e4aad2f6ec87dc2986263e395c5a5d626bf8847d8b4a70126858f6adda1f39ce0cacf266895856c9ea118418b80c1a37260c7ef73598beb6b2cb3665eece981e249fec4ab8ad2424f1243b0835a7f079a3a9e9c288395a88e70f75eb5610251a416a7189d6e1c3c25a6729d3c9bae65970f8fa48d3ef8f8469ab62c19c3adc04a5c7debea10a910df7d389b183c18cd33fe6b946ebfc5b8a0505968a63122fe0f618e8cf07a978777381bdbafac8024226eee532b76d63ee4a0b45f1f623928afcce21977284868747d7949dd912c8b0894b6a782d2985085f0e629c0c7be7ab19b37e4c5f01a1636f62ee55783b86df8d53698e8b4bbe03fd69322609bb6fdee35cb433d44ec7322d6f1d040f87072bba06ab793bd857c7f754b080b8b04b28c
> >  -
> >
> > And what's more, thanks to PHP8.1.0's new $options argument for hash()
> > we can expose blake3's XOF like
> >  hash("blake3", "test", options: ["length"=>512/8]): blake3_512
> >  hash("blake3", "test", options: ["length"=>256/8]): blake3_256
> >  hash("blake3", "test", options: ["length"=>8/8]): blake3_8
> >  hash("blake3", "test", options: ["length"=>1000]): blake3_8000
> >
> >
> > that shouldn't be too difficult to implement either! good idea
> >
> > On Fri, 19 Jan 2024 at 20:20, tag Knife <fennic...@gmail.com> wrote:
> > >
> > > On Fri, 19 Jan 2024 at 18:43, Hans Henrik Bergan <h...@loltek.net>
> wrote:
> > >
> > > >  Can we add the BLAKE3 hash?
> > > >
> > > > Created a PR here: https://github.com/php/php-src/pull/13194
> > > >
> > > > BLAKE3 is a very fast ("blazing fast") cryptographically secure
> hash. It is
> > > > the latest iteration of the BLAKE hash, which was a SHA3 finalist~
> see
> > > > https://github.com/BLAKE3-team/BLAKE3 for more info on BLAKE3.
> > > >
> > > > In the PR is a portable C implementation, along with optimized
> ARM-neon and
> > > > x86_64 SSE2, SSE41, AVX2, and AVX512 implementations for GCC+unix and
> > > > GCC+windows and MSVC (*MSVC is currently only using the portable
> > > > implementation, but it should be easy for a developer equipped with
> MSVC to
> > > > enable the optimized implementations. I don't have MSVC personally)
> > > >
> > > > That means the PR includes ~35 copies of the same algorithm, in
> > > > hand-written assembly, optimized for various CPU/compiler/OS
> combinations.
> > > > Which means the PR is hug*e.*
> > > >
> > > > It would be possible to only ship a subset of them (For example,
> keeping
> > > > just the gcc+unix+SSE2 and gcc+unix+AVX2 and ARM-neon and trash the
> rest,
> > > > would benefit a lot systems in-the-wild, and reduce the size of the
> PR
> > > > substantially)
> > > >
> > > > It would also be possible to only ship the portable pure C
> implementation,
> > > > but that would also be detrimental to the performance, which is the
> main
> > > > motivator for adding BLAKE3 in the first place.
> > > >
> > > > But the groundwork to ship them all is already done (see the PR)
> > > >
> > > > Thoughts?
> > > >
> > >
> > > BLAKE3 has 2 default sizes, BLAKE3_256 and BLAKE3_512. Internally the
> > > hashblock size is 512,
> > > With other algo's we have added these different hash sizes, would it be
> > > possible for you to expose the 2 hash sizes.
>

That's why I suggested implementing separate lengths of the like we have
for SHA3, so we could have BLAKE3_256 and BLAKE3_512 and maybe inbetweens.

Reply via email to