BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Denoが暗号化、メッセージ、ネットワークなどのWeb APIサポートを拡張

Denoが暗号化、メッセージ、ネットワークなどのWeb APIサポートを拡張

ブックマーク

原文(投稿日:2021/09/11)へのリンク

Denoの最近のバージョンでは、暗号化やネットワーク、メッセージに関するWeb APIサポートが強化されている。Deno 1.11ではWeb Crypto APIBroadcastChannelAPIのサポートが導入され、Deno 1.12ではChannel Messaging APIMessageChannelMessagePortに関する部分のサポートが追加された。Deno 1.13はnavigator.hardwareConcurrency APIを実装している。

Deno 1.11ではWeb Crypt APIのサポートが導入された。・Web Crypt APIは、スクリプトで低レベルの暗号プリミティブを使用することで、セキュアなシステムの構築を可能にするインターフェースである。Deno 1.0でもCrypto.getRandomValues()がすでにサポートされていたが、Deno 1.11には、パラメータとして渡されたデータのダイジェストを求めるSubtleCrypto.digest APIが実装されている。

import { encodeToString } from "https://deno.land/std@0.97.0/encoding/hex.ts";
const data = new TextEncoder().encode("Deno 1.11 has been released!");
const digest = await crypto.subtle.digest("sha-256", data.buffer);
console.log("Digest:", encodeToString(new Uint8Array(digest)));

さらにDeno 1.11では、RFC 4122 version 4識別子("6e4decd0-6066-4a25-98e3-0227317cda52"というような)を生成するcrypto.randomUUID APIも実装されている。UUIDメソッドを標準化して、暗号的に安全な疑似乱数ジェネレータの使用を要件とすることは、開発者がセキュリティの落とし穴に陥ることを回避する上でも有用だ。

console.log("Random UUID:", crypto.randomUUID());

さらにDeno 1.12では、generateKeysignverifyというweb crypt APIがサポートされている。

const keyPair = await crypto.subtle.generateKey(
  {
    name: "RSA-PSS",
    modulusLength: 2048,
    publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
    hash: { name: "SHA-256" },
  },
  true,
  ["sign", "verify"],
);

const data = new TextEncoder().encode("hello world");
const signature = await crypto.subtle.sign(
  { name: "RSA-PSS", saltLength: 32 },
  keyPair.privateKey,
  data,
);

const isValid = await crypto.subtle.verify(
  { name: "RSA-PSS", saltLength: 32 },
  keyPair.publicKey,
  signature,
  data,
);

続くDeno 1.13では、crypto.subtle.importKey()crypto.subtle.exportKey()が実装されている。

Deno 1.11は、webワーカにメッセージをブロードキャストするBroadcastChannelブラウザAPIをサポートしているが、リリースノートには、現行の実装に関する制限が警告されている。

今回のリリースでは、BroadcastChannel--unstableとしてプロトタイプサポートしています。BroadcastChannelは、複雑なJavaScriptオブジェクトで構成されたメッセージを、ワーカ間でブロードキャストするために使用することができますが、現時点では同じプロセス内のワーカに制限されています [...]

Deno 1.12ではさらに、Channel Messaging APIがサポートされた。Channel Messaging APIを使用すれば、異なるブラウジングコンテキスト(2つのIFrame、メインフレームとIFrame、SharedWorkerを介した2つのドキュメント、2つのワーカなど)内で動作する2つのスクリプトが、同じドキュメントにアタッチして、直接コミュニケーションしたり、2方向チャネル(あるいはパイプライン)を通じて、それぞれの末端のポートで相互にメッセージを送受信することが可能になる。ただし、現在のDenoの実装では、同じプロセス内のワーカに制限されている。

navigator.hardwareConcurrency APIを使えば、ユーザのコンピュータ上でスレッドを実行可能な論理プロセッサの数(一般には2コアないし4コア)を取得することができる。これにより、コンテキストスイッチを発生させずに、効率的に実行可能なスレッドの数を決定することが可能になる。

最新バージョンのDenoにアップグレードするには、次のコマンドを実行すればよい。

deno upgrade

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT