Skip to content

Add ECDSA verify support#2502

Merged
jviotti merged 2 commits into
mainfrom
ecdsa-verify
Jun 14, 2026
Merged

Add ECDSA verify support#2502
jviotti merged 2 commits into
mainfrom
ecdsa-verify

Conversation

@jviotti

@jviotti jviotti commented Jun 13, 2026

Copy link
Copy Markdown
Member

Signed-off-by: Juan Cruz Viotti jv@jviotti.com

Review in cubic

Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
@jviotti jviotti marked this pull request as ready for review June 13, 2026 23:41
@augmentcode

augmentcode Bot commented Jun 13, 2026

Copy link
Copy Markdown
🤖 Augment PR Summary

Summary: This PR adds ECDSA signature verification support alongside the existing RSA verifiers.

Changes:

  • Introduced the EllipticCurve enum and exported ecdsa_verify(...) API in crypto_verify.h.
  • Implemented ECDSA verification across the OpenSSL, Apple Security.framework, Windows CNG, and reference backends.
  • Added internal Jacobian-coordinate ECC arithmetic (crypto_ecc.h) plus modular bignum helpers needed by the reference implementation.
  • Handled the JWS-mandated raw R || S signature format, converting to DER/X9.62 where platform APIs require it.
  • Extended the test suite with per-curve known-good signatures and PyCA/cryptography SigVer vector-based coverage.

Technical Notes: The reference backend validates scalar ranges and curve membership per FIPS 186-4, while platform backends rely on native key parsing/verification primitives.

🤖 Was this summary useful? React with 👍 or 👎

@augmentcode augmentcode Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review completed. 3 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

Comment thread src/core/crypto/crypto_verify_other.cc Outdated
return false;
}

const auto public_x{bignum_from_bytes(coordinate_x)};

@augmentcode augmentcode Bot Jun 13, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

At src/core/crypto/crypto_verify_other.cc:343, bignum_from_bytes(coordinate_x/y) will silently truncate extremely long inputs (it stops at Bignum::capacity), which can make malformed public keys be interpreted as a different smaller point and inconsistently accepted. Consider bounding/normalizing coordinate lengths (e.g., reject inputs longer than the curve field size) so oversized coordinates can’t be truncated into a valid key.

Severity: medium

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

const std::string_view coordinate_x,
const std::string_view coordinate_y) -> EVP_PKEY * {
const auto width{curve_field_bytes(curve)};
if (coordinate_x.size() > width || coordinate_y.size() > width) {

@augmentcode augmentcode Bot Jun 13, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

At src/core/crypto/crypto_verify_openssl.cc:175, EC coordinates are rejected when size() > width, unlike the RSA path which strips leading zeros before sizing, so callers providing left-padded coordinates may fail on OpenSSL/Apple/Windows while the reference backend may accept them. Consider normalizing (e.g., stripping leading 0x00 bytes) before applying the width check to keep backend behavior consistent.

Severity: low

Other Locations
  • src/core/crypto/crypto_verify_apple.cc:139
  • src/core/crypto/crypto_verify_windows.cc:226

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Comment thread src/core/crypto/crypto_bignum.h Outdated

std::string bytes;
bytes.reserve(hex.size() / 2);
for (std::size_t index = 0; index + 1 < hex.size(); index += 2) {

@augmentcode augmentcode Bot Jun 13, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

At src/core/crypto/crypto_bignum.h:78, bignum_from_hex silently ignores a trailing nibble when the input has odd length, which could yield incorrect values with no signal if an odd-length hex string is ever passed. It also maps any non-[0-9a-fA-F] character through the “uppercase” branch, which can produce out-of-range nibbles rather than rejecting malformed input.

Severity: low

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Benchmark (macos/llvm)

Details
Benchmark suite Current: f6f4f59 Previous: 8411f99 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 1.574073452418214 ns/iter 1.6970305614946273 ns/iter 0.93
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 1.6028951316150386 ns/iter 1.6983903121094654 ns/iter 0.94
Regex_Period_Asterisk 1.6406305530682699 ns/iter 1.850491560167717 ns/iter 0.89
Regex_Group_Period_Asterisk_Group 1.5711544605956171 ns/iter 1.835685268468358 ns/iter 0.86
Regex_Period_Plus 1.8819693559779336 ns/iter 2.133284849238584 ns/iter 0.88
Regex_Period 1.8833167654299598 ns/iter 2.306558871472046 ns/iter 0.82
Regex_Caret_Period_Plus_Dollar 1.8820248218869324 ns/iter 2.398681235743347 ns/iter 0.78
Regex_Caret_Group_Period_Plus_Group_Dollar 1.934014763755398 ns/iter 2.384417041591825 ns/iter 0.81
Regex_Caret_Period_Asterisk_Dollar 1.5667044070056693 ns/iter 1.7246540199830738 ns/iter 0.91
Regex_Caret_Group_Period_Asterisk_Group_Dollar 1.5682719933471208 ns/iter 1.701931002859553 ns/iter 0.92
Regex_Caret_X_Hyphen 5.66465286419748 ns/iter 6.118724373863637 ns/iter 0.93
Regex_Period_Md_Dollar 15.855092084631217 ns/iter 17.165696951311507 ns/iter 0.92
Regex_Caret_Slash_Period_Asterisk 4.101642211154547 ns/iter 4.494449064758135 ns/iter 0.91
Regex_Caret_Period_Range_Dollar 1.88303222928935 ns/iter 2.085794924524431 ns/iter 0.90
Regex_Nested_Backtrack 24.747101026574445 ns/iter 24.703886329891432 ns/iter 1.00
JSON_Array_Of_Objects_Unique 315.0989818880177 ns/iter 338.027908833231 ns/iter 0.93
JSON_Parse_1 3367.838751788768 ns/iter 3650.6944240901703 ns/iter 0.92
JSON_Parse_Real 5556.692902249433 ns/iter 5194.613543739464 ns/iter 1.07
JSON_Parse_Decimal 5343.0302695573255 ns/iter 5480.569104450074 ns/iter 0.97
JSON_Parse_Schema_ISO_Language 3067212.982143376 ns/iter 5051963.874125631 ns/iter 0.61
JSON_Parse_Integer 2787.39055669146 ns/iter 3178.56577506555 ns/iter 0.88
JSON_Parse_String_NonSSO_Plain 3468.3731243249395 ns/iter 3581.973902022428 ns/iter 0.97
JSON_Parse_String_SSO_Plain 1665.7408214603172 ns/iter 1813.7683371257467 ns/iter 0.92
JSON_Parse_String_Escape_Heavy 15230.358447789005 ns/iter 19111.960015078683 ns/iter 0.80
JSON_Parse_Object_Short_Keys 5163.728481359631 ns/iter 5337.879948154713 ns/iter 0.97
JSON_Parse_Object_Scalar_Properties 2529.339322971086 ns/iter 2696.508240356872 ns/iter 0.94
JSON_Parse_Object_Array_Properties 3259.6688102305775 ns/iter 3500.013487534388 ns/iter 0.93
JSON_Parse_Object_Object_Properties 3333.5266862412564 ns/iter 3515.159080732258 ns/iter 0.95
JSON_Parse_Nested_Containers 27037.367515634814 ns/iter 27813.80239401992 ns/iter 0.97
JSON_From_String_Copy 22.62968062122471 ns/iter 25.790287453088897 ns/iter 0.88
JSON_From_String_Temporary 18.020518233815377 ns/iter 23.142323894318157 ns/iter 0.78
JSON_Number_To_Double 30.628634428626516 ns/iter 33.558091230046955 ns/iter 0.91
JSON_Object_At_Last_Key/8 3.565159673481231 ns/iter 3.7245152923580616 ns/iter 0.96
JSON_Object_At_Last_Key/32 11.139152239875358 ns/iter 11.816601902379514 ns/iter 0.94
JSON_Object_At_Last_Key/128 50.47179999999116 ns/iter 54.159448137188 ns/iter 0.93
JSON_Object_At_Last_Key/512 175.6697238639299 ns/iter 186.60940275579563 ns/iter 0.94
JSON_Fast_Hash_Helm_Chart_Lock 58.21895556714044 ns/iter 58.83612322321609 ns/iter 0.99
JSON_Equality_Helm_Chart_Lock 123.70175386121993 ns/iter 134.42047703879595 ns/iter 0.92
JSON_Divisible_By_Decimal 161.55492788525018 ns/iter 182.38769276615272 ns/iter 0.89
JSON_String_Equal/10 6.276134369810525 ns/iter 6.8493938974860855 ns/iter 0.92
JSON_String_Equal/100 6.257897020183749 ns/iter 7.728017298826804 ns/iter 0.81
JSON_String_Equal_Small_By_Perfect_Hash/10 0.6923287483060706 ns/iter 0.8998721748663095 ns/iter 0.77
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 3.0334559714298814 ns/iter 3.6636570426561232 ns/iter 0.83
JSON_String_Fast_Hash/10 2.197522503447951 ns/iter 2.6709195827878767 ns/iter 0.82
JSON_String_Fast_Hash/100 1.8908731493187052 ns/iter 2.0640888494185363 ns/iter 0.92
JSON_String_Key_Hash/10 1.2559171687323099 ns/iter 1.6726980112937704 ns/iter 0.75
JSON_String_Key_Hash/100 1.9847438580946444 ns/iter 2.163512278908338 ns/iter 0.92
JSON_Object_Defines_Miss_Same_Length 2.1954674174423365 ns/iter 2.4910596669599583 ns/iter 0.88
JSON_Object_Defines_Miss_Too_Small 2.3122992418889416 ns/iter 2.371766425846735 ns/iter 0.97
JSON_Object_Defines_Miss_Too_Large 2.19777277124019 ns/iter 2.3261812730916054 ns/iter 0.94
Pointer_Object_Traverse 12.772735258672544 ns/iter 13.889500490153702 ns/iter 0.92
Pointer_Object_Try_Traverse 21.661819734695793 ns/iter 23.23428495780857 ns/iter 0.93
Pointer_Push_Back_Pointer_To_Weak_Pointer 145.2459653053041 ns/iter 161.80645976248334 ns/iter 0.90
Pointer_Walker_Schema_ISO_Language 1953152.4305553678 ns/iter 2513146.22471923 ns/iter 0.78
Pointer_Maybe_Tracked_Deeply_Nested/0 805113.3948545152 ns/iter 1032304.6113207336 ns/iter 0.78
Pointer_Maybe_Tracked_Deeply_Nested/1 1025832.9740636772 ns/iter 1216860.6736476256 ns/iter 0.84
Pointer_Position_Tracker_Get_Deeply_Nested 330.75617655964703 ns/iter 406.32256471547606 ns/iter 0.81
URITemplateRouter_Create 21485.05373152517 ns/iter 23326.731777315017 ns/iter 0.92
URITemplateRouter_Match 150.660127221928 ns/iter 160.9285761330307 ns/iter 0.94
URITemplateRouter_Match_BasePath 177.5679224676386 ns/iter 191.6961994081637 ns/iter 0.93
URITemplateRouterView_Restore 9549.196482568603 ns/iter 9845.466301942917 ns/iter 0.97
URITemplateRouterView_Match 122.2245331889383 ns/iter 131.842807326283 ns/iter 0.93
URITemplateRouterView_Match_BasePath 139.3009634904687 ns/iter 151.17568879261592 ns/iter 0.92
URITemplateRouterView_Arguments 385.39588452368 ns/iter 394.86007487314504 ns/iter 0.98
JSONL_Parse_Large 11470652.327869205 ns/iter 12690845.13207529 ns/iter 0.90
JSONL_Parse_Large_GZIP 12224395.473682754 ns/iter 14019347.749998936 ns/iter 0.87
HTML_Build_Table_100000 59849075.81817176 ns/iter 66673912.49999355 ns/iter 0.90
HTML_Render_Table_100000 2264173.3870968693 ns/iter 3893917.7807485657 ns/iter 0.58
GZIP_Compress_ISO_Language_Set_3_Locations 24605855.642854683 ns/iter 26522930.55555472 ns/iter 0.93
GZIP_Decompress_ISO_Language_Set_3_Locations 4695937.919462651 ns/iter 5503860.1190477805 ns/iter 0.85
GZIP_Compress_ISO_Language_Set_3_Schema 1423415.1606425405 ns/iter 1510532.9383983167 ns/iter 0.94
GZIP_Decompress_ISO_Language_Set_3_Schema 268121.29128353175 ns/iter 272016.85560859984 ns/iter 0.99

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Benchmark (linux/gcc)

Details
Benchmark suite Current: f6f4f59 Previous: 8411f99 Ratio
GZIP_Compress_ISO_Language_Set_3_Locations 39285008.4999989 ns/iter 36392756.63157916 ns/iter 1.08
GZIP_Decompress_ISO_Language_Set_3_Locations 4030183.666666995 ns/iter 4368020.025000163 ns/iter 0.92
GZIP_Compress_ISO_Language_Set_3_Schema 2265530.304207106 ns/iter 2012376.0517241533 ns/iter 1.13
GZIP_Decompress_ISO_Language_Set_3_Schema 328887.2678721337 ns/iter 381083.6356715848 ns/iter 0.86
HTML_Build_Table_100000 74844716.5000016 ns/iter 61028860.63636313 ns/iter 1.23
HTML_Render_Table_100000 1959219.8820222996 ns/iter 1908836.7127371537 ns/iter 1.03
JSONL_Parse_Large 12383246.228070851 ns/iter 12899174.592590682 ns/iter 0.96
JSONL_Parse_Large_GZIP 13850837.88235373 ns/iter 14394661.714284351 ns/iter 0.96
URITemplateRouter_Create 29849.10702054743 ns/iter 31229.544090224445 ns/iter 0.96
URITemplateRouter_Match 144.62167377627594 ns/iter 149.0007230853262 ns/iter 0.97
URITemplateRouter_Match_BasePath 167.2316164999514 ns/iter 170.57446647780662 ns/iter 0.98
URITemplateRouterView_Restore 8657.340522287375 ns/iter 7638.554198896385 ns/iter 1.13
URITemplateRouterView_Match 124.63008556385962 ns/iter 122.47585414583364 ns/iter 1.02
URITemplateRouterView_Match_BasePath 142.94896831608133 ns/iter 142.74321562769998 ns/iter 1.00
URITemplateRouterView_Arguments 459.3020952390858 ns/iter 469.924099863803 ns/iter 0.98
Pointer_Object_Traverse 29.473965282543265 ns/iter 29.64469326320091 ns/iter 0.99
Pointer_Object_Try_Traverse 22.72283728223581 ns/iter 23.077448269601575 ns/iter 0.98
Pointer_Push_Back_Pointer_To_Weak_Pointer 152.46934889389237 ns/iter 147.72895532542964 ns/iter 1.03
Pointer_Walker_Schema_ISO_Language 1871767.1013334135 ns/iter 1906172.7903224386 ns/iter 0.98
Pointer_Maybe_Tracked_Deeply_Nested/0 1537891.2483516454 ns/iter 1526779.9118944998 ns/iter 1.01
Pointer_Maybe_Tracked_Deeply_Nested/1 1686664.1835746665 ns/iter 1689928.3764987057 ns/iter 1.00
Pointer_Position_Tracker_Get_Deeply_Nested 426.78735786551056 ns/iter 592.080404137277 ns/iter 0.72
JSON_Array_Of_Objects_Unique 391.09280427344333 ns/iter 373.14036373544417 ns/iter 1.05
JSON_Parse_1 7804.648994718264 ns/iter 7849.598531903025 ns/iter 0.99
JSON_Parse_Real 6675.667494102724 ns/iter 6617.862760068885 ns/iter 1.01
JSON_Parse_Decimal 9668.794635239468 ns/iter 11325.842122253773 ns/iter 0.85
JSON_Parse_Schema_ISO_Language 5144154.9701496065 ns/iter 5188992.340740865 ns/iter 0.99
JSON_Parse_Integer 4899.973655323442 ns/iter 4891.134453899053 ns/iter 1.00
JSON_Parse_String_NonSSO_Plain 8663.795343091098 ns/iter 8605.373258227164 ns/iter 1.01
JSON_Parse_String_SSO_Plain 3806.8971261463735 ns/iter 3988.8996028781917 ns/iter 0.95
JSON_Parse_String_Escape_Heavy 19375.799524587703 ns/iter 20840.36094727354 ns/iter 0.93
JSON_Parse_Object_Short_Keys 11542.302547349107 ns/iter 14193.29860483622 ns/iter 0.81
JSON_Parse_Object_Scalar_Properties 5859.765295433941 ns/iter 5865.952817868105 ns/iter 1.00
JSON_Parse_Object_Array_Properties 9524.497519115293 ns/iter 8932.93838290071 ns/iter 1.07
JSON_Parse_Object_Object_Properties 9095.509377392898 ns/iter 9556.976058781705 ns/iter 0.95
JSON_Parse_Nested_Containers 74970.17499731333 ns/iter 73472.58853622468 ns/iter 1.02
JSON_From_String_Copy 20.826493741104372 ns/iter 18.40886587994982 ns/iter 1.13
JSON_From_String_Temporary 16.72446194898763 ns/iter 15.466879642234483 ns/iter 1.08
JSON_Number_To_Double 20.069175265851563 ns/iter 21.928182212249 ns/iter 0.92
JSON_Object_At_Last_Key/8 6.6815628507476 ns/iter 5.928317667554644 ns/iter 1.13
JSON_Object_At_Last_Key/32 23.615144281218242 ns/iter 21.97473446642891 ns/iter 1.07
JSON_Object_At_Last_Key/128 91.11035197231799 ns/iter 91.84509930085528 ns/iter 0.99
JSON_Object_At_Last_Key/512 379.4920291644544 ns/iter 424.91721942626117 ns/iter 0.89
JSON_Fast_Hash_Helm_Chart_Lock 61.24761656547917 ns/iter 66.79635416390428 ns/iter 0.92
JSON_Equality_Helm_Chart_Lock 164.28826714463227 ns/iter 173.10846640561212 ns/iter 0.95
JSON_Divisible_By_Decimal 232.38767754623936 ns/iter 237.59764868729047 ns/iter 0.98
JSON_String_Equal/10 5.320307165118202 ns/iter 5.651714357120202 ns/iter 0.94
JSON_String_Equal/100 6.030327127227101 ns/iter 6.277352397427419 ns/iter 0.96
JSON_String_Equal_Small_By_Perfect_Hash/10 0.7118522633325026 ns/iter 0.6250117153840461 ns/iter 1.14
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 22.15092412567246 ns/iter 25.197482952286386 ns/iter 0.88
JSON_String_Fast_Hash/10 1.0566784394805073 ns/iter 0.9349977314600336 ns/iter 1.13
JSON_String_Fast_Hash/100 1.055200120294725 ns/iter 0.9350878018608797 ns/iter 1.13
JSON_String_Key_Hash/10 1.4096266445079217 ns/iter 1.2527127217554734 ns/iter 1.13
JSON_String_Key_Hash/100 14.757999860278849 ns/iter 12.448014104385 ns/iter 1.19
JSON_Object_Defines_Miss_Same_Length 3.8938029435203245 ns/iter 3.440893834963793 ns/iter 1.13
JSON_Object_Defines_Miss_Too_Small 3.868864820653916 ns/iter 3.42548189451714 ns/iter 1.13
JSON_Object_Defines_Miss_Too_Large 3.5201297172117303 ns/iter 3.113774582932944 ns/iter 1.13
Regex_Lower_S_Or_Upper_S_Asterisk 1.0559741660506572 ns/iter 0.9356740157162162 ns/iter 1.13
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 0.7038765872064621 ns/iter 0.623402231419082 ns/iter 1.13
Regex_Period_Asterisk 0.7034202067158161 ns/iter 0.6259705501725488 ns/iter 1.12
Regex_Group_Period_Asterisk_Group 1.05625309820112 ns/iter 0.9348338076235613 ns/iter 1.13
Regex_Period_Plus 1.0559218760941662 ns/iter 0.9351628562799525 ns/iter 1.13
Regex_Period 0.7036007747370765 ns/iter 0.6238390813565663 ns/iter 1.13
Regex_Caret_Period_Plus_Dollar 0.7040005827381396 ns/iter 0.6234877668345159 ns/iter 1.13
Regex_Caret_Group_Period_Plus_Group_Dollar 1.0546630494950777 ns/iter 0.9343864076419355 ns/iter 1.13
Regex_Caret_Period_Asterisk_Dollar 1.0555338680592994 ns/iter 0.9339523045894068 ns/iter 1.13
Regex_Caret_Group_Period_Asterisk_Group_Dollar 0.7043882090247917 ns/iter 0.6263578515488024 ns/iter 1.12
Regex_Caret_X_Hyphen 4.220004380941901 ns/iter 4.050585845609571 ns/iter 1.04
Regex_Period_Md_Dollar 34.301347599600106 ns/iter 29.802072350843794 ns/iter 1.15
Regex_Caret_Slash_Period_Asterisk 3.8678750587513986 ns/iter 4.359073122865927 ns/iter 0.89
Regex_Caret_Period_Range_Dollar 0.8397717895175058 ns/iter 0.7848542217743092 ns/iter 1.07
Regex_Nested_Backtrack 40.307518548154036 ns/iter 38.66226183355553 ns/iter 1.04

This comment was automatically generated by workflow using github-action-benchmark.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

3 issues found across 11 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread src/core/crypto/crypto_verify_other.cc
Comment thread src/core/crypto/crypto_verify_apple.cc Outdated
Comment thread src/core/crypto/crypto_bignum.h Outdated

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Benchmark (linux/llvm)

Details
Benchmark suite Current: f6f4f59 Previous: 8411f99 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 2.211780783115434 ns/iter 2.461824680338272 ns/iter 0.90
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 2.17954892908446 ns/iter 2.46284090194386 ns/iter 0.88
Regex_Period_Asterisk 2.1798481396940903 ns/iter 2.46092267043048 ns/iter 0.89
Regex_Group_Period_Asterisk_Group 2.180892155831397 ns/iter 2.4668192369716913 ns/iter 0.88
Regex_Period_Plus 2.6185422960928433 ns/iter 3.8665524703149883 ns/iter 0.68
Regex_Period 2.1795003027175714 ns/iter 3.517166936487433 ns/iter 0.62
Regex_Caret_Period_Plus_Dollar 2.1794443326674697 ns/iter 3.5157732220403366 ns/iter 0.62
Regex_Caret_Group_Period_Plus_Group_Dollar 2.4904836673617097 ns/iter 3.867081156232954 ns/iter 0.64
Regex_Caret_Period_Asterisk_Dollar 2.4901150702387245 ns/iter 2.8131506185609365 ns/iter 0.89
Regex_Caret_Group_Period_Asterisk_Group_Dollar 2.186642021669891 ns/iter 2.462282460168908 ns/iter 0.89
Regex_Caret_X_Hyphen 6.562339289879159 ns/iter 6.957287484057991 ns/iter 0.94
Regex_Period_Md_Dollar 27.640588209039194 ns/iter 26.59986914191929 ns/iter 1.04
Regex_Caret_Slash_Period_Asterisk 6.226092031006202 ns/iter 7.670732976436467 ns/iter 0.81
Regex_Caret_Period_Range_Dollar 3.0567517217730114 ns/iter 3.516068701699843 ns/iter 0.87
Regex_Nested_Backtrack 36.964858378003086 ns/iter 37.6181693824287 ns/iter 0.98
JSON_Array_Of_Objects_Unique 478.1574423337202 ns/iter 499.34284369430657 ns/iter 0.96
JSON_Parse_1 4733.092806811578 ns/iter 4558.409577884928 ns/iter 1.04
JSON_Parse_Real 5197.714663796353 ns/iter 5152.058785572606 ns/iter 1.01
JSON_Parse_Decimal 7593.881799640367 ns/iter 7645.749716318562 ns/iter 0.99
JSON_Parse_Schema_ISO_Language 3429816.686274664 ns/iter 3515326.999999747 ns/iter 0.98
JSON_Parse_Integer 3705.4168119506544 ns/iter 3894.6080866162233 ns/iter 0.95
JSON_Parse_String_NonSSO_Plain 4910.903079286034 ns/iter 5007.187382162755 ns/iter 0.98
JSON_Parse_String_SSO_Plain 2668.758217259726 ns/iter 2725.76982716473 ns/iter 0.98
JSON_Parse_String_Escape_Heavy 14391.323752349823 ns/iter 14505.385910288227 ns/iter 0.99
JSON_Parse_Object_Short_Keys 10616.380346225269 ns/iter 7755.037414363814 ns/iter 1.37
JSON_Parse_Object_Scalar_Properties 4129.317748851407 ns/iter 3983.8462858373555 ns/iter 1.04
JSON_Parse_Object_Array_Properties 5357.2394281167635 ns/iter 5496.0532919790085 ns/iter 0.97
JSON_Parse_Object_Object_Properties 5425.340517508477 ns/iter 5605.716199503482 ns/iter 0.97
JSON_Parse_Nested_Containers 44465.100330405905 ns/iter 44881.73720093454 ns/iter 0.99
JSON_From_String_Copy 19.661301189079516 ns/iter 20.414131471944316 ns/iter 0.96
JSON_From_String_Temporary 17.22186459892771 ns/iter 18.35042384824276 ns/iter 0.94
JSON_Number_To_Double 24.047924431393565 ns/iter 22.88286052208179 ns/iter 1.05
JSON_Object_At_Last_Key/8 3.7220815167057335 ns/iter 3.7584189632041007 ns/iter 0.99
JSON_Object_At_Last_Key/32 11.96293626183819 ns/iter 13.055669789290791 ns/iter 0.92
JSON_Object_At_Last_Key/128 48.26965220249817 ns/iter 46.802860863108506 ns/iter 1.03
JSON_Object_At_Last_Key/512 382.44661172002174 ns/iter 366.8723066434402 ns/iter 1.04
JSON_Fast_Hash_Helm_Chart_Lock 64.63778575768629 ns/iter 68.60569978933101 ns/iter 0.94
JSON_Equality_Helm_Chart_Lock 191.90508312015874 ns/iter 188.7892903898888 ns/iter 1.02
JSON_Divisible_By_Decimal 253.7823411722498 ns/iter 257.8363966662517 ns/iter 0.98
JSON_String_Equal/10 6.542153226142671 ns/iter 6.343835062779966 ns/iter 1.03
JSON_String_Equal/100 7.189268983677388 ns/iter 7.064758342499649 ns/iter 1.02
JSON_String_Equal_Small_By_Perfect_Hash/10 0.9352416689496947 ns/iter 1.0547626486292438 ns/iter 0.89
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 14.928225661514098 ns/iter 23.90554396405904 ns/iter 0.62
JSON_String_Fast_Hash/10 2.184054597754384 ns/iter 2.1113387709103018 ns/iter 1.03
JSON_String_Fast_Hash/100 2.1802338310697817 ns/iter 2.1118085623740925 ns/iter 1.03
JSON_String_Key_Hash/10 2.747894969280242 ns/iter 2.463853417212768 ns/iter 1.12
JSON_String_Key_Hash/100 9.100279283659036 ns/iter 8.097103361089149 ns/iter 1.12
JSON_Object_Defines_Miss_Same_Length 2.7263997214069717 ns/iter 2.939854991762456 ns/iter 0.93
JSON_Object_Defines_Miss_Too_Small 3.7365394602723403 ns/iter 4.222277036754933 ns/iter 0.88
JSON_Object_Defines_Miss_Too_Large 2.7578828957575685 ns/iter 3.0051706117930075 ns/iter 0.92
Pointer_Object_Traverse 24.15816907155888 ns/iter 29.504205616949363 ns/iter 0.82
Pointer_Object_Try_Traverse 30.329786809642325 ns/iter 34.168732574313125 ns/iter 0.89
Pointer_Push_Back_Pointer_To_Weak_Pointer 224.7982935617939 ns/iter 186.09150700281072 ns/iter 1.21
Pointer_Walker_Schema_ISO_Language 1812112.6649351607 ns/iter 1825740.0103895233 ns/iter 0.99
Pointer_Maybe_Tracked_Deeply_Nested/0 1284916.055453042 ns/iter 1266181.860253911 ns/iter 1.01
Pointer_Maybe_Tracked_Deeply_Nested/1 1663240.9738716166 ns/iter 2166329.040498406 ns/iter 0.77
Pointer_Position_Tracker_Get_Deeply_Nested 428.8617048364253 ns/iter 744.3026739249203 ns/iter 0.58
URITemplateRouter_Create 32477.430877388222 ns/iter 29958.09541871152 ns/iter 1.08
URITemplateRouter_Match 179.68704792147892 ns/iter 183.06352260900678 ns/iter 0.98
URITemplateRouter_Match_BasePath 212.89569072544683 ns/iter 214.94426352548453 ns/iter 0.99
URITemplateRouterView_Restore 7675.586979859369 ns/iter 8787.18384685525 ns/iter 0.87
URITemplateRouterView_Match 145.18302435737485 ns/iter 146.06182149249614 ns/iter 0.99
URITemplateRouterView_Match_BasePath 164.2187850942115 ns/iter 166.94395436835657 ns/iter 0.98
URITemplateRouterView_Arguments 447.03435493454344 ns/iter 450.2682542000326 ns/iter 0.99
JSONL_Parse_Large 9639753.513888473 ns/iter 9042778.935896678 ns/iter 1.07
JSONL_Parse_Large_GZIP 11226940.080645464 ns/iter 10678164.060605563 ns/iter 1.05
HTML_Build_Table_100000 68395867.69999641 ns/iter 72654000.70000395 ns/iter 0.94
HTML_Render_Table_100000 5225725.390977958 ns/iter 5544116.523809508 ns/iter 0.94
GZIP_Compress_ISO_Language_Set_3_Locations 33467913.61904945 ns/iter 35725685.799997106 ns/iter 0.94
GZIP_Decompress_ISO_Language_Set_3_Locations 4200203.269461471 ns/iter 4296787.527607299 ns/iter 0.98
GZIP_Compress_ISO_Language_Set_3_Schema 1888066.5013478335 ns/iter 2138285.048780531 ns/iter 0.88
GZIP_Decompress_ISO_Language_Set_3_Schema 352206.8801611584 ns/iter 276910.4849236012 ns/iter 1.27

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Benchmark (windows/msvc)

Details
Benchmark suite Current: f6f4f59 Previous: 8411f99 Ratio
Regex_Lower_S_Or_Upper_S_Asterisk 5.0777474118463 ns/iter 2.4648182142860673 ns/iter 2.06
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar 5.187209999999141 ns/iter 2.3988984348225104 ns/iter 2.16
Regex_Period_Asterisk 5.019423214288768 ns/iter 2.453512499999988 ns/iter 2.05
Regex_Group_Period_Asterisk_Group 5.017808081476541 ns/iter 2.3955802221448077 ns/iter 2.09
Regex_Period_Plus 5.021657478798629 ns/iter 2.5163196428569075 ns/iter 2.00
Regex_Period 5.02042000000074 ns/iter 2.6321103771138317 ns/iter 1.91
Regex_Caret_Period_Plus_Dollar 5.0172410000004675 ns/iter 2.5291171428575256 ns/iter 1.98
Regex_Caret_Group_Period_Plus_Group_Dollar 5.016403999998147 ns/iter 2.651640644953235 ns/iter 1.89
Regex_Caret_Period_Asterisk_Dollar 5.017469642857415 ns/iter 2.457796785713689 ns/iter 2.04
Regex_Caret_Group_Period_Asterisk_Group_Dollar 5.014605000001211 ns/iter 2.427318077648505 ns/iter 2.07
Regex_Caret_X_Hyphen 8.156117187501723 ns/iter 5.873552678571465 ns/iter 1.39
Regex_Period_Md_Dollar 44.44911889887582 ns/iter 29.961422789568875 ns/iter 1.48
Regex_Caret_Slash_Period_Asterisk 7.847751116071119 ns/iter 5.87276799999927 ns/iter 1.34
Regex_Caret_Period_Range_Dollar 5.644833000001199 ns/iter 2.6822421627837905 ns/iter 2.10
Regex_Nested_Backtrack 57.68490178569762 ns/iter 40.855106350742304 ns/iter 1.41
JSON_Array_Of_Objects_Unique 477.7671138370866 ns/iter 393.32126116077757 ns/iter 1.21
JSON_Parse_1 8834.023062399145 ns/iter 7615.070312501716 ns/iter 1.16
JSON_Parse_Real 16082.890956867139 ns/iter 12145.544642858598 ns/iter 1.32
JSON_Parse_Decimal 11890.680357144642 ns/iter 9384.339802054978 ns/iter 1.27
JSON_Parse_Schema_ISO_Language 7346352.222222978 ns/iter 7848776.000000726 ns/iter 0.94
JSON_Parse_Integer 6117.650892857032 ns/iter 4448.432513609104 ns/iter 1.38
JSON_Parse_String_NonSSO_Plain 7732.550223213 ns/iter 6464.079464285939 ns/iter 1.20
JSON_Parse_String_SSO_Plain 3635.791111133117 ns/iter 2871.354298502813 ns/iter 1.27
JSON_Parse_String_Escape_Heavy 21556.75624999276 ns/iter 22950.496428571958 ns/iter 0.94
JSON_Parse_Object_Short_Keys 13229.467857148133 ns/iter 9250.239955357185 ns/iter 1.43
JSON_Parse_Object_Scalar_Properties 6806.669642855923 ns/iter 4917.0170000002145 ns/iter 1.38
JSON_Parse_Object_Array_Properties 11577.351562500837 ns/iter 8819.31808035625 ns/iter 1.31
JSON_Parse_Object_Object_Properties 11789.566071424166 ns/iter 8907.395502697453 ns/iter 1.32
JSON_Parse_Nested_Containers 78737.26562499834 ns/iter 65721.2678571487 ns/iter 1.20
JSON_From_String_Copy 63.97466071429595 ns/iter 47.528157310899324 ns/iter 1.35
JSON_From_String_Temporary 58.000250000012386 ns/iter 52.88227678572558 ns/iter 1.10
JSON_Number_To_Double 119.30274999997437 ns/iter 87.9724514297926 ns/iter 1.36
JSON_Object_At_Last_Key/8 7.22068526785437 ns/iter 6.779270089286423 ns/iter 1.07
JSON_Object_At_Last_Key/32 23.238923847789426 ns/iter 20.90932505682177 ns/iter 1.11
JSON_Object_At_Last_Key/128 89.0024290623937 ns/iter 93.06509852388972 ns/iter 0.96
JSON_Object_At_Last_Key/512 422.34292536616846 ns/iter 318.0864732142043 ns/iter 1.33
JSON_Fast_Hash_Helm_Chart_Lock 63.993446428582956 ns/iter 48.37623991911273 ns/iter 1.32
JSON_Equality_Helm_Chart_Lock 303.78922725566855 ns/iter 257.9363571428368 ns/iter 1.18
JSON_Divisible_By_Decimal 295.3437281983932 ns/iter 272.0016039285084 ns/iter 1.09
JSON_String_Equal/10 15.685526785722864 ns/iter 11.144835937500375 ns/iter 1.41
JSON_String_Equal/100 16.96143024355201 ns/iter 13.78054681347762 ns/iter 1.23
JSON_String_Equal_Small_By_Perfect_Hash/10 2.511792499998527 ns/iter 1.1710839062502032 ns/iter 2.14
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 14.189409981300031 ns/iter 9.636133885552043 ns/iter 1.47
JSON_String_Fast_Hash/10 5.0165400000014415 ns/iter 2.350789617912525 ns/iter 2.13
JSON_String_Fast_Hash/100 5.011574107141671 ns/iter 2.346075332203222 ns/iter 2.14
JSON_String_Key_Hash/10 5.331082999996397 ns/iter 2.9176280344116465 ns/iter 1.83
JSON_String_Key_Hash/100 11.862358928575695 ns/iter 7.920676339284886 ns/iter 1.50
JSON_Object_Defines_Miss_Same_Length 5.141318999999385 ns/iter 4.926117969848437 ns/iter 1.04
JSON_Object_Defines_Miss_Too_Small 4.0793945312524365 ns/iter 4.642787287149829 ns/iter 0.88
JSON_Object_Defines_Miss_Too_Large 4.077738444782987 ns/iter 3.5066256864847025 ns/iter 1.16
Pointer_Object_Traverse 67.34024553572178 ns/iter 44.40937616599021 ns/iter 1.52
Pointer_Object_Try_Traverse 67.46545535715346 ns/iter 50.25286104741447 ns/iter 1.34
Pointer_Push_Back_Pointer_To_Weak_Pointer 182.82283590327864 ns/iter 187.19790064267423 ns/iter 0.98
Pointer_Walker_Schema_ISO_Language 6765146.428571305 ns/iter 8026006.6666647205 ns/iter 0.84
Pointer_Maybe_Tracked_Deeply_Nested/0 2393161.4285710827 ns/iter 2201171.2374578896 ns/iter 1.09
Pointer_Maybe_Tracked_Deeply_Nested/1 3597996.2566850977 ns/iter 3990068.604650787 ns/iter 0.90
Pointer_Position_Tracker_Get_Deeply_Nested 524.9745726390257 ns/iter 533.3889285714528 ns/iter 0.98
URITemplateRouter_Create 40266.12500724593 ns/iter 38532.50558036235 ns/iter 1.04
URITemplateRouter_Match 190.63841880703504 ns/iter 225.37005297212187 ns/iter 0.85
URITemplateRouter_Match_BasePath 215.88590625000845 ns/iter 257.2664285714511 ns/iter 0.84
URITemplateRouterView_Restore 33329.02076595978 ns/iter 24215.585763553394 ns/iter 1.38
URITemplateRouterView_Match 155.0935267857767 ns/iter 158.93022321427404 ns/iter 0.98
URITemplateRouterView_Match_BasePath 172.86479059352882 ns/iter 179.04622627543324 ns/iter 0.97
URITemplateRouterView_Arguments 528.8933928572501 ns/iter 439.69631250007524 ns/iter 1.20
JSONL_Parse_Large 32402361.90476069 ns/iter 27224704.0000002 ns/iter 1.19
JSONL_Parse_Large_GZIP 33151057.142861515 ns/iter 27539861.53846619 ns/iter 1.20
HTML_Build_Table_100000 86448228.57143351 ns/iter 93130633.33331685 ns/iter 0.93
HTML_Render_Table_100000 6909525.892857411 ns/iter 12350835.714288775 ns/iter 0.56
GZIP_Compress_ISO_Language_Set_3_Locations 35840868.4210429 ns/iter 33809080.000003174 ns/iter 1.06
GZIP_Decompress_ISO_Language_Set_3_Locations 9336492.000002181 ns/iter 11843198.214287603 ns/iter 0.79
GZIP_Compress_ISO_Language_Set_3_Schema 2086868.4057964801 ns/iter 2026458.8405796634 ns/iter 1.03
GZIP_Decompress_ISO_Language_Set_3_Schema 593803.9285711381 ns/iter 719385.0892857005 ns/iter 0.83

This comment was automatically generated by workflow using github-action-benchmark.

Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
@jviotti jviotti merged commit 27927f6 into main Jun 14, 2026
13 checks passed
@jviotti jviotti deleted the ecdsa-verify branch June 14, 2026 00:11
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.

1 participant