Note
このドキュメントは2026-02-27 02:45にPLaMo Translation Modelを使用して自動翻訳されました。
Actorオブジェクトは署名鍵をassertionMethodマルチキーとして表現しなければならない
背景
[FEP-521a][]では、Actorオブジェクトがその署名鍵の公開鍵をassertionMethodプロパティにおいて、所定の形式とid URI形式で構成されるMultikeyオブジェクトとして明示的に記述することを規定している。
本テストについて
このテストケースは、FEP-521aで定義された単一の動作仕様への準拠を検証するためのものである。
対象項目
本テストの対象となるのは、ActivityPub Actorオブジェクトの仕様およびFEP-521a拡張に準拠していると主張するあらゆるデータである。
なお、このテストは直接的にActivityPubサーバーには適用されない。 ActivityPubサーバーは0個以上のActorオブジェクトを提供することができる。 大規模なコミュニティ向けのActivityPubサーバーでは、数百ものActivityPub Actorオブジェクトを提供することがある。 単一の人間を対象としたActivityPubサーバーでは、その人物自身のActivityPub Actorオブジェクトのみを提供する場合もある。
本テストはActorオブジェクトに適用されるが、全てのActorオブジェクトがHTTPS URLで直接参照可能というわけではない。 Actorオブジェクトを指し示すURIは、実際のActorオブジェクトそのものとは異なる。 同一のURLが異なるコンテキストにおいて異なるActorオブジェクトを解決する場合があり、また特定のActorオブジェクトがどの文脈においても単一のURLで普遍的に参照可能とは限らない。
入力要件
本テストには以下の入力仕様が必要である:
actor- 検証対象のActorオブジェクト- データ型: バイナリデータ
- 制約条件
- JSONとして解釈される必要がある。
- JSONとして解析できない場合、テスト結果は
inapplicableとしなければならない。 - ActivityPubコア仕様のテストe7ee491d-88d7-4e67-80c8-f74781bb247cで定義されたActorオブジェクトである必要がある。
- すなわち、受信箱(inbox)と送信箱(outbox)を備えていること。
- Actorオブジェクトでない場合、テスト結果は
inapplicableとしなければならない。 assertionMethod配列を空以外で含む必要がある- この条件を満たさない場合、テスト結果は
inapplicableとしなければならない。
適用範囲
本テストは入力パラメータactorに直接適用される。
actorがActorオブジェクトでない場合、結果は必ずinapplicableとなる。actorがJSONオブジェクトでない場合、結果は必ずinapplicableとなる。actorJSONにtypeプロパティがない場合、結果は必ずinapplicableとなる。actorJSONにassertionMethodプロパティがない場合、結果は必ずinapplicableとなる。
テスト対象項目
assertionMethod配列内の各要素は独立したテスト対象であり、以下ではassertionMethod[x]と表記する- 各要素はJSONオブジェクトである必要があり、この条件を満たさない場合は警告対象となる(適用不可)
Multikeyとして型指定されていない要素は警告対象となる(適用不可)Multikeyとして型指定された各要素は、そのマルチキーとしての有効性に関するテストに合格または不合格となる
期待される結果
assertionMethod[x].id- 文字列でなければならないassertionMethod[x].controller- 存在する場合、assertionMethod配列の親オブジェクト(すなわちActorオブジェクト)のidプロパティと一致しなければならないassertionMethod[x].publicKeyMultibase- base58btcエンコード形式で表現され、適切なプレフィックス(この場合、先頭がz)が付いたバイナリ公開鍵の文字列表現である必要がある
前提条件
1. ActorオブジェクトがFEP定義通りの形式で鍵を表現しているか判定する方法
入力actorがFEPで規定された形式に従って鍵を表現しているかどうかを判定するにあたり、以下の条件を満たす必要がある。
- 入力データは有効なJSONであること
- JSONとして解析した後の入力データにおいて:
assertionMethodプロパティが存在し、0個以上のオブジェクト配列を含むこと- 存在する場合、各要素は以下の要件を満たすこと:
idプロパティを持ち、これが文字列であることtypeプロパティを持ち、これが文字列であることcontrollerプロパティを持ち、これが文字列であること- ...さらに
publicKeyMultibaseプロパティを持ち、これが文字列であること
2. プロパティ値に関する期待値
入力actorが1つ以上の鍵を適切に表現しているかどうかを判定するにあたり、以下の全ての条件を満たさなければならない。
- 入力データは有効なJSONであること
assertionMethod配列内の各要素をJSONとして解析した後:idプロパティを持ち、これがURI形式であることassertionMethod.idプロパティを持ち、これがActorオブジェクト内で一意な文字列であることassertionMethod.typeプロパティを持ち、その値が"Multikey"という文字列か、"Multikey"を含む配列のいずれかであることassertionMethod.controllerプロパティを持ち、その値が親オブジェクトのidプロパティ値と完全に一致することassertionMethod.publicKeyMultibaseプロパティを持ち、これがbase58btcアルファベットに準拠した文字列、すなわち正規表現[1-9A-HJ-NP-Za-km-z]+に一致する値であること
テストケース例
これらは本テストケースの具体的なテスト事例であり、この仕様を実装した場合に他の実装との一貫性が保たれることを確認するために使用できる。
assertionMethod要素の欠落
入力例
actor:
{
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox"
}
テスト結果
- 判定結果:
inapplicable
assertionMethod配列の不正な形式
入力例
actor:
{
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"assertionMethod": "z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2"
}
テスト対象項目
- 該当なし
- 判定結果:
inapplicable、警告(不正なassertionMethod配列)
assertionMethod要素の形式不備
入力例
actor:
{
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"assertionMethod": [{
"inappropriateKey": "z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2"
}]
}
テスト対象項目
- 該当なし
- 判定結果:
inapplicable、警告(不正なassertionMethod要素)
publicKeyMultibase値の形式不備
入力例
actor:
{
"type": "Person",
"inbox": "https://example.com/inbox",
"outbox": "https://example.com/outbox",
"assertionMethod": {[
"id": "https://example.com/#ed25519-key",
"type": "Multikey",
"controller": "https://example.com/",
"publicKeyMultibase": "6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2"
]}
}
テスト対象項目
- actor.assertionMethod[0]
- 判定結果:
inapplicable、警告(不正なassertionMethod要素)
有効なActorオブジェクト例
入力例
-
actor:{ "type": "Person", "inbox": "https://example.com/inbox", "outbox": "https://example.com/outbox", "id": "https://example.com/", "assertionMethod": [ { "id": "https://example.com/#ed25519-key", "type": "Multikey", "controller": "https://https://example.com/", // 不正なURL形式に注意 "publicKeyMultibase": "6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2" } ] }
テスト結果
- 判定結果:
passed
変更履歴
- 2024年6月25日 00:00:00.000Z - 独立したパッケージとして実装し、FEPリポジトリに提出
- 2024年4月11日 21:41:20.725Z - 最初のドラフト作成 by bumblefudge