openwall / openwall/john

Use VAES

Open
#5,690 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
C
Stars
13.6k
Forks
2.6k
PR merge metrics
No merged PRs in 30d

Description

According to https://en.wikipedia.org/wiki/AVX-512#VAES "introduced with Ice Lake" are EVEX-encoded forms of AES-NI and "The wider than 128-bit variations of the instruction perform the same operation on each 128-bit portion of input registers." We could use them where parallelism permits (or bring parallelism down from higher levels by increasing "keys per crypt" accordingly).

We currently do use instructions that look vaes* in (dis)assembly, but those are VEX-encoded 128-bit (supported along with the original AVX, so on older CPUs too), not EVEX and not wider (supported only on recent CPUs on top of AVX-512).

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating the existing VEX-encoded vaes* uses in the code or generated disassembly and identify where parallelism permits wider EVEX-encoded VAES instructions. Done means the applicable paths use VAES on supported recent CPUs without changing correctness, with relevant performance compared against the existing implementation.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
cryptography, performance
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.