§ Trust Establishment 0.0.1

Specification Status: Strawman

Latest Draft: identity.foundation/trust-establishment

Editors:
Gabe Cohen (Block)
Daniel Buchner (Block)
Mike Ebert (Indicio)
Sam Curren (Indicio)
Juan Caballero (Centre Consortium)

Contributors:

Participate:
GitHub repo
File a bug
Commit history

§ Abstract

Trust in the decentralized identity space is a problem that many have tried to solve. This specification aims to take a piece of the problem around Trust Establishment: a means by which an Party communicates their assertions for a Topic about a set of Parties. Trust Establishment is intended to be informational, though it can be used to prescribe resulting action. Not all potential usage will be covered in this specification.

§ Status of This Document

Trust Establishment is a STRAWMAN specification under development within the Decentralized Identity Foundation (DIF). It incorporates requirements and learning from related work of many active industry players into a shared specification that meets the collective needs of the community.

This specification is regularly updated to reflect relevant changes, and we encourage active engagement on GitHub and other mediums (e.g. DIF Slack).

§ Terminology

Claim
An assertion made about a Subject. Used as an umbrella term for Credential, Assertion, Attestation, etc.
Verifiable Credential
Refers to the W3C specification of the Verifiable Credentials Data Model.
Topic
A Schema-driven document that gives purpose to a trust document. A topic can be anything: from the tangibly measurable (e.g. success rate of a business process) to the intangible (e.g. how one party feels about another).
Trust Establishment
The process by which a Party makes trust statements about a given Party for a given Topic using Trust Establishment Documents.
Identified Parties
Entities that establish their identity by means of a Decentralized Identifier. Parties are commonly referred to as Issuers, Holders, and Verifiers.
Trust Host
Entities that are responsible for hosting and communicating Trust Establishment Documents.
Issuer
Issuers are entities that issue Claims to Holders, and may be represented as an Identified Party inside of a Trust Establishment Document.
Holder
Holders are entities that submit Claims to Verifiers which contain Parties that may be identified in a Trust Establishment Document to satisfy a Presentation interaction.
Verifier
Verifiers are entities that define what Parties they accept a Credential from in order to proceed with an an interaction.
Presentation
Presentations are a type of verifiable interaction in which one Party submits a Claim or set of Claims to a Verifier.
Decentralized Identifier
A W3C specification describing an identifier that enables verifiable, decentralized digital identity.
Verifiable Interaction
An interaction (e.g. request a claim, present a claim, establish trust) which happens between Parties using Decentralized Identifiers via [DID-CORE].
Schema
A schema is a vocabulary for a Claim. Commonly used schema formats include JSON Schema or JSON Linked Data as surfaced through schema.org.
Credential Type
A Verifiable Credential always has a type property referencing one or more URIs which provide information semantic meaning and classification for the data in a credential.

§ Structure of this Document

This document has two primary sections: In the first we describe the data models for Topics and Trust Establishment Documents. In the second, we cover some usage of Trust Establishment Documents.

Examples in this document use the Verifiable Credentials Data Model [VC-DATA-MODEL] and the [DID-CORE] formats for illustrative purposes only; this specification is intended to support any JSON-serializable Claim format.

§ Data Model

Trust Establishment Documents are objects that articulate information a Party publishes in order to share assertions about a set of DID-identified entities. Issuers, Verifiers, and Holders may find utility in understanding a Party's assertions in making decisions in decentralized web interactions.

There are several document representations aligned around specific organizations of data: Topic Oriented, Entity Oriented, Entity Topic Oriented, and Set Oriented. Each representation is optimized around a particular indexing vector, but all contain the necessary information to produce the base data model for each assertion.

§ Base Model

The following properties are for use at the top-level of any Trust Establishment Document.

There are four additional properties common to all Trust Establishment Documents. Depending on the specific formation, the properties are represented in different locations in the document:

EXAMPLE
{
  "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
  "author": "did:example:alice",
  "created": "2022-04-20T04:20:00Z",
  "version": "0.0.3",
  ...
  // topics, entities, and entries below
}

§ Trust Topic

TODO

what’s a trust topic?

A topic MUST be a JSON Schema document that can be applied to any number of Parties identified in the entries property of a Trust Establishment Document.

Example JSON Object

EXAMPLE
{
  "$id": "https://example.com/trusted-supplier.schema.json",
  "$schema": "https://json-schema.org/draft/2019-09/schema",
  "title": "Supplier Trust",
  "type": "object",
  "properties": {
    "on_time_percentage": {
      "type": "number",
      "min": 0,
      "max": 100
    },
    "goods": {
      "type": "array",
      "items": {
        "format": "string"
      }
    }
  },
  "additionalProperties": false
}

§ Formations

Each formation builds off of the concepts outlined in the Base Model and Trust Topic sections of this specification. JSON Schemas can be found for each formatoin in the JSON Schema section.

§ Formation 1: Topic Oriented

This pulls the topic to the top of the document, and indexes properties by entity, where the entity happens to be DID.

EXAMPLE
{
  "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
  "author": "did:example:alice",
  "created": "2010-01-01T19:23:24Z",
  "version": 2,
  "topic": "https://example.com/trusted-supplier.schema.json",
  "entities": {
    "did:example:bob": {
      "on_time_percentage": 92,
      "goods": ["applewood", "hotel buffet style", "thick cut"]
    },
    "did:example:carol": {
      "on_time_percentage": 74,
      "goods": ["oinkys", "porkys", "wilburs"]
    }
  }
}

§ Formation 2: Entity Oriented

This pulls the entity to the top of the document, and indexes properties by entity, where the entity happens to be a Schema.

EXAMPLE
{
  "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
  "author": "did:example:alice",
  "created": "2010-01-01T19:23:24Z",
  "version": 2,
  "entity": "did:example:bob",
  "topics": {
    "https://example.com/trusted-supplier.schema.json": {
      "on_time_percentage": 92,
      "goods": ["applewood", "hotel buffet style", "thick cut"]
    },
    "https://example.com/other.schema.json": {
      "foo": "bar"
    }
  }
}

§ Formation 3: Entity Topic Oriented

This document specifies neither entity nor topic at the document level, and indexes by entity, then topic.

EXAMPLE
{
  "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
  "author": "did:example:alice",
  "created": "2010-01-01T19:23:24Z",
  "version": 2,
  "topics_by_entity": {
    "did:example:bob": {
      "https://example.com/trusted-supplier.schema.json":{
        "on_time_percentage": 92,
        "goods": ["applewood", "hotel buffet style", "thick cut"]
      },
      "https://example.com/other.schema.json": {
        "foo": "bar"
      }
    },
    "did:example:carol": {
      "https://example.com/trusted-supplier.schema.json":{
        "on_time_percentage": 74,
        "goods": ["oinkys", "porkys", "wilburs"]
      },
      "https://example.com/other.schema.json": {
        "foo": "baz"
      }
    }
  }
}

§ Formation 4: Topic Entity Oriented

This document specifies neither entity nor topic at the document level, and indexes by entity, then topic.

EXAMPLE
{
  "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
  "author": "did:example:alice",
  "created": "2010-01-01T19:23:24Z",
  "version": 2,
  "entities_by_topic": {
    "https://example.com/trusted-supplier.schema.json": {
      "did:example:bob": {
        "on_time_percentage": 92,
        "goods": ["applewood", "hotel buffet style", "thick cut"]
      },
      "did:example:carol": {
        "on_time_percentage": 74,
        "goods": ["oinkys", "porkys", "wilburs"]
      }
    },
    "https://example.com/other.schema.json":{
      "did:example:bob": {
        "foo": "bar"
      },
      "did:example:carol": {
        "foo": "baz"
      }
    }
  }
}

§ Formation 5: Set Oriented

