MS_PeterOCbor - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- 戻る(CBOR)
- PeterO.Cbor
- Dahomey.Cbor
- .NET Standard 対応の 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 が選ばれることが多い
(FIDO、JWTの 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 等が必要
という住み分けになる。
新規開発では、まず標準ライブラリで足りるかを検討するのが妥当である。
- NuGet Gallery | PeterO.Cbor
https://www.nuget.org/packages/PeterO.Cbor - peteroupc/CBOR:
A C# implementation of Concise Binary Object Representation (RFC 7049).
https://github.com/peteroupc/CBOR
補足: 参考に挙がっている RFC 7049 は、
RFC 8949(2020 年、STD 94)に更新されている。
内容は概ね互換だが、
決定論的エンコーディング(Deterministic Encoding)の規定が
整理された点が実装上は重要である
(署名対象を CBOR で表現する場合、
同じデータが常に同じバイト列になる必要があるため)。
Tags: 移行, IT国際標準, プログラミング, 通信技術, .NET開発, .NET Core