Skip to content

Document public API conventions#1295

Open
mkannwischer wants to merge 2 commits into
mainfrom
api-conventions
Open

Document public API conventions#1295
mkannwischer wants to merge 2 commits into
mainfrom
api-conventions

Conversation

@mkannwischer

Copy link
Copy Markdown
Contributor

Add API-CONVENTIONS.md covering return values, pointer validity (all pointers assumed valid, no NULL checks), and the state of output buffers on error (left unchanged or fully zeroized). Link it from the mldsa_native.h header comment and the README Usage section.

@mkannwischer
mkannwischer requested a review from a team as a code owner July 17, 2026 06:12
@mkannwischer mkannwischer added this to the v1.0.0 milestone Jul 17, 2026
Comment thread API-CONVENTIONS.md Outdated

Functions returning `int` return `0` on success and a negative `MLD_ERR_*` constant (see `mldsa_native.h`) on failure. Return values must always be checked; the public API is annotated with `warn_unused_result` on compilers that support it.

For the signature verification, `MLD_ERR_FAIL` reports that the signature is invalid. This is an expected outcome, not an internal error.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest to elaborate a bit.

Functions returning `int` return `0` on success and a negative error code on failure. 
Error codes are enumerated as `MLD_ERR_*` in `mldsa_native.h`.

Errors have different origins, and not all are fatal. For example, signature verification 
routines use `MLD_ERR_FAIL` to signal an invalid signature; signing hooks use
`MLD_ERR_SIGNING_PAUSED` to signal a paused signature operation. 
Other errors, such as `MLD_ERR_SIGN_ATTEMPTS_EXHAUSTED` or 
`MLD_ERR_RNG_FAIL`, should never be observed in normal operation, and hint at 
a deeper failure in the system. 

Return values must always be checked; the public API is annotated with 
`warn_unused_result` on compilers that support it.

Comment thread API-CONVENTIONS.md Outdated

## Pointer arguments

All pointer arguments are assumed to be valid and non-NULL, and every buffer is assumed to have the size implied by its parameter type and the relevant `MLDSA*_*BYTES` constant. mldsa-native does not check pointers for NULL and does not validate buffer sizes; passing a NULL or otherwise invalid pointer, or an undersized buffer, is undefined behavior. Ensuring these preconditions is the caller's responsibility.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

non-NULL is only required for positive lengths

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Drop "and the relevant ... constant"?

Comment thread API-CONVENTIONS.md Outdated

All pointer arguments are assumed to be valid and non-NULL, and every buffer is assumed to have the size implied by its parameter type and the relevant `MLDSA*_*BYTES` constant. mldsa-native does not check pointers for NULL and does not validate buffer sizes; passing a NULL or otherwise invalid pointer, or an undersized buffer, is undefined behavior. Ensuring these preconditions is the caller's responsibility.

The one exception is the context argument paired with a length: `ctx` may be NULL when `ctxlen == 0`. Such cases are called out in the per-function documentation.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you deliberately omit the length checks?

@mkannwischer mkannwischer added the documentation Improvements or additions to documentation label Jul 17, 2026
Add API-CONVENTIONS.md covering return values, pointer validity (all
pointers assumed valid, no NULL checks), and the state of output
buffers on error (left unchanged or fully zeroized). Link it from the
mldsa_native.h header comment and the README Usage section.

Signed-off-by: Matthias J. Kannwischer <matthias@zerorisc.com>
Note in the mldsa_native.h docs that m may be NULL when mlen == 0,
and add a test exercising it: a sign/verify round-trip with m == NULL,
mlen == 0 for both the pure and SHAKE256 pre-hash paths.

Signed-off-by: Matthias J. Kannwischer <matthias@zerorisc.com>
@oqs-bot

oqs-bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

CBMC Results (ML-DSA-44, REDUCE-RAM)