This document specifies neither entity nor topic at the document level, and lists base model structures inside entity.

EXAMPLE
{
  "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
  "author": "did:example:alice",
  "created": "2010-01-01T19:23:24Z",
  "version": 2,
  "set": [
    {
      "topic": "https://example.com/trusted-supplier.schema.json",
      "entity": "did:example:bob",
      "properties": {
        "on_time_percentage": 92,
        "goods": ["applewood", "hotel buffet style", "thick cut"]
      }
    },
    {
      "topic": "https://example.com/other.schema.json",
      "entity": "did:example:bob",
      "properties": {
        "foo": "bar"
      }
    },
    {
      "topic": "https://example.com/trusted-supplier.schema.json",
      "entity": "did:example:carol",
      "properties": {
        "on_time_percentage": 74,
        "goods": ["oinkys", "porkys", "wilburs"]
      }
    },
    {
      "topic": "https://example.com/other.schema.json",
      "entity": "did:example:carol",
      "properties": {
        "foo": "baz"
      }
    }
  ]
}

§ Document Integrity

Trust Establishment Documents or Topics, however provide a number of examples for convenience:

§ Verifiable Credential

Linked Data Proof Verifiable Credential Trust Establishment Document

EXAMPLE
{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://www.w3.org/2018/credentials/examples/v1"
  ],
  "id": "http://example.edu/credentials/3732",
  "type": ["VerifiableCredential", "TrustEstablishment", "TrustedSuppliers"],
  "issuer": "did:example:alice",
  "issuanceDate": "2010-01-01T00:00:00Z",
  "credentialSubject": {
    "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
    "trustEstablishment": { 
    // Is this still needed?
	  "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
	  "author": "did:example:alice",
    // Is this still needed?
	  "created": "2010-01-01T19:23:24Z",
	  "version": "0.0.3",
	  "topic": "https://example.com/trusted-supplier.schema.json",
	  "entries": {
	    "did:example:bob": {
	      "on_time_percentage": 92,
	      "goods": ["applewood", "hotel buffet style", "thick cut"]
	    },
	    "did:example:carol": {
	      "on_time_percentage": 74,
	      "goods": ["oinkys", "porkys", "wilburs"]
	    }
	  }
    }
  },
  "proof": {
  	"type": "Ed25519Signature2020",
    "created": "2021-11-13T18:19:39Z",
    "verificationMethod": "did:example:alice#key-1",
    "proofPurpose": "assertionMethod",
    "proofValue": "z58DAdFfa9SkqZMVPxAQpic7ndSayn1PzZs6ZjWp1CktyGesjuTSwRdoWhAfGFCF5bppETSTojQCrfFPP2oumHKtz"
  }
}

§ JSON Web Token (JWT)

JWT-VC Verifiable Credential Trust Establishment Document

EXAMPLE
{
    "alg": "EdDSA",
    "typ": "JWT",
    "kid": "did:alice#keys-1"
}
EXAMPLE
{
  "sub": "did:example:alice",
  "jti": "http://example.com/credentials/3732",
  "iss": "did:alice#keys-1",
  "nbf": 1541493724,
  "iat": 1541493724,
  "exp": 1573029723,
  "nonce": "660!6345FSer",
  "vc": {
    "@context": [
      "https://www.w3.org/2018/credentials/v1",
      "https://www.w3.org/2018/credentials/examples/v1"
    ],
    "type": [
      "VerifiableCredential",
      "TrustEstablishment",
      "TrustedSuppliers"
    ],
    "credentialSubject": {
      "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
      "trustEstablishment": {
        "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
        "author": "did:example:alice",
        "created": "2010-01-01T19:23:24Z",
        "version": "0.0.3",
        "topic": "https://example.com/trusted-supplier.schema.json",
        "entries": {
          "did:example:bob": {
            "on_time_percentage": 92,
            "goods": [
              "applewood",
              "hotel buffet style",
              "thick cut"
            ]
          },
          "did:example:carol": {
            "on_time_percentage": 74,
            "goods": [
              "oinkys",
              "porkys",
              "wilburs"
            ]
          }
        }
      }
    }
  }
}
NOTE

The third component of the JWT, the signature in JWS form is not shown. You can imagine it being a “third” component of the JWT above.

§ Appendix

§ Topic Registry

TODO

Create a place for topics to be registered.

§ JSON Schema

The Trust Establishment specification adopts and defines the following JSON Schema data format and processing variant, which implementers MUST support for evaluation of the portions of the specification that call for JSON Schema validation: https://json-schema.org/draft/2020-12/json-schema-core.html

§ Topic Oriented

EXAMPLE
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Trust Establishment - Topic Oriented",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "author": {
      "type": "string"
    },
    "created": {
      "type": "string",
      "format": "date-time"
    },
    "version": {
      "type": "integer"
    },
    "topic": {
      "type": "string",
      "format": "uri"
    },
    "entities": {
      "type": "object",
      "patternProperties": {
        "\\w+": {
          "type": "object"
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "id",
    "author",
    "created",
    "version",
    "topic",
    "entities"
  ],
  "additionalProperties": false
}

§ Entity Oriented

EXAMPLE
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Trust Establishment - Topic Oriented",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "author": {
      "type": "string"
    },
    "created": {
      "type": "string",
      "format": "date-time"
    },
    "version": {
      "type": "integer"
    },
    "entity": {
      "type": "string"
    },
    "topics": {
      "type": "object",
      "patternProperties": {
        "\\w+:(\/?\/?)[^\\s]+": {
          "type": "object"
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "id",
    "author",
    "created",
    "version",
    "entity",
    "topics"
  ],
  "additionalProperties": false
}

§ Entity Topic Oriented

EXAMPLE
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Trust Establishment - Topic Oriented",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "author": {
      "type": "string"
    },
    "created": {
      "type": "string",
      "format": "date-time"
    },
    "version": {
      "type": "integer"
    },
    "topics_by_entity": {
      "type": "object",
      "patternProperties": {
        "\\w+": {
          "type": "object"
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "id",
    "author",
    "created",
    "version",
    "topics_by_entity"
  ],
  "additionalProperties": false
}

§ Topic Entity Oriented

EXAMPLE
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Trust Establishment - Topic Oriented",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "author": {
      "type": "string"
    },
    "created": {
      "type": "string",
      "format": "date-time"
    },
    "version": {
      "type": "integer"
    },
    "entities_by_topic": {
      "type": "object",
      "patternProperties": {
        "\\w+:(\/?\/?)[^\\s]+": {
          "type": "object"
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "id",
    "author",
    "created",
    "version",
    "entities_by_topic"
  ],
  "additionalProperties": false
}

§ Set Oriented

EXAMPLE
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Trust Establishment - Topic Oriented",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "author": {
      "type": "string"
    },
    "created": {
      "type": "string",
      "format": "date-time"
    },
    "version": {
      "type": "integer"
    },
    "set": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "topic": {
            "type": "string",
            "format": "uri"
          },
          "entity": {
            "type": "string"
          },
          "properties": {
            "type": "object"
          }
        },
        "required": [
          "topic",
          "entity",
          "properties"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "id",
    "author",
    "created",
    "version",
    "set"
  ],
  "additionalProperties": false
}

§ Examples

§ Topic Oriented

Example #1 - Sentiment Declaration

Sentiment Declaration is a usage of the Trust Establishment data model that provides a means by which an Entity communicates their sentiment (what they may feel or think) for a Topic about a set of Parties. Sentiment Declaration is intended to be informational, and the prescription of any resulting actions taken based on the contents of the document are out of scope of this specification.

As an example, we think of “My Faves”. The year is 2007 and your pink-colored mobile carrier announces a program to let you make unlimited calls and texts to five contacts of your choosing: your faves. Using the Trust Establishment specification, you create a JSON Schema Topic that supports you enumerating your faves.

EXAMPLE
{
  "$id": "https://example.com/my-faves.schema.json",
  "$schema": "https://json-schema.org/draft/2019-09/schema",
  "title": "My Faves",
  "type": "object",
  "properties": {
    "faves": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"
      },
      "minItems": 1,
      "maxItems": 5
    }
  },
  "required": ["faves"],
  "additionalProperties": false
}

Next, you take the “My Faves” schema, and put it in a Trust Establishment document, which you can share with your mobile carrier, or post it on social media if you’re feeling bold.

EXAMPLE
{
  "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
  "author": "did:example:alice",
  "created": "2010-01-01T19:23:24Z",
  "version": "0.0.1",
  "topic": "https://example.com/my-faves.schema.json",
  "entries": {
    "did:phone:1234567890": {
      "faves": ["1-888-867-5309", "1-603-413-4124", "1-605-475-6960", "1-605-475-6968", "911"]
    }
  }
}

You may imagine your carrier similarly using the “My Faves” schema to enumerate favs for all customers, each a separate entity within the Trust Establishment Document.

Example #2 – Trusted Issuers

A common usage of Trust Establishment Documents is by a Verifier wishing to provide information on which Credentials they accept from which Issuers. Using Verifiable Credentials we know that a given Credential may have a signle schema, but also may reference multiple schemas or type documents for the same Credential. Using a “Trusted Issuers for Credential” topic, we can fulfill this use case.

EXAMPLE
{
  "$id": "https://example.com/trusted-issuers-for-credential.schema.json",
  "$schema": "https://json-schema.org/draft/2019-09/schema",
  "title": "Trusted Issuers for Credential",
  "type": "object",
  "properties": {
    "credential": {
      "type": "array",
      "items": {
        "type": "string",
      },
      "minItems": 1
    }
  },
  "required": ["credential"],
  "additionalProperties": false
}

Next, you take the “Trusted Issuers For Credential” schema, and put it in a Trust Establishment document, which you can share with any relying party aiming to seek your verification services.

EXAMPLE
{
  "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
  "author": "did:example:alice",
  "created": "2010-01-01T19:23:24Z",
  "version": "0.0.1",
  "topic": "https://example.com/trusted-issuers-for-credential.schema.json",
  "entries": {
    "did:example:bob": {
      "credentials": ["example.com/dank-meme.schema.json", "example.com/danker-meme.schema.json"]
    },
    "did:example:carol": {
       "credentials": ["example.com/dankest-meme.schema.json", "example.com/dankest-meme.schema.json.ld"]
    }
  }
}

§ Entity Oriented

Example 1 - Multiple Topics for Entity

Alice is publishing a list about herself, sharing information that could be used in interactions with her.

EXAMPLE
{
"id": "32f54163-7166-48f1-93d8-ff217bdb0653",
"author": "did:example:alice",
"created": "2010-01-01T19:23:24Z",
"version": 3,
"entity": "did:example:alice",
"topics": {
  "https://example.com/favorite-restaurants.schema.json": {
    "names": [
      "Web 5 Guys",
      "Slow Foods Inc",
      "Burger Queen"
    ]
  },
  "https://example.com/favorite-clothes-colors.schema.json": {
    "clothes": {
      "shirts": [
        "blue",
        "green",
        "purple"
      ],
      "pants": [
        "yellow",
        "turqouise"
      ],
      "socks": [
        "white"
      ]
    }
  }
}
}

§ Entity Topic Oriented

Example 1 - Government Flight Regulations

In this example, the government identified by did:example:government is authoring a document showing for which airlines (the given entities) the qualifications needed for each of their pilots: information about a requisite flight school and medical report.

EXAMPLE
{
"id": "32f54163-7166-48f1-93d8-ff217bdb0653",
"author": "did:example:government",
"created": "2010-01-01T19:23:24Z",
"version": 5,
"topics_by_entity": {
  "did:example:airline-1": {
    "https://example.com/trusted-flight-schools.schema.json": {
      "pass_rate": 88,
      "names": [
        "Top Gun Academy",
        "Jim's Good Enough School"
      ]
    },
    "https://example.com/medical-reports.schema.json": {
      "state_certification": [
        "California",
        "Arizona",
        "Nevada"
      ],
      "institutions": [
        "99% Germ Free Facility",
        "Southern California's Finest Seal Hospital"
      ]
    }
  },
  "did:example:airline-2": {
    "https://example.com/trusted-flight-schools.schema.json": {
      "pass_rate": 88,
      "names": [
        "Winging It",
        "Pretty Fly",
        "Parachutes Not Included"
      ]
    },
    "https://example.com/medical-reports.schema.json": {
      "state_certification": [
        "New York",
        "Colorado",
        "Vermont"
      ],
      "institutions": [
        "Swiss Cheese No More",
        "We Take Your Blood"
      ]
    }
  }
}
}

§ Topic Entity Oriented

Example 1 - Accepted University Degrees

In this example, the author is an employer identified by did:example:employer-1 who is listing which degrees they are willing to accept for applicants from a set of universities.

EXAMPLE
{
"id": "32f54163-7166-48f1-93d8-ff217bdb0653",
"author": "did:example:employer-1",
"created": "2010-01-01T19:23:24Z",
"version": 44,
"entities_by_topic": {
  "https://example.com/trusted-bachelors-degrees.schema.json": {
    "did:example:university-1": {
      "fields_of_study": ["Aerospace Engineering", "Scandanavian Literature", "Australian Sign Language"]
    },
    "did:example:univeristy-2": {
      "fields_of_study": ["Philosophy", "Computer Science", "Mechanical Engineering"]
    }
  },
  "https://example.com/trusted-masters-degrees.schema.json":{
    "did:example:univeristy-1": {
      "fields_of_study": ["Art History", "Philosophy", "Computer Science"]
    },
    "did:example:university-3": {
      "fields_of_study": ["Film", "Computer Engineering", "Mathematics"]
    }
  }
}
}

§ Set Oriented

Example 1 - Pizza Store

A piza store, identified by did:example:round-n-proud is publishing a list of their chosen vendors, including which products they are willing to purchase for each vendor. This is useful for the vendors, and fans of Round n’ Proud everywhere that want to try to re-create the pizza at home.

EXAMPLE
{
"id": "32f54163-7166-48f1-93d8-ff217bdb0653",
"author": "did:example:round-n-proud",
"created": "2010-01-01T19:23:24Z",
"version": 2,
"set": [
  {
    "topic": "https://example.com/trusted-pepperoni-supplier.schema.json",
    "entity": "did:example:joes-salamis",
    "properties": {
      "names": ["Pure Pork", "Pork & Beef Mix", "Cured To Perfection"]
    }
  },
  {
    "topic": "https://example.com/trusted-cheese-supplier.schema.json",
    "entity": "did:example:xtracheese",
    "properties": {
      "mozzarella": ["Buffalo", "Stracciatella", "Nodini"],
      "ricotta": ["Smoked", "Sheep's Milk", "Fresh"]
    }
  },
  {
    "topic": "https://example.com/trusted-tomato-supplier.schema.json",
    "entity": "did:example:offthevine",
    "properties": {
      "tomatos": ["Cherry", "Roma", "Campari", "Better Boy"],
    }
  }
]
}

§ References

JSON Schema

JSON-LD

Linked Data Proofs

DID-CORE
Decentralized Identifiers (DIDs) v1.0. Drummond Reed; Manu Sporny; Markus Sabadello; Dave Longley; Christopher Allen; Jonathan Holt; 2020-09-07. Status: WD.
VC-DATA-MODEL
Verifiable Credentials Data Model 1.0. Manu Sporny; Grant Noble; Dave Longley; Daniel Burnett; Brent Zundel; 2019-11-19. Status: REC.

Table of Contents