IronCoreLabs / recrypt-wasm-binding

Bindings to be able to use recrypt-rs within a browser via WebAssembly.
GNU Affero General Public License v3.0
18 stars 3 forks source link

asm.js / Internet Explorer compatibility #7

Closed dpoetzsch closed 4 years ago

dpoetzsch commented 5 years ago

Hi,

we still need to support Internet Explorer which does not support WebAssembly.

recrypt with ScalaJS is not an option because decrypting a transformed cipher takes up to 25 seconds with IE.

For a fallback solution I wanted to try asm.js compilation: I changed the target to asmjs-unknown-emscripten. Then I had to change the crate type to lib because cdylib was not supported by asmjs-unknown-emscripten. However, compilation failed:

   Compiling ed25519-dalek v1.0.0-pre.0 (https://github.com/IronCoreLabs/ed25519-dalek?branch=rand-0.6#1132665a)
error[E0277]: the trait bound `rand::distributions::Standard: rand::distributions::Distribution<u128>` is not satisfied
   --> /home/dph/.cargo/git/checkouts/ed25519-dalek-ab972af0b2b0a306/1132665/src/ed25519.rs:984:44
    |
984 |         .map(|_| Scalar::from(thread_rng().gen::<u128>()))
    |                                            ^^^ the trait `rand::distributions::Distribution<u128>` is not implemented for `rand::distributions::Standard`
    |
    = help: the following implementations were found:
              <rand::distributions::Standard as rand::distributions::Distribution<()>>
              <rand::distributions::Standard as rand::distributions::Distribution<(A, B)>>
              <rand::distributions::Standard as rand::distributions::Distribution<(A, B, C)>>
              <rand::distributions::Standard as rand::distributions::Distribution<(A, B, C, D)>>
            and 58 others

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
error: Could not compile `ed25519-dalek`.
warning: build failed, waiting for other jobs to finish...
error: build failed

Do you have any experience with asm.js compilation of recrypt-rs via emscripten?

ernieturner commented 5 years ago

Unfortunately not, I've never done anything with ASMJS. I tried to dig into the error a little bit but I didn't get very far. Given the error it seems like maybe there's a chance it's related to what we were trying to do in #6 by changing ed25519 to use a 32 bit backend. But that's really just a pure guess. I haven't been able to get that change to work via changing crate features and flags, but I suppose one option to try would be to manually compile the ed25519 crate with those flags/features and try to consume it like that somehow.

Just for fun, I also tried running the binaryen tool wasm2js to try and just convert the existing .wasm binary to JS. That "worked" in that it compiled and successfully dumped out a JS file (I didn't try to load that file up in a browser), but the default file was 25MB, so ... ya. I ran it through Closure Compiler and that knocked it down to 6.3MB, but thats still pretty awful.

dpoetzsch commented 5 years ago

I tried wasm2js as well, but I had the strong feeling that the resulting JS file was just a big Uint8Array with the wasm code and some loader functions around it. This is where I stopped looking into that solution.

Anyway, thanks for the pointers so far :)

ernieturner commented 5 years ago

Sorry I can't be of more help on this, but by all means please let me know if you make any progress on it. Supporting IE11 isn't something high on our priority list for now, but that might change so if you end up getting past the error above, I'd love to know where you end up.

ernieturner commented 4 years ago

Closing this as there doesn't seem to be enough interest to get this to work.