Full Results (210 proofs)
Proof Status Current Previous Change
**TOTAL** 1363s 1364s -0.1%
polyvec_matrix_pointwise_montgomery_yvec 143s 149s -4%
poly_pointwise_montgomery_c 116s 112s +4%
mld_invntt_layer 100s 105s -5%
polyveck_chknorm 58s 67s -13%
fqmul 42s 39s +8%
mld_ntt_layer 40s 41s -2%
sign_verify_internal 27s 49s -45%
keccakf1600x4_permute_native 22s 22s +0%
mld_ntt_butterfly_block 22s 23s -4%
poly_ntt_c 20s 21s -5%
mld_attempt_signature_generation 18s 19s -5%
mld_check_pct 16s 15s +7%
polyeta_unpack 16s 14s +14%
poly_chknorm_c 15s 11s +36%
poly_uniform_eta_4x 14s 12s +17%
rej_uniform_c 14s 16s -12%
compute_pack_t0_t1 13s 12s +8%
polyvecl_chknorm 12s 11s +9%
poly_invntt_tomont_c 10s 11s -9%
polyt0_unpack 10s 12s -17%
keccak_absorb_once_x4 9s 8s +12%
mld_compute_pack_z 9s 6s +50%
rej_uniform 9s 8s +12%
polyveck_decompose 8s 7s +14%
mld_keccakf1600_permute_c 7s 7s +0%
pointwise_acc_native_aarch64 7s 6s +17%
poly_power2round 7s 4s +75%
polyvec_matrix_pointwise_montgomery_row 7s 6s +17%
polyz_unpack_c 7s 8s -12%
rej_uniform_native 7s 5s +40%
rej_uniform_native_x86_64 7s - new
keccak_squeezeblocks_x4 6s 3s +100%
pointwise_acc_native_x86_64 6s 4s +50%
pointwise_native_x86_64 6s 4s +50%
poly_add 6s 7s -14%
poly_chknorm 6s 3s +100%
poly_decompose_c 6s 5s +20%
sign_verify_pre_hash_internal 6s 5s +20%
fqscale 5s 2s +150%
mld_h 5s 4s +25%
mld_keccakf1600_extract_bytes 5s 2s +150%
poly_chknorm_native_aarch64 5s 2s +150%
poly_decompose 5s 2s +150%
poly_reduce 5s 4s +25%
poly_uniform_4x 5s 3s +67%
polyeta_pack 5s 3s +67%
polyveck_pack_eta 5s 4s +25%
polyveck_unpack_eta 5s 2s +150%
rej_eta_native 5s 3s +67%
sign_keypair_internal 5s 4s +25%
sign_pk_from_sk 5s 5s +0%
sign_signature 5s 6s -17%
sign_verify_extmu 5s 5s +0%
sign_verify_pre_hash_shake256 5s 5s +0%
intt_native_aarch64 4s 3s +33%
keccak_init 4s 3s +33%
keccakf1600_permute_native 4s 3s +33%
mld_ct_cmask_neg_i32 4s 2s +100%
mld_prepare_domain_separation_prefix 4s 3s +33%
mld_sample_s1_s2 4s 1s +300%
mld_sample_s1_s2_serial 4s 4s +0%
pack_sk_s1 4s 3s +33%
pointwise_native_aarch64 4s 2s +100%
poly_caddq_c 4s 3s +33%
poly_challenge 4s 6s -33%
poly_invntt_tomont 4s 2s +100%
poly_ntt 4s 3s +33%
poly_ntt_native 4s 3s +33%
poly_pointwise_montgomery_native 4s 2s +100%
poly_shiftl 4s 4s +0%
poly_use_hint_native_x86_64 4s - new
polyt0_pack 4s 4s +0%
polyvec_matrix_expand_serial 4s 4s +0%
polyveck_ntt 4s 2s +100%
polyveck_reduce 4s 4s +0%
polyvecl_ntt 4s 3s +33%
polyvecl_pointwise_acc_montgomery_native 4s 3s +33%
polyvecl_unpack_eta 4s 4s +0%
polyz_pack 4s 2s +100%
shake128_absorb 4s 3s +33%
shake256 4s 1s +300%
shake256_release 4s 1s +300%
sig_unpack_hints 4s 2s +100%
sign_keypair 4s 5s -20%
sign_signature_extmu 4s 4s +0%
sign_signature_internal 4s 4s +0%
sign_signature_pre_hash_shake256 4s 4s +0%
sk_t0hat_get_poly 4s 1s +300%
yvec_get_poly 4s 3s +33%
caddq 3s 6s -50%
intt_native_x86_64 3s 2s +50%
keccak_absorb 3s 3s +0%
keccak_f1600_x4_native_avx2 3s 2s +50%
keccakf1600_extract_bytes (big endian) 3s 4s -25%
keccakf1600_permute 3s 2s +50%
keccakf1600_xor_bytes 3s 3s +0%
keccakf1600_xor_bytes (big endian) 3s 6s -50%
keccakf1600x4_extract_bytes 3s 2s +50%
mld_ct_cmask_nonzero_u32 3s 3s +0%
mld_ct_cmask_nonzero_u8 3s 2s +50%
mld_ct_get_optblocker_u32 3s 2s +50%
mld_keccakf1600x4_extract_bytes_c 3s 4s -25%
mld_polymat_expand_entry 3s 2s +50%
mld_sign_attempt 3s - new
mld_sign_finish 3s - new
mld_sign_resume 3s - new
ntt_native_x86_64 3s 3s +0%
pack_sig_c 3s 5s -40%
pack_sig_h 3s 4s -25%
pack_sig_z 3s 2s +50%
poly_caddq_native 3s 3s +0%
poly_caddq_native_aarch64 3s 3s +0%
poly_caddq_native_x86_64 3s 4s -25%
poly_chknorm_native 3s 4s -25%
poly_chknorm_native_x86_64 3s 2s +50%
poly_decompose_32_native_aarch64 3s 4s -25%
poly_decompose_88_native_aarch64 3s 3s +0%
poly_decompose_native 3s 2s +50%
poly_invntt_tomont_native 3s 3s +0%
poly_permute_bitrev_to_custom_optional 3s 5s -40%
poly_uniform_eta 3s 2s +50%
poly_use_hint_native 3s 3s +0%
poly_use_hint_native_aarch64 3s 3s +0%
polyt1_pack 3s 3s +0%
polyvec_matrix_expand 3s 3s +0%
polyveck_caddq 3s 3s +0%
polyveck_invntt_tomont 3s 5s -40%
polyvecl_pointwise_acc_montgomery_c 3s 4s -25%
polyvecl_uniform_gamma1_serial 3s 2s +50%
polyw1_pack_32 3s 3s +0%
polyz_unpack 3s 3s +0%
polyz_unpack_17_native_aarch64 3s 2s +50%
polyz_unpack_19_native_aarch64 3s 4s -25%
rej_eta 3s 5s -40%
rej_eta_c 3s 4s -25%
rej_uniform_eta_native_x86_64 3s - new
shake128_init 3s 2s +50%
shake128_release 3s 2s +50%
sign_signature_pre_hash_internal 3s 4s -25%
sk_s1hat_get_poly 3s 2s +50%
sys_check_capability 3s 2s +50%
unpack_pk_t1 3s 3s +0%
unpack_sk 3s 3s +0%
unpack_sk_s1hat 3s 3s +0%
use_hint 3s 2s +50%
yvec_init 3s 1s +200%
decompose 2s 3s -33%
keccak_f1600_x1_native_aarch64 2s 3s -33%
keccak_f1600_x1_native_aarch64_v84a 2s 2s +0%
keccak_f1600_x4_native_aarch64_v84a 2s 3s -33%
keccak_f1600_x4_native_aarch64_v8a_scalar_hybrid 2s 2s +0%
keccak_f1600_x4_native_aarch64_v8a_v84a_scalar_hybrid 2s 3s -33%
keccak_squeeze 2s 2s +0%
keccakf1600x4_permute 2s 4s -50%
keccakf1600x4_xor_bytes 2s 3s -33%
keccakf1600x4_xor_bytes_native 2s 5s -60%
mld_ct_abs_i32 2s 3s -33%
mld_ct_get_optblocker_i64 2s 4s -50%
mld_ct_get_optblocker_u8 2s 2s +0%
mld_ct_sel_int32 2s 3s -33%
mld_keccakf1600x4_xor_bytes_c 2s 4s -50%
mld_value_barrier_i64 2s 3s -33%
mld_value_barrier_u8 2s 4s -50%
montgomery_reduce 2s 2s +0%
ntt_native_aarch64 2s 4s -50%
nttunpack_native_x86_64 2s 4s -50%
pack_sk_rho_key_tr_s2 2s 5s -60%
poly_decompose_native_x86_64 2s 2s +0%
poly_permute_bitrev_to_custom_optional_native 2s 3s -33%
poly_pointwise_montgomery 2s 3s -33%
poly_sub 2s 3s -33%
poly_uniform 2s 3s -33%
poly_uniform_gamma1 2s 3s -33%
poly_uniform_gamma1_4x 2s 5s -60%
poly_use_hint 2s 2s +0%
poly_use_hint_c 2s 5s -60%
polyt1_unpack 2s 2s +0%
polyvecl_pack_eta 2s 2s +0%
polyvecl_pointwise_acc_montgomery 2s 3s -33%
polyvecl_unpack_z 2s 3s -33%
polyw1_pack 2s 4s -50%
polyw1_pack_88 2s 2s +0%
polyz_unpack_native 2s 3s -33%
polyz_unpack_native_x86_64 2s 3s -33%
power2round 2s 2s +0%
reduce32 2s 3s -33%
rej_uniform_eta_native_aarch64 2s 3s -33%
rej_uniform_native_aarch64 2s 3s -33%
shake128_finalize 2s 3s -33%
shake128_squeeze 2s 2s +0%
shake128x4_absorb_once 2s 2s +0%
shake128x4_squeezeblocks 2s 2s +0%
shake256_absorb 2s 2s +0%
shake256_finalize 2s 2s +0%
shake256_init 2s 4s -50%
shake256_squeeze 2s 2s +0%
shake256x4_absorb_once 2s 1s +100%
sign_verify 2s 4s -50%
unpack_sk_s2hat 2s 4s -50%
unpack_sk_t0hat 2s 2s +0%
keccak_finalize 1s 2s -50%
keccakf1600x4_extract_bytes_native 1s 4s -75%
make_hint 1s 3s -67%
mld_ct_memcmp 1s 1s +0%
mld_value_barrier_u32 1s 1s +0%
poly_caddq 1s 4s -75%
polyveck_pack_w1 1s 3s -67%
polyvecl_uniform_gamma1 1s 2s -50%
shake256x4_squeezeblocks 1s 2s -50%
sk_s2hat_get_poly 1s 5s -80%

@oqs-bot

oqs-bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

CBMC Results (ML-DSA-44)

Full Results (210 proofs)
Proof Status Current Previous Change
**TOTAL** 1595s 1514s +5.4%
polyvecl_pointwise_acc_montgomery_c 163s 131s +24%
poly_pointwise_montgomery_c 140s 114s +23%
mld_invntt_layer 118s 107s +10%
mld_attempt_signature_generation 59s 58s +2%
compute_pack_t0_t1 52s 50s +4%
mld_ntt_layer 45s 42s +7%
fqmul 42s 39s +8%
sign_verify_internal 37s 114s -68%
sign_signature_internal 31s 26s +19%
polyvec_matrix_expand 29s 28s +4%
mld_ntt_butterfly_block 24s 23s +4%
keccakf1600x4_permute_native 23s 22s +5%
poly_ntt_c 20s 19s +5%
polyvec_matrix_pointwise_montgomery_yvec 19s 15s +27%
polyt0_unpack 16s 15s +7%
poly_chknorm_c 15s 17s -12%
rej_uniform 15s 18s -17%
rej_uniform_c 15s 15s +0%
polyeta_unpack 14s 14s +0%
poly_uniform_4x 13s 14s -7%
poly_uniform_eta_4x 13s 11s +18%
poly_invntt_tomont_c 12s 11s +9%
mld_check_pct 11s 14s -21%
polyvecl_chknorm 10s 10s +0%
polyz_unpack_c 10s 11s -9%
rej_uniform_native_x86_64 10s - new
keccak_absorb_once_x4 9s 9s +0%
mld_keccakf1600_permute_c 7s 8s -12%
mld_sample_s1_s2 7s 4s +75%
poly_add 7s 7s +0%
poly_caddq_c 7s 2s +250%
polyvec_matrix_expand_serial 7s 8s -12%
sign_pk_from_sk 7s 5s +40%
mld_compute_pack_z 6s 7s -14%
poly_decompose_c 6s 4s +50%
poly_reduce 6s 3s +100%
polyt1_unpack 6s 5s +20%
polyveck_chknorm 6s 5s +20%
rej_uniform_native 6s 4s +50%
rej_uniform_native_aarch64 6s 5s +20%
sign_verify_pre_hash_internal 6s 3s +100%
keccak_squeezeblocks_x4 5s 4s +25%
keccakf1600x4_xor_bytes_native 5s 3s +67%
mld_value_barrier_u32 5s 2s +150%
ntt_native_aarch64 5s 3s +67%
pointwise_native_aarch64 5s 5s +0%
poly_challenge 5s 3s +67%
poly_chknorm 5s 4s +25%
poly_decompose_native_x86_64 5s 3s +67%
poly_shiftl 5s 3s +67%
poly_uniform_eta 5s 5s +0%
poly_uniform_gamma1 5s 4s +25%
poly_use_hint_native 5s 4s +25%
polyeta_pack 5s 3s +67%
polyt0_pack 5s 2s +150%
polyvec_matrix_pointwise_montgomery_row 5s 2s +150%
polyveck_decompose 5s 4s +25%
polyveck_invntt_tomont 5s 5s +0%
polyvecl_unpack_z 5s 2s +150%
polyw1_pack_32 5s 2s +150%
polyz_unpack_native_x86_64 5s 3s +67%
rej_eta_native 5s 6s -17%
shake128_release 5s 1s +400%
sign_keypair 5s 4s +25%
sign_keypair_internal 5s 4s +25%
sign_signature_pre_hash_shake256 5s 3s +67%
intt_native_aarch64 4s 9s -56%
keccak_absorb 4s 5s -20%
keccak_f1600_x1_native_aarch64 4s 2s +100%
keccak_f1600_x1_native_aarch64_v84a 4s 3s +33%
keccakf1600x4_extract_bytes 4s 2s +100%
mld_ct_get_optblocker_u8 4s 1s +300%
mld_h 4s 4s +0%
mld_keccakf1600_extract_bytes 4s 2s +100%
mld_keccakf1600x4_extract_bytes_c 4s 2s +100%
mld_keccakf1600x4_xor_bytes_c 4s 2s +100%
mld_sign_finish 4s - new
mld_value_barrier_i64 4s 2s +100%
nttunpack_native_x86_64 4s 1s +300%
pack_sig_c 4s 2s +100%
pointwise_acc_native_aarch64 4s 4s +0%
pointwise_acc_native_x86_64 4s 7s -43%
pointwise_native_x86_64 4s 4s +0%
poly_caddq_native 4s 5s -20%
poly_chknorm_native_x86_64 4s 2s +100%
poly_invntt_tomont 4s 4s +0%
poly_permute_bitrev_to_custom_optional 4s 2s +100%
poly_uniform 4s 6s -33%
polyveck_caddq 4s 3s +33%
polyveck_ntt 4s 5s -20%
polyveck_pack_eta 4s 2s +100%
polyveck_reduce 4s 5s -20%
polyveck_unpack_eta 4s 2s +100%
polyw1_pack 4s 3s +33%
polyw1_pack_88 4s 1s +300%
polyz_pack 4s 2s +100%
rej_eta_c 4s 4s +0%
rej_uniform_eta_native_aarch64 4s 2s +100%
shake128_absorb 4s 2s +100%
shake128x4_squeezeblocks 4s 1s +300%
shake256x4_absorb_once 4s 3s +33%
sk_s2hat_get_poly 4s 2s +100%
unpack_pk_t1 4s 5s -20%
unpack_sk 4s 3s +33%
unpack_sk_s1hat 4s 1s +300%
unpack_sk_s2hat 4s 4s +0%
caddq 3s 2s +50%
decompose 3s 2s +50%
keccak_f1600_x4_native_aarch64_v8a_v84a_scalar_hybrid 3s 1s +200%
keccak_finalize 3s 3s +0%
keccak_init 3s 3s +0%
keccakf1600_permute_native 3s 3s +0%
make_hint 3s 3s +0%
mld_ct_cmask_neg_i32 3s 3s +0%
mld_ct_cmask_nonzero_u8 3s 2s +50%
mld_ct_get_optblocker_i64 3s 4s -25%
mld_polymat_expand_entry 3s 3s +0%
mld_prepare_domain_separation_prefix 3s 4s -25%
mld_sample_s1_s2_serial 3s 3s +0%
mld_sign_attempt 3s - new
montgomery_reduce 3s 3s +0%
pack_sig_h 3s 3s +0%
pack_sig_z 3s 4s -25%
pack_sk_rho_key_tr_s2 3s 3s +0%
poly_caddq_native_aarch64 3s 4s -25%
poly_chknorm_native_aarch64 3s 4s -25%
poly_decompose_native 3s 3s +0%
poly_invntt_tomont_native 3s 4s -25%
poly_permute_bitrev_to_custom_optional_native 3s 4s -25%
poly_pointwise_montgomery_native 3s 2s +50%
poly_power2round 3s 4s -25%
poly_sub 3s 3s +0%
poly_uniform_gamma1_4x 3s 5s -40%
poly_use_hint_c 3s 3s +0%
poly_use_hint_native_aarch64 3s 2s +50%
polyt1_pack 3s 4s -25%
polyveck_pack_w1 3s 1s +200%
polyvecl_ntt 3s 2s +50%
polyvecl_pack_eta 3s 3s +0%
polyvecl_uniform_gamma1_serial 3s 2s +50%
polyvecl_unpack_eta 3s 2s +50%
polyz_unpack 3s 3s +0%
polyz_unpack_17_native_aarch64 3s 5s -40%
polyz_unpack_19_native_aarch64 3s 5s -40%
polyz_unpack_native 3s 2s +50%
power2round 3s 3s +0%
rej_uniform_eta_native_x86_64 3s - new
shake128_squeeze 3s 1s +200%
shake256_absorb 3s 3s +0%
shake256_finalize 3s 2s +50%
sig_unpack_hints 3s 2s +50%
sign_signature 3s 3s +0%
sign_signature_extmu 3s 4s -25%
sign_signature_pre_hash_internal 3s 6s -50%
sign_verify 3s 4s -25%
sign_verify_pre_hash_shake256 3s 5s -40%
sk_s1hat_get_poly 3s 3s +0%
sk_t0hat_get_poly 3s 2s +50%
use_hint 3s 2s +50%
yvec_init 3s 3s +0%
fqscale 2s 3s -33%
intt_native_x86_64 2s 4s -50%
keccak_f1600_x4_native_aarch64_v84a 2s 2s +0%
keccak_f1600_x4_native_aarch64_v8a_scalar_hybrid 2s 3s -33%
keccak_f1600_x4_native_avx2 2s 3s -33%
keccak_squeeze 2s 1s +100%
keccakf1600_extract_bytes (big endian) 2s 2s +0%
keccakf1600_permute 2s 2s +0%
keccakf1600_xor_bytes 2s 1s +100%
keccakf1600x4_extract_bytes_native 2s 3s -33%
keccakf1600x4_permute 2s 4s -50%
keccakf1600x4_xor_bytes 2s 2s +0%
mld_ct_abs_i32 2s 2s +0%
mld_ct_cmask_nonzero_u32 2s 2s +0%
mld_ct_memcmp 2s 3s -33%
mld_sign_resume 2s - new
mld_value_barrier_u8 2s 3s -33%
ntt_native_x86_64 2s 3s -33%
pack_sk_s1 2s 2s +0%
poly_caddq 2s 2s +0%
poly_caddq_native_x86_64 2s 4s -50%
poly_chknorm_native 2s 4s -50%
poly_decompose 2s 3s -33%
poly_decompose_32_native_aarch64 2s 2s +0%
poly_decompose_88_native_aarch64 2s 4s -50%
poly_ntt_native 2s 5s -60%
poly_pointwise_montgomery 2s 3s -33%
poly_use_hint 2s 4s -50%
poly_use_hint_native_x86_64 2s - new
polyvecl_pointwise_acc_montgomery 2s 4s -50%
polyvecl_pointwise_acc_montgomery_native 2s 2s +0%
polyvecl_uniform_gamma1 2s 3s -33%
reduce32 2s 2s +0%
rej_eta 2s 3s -33%
shake128_finalize 2s 2s +0%
shake128_init 2s 3s -33%
shake128x4_absorb_once 2s 3s -33%
shake256_init 2s 3s -33%
shake256_release 2s 2s +0%
shake256x4_squeezeblocks 2s 4s -50%
sign_verify_extmu 2s 3s -33%
unpack_sk_t0hat 2s 3s -33%
yvec_get_poly 2s 3s -33%
keccakf1600_xor_bytes (big endian) 1s 4s -75%
mld_ct_get_optblocker_u32 1s 1s +0%
mld_ct_sel_int32 1s 2s -50%
poly_ntt 1s 3s -67%
shake256 1s 1s +0%
shake256_squeeze 1s 2s -50%
sys_check_capability 1s 4s -75%

@oqs-bot

oqs-bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

CBMC Results (ML-DSA-65, REDUCE-RAM)

