Skip to Content
Nextra 4.0 is released 🎉
InfrastructureCDNFilesTSS

TSS

The TSS file is the universal source of trust for PlayStation Home.

It is the first file fetched from the CDN at startup, and the one that defines the entire environment the client should connect to.

Domains

  • secure.$(env).homeps3.online.scee.com
    • The string $(env) gets replaced at runtime by the Clients, based on the currently active environment. For example, this could be cprod, cqa-a, cpreprod, etc…

Contents

  • (Optional) Maintenance mode flag
  • (Optional) Scene ID redirects
  • SHA-1 of downloaded files to validate against.
    • Only very specific files can be inserted here, as the game will ignore unexpected entries.
  • DNS Overrides
    • These allow the game to outright refuse to connect if any of the matching subnets are detected as the system’s DNS.
    • Additionally, upon error the game would report to Sony the player using a specific blacklisted DNS.
  • CDN URL and Base64-encoded AES key to decrypt the SHARC Archives.
  • RabbitMQ connection
  • SSFW connection
  • …

Definitions

VERSION (Presumed to be required)

prepared_database (it’s assumed to load the HCDB upon download)

ScreenContentRoot

secure_lua_object_resources_root (Needed for objects that rely on 0000.xml)

datacapture (Commented out)

SHA1

SceneRedirect

AdminObjectId

DNSOverride

useregionalserviceids

maxserviceids

commerce

secure_commerce_points

XSD schema

Below is the XSD document for the TSS structure.

