MS_PeterOCbor - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

PeterO.Cbor

概要

詳細

(記載なし)

移行メモ: 原典の「概要」は 2 項目めが空(- のみ)で、
「詳細」節も見出しのみで本文が存在しない。

補足(PeterO.Cbor の位置付け): .NET で CBOR を扱う
主なライブラリは 2 つあり、本 Wiki はその両方を項目として持っている。
選択の基準を整理しておく。

PeterO.Cbor Dahomey.Cbor
設計思想 CBOR のデータ モデルを直接扱う POCO とのシリアライズ(JSON 感覚)
中心となる型 CBORObject(動的に組み立てる) 任意のクラス(属性で制御)
仕様への忠実さ 高い(タグ、半精度浮動小数、ビッグ整数まで) 実用範囲に絞る
性能 普通 高速Span<T> ベース)
JSON との相互変換 組み込みToJSONString() 等) あり
依存 単体 単体

使い分けは概ね次のようになる。

状況 選択
仕様に厳密に従う必要がある(COSE、CWT、WebAuthn) PeterO.Cbor
既存の POCO をそのまま CBOR に載せたい Dahomey.Cbor
標準ライブラリで足りる System.Formats.Cbor(後述)

特に WebAuthn / FIDO2 の実装では
アテステーション オブジェクトが CBOR であり、
タグや正規化(Canonical CBOR)の扱いが要求されるため、
PeterO.Cbor が選ばれることが多い
FIDOJWTの CBOR 版である CWT も同様)。

補足(最新化:.NET 標準に CBOR が入った): .NET 5 以降、
System.Formats.Cbor
が標準ライブラリとして提供されている。

var writer = new CborWriter();
writer.WriteStartMap(2);
writer.WriteTextString("name");  writer.WriteTextString("value");
writer.WriteTextString("count"); writer.WriteInt32(42);
writer.WriteEndMap();
byte[] encoded = writer.Encode();
System.Formats.Cbor サードパーティ製
依存 不要(BCL) NuGet
抽象度 低い(リーダー/ライター) 高い(オブジェクト マッピング)
用途 プロトコル実装、低レベル制御 アプリのシリアライズ

標準ライブラリはリーダー/ライター API のみであり、
オブジェクトのシリアライズ機能は無い
したがって、

  • プロトコルを実装する(COSE、CWT、WebAuthn) → 標準ライブラリで足りる
  • POCO を丸ごと変換したいDahomey.Cbor 等が必要

という住み分けになる。
新規開発では、まず標準ライブラリで足りるかを検討するのが妥当である。

参考

補足: 参考に挙がっている RFC 7049 は、
RFC 8949(2020 年、STD 94)に更新されている。
内容は概ね互換だが、
決定論的エンコーディング(Deterministic Encoding)の規定が
整理された点が実装上は重要である
(署名対象を CBOR で表現する場合、
同じデータが常に同じバイト列になる必要があるため)。


Tags: 移行, IT国際標準, プログラミング, 通信技術, .NET開発, .NET Core

⚠️ **GitHub.com Fallback** ⚠️