Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
crypto algo
(version: 0)
Comparing performance of:
CTR vs CBC vs GCM vs RSA
Created:
2 years ago
by:
Guest
Jump to the latest result
Script Preparation code:
const key = 'izgzge46767rfede4h'; // counter will be needed for decryption const counter = window.crypto.getRandomValues(new Uint8Array(16)); const tests = { "AES-CTR": encryptMessage("AES-CTR"), "AES-CBC": encryptMessage("AES-CBC"), "AES-GCM": encryptMessage("AES-GCM"), "RSA-OAEP": encryptMessage("RSA-OAEP"), }; function encryptMessage(type) { let encoded = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin feugiat libero metus, a blandit eros fermentum id. Vivamus turpis quam, fermentum nec egestas et, auctor at sem. Fusce vitae maximus nibh. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam commodo ligula massa, eget vehicula libero pharetra sed. Morbi ex lectus, ornare sit amet dictum vel, porta in nisl. Vestibulum vel iaculis risus. Mauris eros lorem, fermentum vel augue ac, lacinia venenatis dui. Maecenas vel ligula nec risus sagittis semper sed ac erat. Pellentesque pharetra egestas mattis. Vivamus lacus magna, pharetra non tristique vitae, dignissim id lacus. Nunc vel aliquam ante.Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse potenti. Donec tempor posuere eros ut volutpat. Duis neque justo, rhoncus vitae purus quis, sodales accumsan justo. Quisque non ex eros. Sed vulputate metus at risus vulputate, vitae iaculis dolor posuere. Maecenas eu eleifend magna. Nullam nec tellus ex. Morbi ultricies efficitur elementum. Nunc volutpat, elit sit amet rhoncus luctus, est enim molestie nunc, sit amet pretium metus metus ac arcu. Morbi ac justo sed diam imperdiet faucibus. Etiam mollis vitae magna quis rutrum. Integer nec velit viverra ex volutpat mattis.Donec at luctus velit, non sollicitudin orci. Vivamus quis dictum purus. Morbi at lectus cursus, rutrum lectus et, molestie nisl. Nunc felis elit, semper ut erat ac, ultricies lacinia magna. Suspendisse laoreet laoreet dui, id malesuada risus. Nunc condimentum non lacus nec venenatis. Praesent nec metus erat. Morbi ex risus, mattis aliquet arcu a, hendrerit eleifend nisl. Proin blandit odio ac ipsum accumsan, quis elementum lacus porttitor. Donec consequat scelerisque orci, a auctor lacus mollis non.Morbi dapibus convallis finibus. Maecenas quis hendrerit odio, vitae pretium turpis. Mauris vehicula rhoncus justo non auctor. Pellentesque iaculis vestibulum neque, at vehicula libero convallis in. Sed sapien neque, luctus ac libero ullamcorper, euismod blandit nulla. Proin auctor erat eu vehicula rutrum. Fusce interdum sodales est, eu scelerisque ante sollicitudin imperdiet. Phasellus venenatis sem vel nisi malesuada, sit amet viverra ipsum pellentesque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam consectetur ex ac erat vestibulum vestibulum. Mauris nec quam sodales, iaculis sem non, posuere elit. Donec quis blandit nulla. Proin convallis varius mi nec ultrices. Ut pretium, libero ut pellentesque semper, risus tortor tempus nunc, eget laoreet justo tortor rutrum risus. Mauris pellentesque sem et metus porttitor, ut varius diam dapibus.Sed vulputate dui at ligula pulvinar, imperdiet ornare nisl hendrerit. Integer dignissim diam quam, vitae pellentesque nibh pulvinar sed. Phasellus ac justo ac nisi cursus ultrices. Aenean volutpat nunc id ligula auctor auctor. Mauris cursus odio eget eros iaculis, at luctus magna commodo. Etiam quis ligula quis erat egestas faucibus a nec tortor. Cras sit amet pulvinar lorem. Vestibulum fermentum, magna in tempor cursus, nisi risus luctus lectus, vel fermentum dolor magna ut lorem. Praesent ac nunc lacinia, convallis magna in, rhoncus turpis. Integer ut consequat massa. Vivamus at sapien eros. Curabitur ex massa, efficitur quis feugiat ornare, porttitor non dui. Nunc quis tempus tortor, sed aliquet sapien. Ut risus mauris, elementum non tincidunt in, efficitur et urna. Praesent maximus odio quis enim faucibus, at vulputate nisi convallis.'; return window.crypto.subtle.encrypt( { name: type, counter, length: 64, }, key, encoded, ); } function decryptMessage(type) { return window.crypto.subtle.decrypt( { name: type, counter, length: 64 }, key, tests[type], ); }
Tests:
CTR
decryptMessage("AES-CTR");
CBC
decryptMessage("AES-CBC");
GCM
decryptMessage("AES-GCM");
RSA
decryptMessage("RSA-OAEP");
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (4)
Previous results
Fork
Test case name
Result
CTR
CBC
GCM
RSA
Fastest:
N/A
Slowest:
N/A
Latest run results:
Run details:
(Test run date:
2 years ago
)
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Browser/OS:
Chrome 121 on Mac OS X 10.15.7
View result in a separate tab
Embed
Embed Benchmark Result
Test name
Executions per second
CTR
252597.2 Ops/sec
CBC
240416.4 Ops/sec
GCM
238994.6 Ops/sec
RSA
238465.8 Ops/sec
Autogenerated LLM Summary
(model
llama3.2:3b
, generated one year ago):
Based on the provided code, I will provide a possible solution. The `decryptMessage` function uses Web Cryptography API to decrypt messages. The `key`, `encoded`, and `tests[type]` variables are not defined in this snippet, so I assume they are defined elsewhere in the codebase. To optimize the performance of the `decryptMessage` function, we can consider the following optimizations: 1. **Cache frequently accessed test cases**: If certain test cases are more frequently executed than others, it might be beneficial to cache their results or store them in a map for faster lookup. 2. **Optimize the `window.crypto.subtle.decrypt` method**: The Web Cryptography API's `decrypt` method has various parameters, such as the initialization vector (IV) and padding scheme. Optimizing these parameters can lead to better performance. 3. **Use SIMD instructions (if available)**: Modern CPU architectures support SIMD (Single Instruction, Multiple Data) instructions, which can accelerate certain cryptographic operations. Here's an example of how we could optimize the `decryptMessage` function: ```javascript function decryptMessage(type) { const testCases = new Map([ ['AES-CTR', 'testAesCtr'], ['AES-CBC', 'testAesCbc'], ['AES-GCM', 'testAesGcm'], ['RSA-OAEP', 'testRsa'] ]); if (!testCases.has(type)) { throw new Error(`Unsupported test case: ${type}`); } const testFunction = testCases.get(type); return window.crypto.subtle.decrypt( { name: type, counter, length: 64 }, key, testFunction() ); } ``` In this optimized version: * We define a `Map` called `testCases` that stores the test cases as keys and their corresponding functions as values. * We use the `has` method to check if the specified test case is supported. If not, we throw an error. * We retrieve the test function for the specified test case from the map using the `get` method. * We call the `testFunction()` to execute the corresponding decryption algorithm. Note that this optimization assumes that the test functions are defined elsewhere in the codebase and are accessible via a global object (e.g., `window.crypto.subtle.testAesCtr`). You may need to adjust the implementation based on your specific requirements.
Related benchmarks:
Web Encrypt API (Encrypt)
Web Encrypt API (Decrypt)
web-crypto
sha256-js twin
Comments
Confirm delete:
Do you really want to delete benchmark?