<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <!-- Root element XML --> <xs:element name="XML"> <xs:complexType> <xs:sequence> <xs:element ref="VERSION"/> <xs:element ref="SHA1" maxOccurs="unbounded"/> <xs:element ref="objects"/> <xs:element ref="SecureContentRoot"/> <xs:element ref="ScreenContentRoot"/> <xs:element ref="secure_lua_object_resources_root"/> <xs:element ref="profanityfilter"/> <xs:element ref="SceneRedirect" maxOccurs="unbounded"/> <xs:element ref="AdminObjectId"/> <xs:element ref="DNSOverride" maxOccurs="unbounded"/> <xs:element ref="useregionalserviceids"/> <xs:element ref="maxserviceids"/> <xs:element ref="commerce"/> <xs:element ref="connection"/> <xs:element ref="disablebar"/> <xs:element ref="messageQueue"/> <xs:element ref="ssfw"/> <xs:element ref="global"/> <xs:element ref="agerestrictions"/> <xs:element ref="REGIONINFO"/> </xs:sequence> </xs:complexType> </xs:element> <!-- VERSION element --> <xs:element name="VERSION" type="xs:string"/> <!-- SHA1 element --> <xs:element name="SHA1"> <xs:complexType> <xs:attribute name="file" type="xs:string" use="required"/> <xs:attribute name="digest" type="SHA1DigestType" use="required"/> </xs:complexType> </xs:element> <!-- objects element --> <xs:element name="objects"> <xs:complexType> <xs:sequence> <xs:element ref="prepared_database"/> </xs:sequence> </xs:complexType> </xs:element> <!-- prepared_database element --> <xs:element name="prepared_database"> <xs:complexType/> </xs:element> <!-- URL elements --> <xs:element name="SecureContentRoot" type="URLWithVariablesType"/> <xs:element name="ScreenContentRoot" type="URLWithVariablesType"/> <xs:element name="secure_lua_object_resources_root" type="URLWithVariablesType"/> <!-- profanityfilter element --> <xs:element name="profanityfilter"> <xs:complexType> <xs:attribute name="apiKey" type="UUIDType" use="required"/> <xs:attribute name="forceOffline" type="xs:boolean" use="required"/> <xs:attribute name="privateKey" type="xs:string" use="required"/> <xs:attribute name="updaterOverrideUrl" type="xs:string" use="required"/> </xs:complexType> </xs:element> <!-- SceneRedirect element --> <xs:element name="SceneRedirect"> <xs:complexType> <xs:attribute name="dest" type="xs:string" use="required"/> <xs:attribute name="region" type="TerritoryType" use="required"/> <xs:attribute name="src" type="xs:string" use="required"/> </xs:complexType> </xs:element> <!-- AdminObjectId element --> <xs:element name="AdminObjectId" type="AdminObjectIdType"/> <!-- DNSOverride element --> <xs:element name="DNSOverride"> <xs:complexType> <xs:simpleContent> <xs:extension base="IPRangeType"> <xs:attribute name="action" type="DNSActionType" use="required"/> <xs:attribute name="report" type="OnOffType" use="required"/> <xs:attribute name="clearcache" type="OnOffType" use="optional"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <!-- Simple elements --> <xs:element name="useregionalserviceids"> <xs:complexType/> </xs:element> <xs:element name="maxserviceids" type="xs:positiveInteger"/> <xs:element name="disablebar"> <xs:complexType/> </xs:element> <!-- commerce element --> <xs:element name="commerce"> <xs:complexType> <xs:sequence> <xs:element ref="secure_commerce_points"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="secure_commerce_points"> <xs:complexType/> </xs:element> <!-- connection element --> <xs:element name="connection"> <xs:complexType> <xs:sequence> <xs:element ref="contentserver"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="contentserver"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:anyURI"> <xs:attribute name="key" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <!-- messageQueue element --> <xs:element name="messageQueue"> <xs:complexType> <xs:sequence> <xs:element ref="connect"/> <xs:element ref="client" maxOccurs="unbounded"/> <xs:element ref="subscribe"/> <xs:element ref="post" maxOccurs="unbounded"/> <xs:element ref="events"/> <xs:element ref="content"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="connect"> <xs:complexType> <xs:attribute name="address" type="xs:string" use="required"/> <xs:attribute name="port" type="xs:positiveInteger" use="required"/> <xs:attribute name="login" type="xs:string" use="required"/> <xs:attribute name="password" type="xs:string" use="required"/> <xs:attribute name="vhost" type="xs:string" use="required"/> <xs:attribute name="isCritical" type="xs:boolean" use="required"/> </xs:complexType> </xs:element> <xs:element name="client" type="xs:string"/> <xs:element name="subscribe" type="xs:string"/> <xs:element name="post" type="xs:string"/> <xs:element name="events"> <xs:complexType> <xs:sequence> <xs:element ref="enabled"/> <xs:element ref="destination"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="enabled" type="xs:boolean"/> <xs:element name="destination"> <xs:complexType> <xs:sequence> <xs:element ref="default"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="default" type="xs:string"/> <xs:element name="content"> <xs:complexType> <xs:sequence> <xs:element ref="message"/> <xs:element ref="score"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="message" type="xs:string"/> <xs:element name="score" type="xs:string"/> <!-- ssfw element (Server Services Framework) --> <xs:element name="ssfw"> <xs:complexType> <xs:sequence> <xs:element ref="identity"/> <xs:element ref="rewards"/> <xs:element ref="clan"/> <xs:element ref="savedata"/> <xs:element ref="avatar"/> <xs:element ref="layout"/> <xs:element ref="trunks"/> <xs:element ref="avatarlayout"/> <xs:element ref="structured"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identity"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:anyURI"> <xs:attribute name="ttl" type="xs:positiveInteger" use="required"/> <xs:attribute name="secret" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="rewards" type="xs:anyURI"/> <xs:element name="clan" type="xs:anyURI"/> <xs:element name="savedata" type="xs:anyURI"/> <xs:element name="avatar" type="xs:anyURI"/> <xs:element name="layout" type="xs:anyURI"/> <xs:element name="trunks" type="xs:anyURI"/> <xs:element name="avatarlayout" type="xs:anyURI"/> <xs:element name="structured" type="xs:anyURI"/> <!-- global element --> <xs:element name="global"> <xs:complexType> <xs:sequence> <xs:element ref="mode" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="mode"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:nonNegativeInteger"> <xs:attribute name="SCEA" type="xs:nonNegativeInteger" use="required"/> <xs:attribute name="SCEJ" type="xs:nonNegativeInteger" use="required"/> <xs:attribute name="SCEE" type="xs:nonNegativeInteger" use="required"/> <xs:attribute name="SCEAsia" type="xs:nonNegativeInteger" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <!-- agerestrictions element --> <xs:element name="agerestrictions"> <xs:complexType> <xs:sequence> <xs:element ref="age" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="age"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:nonNegativeInteger"> <xs:attribute name="region" type="RegionCodeType" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <!-- REGIONINFO element --> <xs:element name="REGIONINFO"> <xs:complexType> <xs:sequence> <xs:element ref="INSTANCE_TYPES"/> <xs:element ref="REGION_TYPES"/> <xs:element ref="REGION_MAP"/> <xs:element ref="LOCALISATIONS"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="INSTANCE_TYPES"> <xs:complexType> <xs:sequence> <xs:element name="TYPE" type="InstanceTypeType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="REGION_TYPES"> <xs:complexType> <xs:sequence> <xs:element name="TYPE" type="RegionTypeType" maxOccurs="32"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="REGION_MAP"> <xs:complexType> <xs:sequence> <xs:element ref="MAP" maxOccurs="64"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="MAP"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="code" type="LanguageRegionCodeType" use="required"/> <xs:attribute name="loc" type="xs:nonNegativeInteger" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="LOCALISATIONS"> <xs:complexType> <xs:sequence> <xs:element ref="REF" maxOccurs="32"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="REF"> <xs:complexType> <xs:simpleContent> <xs:extension base="LanguageRegionCodeType"> <xs:attribute name="language" type="LanguageWildcardType" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <!-- Custom types for specific patterns --> <!-- SHA1 digest: exactly 40 uppercase hexadecimal characters --> <xs:simpleType name="SHA1DigestType"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9A-Fa-f]{40}"/> </xs:restriction> </xs:simpleType> <!-- URL with variable substitution --> <xs:simpleType name="URLWithVariablesType"> <xs:restriction base="xs:string"> <xs:pattern value="https?://.*"/> </xs:restriction> </xs:simpleType> <!-- UUID pattern --> <xs:simpleType name="UUIDType"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"/> </xs:restriction> </xs:simpleType> <!-- AdminObjectId pattern --> <xs:simpleType name="AdminObjectIdType"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9A-F]{8}-[0-9A-F]{8}-[0-9A-F]{8}-[0-9A-F]{8}"/> </xs:restriction> </xs:simpleType> <!-- IP Range pattern (CIDR notation) --> <xs:simpleType name="IPRangeType"> <xs:restriction base="xs:string"> <xs:pattern value="(\d{1,3}\.){3}\d{1,3}/\d{1,2}"/> </xs:restriction> </xs:simpleType> <!-- DNS Action enumeration --> <xs:simpleType name="DNSActionType"> <xs:restriction base="xs:string"> <xs:enumeration value="allow"/> <xs:enumeration value="error"/> </xs:restriction> </xs:simpleType> <!-- On/Off enumeration --> <xs:simpleType name="OnOffType"> <xs:restriction base="xs:string"> <xs:enumeration value="on"/> <xs:enumeration value="off"/> </xs:restriction> </xs:simpleType> <!-- Territory enumeration --> <xs:simpleType name="TerritoryType"> <xs:restriction base="xs:string"> <xs:enumeration value="SCEA"/> <xs:enumeration value="SCEE"/> <xs:enumeration value="SCEJ"/> <xs:enumeration value="SCEAsia"/> </xs:restriction> </xs:simpleType> <!-- Region code enumeration --> <xs:simpleType name="RegionCodeType"> <xs:restriction base="xs:string"> <xs:enumeration value="scea"/> <xs:enumeration value="scee"/> <xs:enumeration value="scej"/> <xs:enumeration value="sceasia"/> <xs:enumeration value="scek"/> </xs:restriction> </xs:simpleType> <!-- Language-region code pattern --> <xs:simpleType name="LanguageRegionCodeType"> <xs:restriction base="xs:string"> <xs:pattern value="[a-z]{2}-[A-Z]{2}"/> </xs:restriction> </xs:simpleType> <!-- Language wildcard pattern --> <xs:simpleType name="LanguageWildcardType"> <xs:restriction base="xs:string"> <xs:pattern value="([a-z]{2}|\*)-([A-Z]{2}|\*)"/> </xs:restriction> </xs:simpleType> <!-- Instance type for INSTANCE_TYPES --> <xs:complexType name="InstanceTypeType"> <xs:attribute name="name" type="xs:string" use="required"/> </xs:complexType> <!-- Region type for REGION_TYPES --> <xs:complexType name="RegionTypeType"> <xs:simpleContent> <xs:extension base="LanguageRegionCodeType"> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="territory" type="TerritoryType" use="required"/> <xs:attribute name="instance" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:schema>

Last updated on