なぜ WebAssembly 生成を Go にしたのか

思ったより反響があった

まとめ

  • 信頼できる暗号ライブラリがある
  • 自分が TypeScript より Go のほうが書ける
  • Go の Wasm バイナリサイズを気にする必要がない

WebCrypto にない暗号が必要

自社の WebRTC SFU において End to End Encryption (E2EE) をブラウザ上で実現するためにはいくつかの壁がありました。

Signal プロトコルを TypeScript で実装したくなかった

Go の暗号ライブラリを使うと判断したタイミングで Wasm 側で Signal プロトコルの状態管理までしたいと考えていました。

Go の生成した Wasm バイナリサイズを気にする必要がない

WebRTC SFU で利用するため、2.6 MiB (圧縮して 700KiB) のバイナリは正直全く気にならないレベルです。E2EE 自体が CPU を食べますし、音声と映像を送受信するだけで 2.6MiB なんて一瞬です。

雑感

信頼できる暗号ライブラリと慣れている言語での状態管理実装はとてもマッチしました。コード自体もとても短く書けて、テストも充実させられることができました。

おまけ

--

--

Erlang/OTP / 時雨堂 / WebRTC / E2EE / WebTransport

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
V

V

Erlang/OTP / 時雨堂 / WebRTC / E2EE / WebTransport