タグ

ブックマーク / kazu-yamamoto.hatenablog.jp (3)

  • TLSの符号化 - あどけない話

    TLSのデータがどう符号化(シリアライズ)されるかのメモ。簡単にいうと可変長配列だけ先頭に「長さ」が付き、それ以外はそのまま。 基型 たとえば、ProtocolVersionは uint16 と定義されている。 uint16 ProtocolVersion; TLSのバージョン1.3の値は、0x0304であり、そのままネットワークバイトオーダー(ビッグエンディアン)で符号化される。 03 04 # TLS 1.3 固定長配列 固定長配列は、角括弧を使って表す。 たとえば、CipherSuiteが以下のように2バイトで定義されている。 uint8 CipherSuite[2]; TLS_AES_256_GCM_SHA384 は 0x1302 と定義されている。 13 02 # TLS_AES_256_GCM_SHA384 可変長配列 可変長配列は、小なり大なりで表す。小なり大なりの中に、長

    TLSの符号化 - あどけない話
  • GHCのIOマネージャの歴史と僕の苦悩 - あどけない話

    これは、Haskell Advent Calendar 2021 の8日目の記事です。 Haskellのコンパイラとして事実上一択となったGHCには、「軽量スレッド」が実装されています。軽量スレッドは、ネイティブスレッドよりも軽量なスレッドで、他の言語では「グリーンスレッド」とも呼ばれています。Haskellerが並行プログラミングをするときは、軽量スレッドを息を吸うかのように使います。 複数の軽量スレッドの入出力を束ねるのが、IOマネージャです。IOマネージャも単なる軽量スレッドであり、OSから入出力のイベントを受け取り、それぞれの軽量スレッドにイベントを通知します。 軽量スレッド(っぽい)機能を提供する他の言語では、GHCのIOマネージャを参考にしているようです。僕はIOマネージャの開発に深く関わっています。この記事ではIOマネージャの歴史をまとめるとともに、主にmacOSでの実装に関

    GHCのIOマネージャの歴史と僕の苦悩 - あどけない話
  • TLS 1.3 開発日記 その16 Wireshark - あどけない話

    Wiresharkはv2.3.0からTLS 1.3 draft 19に対応する。めでたい。すぐに使いたい人は、Nightlyビルドをとってくるとよい。 追記:v2.5.0rc0-1840-gd35ed012ce から TLS 1.3 draft 22 に対応している。(draft 22 はまだ出てないけど。) 使ってみる ポート13443で起動しているHaskellサーバとpicotlsクライアントの通信をtcpdumpでキャプチャしたファイルを"pico.pcap"とする。これを表示してみよう。 % tshark -dtcp.port==13443,ssl -Y ssl -r pico.pcap -V Secure Sockets Layer TLSv1 Record Layer: Handshake Protocol: Client Hello Content Type: Handsh

    TLS 1.3 開発日記 その16 Wireshark - あどけない話
  • 1