Full Results (210 proofs)
Proof Status Current Previous Change
**TOTAL** 1411s 1482s -4.8%
polyvec_matrix_pointwise_montgomery_yvec 193s 201s -4%
poly_pointwise_montgomery_c 112s 116s -3%
mld_invntt_layer 102s 108s -6%
mld_ntt_layer 42s 43s -2%
polyvecl_chknorm 41s 43s -5%
fqmul 39s 40s -3%
polyveck_chknorm 34s 36s -6%
sign_verify_internal 34s 71s -52%
mld_attempt_signature_generation 28s 31s -10%
keccakf1600x4_permute_native 23s 22s +5%
mld_ntt_butterfly_block 20s 25s -20%
poly_ntt_c 19s 22s -14%
mld_check_pct 16s 12s +33%
rej_uniform_c 14s 16s -12%
polyveck_decompose 13s 14s -7%
poly_chknorm_c 12s 13s -8%
polyt0_unpack 12s 13s -8%
poly_uniform_eta_4x 11s 13s -15%
compute_pack_t0_t1 10s 7s +43%
poly_invntt_tomont_c 10s 10s +0%
keccak_absorb_once_x4 9s 10s -10%
rej_uniform_native_x86_64 9s - new
polyvec_matrix_pointwise_montgomery_row 8s 8s +0%
polyveck_caddq 8s 7s +14%
rej_uniform 8s 7s +14%
polyz_unpack_c 7s 9s -22%
mld_keccakf1600_permute_c 6s 7s -14%
pointwise_acc_native_x86_64 6s 5s +20%
polyveck_reduce 6s 6s +0%
polyvecl_ntt 6s 7s -14%
sign_pk_from_sk 6s 5s +20%
sign_signature_internal 6s 6s +0%
sign_signature_pre_hash_internal 6s 3s +100%
mld_ct_cmask_nonzero_u8 5s 2s +150%
mld_sample_s1_s2 5s 6s -17%
ntt_native_aarch64 5s 3s +67%
ntt_native_x86_64 5s 5s +0%
pack_sk_rho_key_tr_s2 5s 2s +150%
pointwise_acc_native_aarch64 5s 6s -17%
poly_add 5s 7s -29%
poly_caddq_c 5s 5s +0%
poly_decompose_c 5s 8s -38%
poly_reduce 5s 4s +25%
poly_use_hint_native_x86_64 5s - new
polyeta_pack 5s 1s +400%
polyeta_unpack 5s 4s +25%
polyt1_pack 5s 3s +67%
polyveck_invntt_tomont 5s 7s -29%
polyz_unpack_19_native_aarch64 5s 5s +0%
rej_uniform_native 5s 4s +25%
unpack_sk_t0hat 5s 4s +25%
caddq 4s 2s +100%
fqscale 4s 3s +33%
intt_native_aarch64 4s 2s +100%
keccak_absorb 4s 3s +33%
keccak_f1600_x1_native_aarch64 4s 2s +100%
keccak_init 4s 4s +0%
mld_compute_pack_z 4s 5s -20%
mld_h 4s 3s +33%
mld_prepare_domain_separation_prefix 4s 4s +0%
mld_sign_finish 4s - new
pack_sk_s1 4s 3s +33%
poly_caddq_native 4s 4s +0%
poly_caddq_native_x86_64 4s 1s +300%
poly_challenge 4s 5s -20%
poly_decompose_32_native_aarch64 4s 4s +0%
poly_decompose_88_native_aarch64 4s 2s +100%
poly_invntt_tomont_native 4s 5s -20%
poly_power2round 4s 7s -43%
poly_uniform 4s 2s +100%
poly_uniform_eta 4s 5s -20%
poly_uniform_gamma1 4s 3s +33%
poly_use_hint 4s 3s +33%
poly_use_hint_native_aarch64 4s 4s +0%
polyvec_matrix_expand 4s 6s -33%
polyveck_ntt 4s 4s +0%
polyvecl_uniform_gamma1_serial 4s 1s +300%
polyz_unpack_native 4s 3s +33%
rej_uniform_eta_native_aarch64 4s 5s -20%
rej_uniform_native_aarch64 4s 5s -20%
shake128x4_absorb_once 4s 2s +100%
shake256 4s 2s +100%
sign_keypair 4s 4s +0%
sign_keypair_internal 4s 3s +33%
sign_verify 4s 6s -33%
sign_verify_extmu 4s 2s +100%
sign_verify_pre_hash_shake256 4s 6s -33%
sk_s1hat_get_poly 4s 3s +33%
sys_check_capability 4s 1s +300%
unpack_sk 4s 3s +33%
unpack_sk_s1hat 4s 1s +300%
use_hint 4s 2s +100%
yvec_get_poly 4s 3s +33%
decompose 3s 4s -25%
keccak_f1600_x4_native_aarch64_v84a 3s 2s +50%
keccak_f1600_x4_native_avx2 3s 2s +50%
keccak_squeezeblocks_x4 3s 4s -25%
keccakf1600_permute_native 3s 2s +50%
keccakf1600_xor_bytes 3s 4s -25%
keccakf1600x4_xor_bytes 3s 2s +50%
mld_ct_abs_i32 3s 6s -50%
mld_ct_cmask_neg_i32 3s 3s +0%
mld_ct_cmask_nonzero_u32 3s 3s +0%
mld_ct_get_optblocker_i64 3s 1s +200%
mld_ct_get_optblocker_u8 3s 4s -25%
mld_keccakf1600_extract_bytes 3s 2s +50%
mld_keccakf1600x4_extract_bytes_c 3s 2s +50%
mld_keccakf1600x4_xor_bytes_c 3s 2s +50%
mld_sample_s1_s2_serial 3s 3s +0%
mld_sign_attempt 3s - new
mld_sign_resume 3s - new
mld_value_barrier_u32 3s 4s -25%
pack_sig_c 3s 3s +0%
pointwise_native_x86_64 3s 2s +50%
poly_caddq_native_aarch64 3s 2s +50%
poly_chknorm 3s 3s +0%
poly_chknorm_native 3s 4s -25%
poly_chknorm_native_aarch64 3s 2s +50%
poly_decompose_native 3s 5s -40%
poly_decompose_native_x86_64 3s 2s +50%
poly_ntt 3s 2s +50%
poly_permute_bitrev_to_custom_optional_native 3s 3s +0%
poly_pointwise_montgomery 3s 2s +50%
poly_pointwise_montgomery_native 3s 4s -25%
poly_shiftl 3s 3s +0%
poly_sub 3s 4s -25%
poly_uniform_4x 3s 4s -25%
poly_uniform_gamma1_4x 3s 3s +0%
poly_use_hint_c 3s 2s +50%
polyvec_matrix_expand_serial 3s 3s +0%
polyveck_pack_eta 3s 3s +0%
polyveck_pack_w1 3s 4s -25%
polyvecl_pack_eta 3s 2s +50%
polyvecl_pointwise_acc_montgomery_c 3s 3s +0%
polyvecl_pointwise_acc_montgomery_native 3s 3s +0%
polyvecl_uniform_gamma1 3s 4s -25%
polyw1_pack 3s 3s +0%
polyz_unpack_17_native_aarch64 3s 2s +50%
rej_eta_c 3s 4s -25%
rej_eta_native 3s 3s +0%
shake128_absorb 3s 2s +50%
shake128_finalize 3s 2s +50%
shake128_init 3s 6s -50%
shake128_release 3s 2s +50%
shake128_squeeze 3s 3s +0%
shake256_squeeze 3s 4s -25%
sign_signature 3s 5s -40%
sign_verify_pre_hash_internal 3s 5s -40%
sk_t0hat_get_poly 3s 1s +200%
unpack_pk_t1 3s 2s +50%
keccak_f1600_x1_native_aarch64_v84a 2s 2s +0%
keccak_f1600_x4_native_aarch64_v8a_scalar_hybrid 2s 3s -33%
keccak_f1600_x4_native_aarch64_v8a_v84a_scalar_hybrid 2s 3s -33%
keccak_finalize 2s 2s +0%
keccakf1600_extract_bytes (big endian) 2s 3s -33%
keccakf1600_permute 2s 4s -50%
keccakf1600_xor_bytes (big endian) 2s 2s +0%
keccakf1600x4_extract_bytes 2s 4s -50%
keccakf1600x4_extract_bytes_native 2s 1s +100%
keccakf1600x4_xor_bytes_native 2s 2s +0%
make_hint 2s 3s -33%
mld_ct_get_optblocker_u32 2s 3s -33%
mld_ct_memcmp 2s 4s -50%
mld_ct_sel_int32 2s 2s +0%
mld_polymat_expand_entry 2s 3s -33%
mld_value_barrier_i64 2s 2s +0%
montgomery_reduce 2s 1s +100%
nttunpack_native_x86_64 2s 3s -33%
pack_sig_h 2s 2s +0%
pointwise_native_aarch64 2s 3s -33%
poly_chknorm_native_x86_64 2s 4s -50%
poly_decompose 2s 2s +0%
poly_invntt_tomont 2s 5s -60%
poly_ntt_native 2s 2s +0%
poly_permute_bitrev_to_custom_optional 2s 3s -33%
poly_use_hint_native 2s 7s -71%
polyveck_unpack_eta 2s 3s -33%
polyvecl_unpack_eta 2s 2s +0%
polyvecl_unpack_z 2s 1s +100%
polyw1_pack_32 2s 2s +0%
polyz_pack 2s 3s -33%
polyz_unpack_native_x86_64 2s 3s -33%
power2round 2s 2s +0%
reduce32 2s 2s +0%
rej_eta 2s 5s -60%
rej_uniform_eta_native_x86_64 2s - new
shake256_absorb 2s 4s -50%
shake256_finalize 2s 1s +100%
shake256_init 2s 4s -50%
shake256x4_absorb_once 2s 2s +0%
shake256x4_squeezeblocks 2s 2s +0%
sig_unpack_hints 2s 1s +100%
sign_signature_extmu 2s 4s -50%
sign_signature_pre_hash_shake256 2s 7s -71%
sk_s2hat_get_poly 2s 1s +100%
unpack_sk_s2hat 2s 3s -33%
intt_native_x86_64 1s 4s -75%
keccak_squeeze 1s 2s -50%
keccakf1600x4_permute 1s 1s +0%
mld_value_barrier_u8 1s 1s +0%
pack_sig_z 1s 1s +0%
poly_caddq 1s 3s -67%
polyt0_pack 1s 5s -80%
polyt1_unpack 1s 3s -67%
polyvecl_pointwise_acc_montgomery 1s 3s -67%
polyw1_pack_88 1s 3s -67%
polyz_unpack 1s 3s -67%
shake128x4_squeezeblocks 1s 2s -50%
shake256_release 1s 3s -67%
yvec_init 1s 5s -80%

@oqs-bot

oqs-bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

CBMC Results (ML-DSA-87, REDUCE-RAM)

Full Results (210 proofs)
Proof Status Current Previous Change
**TOTAL** 1453s 1436s +1.2%
polyvec_matrix_pointwise_montgomery_yvec 190s 196s -3%
poly_pointwise_montgomery_c 119s 125s -5%
mld_invntt_layer 106s 111s -5%
fqmul 43s 39s +10%
mld_ntt_layer 43s 44s -2%
polyvecl_chknorm 34s 38s -11%
mld_attempt_signature_generation 31s 34s -9%
keccakf1600x4_permute_native 23s 25s -8%
sign_verify_internal 23s 47s -51%
mld_ntt_butterfly_block 21s 23s -9%
poly_ntt_c 19s 19s +0%
rej_uniform_c 18s 18s +0%
polyeta_unpack 15s 13s +15%
polyveck_decompose 15s 12s +25%
poly_invntt_tomont_c 14s 9s +56%
poly_uniform_eta_4x 13s 12s +8%
mld_check_pct 12s 15s -20%
poly_chknorm_c 12s 13s -8%
polyt0_unpack 12s 14s -14%
pointwise_acc_native_x86_64 11s 8s +38%
polyvec_matrix_pointwise_montgomery_row 11s 13s -15%
polyz_unpack_c 11s 7s +57%
compute_pack_t0_t1 10s 12s -17%
keccak_absorb_once_x4 10s 8s +25%
polyveck_chknorm 9s 9s +0%
polyvecl_ntt 9s 8s +12%
rej_uniform_native_x86_64 9s - new
sign_pk_from_sk 9s 6s +50%
rej_uniform 8s 7s +14%
sign_signature_internal 8s 3s +167%
mld_keccakf1600_permute_c 7s 8s -12%
mld_sample_s1_s2 7s 8s -12%
pointwise_acc_native_aarch64 7s 5s +40%
poly_add 7s 8s -12%
poly_challenge 7s 4s +75%
poly_decompose_c 7s 6s +17%
poly_power2round 7s 7s +0%
polyveck_caddq 7s 8s -12%
keccak_absorb 6s 4s +50%
mld_keccakf1600x4_xor_bytes_c 6s 1s +500%
nttunpack_native_x86_64 6s 3s +100%
poly_decompose_native_x86_64 6s 3s +100%
poly_sub 6s 5s +20%
polyt1_pack 6s 5s +20%
polyveck_pack_eta 6s 5s +20%
polyveck_reduce 6s 6s +0%
rej_eta_native 6s 4s +50%
sign_keypair 6s 4s +50%
sign_signature_pre_hash_shake256 6s 3s +100%
sign_verify_pre_hash_shake256 6s 7s -14%
unpack_sk_s2hat 6s 3s +100%
mld_compute_pack_z 5s 6s -17%
mld_sign_finish 5s - new
ntt_native_x86_64 5s 2s +150%
pack_sig_c 5s 2s +150%
poly_reduce 5s 4s +25%
polyvecl_uniform_gamma1_serial 5s 2s +150%
rej_uniform_native 5s 5s +0%
sign_signature_pre_hash_internal 5s 2s +150%
yvec_get_poly 5s 2s +150%
fqscale 4s 1s +300%
keccak_f1600_x1_native_aarch64_v84a 4s 2s +100%
keccak_f1600_x4_native_aarch64_v84a 4s 1s +300%
keccak_f1600_x4_native_avx2 4s 3s +33%
keccakf1600_xor_bytes (big endian) 4s 2s +100%
make_hint 4s 2s +100%
mld_ct_abs_i32 4s 1s +300%
mld_ct_cmask_nonzero_u32 4s 5s -20%
mld_keccakf1600_extract_bytes 4s 1s +300%
mld_sample_s1_s2_serial 4s 6s -33%
mld_sign_resume 4s - new
ntt_native_aarch64 4s 4s +0%
pack_sk_rho_key_tr_s2 4s 2s +100%
pointwise_native_aarch64 4s 4s +0%
poly_caddq_c 4s 3s +33%
poly_chknorm 4s 4s +0%
poly_chknorm_native 4s 1s +300%
poly_decompose 4s 2s +100%
poly_permute_bitrev_to_custom_optional_native 4s 3s +33%
poly_pointwise_montgomery_native 4s 3s +33%
polyvec_matrix_expand_serial 4s 3s +33%
polyveck_invntt_tomont 4s 4s +0%
polyvecl_pack_eta 4s 2s +100%
polyvecl_pointwise_acc_montgomery 4s 2s +100%
polyw1_pack_88 4s 2s +100%
rej_eta 4s 2s +100%
shake128_absorb 4s 2s +100%
shake256_absorb 4s 3s +33%
sig_unpack_hints 4s 4s +0%
sign_keypair_internal 4s 6s -33%
sign_signature 4s 4s +0%
sign_signature_extmu 4s 4s +0%
sign_verify_extmu 4s 4s +0%
sk_s1hat_get_poly 4s 3s +33%
decompose 3s 2s +50%
intt_native_aarch64 3s 4s -25%
intt_native_x86_64 3s 4s -25%
keccak_f1600_x4_native_aarch64_v8a_scalar_hybrid 3s 2s +50%
keccak_init 3s 1s +200%
keccak_squeeze 3s 5s -40%
keccakf1600_extract_bytes (big endian) 3s 3s +0%
keccakf1600_xor_bytes 3s 1s +200%
keccakf1600x4_xor_bytes_native 3s 2s +50%
mld_ct_get_optblocker_u32 3s 2s +50%
mld_h 3s 2s +50%
mld_keccakf1600x4_extract_bytes_c 3s 3s +0%
mld_polymat_expand_entry 3s 4s -25%
mld_prepare_domain_separation_prefix 3s 3s +0%
mld_sign_attempt 3s - new
mld_value_barrier_u32 3s 3s +0%
mld_value_barrier_u8 3s 2s +50%
montgomery_reduce 3s 2s +50%
pack_sig_h 3s 3s +0%
pack_sk_s1 3s 2s +50%
pointwise_native_x86_64 3s 5s -40%
poly_caddq_native 3s 3s +0%
poly_caddq_native_aarch64 3s 3s +0%
poly_caddq_native_x86_64 3s 3s +0%
poly_chknorm_native_aarch64 3s 5s -40%
poly_chknorm_native_x86_64 3s 2s +50%
poly_ntt 3s 2s +50%
poly_uniform 3s 4s -25%
poly_uniform_4x 3s 3s +0%
poly_use_hint_native 3s 1s +200%
poly_use_hint_native_x86_64 3s - new
polyt0_pack 3s 3s +0%
polyveck_ntt 3s 3s +0%
polyveck_unpack_eta 3s 3s +0%
polyvecl_pointwise_acc_montgomery_native 3s 2s +50%
polyvecl_unpack_eta 3s 3s +0%
polyw1_pack 3s 2s +50%
polyz_unpack 3s 3s +0%
polyz_unpack_17_native_aarch64 3s 4s -25%
polyz_unpack_19_native_aarch64 3s 5s -40%
power2round 3s 3s +0%
reduce32 3s 3s +0%
rej_eta_c 3s 4s -25%
rej_uniform_eta_native_x86_64 3s - new
rej_uniform_native_aarch64 3s 3s +0%
shake128_finalize 3s 2s +50%
shake128x4_squeezeblocks 3s 1s +200%
shake256_release 3s 5s -40%
shake256_squeeze 3s 2s +50%
shake256x4_squeezeblocks 3s 4s -25%
sign_verify 3s 2s +50%
sign_verify_pre_hash_internal 3s 3s +0%
sk_s2hat_get_poly 3s 2s +50%
sys_check_capability 3s 2s +50%
unpack_pk_t1 3s 2s +50%
yvec_init 3s 4s -25%
caddq 2s 3s -33%
keccak_finalize 2s 1s +100%
keccak_squeezeblocks_x4 2s 4s -50%
keccakf1600x4_extract_bytes 2s 1s +100%
keccakf1600x4_xor_bytes 2s 1s +100%
mld_ct_cmask_neg_i32 2s 2s +0%
mld_ct_cmask_nonzero_u8 2s 2s +0%
mld_ct_get_optblocker_i64 2s 2s +0%
mld_ct_get_optblocker_u8 2s 3s -33%
mld_ct_memcmp 2s 1s +100%
mld_value_barrier_i64 2s 2s +0%
pack_sig_z 2s 3s -33%
poly_caddq 2s 5s -60%
poly_decompose_88_native_aarch64 2s 2s +0%
poly_decompose_native 2s 2s +0%
poly_ntt_native 2s 4s -50%
poly_pointwise_montgomery 2s 3s -33%
poly_shiftl 2s 4s -50%
poly_uniform_eta 2s 5s -60%
poly_uniform_gamma1_4x 2s 3s -33%
poly_use_hint 2s 4s -50%
poly_use_hint_c 2s 4s -50%
poly_use_hint_native_aarch64 2s 3s -33%
polyeta_pack 2s 3s -33%
polyt1_unpack 2s 3s -33%
polyvec_matrix_expand 2s 3s -33%
polyveck_pack_w1 2s 3s -33%
polyvecl_pointwise_acc_montgomery_c 2s 2s +0%
polyz_pack 2s 4s -50%
polyz_unpack_native 2s 1s +100%
polyz_unpack_native_x86_64 2s 3s -33%
rej_uniform_eta_native_aarch64 2s 3s -33%
shake128_init 2s 2s +0%
shake128_release 2s 3s -33%
shake128_squeeze 2s 1s +100%
shake128x4_absorb_once 2s 4s -50%
shake256 2s 3s -33%
shake256_finalize 2s 3s -33%
sk_t0hat_get_poly 2s 3s -33%
unpack_sk 2s 4s -50%
unpack_sk_s1hat 2s 3s -33%
unpack_sk_t0hat 2s 4s -50%
keccak_f1600_x1_native_aarch64 1s 2s -50%
keccak_f1600_x4_native_aarch64_v8a_v84a_scalar_hybrid 1s 2s -50%
keccakf1600_permute 1s 2s -50%
keccakf1600_permute_native 1s 3s -67%
keccakf1600x4_extract_bytes_native 1s 4s -75%
keccakf1600x4_permute 1s 2s -50%
mld_ct_sel_int32 1s 2s -50%
poly_decompose_32_native_aarch64 1s 3s -67%
poly_invntt_tomont 1s 4s -75%
poly_invntt_tomont_native 1s 2s -50%
poly_permute_bitrev_to_custom_optional 1s 2s -50%
poly_uniform_gamma1 1s 3s -67%
polyvecl_uniform_gamma1 1s 3s -67%
polyvecl_unpack_z 1s 3s -67%
polyw1_pack_32 1s 3s -67%
shake256_init 1s 3s -67%
shake256x4_absorb_once 1s 5s -80%
use_hint 1s 3s -67%

@oqs-bot

oqs-bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

CBMC Results (ML-DSA-65)

Full Results (210 proofs)
Proof Status Current Previous Change
**TOTAL** 1701s 1784s -4.7%
polyvecl_pointwise_acc_montgomery_c 207s 210s -1%
poly_pointwise_montgomery_c 122s 125s -2%
mld_invntt_layer 112s 109s +3%
polyvec_matrix_expand 108s 110s -2%
sign_verify_internal 68s 177s -62%
mld_attempt_signature_generation 64s 63s +2%
mld_ntt_layer 45s 41s +10%
sign_signature_internal 45s 55s -18%
fqmul 38s 40s -5%
polyvec_matrix_expand_serial 29s 27s +7%
keccakf1600x4_permute_native 21s 23s -9%
polyvec_matrix_pointwise_montgomery_yvec 21s 18s +17%
mld_ntt_butterfly_block 20s 24s -17%
poly_ntt_c 18s 19s -5%
polyt0_unpack 16s 16s +0%
mld_check_pct 15s 14s +7%
rej_uniform 15s 18s -17%
poly_chknorm_c 14s 15s -7%
rej_uniform_c 14s 14s +0%
poly_uniform_4x 13s 13s +0%
compute_pack_t0_t1 12s 13s -8%
polyveck_decompose 12s 12s +0%
poly_uniform_eta_4x 11s 14s -21%
polyz_unpack_c 11s 13s -15%
keccak_absorb_once_x4 10s 8s +25%
poly_invntt_tomont_c 10s 11s -9%
rej_uniform_native_x86_64 10s - new
poly_add 8s 9s -11%
poly_decompose_c 8s 5s +60%
polyveck_chknorm 8s 6s +33%
polyveck_invntt_tomont 8s 8s +0%
mld_compute_pack_z 6s 7s -14%
mld_polymat_expand_entry 6s 4s +50%
mld_sample_s1_s2 6s 6s +0%
pointwise_acc_native_x86_64 6s 8s -25%
poly_caddq_native_aarch64 6s 2s +200%
polyeta_unpack 6s 8s -25%
polyt1_unpack 6s 5s +20%
polyveck_ntt 6s 7s -14%
polyvecl_ntt 6s 4s +50%
polyvecl_unpack_z 6s 3s +100%
polyw1_pack 6s 4s +50%
rej_uniform_native 6s 4s +50%
sign_keypair_internal 6s 5s +20%
sign_verify_extmu 6s 3s +100%
unpack_sk_t0hat 6s 5s +20%
poly_caddq 5s 2s +150%
poly_chknorm_native 5s 2s +150%
poly_decompose_32_native_aarch64 5s 3s +67%
poly_uniform 5s 4s +25%
poly_uniform_eta 5s 4s +25%
poly_use_hint_c 5s 5s +0%
polyeta_pack 5s 3s +67%
polyveck_caddq 5s 6s -17%
rej_eta_native 5s 3s +67%
rej_uniform_eta_native_aarch64 5s 4s +25%
shake128_finalize 5s 1s +400%
sign_keypair 5s 3s +67%
sign_pk_from_sk 5s 6s -17%
sign_signature 5s 6s -17%
sign_signature_pre_hash_internal 5s 3s +67%
sign_verify 5s 3s +67%
keccak_absorb 4s 3s +33%
keccak_f1600_x1_native_aarch64_v84a 4s 3s +33%
keccak_finalize 4s 2s +100%
keccakf1600_xor_bytes 4s 2s +100%
keccakf1600_xor_bytes (big endian) 4s 2s +100%
keccakf1600x4_extract_bytes 4s 4s +0%
mld_ct_cmask_neg_i32 4s 2s +100%
mld_ct_cmask_nonzero_u8 4s 3s +33%
mld_h 4s 2s +100%
mld_keccakf1600_extract_bytes 4s 1s +300%
mld_keccakf1600_permute_c 4s 6s -33%
mld_sign_attempt 4s - new
ntt_native_aarch64 4s 2s +100%
pack_sig_h 4s 5s -20%
pack_sig_z 4s 2s +100%
pointwise_acc_native_aarch64 4s 6s -33%
pointwise_native_aarch64 4s 5s -20%
pointwise_native_x86_64 4s 3s +33%
poly_caddq_native 4s 2s +100%
poly_challenge 4s 6s -33%
poly_decompose 4s 2s +100%
poly_ntt_native 4s 4s +0%
poly_uniform_gamma1_4x 4s 4s +0%
poly_use_hint 4s 3s +33%
poly_use_hint_native_aarch64 4s 3s +33%
polyveck_reduce 4s 4s +0%
polyvecl_chknorm 4s 7s -43%
polyvecl_pack_eta 4s 3s +33%
polyvecl_unpack_eta 4s 3s +33%
polyw1_pack_32 4s 4s +0%
polyw1_pack_88 4s 2s +100%
polyz_unpack 4s 3s +33%
polyz_unpack_native_x86_64 4s 3s +33%
reduce32 4s 3s +33%
sign_verify_pre_hash_internal 4s 5s -20%
sign_verify_pre_hash_shake256 4s 5s -20%
yvec_init 4s 3s +33%
decompose 3s 1s +200%
fqscale 3s 3s +0%
intt_native_aarch64 3s 3s +0%
intt_native_x86_64 3s 3s +0%
keccak_squeezeblocks_x4 3s 5s -40%
keccakf1600x4_extract_bytes_native 3s 4s -25%
keccakf1600x4_permute 3s 4s -25%
keccakf1600x4_xor_bytes_native 3s 3s +0%
mld_ct_get_optblocker_i64 3s 2s +50%
mld_prepare_domain_separation_prefix 3s 2s +50%
mld_sample_s1_s2_serial 3s 4s -25%
mld_sign_finish 3s - new
mld_sign_resume 3s - new
mld_value_barrier_u32 3s 3s +0%
montgomery_reduce 3s 4s -25%
nttunpack_native_x86_64 3s 3s +0%
pack_sig_c 3s 5s -40%
pack_sk_rho_key_tr_s2 3s 2s +50%
poly_caddq_c 3s 2s +50%
poly_decompose_88_native_aarch64 3s 1s +200%
poly_decompose_native 3s 3s +0%
poly_invntt_tomont 3s 3s +0%
poly_invntt_tomont_native 3s 2s +50%
poly_permute_bitrev_to_custom_optional_native 3s 4s -25%
poly_reduce 3s 3s +0%
poly_shiftl 3s 3s +0%
poly_uniform_gamma1 3s 3s +0%
poly_use_hint_native 3s 2s +50%
polyt0_pack 3s 3s +0%
polyt1_pack 3s 3s +0%
polyvec_matrix_pointwise_montgomery_row 3s 1s +200%
polyveck_pack_eta 3s 4s -25%
polyveck_unpack_eta 3s 6s -50%
polyvecl_pointwise_acc_montgomery 3s 3s +0%
polyvecl_pointwise_acc_montgomery_native 3s 2s +50%
polyvecl_uniform_gamma1 3s 2s +50%
polyvecl_uniform_gamma1_serial 3s 3s +0%
polyz_pack 3s 3s +0%
polyz_unpack_native 3s 4s -25%
rej_eta 3s 2s +50%
rej_eta_c 3s 5s -40%
rej_uniform_eta_native_x86_64 3s - new
shake128_absorb 3s 2s +50%
shake128_init 3s 2s +50%
shake128_release 3s 3s +0%
shake128_squeeze 3s 2s +50%
shake128x4_absorb_once 3s 3s +0%
shake128x4_squeezeblocks 3s 3s +0%
shake256 3s 2s +50%
shake256_finalize 3s 1s +200%
shake256_squeeze 3s 3s +0%
shake256x4_absorb_once 3s 3s +0%
sig_unpack_hints 3s 2s +50%
sign_signature_extmu 3s 2s +50%
sign_signature_pre_hash_shake256 3s 3s +0%
sk_s1hat_get_poly 3s 6s -50%
sys_check_capability 3s 4s -25%
unpack_sk 3s 3s +0%
unpack_sk_s1hat 3s 2s +50%
yvec_get_poly 3s 3s +0%
caddq 2s 3s -33%
keccak_f1600_x1_native_aarch64 2s 2s +0%
keccak_f1600_x4_native_aarch64_v84a 2s 4s -50%
keccak_f1600_x4_native_aarch64_v8a_scalar_hybrid 2s 2s +0%
keccak_f1600_x4_native_aarch64_v8a_v84a_scalar_hybrid 2s 2s +0%
keccakf1600_extract_bytes (big endian) 2s 2s +0%
keccakf1600_permute 2s 2s +0%
keccakf1600_permute_native 2s 3s -33%
make_hint 2s 2s +0%
mld_ct_abs_i32 2s 2s +0%
mld_ct_cmask_nonzero_u32 2s 4s -50%
mld_ct_get_optblocker_u32 2s 3s -33%
mld_ct_memcmp 2s 2s +0%
mld_ct_sel_int32 2s 3s -33%
mld_keccakf1600x4_extract_bytes_c 2s 3s -33%
mld_keccakf1600x4_xor_bytes_c 2s 2s +0%
mld_value_barrier_i64 2s 2s +0%
mld_value_barrier_u8 2s 3s -33%
ntt_native_x86_64 2s 2s +0%
pack_sk_s1 2s 5s -60%
poly_caddq_native_x86_64 2s 3s -33%
poly_chknorm 2s 4s -50%
poly_chknorm_native_aarch64 2s 3s -33%
poly_ntt 2s 2s +0%
poly_permute_bitrev_to_custom_optional 2s 2s +0%
poly_pointwise_montgomery_native 2s 3s -33%
poly_power2round 2s 4s -50%
poly_sub 2s 3s -33%
poly_use_hint_native_x86_64 2s - new
polyz_unpack_17_native_aarch64 2s 3s -33%
polyz_unpack_19_native_aarch64 2s 3s -33%
power2round 2s 1s +100%
rej_uniform_native_aarch64 2s 3s -33%
shake256_init 2s 2s +0%
shake256_release 2s 2s +0%
shake256x4_squeezeblocks 2s 2s +0%
unpack_pk_t1 2s 5s -60%
unpack_sk_s2hat 2s 4s -50%
use_hint 2s 2s +0%
keccak_f1600_x4_native_avx2 1s 2s -50%
keccak_init 1s 1s +0%
keccak_squeeze 1s 4s -75%
keccakf1600x4_xor_bytes 1s 1s +0%
mld_ct_get_optblocker_u8 1s 2s -50%
poly_chknorm_native_x86_64 1s 3s -67%
poly_decompose_native_x86_64 1s 3s -67%
poly_pointwise_montgomery 1s 3s -67%
polyveck_pack_w1 1s 3s -67%
shake256_absorb 1s 2s -50%
sk_s2hat_get_poly 1s 2s -50%
sk_t0hat_get_poly 1s 2s -50%

@oqs-bot

oqs-bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

CBMC Results (ML-DSA-87)

⚠️ Attention Required

Proof Status Current Previous Change
sign_signature_internal ⚠️ 73s 42s +74%
Full Results (210 proofs)
Proof Status Current Previous Change
**TOTAL** 2070s 2151s -3.8%
polyvecl_pointwise_acc_montgomery_c 337s 353s -5%
polyvec_matrix_expand 303s 324s -6%
poly_pointwise_montgomery_c 125s 144s -13%
mld_invntt_layer 116s 115s +1%
sign_verify_internal 77s 97s -21%
sign_signature_internal ⚠️ 73s 42s +74%
mld_attempt_signature_generation 57s 55s +4%
mld_ntt_layer 43s 45s -4%
fqmul 39s 43s -9%
polyvec_matrix_expand_serial 37s 38s -3%
keccakf1600x4_permute_native 24s 23s +4%
mld_ntt_butterfly_block 21s 24s -12%
compute_pack_t0_t1 20s 19s +5%
poly_ntt_c 19s 21s -10%
polyvec_matrix_pointwise_montgomery_yvec 18s 18s +0%
rej_uniform 16s 15s +7%
poly_chknorm_c 15s 15s +0%
rej_uniform_c 15s 19s -21%
polyeta_unpack 14s 17s -18%
poly_uniform_4x 13s 13s +0%
poly_uniform_eta_4x 13s 11s +18%
polyt0_unpack 13s 14s -7%
polyveck_decompose 12s 13s -8%
mld_check_pct 11s 16s -31%
rej_uniform_native_x86_64 11s - new
mld_compute_pack_z 10s 8s +25%
polyveck_invntt_tomont 10s 9s +11%
keccak_absorb_once_x4 9s 9s +0%
pointwise_acc_native_x86_64 9s 6s +50%
poly_invntt_tomont_c 9s 12s -25%
polyvecl_ntt 8s 7s +14%
unpack_sk_t0hat 8s 7s +14%
polyveck_ntt 7s 11s -36%
mld_sample_s1_s2 6s 6s +0%
mld_sample_s1_s2_serial 6s 8s -25%
pointwise_acc_native_aarch64 6s 6s +0%
poly_chknorm_native_x86_64 6s 2s +200%
poly_decompose_c 6s 5s +20%
polyveck_caddq 6s 8s -25%
sk_s1hat_get_poly 6s 3s +100%
mld_keccakf1600_permute_c 5s 7s -29%
mld_polymat_expand_entry 5s 3s +67%
pack_sk_s1 5s 1s +400%
poly_add 5s 6s -17%
poly_chknorm 5s 3s +67%
poly_decompose_native 5s 2s +150%
poly_power2round 5s 3s +67%
poly_use_hint_native_aarch64 5s 2s +150%
polyw1_pack_88 5s 3s +67%
polyz_unpack_native 5s 4s +25%
rej_eta_native 5s 6s -17%
rej_uniform_eta_native_x86_64 5s - new
rej_uniform_native 5s 8s -38%
shake256_release 5s 3s +67%
sign_keypair_internal 5s 6s -17%
sign_pk_from_sk 5s 6s -17%
sign_signature_pre_hash_internal 5s 5s +0%
sign_verify_extmu 5s 3s +67%
caddq 4s 4s +0%
fqscale 4s 3s +33%
intt_native_aarch64 4s 3s +33%
intt_native_x86_64 4s 3s +33%
keccakf1600_xor_bytes (big endian) 4s 2s +100%
keccakf1600x4_permute 4s 3s +33%
mld_ct_cmask_nonzero_u32 4s 2s +100%
mld_sign_attempt 4s - new
mld_sign_finish 4s - new
mld_sign_resume 4s - new
pack_sig_h 4s 4s +0%
pack_sig_z 4s 5s -20%
pack_sk_rho_key_tr_s2 4s 3s +33%
pointwise_native_aarch64 4s 5s -20%
poly_decompose 4s 3s +33%
poly_decompose_88_native_aarch64 4s 2s +100%
poly_decompose_native_x86_64 4s 2s +100%
poly_permute_bitrev_to_custom_optional_native 4s 5s -20%
poly_uniform 4s 4s +0%
poly_uniform_gamma1 4s 4s +0%
polyt0_pack 4s 4s +0%
polyt1_unpack 4s 4s +0%
polyvec_matrix_pointwise_montgomery_row 4s 3s +33%
polyveck_chknorm 4s 3s +33%
polyveck_pack_w1 4s 3s +33%
polyvecl_chknorm 4s 7s -43%
polyvecl_uniform_gamma1_serial 4s 4s +0%
polyw1_pack_32 4s 4s +0%
power2round 4s 4s +0%
reduce32 4s 3s +33%
shake256 4s 2s +100%
sign_signature_extmu 4s 4s +0%
sign_signature_pre_hash_shake256 4s 6s -33%
sign_verify 4s 5s -20%
sign_verify_pre_hash_shake256 4s 3s +33%
unpack_pk_t1 4s 1s +300%
unpack_sk_s1hat 4s 2s +100%
decompose 3s 3s +0%
keccak_absorb 3s 3s +0%
keccak_f1600_x1_native_aarch64 3s 1s +200%
keccak_f1600_x1_native_aarch64_v84a 3s 1s +200%
keccak_f1600_x4_native_aarch64_v8a_scalar_hybrid 3s 3s +0%
keccak_init 3s 3s +0%
keccakf1600_xor_bytes 3s 3s +0%
keccakf1600x4_extract_bytes 3s 2s +50%
keccakf1600x4_extract_bytes_native 3s 2s +50%
keccakf1600x4_xor_bytes 3s 3s +0%
keccakf1600x4_xor_bytes_native 3s 3s +0%
make_hint 3s 3s +0%
mld_ct_cmask_neg_i32 3s 4s -25%
mld_ct_cmask_nonzero_u8 3s 3s +0%
mld_ct_memcmp 3s 3s +0%
mld_ct_sel_int32 3s 3s +0%
mld_keccakf1600x4_extract_bytes_c 3s 2s +50%
mld_keccakf1600x4_xor_bytes_c 3s 4s -25%
mld_prepare_domain_separation_prefix 3s 4s -25%
mld_value_barrier_u8 3s 3s +0%
montgomery_reduce 3s 3s +0%
ntt_native_x86_64 3s 2s +50%
nttunpack_native_x86_64 3s 3s +0%
pack_sig_c 3s 4s -25%
pointwise_native_x86_64 3s 2s +50%
poly_caddq 3s 2s +50%
poly_caddq_c 3s 3s +0%
poly_caddq_native_aarch64 3s 3s +0%
poly_challenge 3s 5s -40%
poly_chknorm_native 3s 4s -25%
poly_decompose_32_native_aarch64 3s 5s -40%
poly_invntt_tomont 3s 1s +200%
poly_ntt 3s 3s +0%
poly_pointwise_montgomery 3s 4s -25%
poly_uniform_eta 3s 4s -25%
poly_uniform_gamma1_4x 3s 3s +0%
poly_use_hint 3s 1s +200%
poly_use_hint_native 3s 3s +0%
polyveck_unpack_eta 3s 4s -25%
polyvecl_pack_eta 3s 3s +0%
polyvecl_pointwise_acc_montgomery 3s 5s -40%
polyvecl_uniform_gamma1 3s 2s +50%
polyvecl_unpack_eta 3s 5s -40%
polyvecl_unpack_z 3s 4s -25%
polyz_pack 3s 5s -40%
polyz_unpack 3s 2s +50%
polyz_unpack_17_native_aarch64 3s 3s +0%
polyz_unpack_19_native_aarch64 3s 4s -25%
polyz_unpack_c 3s 3s +0%
polyz_unpack_native_x86_64 3s 3s +0%
rej_eta 3s 4s -25%
rej_eta_c 3s 5s -40%
rej_uniform_native_aarch64 3s 2s +50%
shake128_absorb 3s 4s -25%
shake128x4_absorb_once 3s 5s -40%
shake256_absorb 3s 2s +50%
shake256_squeeze 3s 2s +50%
shake256x4_squeezeblocks 3s 1s +200%
sign_keypair 3s 4s -25%
sign_verify_pre_hash_internal 3s 3s +0%
sk_s2hat_get_poly 3s 3s +0%
unpack_sk 3s 5s -40%
yvec_init 3s 4s -25%
keccak_f1600_x4_native_aarch64_v84a 2s 4s -50%
keccak_f1600_x4_native_aarch64_v8a_v84a_scalar_hybrid 2s 4s -50%
keccak_finalize 2s 1s +100%
keccak_squeeze 2s 2s +0%
keccak_squeezeblocks_x4 2s 4s -50%
keccakf1600_extract_bytes (big endian) 2s 3s -33%
keccakf1600_permute 2s 3s -33%
mld_h 2s 3s -33%
mld_keccakf1600_extract_bytes 2s 4s -50%
mld_value_barrier_i64 2s 1s +100%
ntt_native_aarch64 2s 6s -67%
poly_caddq_native 2s 4s -50%
poly_caddq_native_x86_64 2s 2s +0%
poly_chknorm_native_aarch64 2s 4s -50%
poly_invntt_tomont_native 2s 5s -60%
poly_ntt_native 2s 3s -33%
poly_permute_bitrev_to_custom_optional 2s 3s -33%
poly_pointwise_montgomery_native 2s 5s -60%
poly_reduce 2s 2s +0%
poly_sub 2s 3s -33%
poly_use_hint_c 2s 2s +0%
poly_use_hint_native_x86_64 2s - new
polyeta_pack 2s 4s -50%
polyt1_pack 2s 3s -33%
polyveck_pack_eta 2s 6s -67%
polyveck_reduce 2s 3s -33%
polyw1_pack 2s 4s -50%
rej_uniform_eta_native_aarch64 2s 5s -60%
shake128_init 2s 1s +100%
shake128x4_squeezeblocks 2s 3s -33%
shake256x4_absorb_once 2s 2s +0%
sig_unpack_hints 2s 3s -33%
sign_signature 2s 5s -60%
sys_check_capability 2s 3s -33%
unpack_sk_s2hat 2s 3s -33%
use_hint 2s 3s -33%
yvec_get_poly 2s 4s -50%
keccak_f1600_x4_native_avx2 1s 2s -50%
keccakf1600_permute_native 1s 4s -75%
mld_ct_abs_i32 1s 3s -67%
mld_ct_get_optblocker_i64 1s 3s -67%
mld_ct_get_optblocker_u32 1s 2s -50%
mld_ct_get_optblocker_u8 1s 3s -67%
mld_value_barrier_u32 1s 2s -50%
poly_shiftl 1s 4s -75%
polyvecl_pointwise_acc_montgomery_native 1s 3s -67%
shake128_finalize 1s 2s -50%
shake128_release 1s 4s -75%
shake128_squeeze 1s 2s -50%
shake256_finalize 1s 2s -50%
shake256_init 1s 2s -50%
sk_t0hat_get_poly 1s 4s -75%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation needs-mlkem-native-port

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants