Skip to content

feat(fips): Further improve fips support - #1544

Merged
gtema merged 5 commits into
mainfrom
crypto
Oct 16, 2026
Merged

gtema merged 5 commits into
mainfrom
crypto

Conversation

@gtema

@gtema gtema commented Oct 16, 2026

Copy link
Copy Markdown
Collaborator
  • feat(storage-crypto): Add FIPS module IVs and HKDF
  • feat(cadf): Add FIPS backend and full HKDF
  • docs(crypto): Add FIPS and crypto inventory

gtema added 4 commits October 16, 2026 16:08
In the `fips` build let the validated module generate the AES-GCM IV,
the only encrypt service it reports as approved, and encrypt each log
and state record under its own HKDF-derived key so random IVs never
approach the 2^32 per-key limit, whatever the number of learners.
Default builds keep deterministic nonces.

Derive the DEK sub-keys with full HKDF (Extract-then-Expand, fixed
salt), the flow the module documents as approved. This changes the key
hierarchy; there are no deployments yet. A `fips` node still reads
records written by a default node, but not the other way round.

Assisted-By: Claude Sonnet 5.5
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
Route the audit HMAC-SHA256 signature, key derivation and keyring
generation through a small backend seam: `ring` by default, the FIPS
140-3 validated AWS-LC module with the `fips` feature, which also
exposes `assert_fips()`. This drops the hmac, hkdf, sha2 and getrandom
dependencies.

The per-node signing key now uses full HKDF (Extract-then-Expand) with
a fixed per-service salt, the flow the module documents as approved.
This changes the derived key, so records signed by earlier builds no
longer verify; there are no deployments yet. Derivation failures are
returned instead of panicking.

Assisted-By: Claude Sonnet 5.5
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
Add a worktree-wide inventory of cryptographic primitives with
provider and FIPS status, linked from the contributor guide. Mark
every source file that implements or selects a primitive with a
pointer to its inventory row.

Assisted-By: Claude Sonnet 5.5
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
The each-feature job built cadf with `--no-default-features` plus a
single feature such as `runtime`, which leaves neither `ring` nor
`fips` enabled and trips the backend compile_error!. Check cadf in
its own invocation with `ring` always on.

Assisted-By: Claude Sonnet 5.5
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
Comment thread crates/cadf/src/crypto.rs Dismissed
Comment thread crates/cadf/src/crypto.rs Dismissed
Comment thread crates/storage-crypto/src/cipher.rs Dismissed
Comment thread crates/storage-crypto/src/cipher.rs Fixed
Comment thread crates/storage-crypto/src/cipher.rs Fixed
Comment thread crates/storage-crypto/src/cipher.rs Dismissed
Comment thread crates/storage-crypto/src/cipher.rs Dismissed
Comment thread crates/storage-crypto/src/cipher.rs Dismissed
Comment thread crates/storage-crypto/src/dek.rs Dismissed
@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

🐰 Bencher Report

Projectkeystone
Branchcrypto
Testbedubuntu-latest
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
nanoseconds (ns)
(Result Δ%)
Upper Boundary
nanoseconds (ns)
(Limit %)
Command_Serde/apply/remove📈 view plot
🚷 view threshold
121,580.00 ns
(-10.69%)Baseline: 136,136.75 ns
262,212.75 ns
(46.37%)
Command_Serde/apply/set📈 view plot
🚷 view threshold
135,290.00 ns
(-6.55%)Baseline: 144,767.11 ns
254,328.92 ns
(53.19%)
Command_Serde/pack/delete📈 view plot
🚷 view threshold
128.60 ns
(+9.66%)Baseline: 117.27 ns
166.63 ns
(77.17%)
Command_Serde/pack/delete_index📈 view plot
🚷 view threshold
116.38 ns
(+10.35%)Baseline: 105.47 ns
145.94 ns
(79.74%)
Command_Serde/pack/set📈 view plot
🚷 view threshold
217.81 ns
(+15.04%)Baseline: 189.33 ns
272.55 ns
(79.92%)
Command_Serde/pack/set_index📈 view plot
🚷 view threshold
116.36 ns
(+9.75%)Baseline: 106.02 ns
148.38 ns
(78.42%)
Command_Serde/unpack/delete📈 view plot
🚷 view threshold
173.13 ns
(+19.74%)Baseline: 144.59 ns
213.72 ns
(81.01%)
Command_Serde/unpack/delete_index📈 view plot
🚷 view threshold
137.79 ns
(+11.93%)Baseline: 123.10 ns
182.46 ns
(75.52%)
Command_Serde/unpack/set📈 view plot
🚷 view threshold
265.77 ns
(+17.38%)Baseline: 226.42 ns
345.11 ns
(77.01%)
Command_Serde/unpack/set_index📈 view plot
🚷 view threshold
136.15 ns
(+11.22%)Baseline: 122.42 ns
180.87 ns
(75.27%)
Payload_encryption/pack/remove_cmd📈 view plot
🚷 view threshold
124.24 ns
(+13.45%)Baseline: 109.51 ns
162.68 ns
(76.37%)
Payload_encryption/pack/set_cmd📈 view plot
🚷 view threshold
218.93 ns
(+9.99%)Baseline: 199.04 ns
303.28 ns
(72.19%)
Payload_encryption/unpack/remove_cmd📈 view plot
🚷 view threshold
179.73 ns
(+22.13%)Baseline: 147.16 ns
216.12 ns
(83.16%)
Payload_encryption/unpack/set_cmd📈 view plot
🚷 view threshold
281.90 ns
(+21.81%)Baseline: 231.42 ns
351.14 ns
(80.28%)
Raft_1Node_Latency/prefix/1node📈 view plot
🚷 view threshold
2,610,700.00 ns
(-29.08%)Baseline: 3,681,359.53 ns
8,750,233.74 ns
(29.84%)
Raft_1Node_Latency/read/1node📈 view plot
🚷 view threshold
46,144.00 ns
(+32.90%)Baseline: 34,720.00 ns
51,133.42 ns
(90.24%)
Raft_1Node_Latency/remove/1node📈 view plot
🚷 view threshold
351,160.00 ns
(+0.45%)Baseline: 349,573.59 ns
575,201.49 ns
(61.05%)
Raft_1Node_Latency/write/1node📈 view plot
🚷 view threshold
368,370.00 ns
(-4.24%)Baseline: 384,687.97 ns
750,242.57 ns
(49.10%)
build_snapshot/default📈 view plot
🚷 view threshold
2,034.90 ns
(-4.21%)Baseline: 2,124.25 ns
2,866.83 ns
(70.98%)
fernet token/project📈 view plot
🚷 view threshold
1,402.40 ns
(+8.25%)Baseline: 1,295.50 ns
1,774.88 ns
(79.01%)
get_data_keyspace📈 view plot
🚷 view threshold
0.32 ns
(+6.80%)Baseline: 0.30 ns
0.38 ns
(82.84%)
get_db📈 view plot
🚷 view threshold
0.32 ns
(+5.85%)Baseline: 0.30 ns
0.38 ns
(82.06%)
get_fernet_token_timestamp/project📈 view plot
🚷 view threshold
145.73 ns
(+9.36%)Baseline: 133.25 ns
183.07 ns
(79.60%)
get_keyspace📈 view plot
🚷 view threshold
4.13 ns
(-41.20%)Baseline: 7.02 ns
16.43 ns
(25.12%)
🐰 View full continuous benchmarking report in Bencher

gcm_seal_iv took a caller-supplied nonce that the fips backend
ignores, so callers built an all-zero placeholder IV for fips
builds. Take a closure instead: the default build calls it, the
fips build drops it unused and lets the module generate the IV.
No placeholder IV exists any more, and a backend that honoured
one could not reuse it by mistake.

Assisted-By: Claude Sonnet 5.5
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
@gtema
gtema enabled auto-merge October 16, 2026 16:11
@github-actions

Copy link
Copy Markdown

🦢 Load Test Results

Goose Attack Report

Plan Overview

Action Started Stopped Elapsed Users
Increasing 26-10-16 16:21:41 26-10-16 16:22:03 00:00:22 0 → 45
Maintaining 26-10-16 16:22:03 26-10-16 16:22:33 00:00:30 45
Decreasing 26-10-16 16:22:33 26-10-16 16:22:34 00:00:01 0 ← 45

Request Metrics

Method Name # Requests # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
DELETE DELETE /v3/auth/tokens 41 0 590.44 81 815 1.37 0.00
DELETE DELETE /v3/projects/:id (teardown) 1 0 170.00 170 170 0.03 0.00
DELETE DELETE /v3/roles/:id (teardown) 1 0 254.00 254 254 0.03 0.00
DELETE DELETE /v3/users/:id (teardown) 2 0 233.00 162 304 0.07 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 1 0 43.00 43 43 0.03 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 0 153.00 153 153 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 1 0 23.00 23 23 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 0 295.00 295 295 0.03 0.00
GET 447 0 651.15 417 1012 14.90 0.00
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 48 31 281.46 2 730 1.60 1.03
GET GET /v3/auth/tokens (validate new) 40 0 587.17 272 936 1.33 0.00
GET GET /v3/auth/tokens (validate revoked) 42 0 544.29 56 893 1.40 0.00
GET GET /v3/projects/:id 51 0 606.43 434 978 1.70 0.00
GET GET /v3/projects/:id (catalog) 77 0 605.17 389 903 2.57 0.00
GET GET /v3/role_assignments 39 0 588.21 406 907 1.30 0.00
GET GET /v3/role_assignments?role.id 39 0 596.85 432 808 1.30 0.00
GET GET /v3/role_assignments?scope.domain.id 40 0 580.10 443 767 1.33 0.00
GET GET /v3/role_assignments?user.id 39 0 566.33 416 842 1.30 0.00
GET GET /v3/roles 102 0 602.36 436 873 3.40 0.00
GET GET /v3/roles/:id 51 0 603.06 405 870 1.70 0.00
GET GET /v3/users/:id 97 0 631.07 411 875 3.23 0.00
GET GET /v3/users/:id (catalog) 96 0 633.22 470 930 3.20 0.00
GET GET /v4/api-keys 26 0 568.19 428 749 0.87 0.00
GET GET /v4/api-keys/:client_id 27 0 585.15 432 804 0.90 0.00
GET GET /v4/mappings/rulesets 27 0 562.07 407 836 0.90 0.00
GET GET /v4/mappings/rulesets/:mapping_id 27 0 578.07 403 897 0.90 0.00
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 1421 0 31.13 5 133 47.37 0.00
GET GET /v4/oauth2/:domain_id/clients 27 0 561.59 458 768 0.90 0.00
GET GET /v4/oauth2/:domain_id/clients/:provider_id 26 0 583.27 435 768 0.87 0.00
GET GET /v4/oauth2/:domain_id/jwks 1423 0 31.32 4 150 47.43 0.00
GET GET /v4/scim_realms 17 0 550.18 407 657 0.57 0.00
GET GET /v4/scim_realms/:domain_id/:provider_id 18 0 585.94 475 774 0.60 0.00
POST POST /v3/auth/tokens 39 0 558.08 412 884 1.30 0.00
POST POST /v3/auth/tokens (password, invalid) 33 0 977.70 644 1741 1.10 0.00
POST POST /v3/auth/tokens (password, project-scoped) 57 0 1208.19 595 1844 1.90 0.00
POST POST /v3/auth/tokens (password, unscoped) 56 0 984.38 629 1448 1.87 0.00
POST POST /v3/auth/tokens (rescope to system) 90 0 682.36 425 1004 3.00 0.00
POST POST /v3/auth/tokens (rescope, invalid project) 54 0 562.96 378 784 1.80 0.00
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 51 0 1228.69 682 1692 1.70 0.00
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 0 162.00 162 162 0.03 0.00
POST POST /v4/oauth2/:domain_id/device_authorization 425 0 70.48 20 194 14.17 0.00
POST POST /v4/oauth2/:domain_id/token (client_credentials) 15 0 756.80 401 1027 0.50 0.00
PUT PUT /v4/scim_realms/:domain_id/:provider_id 18 0 599.00 495 818 0.60 0.00
Aggregated 5135 31 261.91 2 1844 171.17 1.03

Response Time Metrics

Method Name 50%ile (ms) 60%ile (ms) 70%ile (ms) 80%ile (ms) 90%ile (ms) 95%ile (ms) 99%ile (ms) 100%ile (ms)
DELETE DELETE /v3/auth/tokens 600 600 600 700 700 800 800 800
DELETE DELETE /v3/projects/:id (teardown) 170 170 170 170 170 170 170 170
DELETE DELETE /v3/roles/:id (teardown) 254 254 254 254 254 254 254 254
DELETE DELETE /v3/users/:id (teardown) 162 162 162 300 300 300 300 300
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 43 43 43 43 43 43 43 43
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 153 153 153 153 153 153 153 153
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 23 23 23 23 23 23 23 23
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 295 295 295 295 295 295 295 295
GET 600 700 700 700 800 800 900 1,000
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 310 380 440 490 500 700 700 700
GET GET /v3/auth/tokens (validate new) 600 600 600 600 700 800 900 900
GET GET /v3/auth/tokens (validate revoked) 500 600 600 600 700 700 893 893
GET GET /v3/projects/:id 600 600 600 700 700 800 800 978
GET GET /v3/projects/:id (catalog) 600 600 600 700 700 800 800 900
GET GET /v3/role_assignments 600 600 600 600 700 700 900 900
GET GET /v3/role_assignments?role.id 600 600 600 700 700 700 800 800
GET GET /v3/role_assignments?scope.domain.id 600 600 600 600 700 700 767 767
GET GET /v3/role_assignments?user.id 500 500 600 600 700 700 800 800
GET GET /v3/roles 600 600 700 700 700 800 873 873
GET GET /v3/roles/:id 600 600 600 700 700 800 800 870
GET GET /v3/users/:id 600 600 700 700 800 800 875 875
GET GET /v3/users/:id (catalog) 600 600 700 700 800 800 900 900
GET GET /v4/api-keys 600 600 600 600 700 700 700 700
GET GET /v4/api-keys/:client_id 600 600 600 600 700 800 800 800
GET GET /v4/mappings/rulesets 600 600 600 600 700 700 800 800
GET GET /v4/mappings/rulesets/:mapping_id 600 600 600 600 700 700 897 897
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 28 31 36 42 55 63 89 130
GET GET /v4/oauth2/:domain_id/clients 600 600 600 600 700 768 768 768
GET GET /v4/oauth2/:domain_id/clients/:provider_id 600 600 600 600 700 700 768 768
GET GET /v4/oauth2/:domain_id/jwks 27 31 36 44 56 66 85 150
GET GET /v4/scim_realms 500 600 600 600 600 657 657 657
GET GET /v4/scim_realms/:domain_id/:provider_id 600 600 600 600 700 774 774 774
POST POST /v3/auth/tokens 500 500 600 600 600 700 884 884
POST POST /v3/auth/tokens (password, invalid) 900 1,000 1,000 1,000 1,000 1,741 1,741 1,741
POST POST /v3/auth/tokens (password, project-scoped) 1,000 1,000 1,000 1,000 1,000 1,844 1,844 1,844
POST POST /v3/auth/tokens (password, unscoped) 1,000 1,000 1,000 1,000 1,000 1,000 1,000 1,000
POST POST /v3/auth/tokens (rescope to system) 700 700 700 800 800 800 1,000 1,000
POST POST /v3/auth/tokens (rescope, invalid project) 500 600 600 600 700 700 700 784
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 1,000 1,000 1,000 1,000 1,692 1,692 1,692 1,692
POST POST /v4/api-keys/:client_id/revoke (teardown) 162 162 162 162 162 162 162 162
POST POST /v4/oauth2/:domain_id/device_authorization 66 72 80 92 110 120 160 190
POST POST /v4/oauth2/:domain_id/token (client_credentials) 800 800 800 900 900 900 1,000 1,000
PUT PUT /v4/scim_realms/:domain_id/:provider_id 600 600 600 700 700 700 800 800
Aggregated 49 76 500 600 700 800 1,000 1,844

Status Code Metrics

Method Name Status Codes
DELETE DELETE /v3/auth/tokens 41 [204]
DELETE DELETE /v3/projects/:id (teardown) 1 [204]
DELETE DELETE /v3/roles/:id (teardown) 1 [204]
DELETE DELETE /v3/users/:id (teardown) 2 [204]
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 1 [204]
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 [204]
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 1 [204]
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 [204]
GET 447 [200]
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 31 [401], 17 [429]
GET GET /v3/auth/tokens (validate new) 40 [200]
GET GET /v3/auth/tokens (validate revoked) 42 [404]
GET GET /v3/projects/:id 51 [200]
GET GET /v3/projects/:id (catalog) 77 [200]
GET GET /v3/role_assignments 39 [200]
GET GET /v3/role_assignments?role.id 39 [200]
GET GET /v3/role_assignments?scope.domain.id 40 [200]
GET GET /v3/role_assignments?user.id 39 [200]
GET GET /v3/roles 102 [200]
GET GET /v3/roles/:id 51 [200]
GET GET /v3/users/:id 97 [200]
GET GET /v3/users/:id (catalog) 96 [200]
GET GET /v4/api-keys 26 [200]
GET GET /v4/api-keys/:client_id 27 [200]
GET GET /v4/mappings/rulesets 27 [200]
GET GET /v4/mappings/rulesets/:mapping_id 27 [200]
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 1,421 [200]
GET GET /v4/oauth2/:domain_id/clients 27 [200]
GET GET /v4/oauth2/:domain_id/clients/:provider_id 26 [200]
GET GET /v4/oauth2/:domain_id/jwks 1,423 [200]
GET GET /v4/scim_realms 17 [200]
GET GET /v4/scim_realms/:domain_id/:provider_id 18 [200]
POST POST /v3/auth/tokens 39 [201]
POST POST /v3/auth/tokens (password, invalid) 33 [401]
POST POST /v3/auth/tokens (password, project-scoped) 57 [201]
POST POST /v3/auth/tokens (password, unscoped) 56 [201]
POST POST /v3/auth/tokens (rescope to system) 90 [201]
POST POST /v3/auth/tokens (rescope, invalid project) 54 [401]
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 51 [201]
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 [200]
POST POST /v4/oauth2/:domain_id/device_authorization 425 [200]
POST POST /v4/oauth2/:domain_id/token (client_credentials) 15 [200]
PUT PUT /v4/scim_realms/:domain_id/:provider_id 18 [200]
Aggregated 42 [404], 49 [204], 118 [401], 4,616 [200], 293 [201], 17 [429]

Transaction Metrics

Transaction # Times Run # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
ReadHeavy
0.0 0 0 0.00 0 0 0.00 0.00
0.1 65 0 689.40 459 1012 2.17 0.00
0.2 65 0 593.77 444 845 2.17 0.00
0.3 63 0 617.97 417 907 2.10 0.00
TokenLifecycle
1.0 0 0 0.00 0 0 0.00 0.00
1.1 42 0 2275.40 946 2734 1.40 0.00
ValidateToken
2.0 0 0 0.00 0 0 0.00 0.00
2.1 86 0 717.94 505 1002 2.87 0.00
UserCRUD
3.0 0 0 0.00 0 0 0.00 0.00
3.1 0 0 0.00 0 0 0.00 0.00
3.2 97 0 631.10 411 875 3.23 0.00
3.3 2 0 233.00 162 304 0.07 0.00
ProjectCRUD
4.0 0 0 0.00 0 0 0.00 0.00
4.1 0 0 0.00 0 0 0.00 0.00
4.2 51 0 606.47 434 978 1.70 0.00
4.3 1 0 170.00 170 170 0.03 0.00
RoleCRUD
5.0 0 0 0.00 0 0 0.00 0.00
5.1 0 0 0.00 0 0 0.00 0.00
5.2 51 0 603.10 406 870 1.70 0.00
5.3 1 0 254.00 254 254 0.03 0.00
RoleList
6.0 0 0 0.00 0 0 0.00 0.00
6.1 102 0 602.40 436 873 3.40 0.00
RoleAssignmentList
7.0 0 0 0.00 0 0 0.00 0.00
7.1 39 0 588.23 406 907 1.30 0.00
7.2 39 0 566.36 416 842 1.30 0.00
7.3 40 0 580.15 443 767 1.33 0.00
7.4 39 0 596.87 432 808 1.30 0.00
UserRead
8.0 0 0 0.00 0 0 0.00 0.00
8.1 92 0 671.41 456 884 3.07 0.00
8.2 96 0 633.27 470 930 3.20 0.00
ProjectRead
9.0 0 0 0.00 0 0 0.00 0.00
9.1 76 0 595.13 429 859 2.53 0.00
9.2 77 0 605.21 389 903 2.57 0.00
PasswordAuth
10.0 56 0 984.39 629 1448 1.87 0.00
10.1 57 0 1208.23 595 1844 1.90 0.00
PasswordAuthNegative
11.0 33 0 977.79 644 1741 1.10 0.00
Rescope
12.0 0 0 0.00 0 0 0.00 0.00
12.1 90 0 682.38 425 1004 3.00 0.00
RescopeNegative
13.0 0 0 0.00 0 0 0.00 0.00
13.1 54 0 563.06 378 784 1.80 0.00
SystemScopeAuth
14.0 51 0 1228.78 682 1692 1.70 0.00
ApiKeyCRUD
15.0 0 0 0.00 0 0 0.00 0.00
15.1 0 0 0.00 0 0 0.00 0.00
15.2 27 0 585.19 432 804 0.90 0.00
15.3 26 0 568.19 428 749 0.87 0.00
15.4 1 0 162.00 162 162 0.03 0.00
MappingCRUD
16.0 0 0 0.00 0 0 0.00 0.00
16.1 0 0 0.00 0 0 0.00 0.00
16.2 27 0 578.07 403 897 0.90 0.00
16.3 27 0 562.11 407 836 0.90 0.00
16.4 1 0 153.00 153 153 0.03 0.00
OAuth2ClientCRUD
17.0 0 0 0.00 0 0 0.00 0.00
17.1 0 0 0.00 0 0 0.00 0.00
17.2 26 0 583.27 435 768 0.87 0.00
17.3 27 0 561.59 458 768 0.90 0.00
17.4 1 0 295.00 295 295 0.03 0.00
OAuth2ClientCredentials
18.0 0 0 0.00 0 0 0.00 0.00
18.1 0 0 0.00 0 0 0.00 0.00
18.2 15 0 756.80 401 1027 0.50 0.00
18.3 1 0 67.00 67 67 0.03 0.00
OAuth2DeviceAuthorization
19.0 425 0 70.51 20 194 14.17 0.00
OAuth2Discovery
20.0 1423 0 31.35 4 150 47.43 0.00
20.1 1421 0 31.16 5 133 47.37 0.00
ScimRealmRead
21.0 0 0 0.00 0 0 0.00 0.00
21.1 18 0 586.00 475 774 0.60 0.00
21.2 17 0 550.18 407 657 0.57 0.00
21.3 18 0 599.06 495 818 0.60 0.00
ScimSync
22.0 0 0 0.00 0 0 0.00 0.00
22.1 0 0 0.00 0 0 0.00 0.00
22.2 0 0 0.00 0 0 0.00 0.00
22.3 48 0 636.08 187 1038 1.60 0.00
22.4 47 0 0.00 0 0 1.57 0.00
22.5 47 0 0.00 0 0 1.57 0.00
22.6 1 0 0.00 0 0 0.03 0.00
Aggregated 5109 0 263.24 4 2734 170.30 0.00

Scenario Metrics

Transaction # Users # Times Run Average (ms) Min (ms) Max (ms) Scenarios/s Iterations
ReadHeavy 4 62 1912.63 1665 2270 2.07 15.50
TokenLifecycle 3 39 2336.87 2051 2734 1.30 13.00
ValidateToken 2 84 722.18 505 1002 2.80 42.00
UserCRUD 2 95 633.86 411 875 3.17 47.50
ProjectCRUD 1 50 608.62 434 978 1.67 50.00
RoleCRUD 1 50 604.22 406 870 1.67 50.00
RoleList 2 100 604.02 436 873 3.33 50.00
RoleAssignmentList 3 38 2360.66 2128 2681 1.27 12.67
UserRead 4 92 1311.93 1113 1674 3.07 23.00
ProjectRead 3 75 1207.37 901 1481 2.50 25.00
PasswordAuth 4 54 2212.30 1556 2951 1.80 13.50
PasswordAuthNegative 1 32 983.91 644 1741 1.07 32.00
Rescope 2 88 685.18 425 1004 2.93 44.00
RescopeNegative 1 53 564.55 378 784 1.77 53.00
SystemScopeAuth 2 49 1244.08 889 1692 1.63 24.50
ApiKeyCRUD 1 26 1155.81 894 1374 0.87 26.00
MappingCRUD 1 26 1147.92 968 1452 0.87 26.00
OAuth2ClientCRUD 1 26 1149.35 967 1391 0.87 26.00
OAuth2ClientCredentials 1 14 2200.07 1701 2624 0.47 14.00
OAuth2DeviceAuthorization 1 424 70.51 20 194 14.13 424.00
OAuth2Discovery 3 1421 63.05 16 212 47.37 473.67
ScimRealmRead 1 18 1739.50 1443 1962 0.60 18.00
ScimSync 1 47 640.47 187 1038 1.57 47.00
Aggregated 45 2963 457.72 16 2951 98.77 1550.33

Error Metrics

Method Name # Error
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 49 401 Unauthorized: GET /SCIM/v2/:domain_id/Users (sync reconcile list)
POST POST /SCIM/v2/:domain_id/Users (sync provision) 1 401 Unauthorized: POST /SCIM/v2/:domain_id/Users (sync provision)
POST POST /v3/auth/tokens (password, invalid) 76 401 Unauthorized: POST /v3/auth/tokens (password, invalid)
POST POST /v3/auth/tokens (rescope, invalid project) 136 401 Unauthorized: POST /v3/auth/tokens (rescope, invalid project)
GET GET /v3/auth/tokens (validate revoked) 148 404 Not Found: GET /v3/auth/tokens (validate revoked)
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 40 429 Too Many Requests: GET /SCIM/v2/:domain_id/Users (sync reconcile list)

View full report

@github-actions

Copy link
Copy Markdown

🧪 Tempest Identity Compatibility Results (advisory, non-blocking)

rust

Totals
======
Ran: 133 tests in 31.5581 sec.
 - Passed: 83
 - Skipped: 4
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 46
Sum of execute time for each test: 31.6428 sec.
Failed test IDs
===== FAILED TESTS (target=rust) =====
tempest.api.identity.admin.v3.test_credentials.CredentialsTestJSON.test_credentials_create_get_update_delete[id-7cd59bf9-bda4-4c72-9467-d21cab278355,smoke]
tempest.api.identity.admin.v3.test_domains_negative.DomainsNegativeTestJSON.test_delete_active_domain[gate,id-1f3fbff5-4e44-400d-9ca1-d953f05f609b,negative]
tempest.api.identity.admin.v3.test_default_project_id.TestDefaultProjectId.test_default_project_id[id-d6110661-6a71-49a7-a453-b5e26640ff6d]
tempest.api.identity.admin.v3.test_groups.GroupsV3TestJSON.test_group_users_add_list_delete[id-1598521a-2f36-4606-8df9-30772bd51339,smoke]
tempest.api.identity.admin.v3.test_groups.GroupsV3TestJSON.test_list_user_groups[id-64573281-d26a-4a52-b899-503cb0f4e4ec]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_check_revoke_roles_on_projects_group[id-26021436-d5a4-4256-943c-ded01e0d4b45]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_check_revoke_roles_on_projects_user[id-18b70e45-7687-4b72-8277-b8f1a47d7591]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_check_revoke_roles_on_domains_group[id-c7a8dda2-be50-4fb4-9a9c-e830771078b1]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_check_revoke_roles_on_domains_user[id-4e6f0366-97c8-423c-b2be-41eae6ac91c8]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_revoke_user_roles_on_domain[id-3acf666e-5354-42ac-8e17-8b68893bcd36]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_revoke_user_roles_on_project_tree[id-9f02ccd9-9b57-46b4-8f77-dd5a736f3a06]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_domain_config_and_show_config_groups_and_options[id-9e3ff13c-f597-4f01-9377-d6c06c2a1477]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_create_and_show_consumer[id-c8307ea6-a86c-47fd-ae7b-5b3b2caca76d]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_delete_consumer[id-fdfa1b7f-2a31-4354-b2c7-f6ae20554f93]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_list_consumers[id-09ca50de-78f2-4ffb-ac71-f2254036b2b8]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_update_consumer[id-080a9b1a-c009-47c0-9979-5305bf72e3dc]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_update_and_delete_domain_config_groups_and_opts[id-c7510fa2-6661-4170-9c6b-4783a80651e9]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_show_default_group_config_and_options[id-11a02bf0-6f94-4380-b3b0-c8dc18fc0d22]
setUpClass (tempest.api.identity.admin.v3.test_endpoint_groups.EndPointGroupsTest)
tempest.api.identity.admin.v3.test_project_tags.IdentityV3ProjectTagsTest.test_list_update_delete_project_tags[id-7c123aac-999d-416a-a0fb-84b915ab10de]
tempest.api.identity.admin.v3.test_list_projects.ListProjectsTestJSON.test_list_projects_with_parent[id-6edc66f5-2941-4a17-9526-4073311c1fac]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_get_trusts_all[id-4773ebd5-ecbf-4255-b8d8-b63e6f72b65d,smoke]
tempest.api.identity.admin.v3.test_users_negative.UsersNegativeTest.test_create_user_for_non_existent_domain[id-e75f006c-89cc-477b-874d-588e4eab4b17,negative]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_get_trusts_query[id-6268b345-87ca-47c0-9ce3-37792b43403a]
tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON.test_create_is_domain_project[id-a7eb9416-6f9b-4dbb-b71b-7f73aaef59d5]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_expire[id-0ed14b66-cefd-4b5c-a964-65759453e292]
tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON.test_project_create_with_parent[id-1854f9c0-70bc-4d11-a08a-1c789d339e3d]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_create_application_credential_expires[id-852daf0c-42b5-4239-8466-d193d0543ed3]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_impersonate[id-5a0a91a4-baef-4a14-baba-59bf4d7fcace]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_noimpersonate[id-ed2a8779-a7ac-49dc-afd7-30f32f936ed2]
tempest.api.identity.v3.test_catalog.IdentityCatalogTest.test_catalog_standardization[id-56b57ced-22b8-4127-9b8a-565dfb0207e2]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_assignments_for_domain_roles[id-3859df7e-5b78-4e4d-b10e-214c8953842a]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_assignments_for_implied_roles_create_delete[id-c8828027-df48-4021-95df-b65b92c7429e]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_group_on_domain[id-4bf8a70b-e785-413a-ad53-9f91ce02faa7]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_group_on_project[id-cbf11737-1904-4690-9613-97bcbb3df1c4]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_user_on_domain[id-6c9a2940-3625-43a3-ac02-5dcec62ef3bd]
tempest.api.identity.v3.test_tokens.TokensV3Test.test_validate_token[id-a9512ac3-3909-48a4-b395-11f438e16260]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_implied_domain_roles[id-eb1e1c24-1bc4-4d47-9748-e127a1852c82]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_implied_roles_create_check_show_delete[id-c90c316c-d706-4728-bcba-eb1912081b69]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_role_create_update_show_list[id-18afc6c0-46cf-4911-824e-9989cc056c3a,smoke]
tempest.api.identity.admin.v3.test_tokens.TokensV3TestJSON.test_get_available_domain_scopes[id-ec5ecb05-af64-4c04-ac86-4d9f6f12f185]
tempest.api.identity.admin.v3.test_tokens.TokensV3TestJSON.test_rescope_token[id-565fa210-1da1-4563-999b-f7b5b67cf112]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_media_types[id-657c1970-4722-4189-8831-7325f3bc4265,smoke]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_resources[id-b9232f5e-d9e5-4d97-b96c-28d3db4de1bd,smoke]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_identity_v3_existence[id-79aec9ae-710f-4c54-a4fc-3aa25b4feac3]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_list_api_versions[id-721f480f-35b6-46c7-846e-047e6acea0dc,smoke]
===== END FAILED TESTS (target=rust) =====

View full run

@gtema
gtema added this pull request to the merge queue Oct 16, 2026
Merged via the queue into main with commit 6028e60 Oct 16, 2026
42 checks passed
@gtema
gtema deleted the crypto branch October 18, 2026 12:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants