-
Notifications
You must be signed in to change notification settings - Fork 487
Description
Hi,
Not an actual issue, but not sure where to share this.
For some project, I run libsrtp in WebAssembly (as-is or using openssl as backend), and I wanted to see if we could use WebCrypto (https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) for the AES ciphering.
Main problem is that WebCrypto is asynchronous, so requires the use of await and ASINCIFY, which produces significant overhead + context switching. For 10000 protect/unprotect of packets with random size between 40 and 60, with a 256 bits key, running in node):
- built_in: ~1600ms
- webcrypto: ~1600ms (so yeah, pretty much on par with built_in)
- openssl: ~400ms (4 times faster, pretty much a no brainer)
Results are more or less the same in Firefox or chrome, openssl is 4 to 5 times faster. Science demanded to test, and even if this nothing but a fun experiment, I though this could interest other people.
https://github.com/pbodilis/libsrtp/tree/webcrypto
Most of the "interesting" code is in aes_icm_webcrypto.cc
emscripten version: 4.0.5 (53b38d0c6f9fce1b62c55a8012bc6477f7a42711)