playReady

package
v1.9.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 26, 2026 License: OSL-3.0 Imports: 19 Imported by: 1

README

playReady

When I was in college studying classical music, I heard someone in the practice room next to me playing the same Brahms sonata—but playing it better than me. It was one of those moments where I was like, “Well, I’m not gonna be the best Brahms Interpreter.” But I can be the best interpreter of my music. That’s what I strive for.

Kelly Moran - Helix (Edit)

https://wikipedia.org/wiki/PlayReady

first PlayReady commit was June 3 2025:

https://github.com/mk386/3052_playReady/commit/32dd7a7b7d9459d1c9bdf8f0131c9d46

Microsoft Edge

  1. Settings and more
  2. Settings
  3. Privacy, search, and services
  4. Clear browsing data, Clear browsing data now, Choose what to clear
  5. Time range, all time
  6. Cookies and other site data, Cached images and files
  7. Clear now

then:

  1. edge://flags
  2. search DRM
  3. Widevine DRM
    • disabled
  4. bitmovin.com/demos/drm
  5. DASH
  6. Load

Documentation

Overview

certificate.go

chain.go

common.go

crypto.go

license.go

models_cert.go

models_xmr.go

Index

Constants

View Source
const (
	CertHeaderTag = 0x43455254 // "CERT"
	CertVersion   = 0x00000001
)
View Source
const (
	ChainHeaderTag = 0x43484149 // "CHAI"
	ChainVersion   = 0x00000001
)
View Source
const (
	HeaderLength  = (4 * 2) + 16 // Assuming SIZEOF(DRM_ID) == 16
	MagicConstant = 0x584D5200   // 'XMR\0'
)

Variables

This section is empty.

Functions

func GenerateKey added in v1.8.5

func GenerateKey() (*ecdsa.PrivateKey, error)

func ParseRawPrivateKey added in v1.8.5

func ParseRawPrivateKey(data []byte) (*ecdsa.PrivateKey, error)

func PrivateKeyBytes added in v1.8.1

func PrivateKeyBytes(key *ecdsa.PrivateKey) ([]byte, error)

func UuidOrGuid

func UuidOrGuid(data []byte)

Types

type AsymmetricEncryptionType added in v1.9.0

type AsymmetricEncryptionType uint16

AsymmetricEncryptionType is used for encrypting the content key

const (
	AsymmetricEncryptionTypeInvalid            AsymmetricEncryptionType = 0x0000
	AsymmetricEncryptionTypeRSA1024            AsymmetricEncryptionType = 0x0001
	AsymmetricEncryptionTypeChainedLicense     AsymmetricEncryptionType = 0x0002
	AsymmetricEncryptionTypeECC256             AsymmetricEncryptionType = 0x0003
	AsymmetricEncryptionTypeECC256WithKZ       AsymmetricEncryptionType = 0x0004
	AsymmetricEncryptionTypeTEETransient       AsymmetricEncryptionType = 0x0005
	AsymmetricEncryptionTypeECC256ViaSymmetric AsymmetricEncryptionType = 0x0006
)

type AuxKey

type AuxKey struct {
	Valid       bool
	Entries     uint16
	EntriesList []AuxKeyEntry
}

type AuxKeyEntry added in v1.9.0

type AuxKeyEntry struct {
	Location uint32
	Key      [16]byte
}

type BasicInfo added in v1.9.0

type BasicInfo struct {
	Header         ObjectHeader
	CertificateID  CertId
	SecurityLevel  uint32
	Flags          uint32
	Type           uint32
	DigestValue    [32]byte
	ExpirationDate uint32
	ClientID       ClientId
}

type BcertObject added in v1.9.0

type BcertObject uint16
const (
	BcertObjectBasic            BcertObject = 0x0001
	BcertObjectDomain           BcertObject = 0x0002
	BcertObjectPc               BcertObject = 0x0003
	BcertObjectDevice           BcertObject = 0x0004
	BcertObjectFeature          BcertObject = 0x0005
	BcertObjectKey              BcertObject = 0x0006
	BcertObjectManufacturer     BcertObject = 0x0007
	BcertObjectSignature        BcertObject = 0x0008
	BcertObjectSilverlight      BcertObject = 0x0009
	BcertObjectMetering         BcertObject = 0x000a
	BcertObjectExtDataSignKey   BcertObject = 0x000b
	BcertObjectExtDataContainer BcertObject = 0x000c
	BcertObjectExtDataSignature BcertObject = 0x000d
	BcertObjectExtDataHwid      BcertObject = 0x000e
	BcertObjectServer           BcertObject = 0x000f
	BcertObjectSecurityVersion  BcertObject = 0x0010
	BcertObjectSecurityVersion2 BcertObject = 0x0011
)

Object Types

type CertHeader added in v1.9.0

type CertHeader struct {
	HeaderTag           uint32 // = CertHeaderTag
	Version             uint32 // = CertVersion
	CbCertificate       uint32
	CbCertificateSigned uint32
}

type CertId added in v1.9.0

type CertId struct {
	Rgb [16]byte
}

func (CertId) String added in v1.9.0

func (c CertId) String() string

type CertKey added in v1.9.0

type CertKey struct {
	Type     uint16
	Length   uint16
	Flags    uint32
	Value    []byte
	UsageSet []uint32
}

type Certificate

type Certificate struct {
	Header           CertHeader
	BasicInfo        *BasicInfo
	DeviceInfo       *DeviceInfo
	FeatureInfo      *FeatureInfo
	KeyInfo          *KeyInfo
	ManufacturerInfo *ManufacturerInfo
	SignatureInfo    *SignatureInfo

	RecordOrder    []uint16
	UnknownRecords map[uint16][]UnknownRecord
}

type Chain

type Chain struct {
	Header       ChainHeader
	Certificates []Certificate
}

func ParseChain added in v1.8.6

func ParseChain(data []byte) (*Chain, error)

func (*Chain) Bytes added in v1.8.8

func (c *Chain) Bytes() []byte

func (*Chain) GenerateLeaf added in v1.8.6

func (c *Chain) GenerateLeaf(modelKey, signingKey, encryptKey *ecdsa.PrivateKey) error

func (*Chain) LicenseRequestBytes added in v1.8.9

func (c *Chain) LicenseRequestBytes(signingKey *ecdsa.PrivateKey, kid []byte) ([]byte, error)

type ChainHeader added in v1.9.0

type ChainHeader struct {
	HeaderTag uint32 // = ChainHeaderTag
	Version   uint32 // = ChainVersion
	CbChain   uint32
	Flags     uint32
	Certs     uint32
}

type ClientId added in v1.9.0

type ClientId struct {
	Rgb [16]byte
}

func (ClientId) String added in v1.9.0

func (c ClientId) String() string

type ContentKey

type ContentKey struct {
	Valid                   bool
	GuidKeyID               []byte
	IGuidKeyID              uint32
	SymmetricCipherType     uint16
	KeyEncryptionCipherType uint16
	CBEncryptedKey          uint16
	EncryptedKeyBuffer      []byte
	IEncryptedKey           uint32
}

type DeviceInfo added in v1.9.0

type DeviceInfo struct {
	Header        ObjectHeader
	CbMaxLicense  uint32
	CbMaxHeader   uint32
	MaxChainDepth uint32
}

type EccDeviceKey added in v1.9.0

type EccDeviceKey struct {
	Valid        bool
	EccCurveType uint16
	IKeyData     uint32
	CBKeyData    uint16
	KeyData      []byte
}

type FeatureInfo added in v1.9.0

type FeatureInfo struct {
	Header            ObjectHeader
	NumFeatureEntries uint32
	FeatureSet        []uint32
}

type KeyInfo

type KeyInfo struct {
	Header  ObjectHeader
	NumKeys uint32
	Keys    []CertKey
}

type KeyMaterial added in v1.9.0

type KeyMaterial struct {
	Valid      bool
	ContentKey ContentKey
	ECCKey     EccDeviceKey
	AuxKey     AuxKey
}

type License

type License struct {
	RightsIdBuffer []byte
	IRightsId      uint32
	Version        uint32
	ContainerOuter OuterContainer
	XMRLic         []byte
	CBXMRLic       uint32
}

func ParseLicense added in v1.8.6

func ParseLicense(data []byte) (*License, error)

ParseLicense processes XML license data and returns the parsed License object.

func (*License) Decrypt

func (l *License) Decrypt(encryptKey *ecdsa.PrivateKey) ([]byte, error)

type ManufacturerInfo added in v1.9.0

type ManufacturerInfo struct {
	Header              ObjectHeader
	Flags               uint32
	ManufacturerStrings ManufacturerStrings
}

type ManufacturerStrings added in v1.9.0

type ManufacturerStrings struct {
	ManufacturerName PaddedString
	ModelName        PaddedString
	ModelNumber      PaddedString
}

type ObjectHeader added in v1.9.0

type ObjectHeader struct {
	Flags    uint16
	Type     uint16
	CbLength uint32
}

type OuterContainer added in v1.9.0

type OuterContainer struct {
	Valid         bool
	ContainerKeys KeyMaterial
	Signature     Signature
}

type PaddedString added in v1.9.0

type PaddedString string

func (PaddedString) String added in v1.9.0

func (ps PaddedString) String() string

type Signature added in v1.8.1

type Signature struct {
	Valid           bool
	Type            uint16
	SignatureBuffer []byte
	ISignature      uint32
	CBSignature     uint16
}

type SignatureData added in v1.9.0

type SignatureData struct {
	Cb    uint16
	Value []byte
}

type SignatureInfo added in v1.9.0

type SignatureInfo struct {
	Header          ObjectHeader
	SignatureType   uint16
	SignatureData   SignatureData
	IssuerKeyLength uint32 // bits natively
	IssuerKey       []byte
}

type UnknownRecord added in v1.9.2

type UnknownRecord struct {
	Flags uint16
	Value []byte
}

type XmrObject added in v1.9.0

type XmrObject uint16
const (
	XmrObjectInvalid                                       XmrObject = 0x0000
	XmrObjectOuterContainer                                XmrObject = 0x0001
	XmrObjectGlobalPolicyContainer                         XmrObject = 0x0002
	XmrObjectMinimumEnvironmentObject                      XmrObject = 0x0003
	XmrObjectPlaybackPolicyContainer                       XmrObject = 0x0004
	XmrObjectOutputProtectionObject                        XmrObject = 0x0005
	XmrObjectUplinkKidObject                               XmrObject = 0x0006
	XmrObjectExplicitAnalogVideoOutputProtectionContainer  XmrObject = 0x0007
	XmrObjectAnalogVideoOutputConfigurationObject          XmrObject = 0x0008
	XmrObjectKeyMaterialContainer                          XmrObject = 0x0009
	XmrObjectContentKeyObject                              XmrObject = 0x000A
	XmrObjectSignatureObject                               XmrObject = 0x000B
	XmrObjectSerialNumberObject                            XmrObject = 0x000C
	XmrObjectSettingsObject                                XmrObject = 0x000D
	XmrObjectCopyPolicyContainer                           XmrObject = 0x000E
	XmrObjectAllowPlaylistburnPolicyContainer              XmrObject = 0x000F
	XmrObjectInclusionListObject                           XmrObject = 0x0010
	XmrObjectPriorityObject                                XmrObject = 0x0011
	XmrObjectExpirationObject                              XmrObject = 0x0012
	XmrObjectIssuedateObject                               XmrObject = 0x0013
	XmrObjectExpirationAfterFirstuseObject                 XmrObject = 0x0014
	XmrObjectExpirationAfterFirststoreObject               XmrObject = 0x0015
	XmrObjectMeteringObject                                XmrObject = 0x0016
	XmrObjectPlaycountObject                               XmrObject = 0x0017
	XmrObjectGracePeriodObject                             XmrObject = 0x001A
	XmrObjectCopycountObject                               XmrObject = 0x001B
	XmrObjectCopyProtectionObject                          XmrObject = 0x001C
	XmrObjectPlaylistburnCountObject                       XmrObject = 0x001F
	XmrObjectRevocationInformationVersionObject            XmrObject = 0x0020
	XmrObjectRsaDeviceKeyObject                            XmrObject = 0x0021
	XmrObjectSourceidObject                                XmrObject = 0x0022
	XmrObjectRevocationContainer                           XmrObject = 0x0025
	XmrObjectRsaLicenseGranterKeyObject                    XmrObject = 0x0026
	XmrObjectUseridObject                                  XmrObject = 0x0027
	XmrObjectRestrictedSourceidObject                      XmrObject = 0x0028
	XmrObjectDomainIdObject                                XmrObject = 0x0029
	XmrObjectEccDeviceKeyObject                            XmrObject = 0x002A
	XmrObjectGenerationNumberObject                        XmrObject = 0x002B
	XmrObjectPolicyMetadataObject                          XmrObject = 0x002C
	XmrObjectOptimizedContentKeyObject                     XmrObject = 0x002D
	XmrObjectExplicitDigitalAudioOutputProtectionContainer XmrObject = 0x002E
	XmrObjectRingtonePolicyContainer                       XmrObject = 0x002F
	XmrObjectExpirationAfterFirstplayObject                XmrObject = 0x0030
	XmrObjectDigitalAudioOutputConfigurationObject         XmrObject = 0x0031
	XmrObjectRevocationInformationVersion2Object           XmrObject = 0x0032
	XmrObjectEmbeddingBehaviorObject                       XmrObject = 0x0033
	XmrObjectSecurityLevel                                 XmrObject = 0x0034
	XmrObjectCopyToPcContainer                             XmrObject = 0x0035
	XmrObjectPlayEnablerContainer                          XmrObject = 0x0036
	XmrObjectMoveEnablerObject                             XmrObject = 0x0037
	XmrObjectCopyEnablerContainer                          XmrObject = 0x0038
	XmrObjectPlayEnablerObject                             XmrObject = 0x0039
	XmrObjectCopyEnablerObject                             XmrObject = 0x003A
	XmrObjectUplinkKid2Object                              XmrObject = 0x003B
	XmrObjectCopyPolicy2Container                          XmrObject = 0x003C
	XmrObjectCopycount2Object                              XmrObject = 0x003D
	XmrObjectRingtoneEnablerObject                         XmrObject = 0x003E
	XmrObjectExecutePolicyContainer                        XmrObject = 0x003F
	XmrObjectExecutePolicyObject                           XmrObject = 0x0040
	XmrObjectReadPolicyContainer                           XmrObject = 0x0041
	XmrObjectExtensiblePolicyReserved42                    XmrObject = 0x0042
	XmrObjectExtensiblePolicyReserved43                    XmrObject = 0x0043
	XmrObjectExtensiblePolicyReserved44                    XmrObject = 0x0044
	XmrObjectExtensiblePolicyReserved45                    XmrObject = 0x0045
	XmrObjectExtensiblePolicyReserved46                    XmrObject = 0x0046
	XmrObjectExtensiblePolicyReserved47                    XmrObject = 0x0047
	XmrObjectExtensiblePolicyReserved48                    XmrObject = 0x0048
	XmrObjectExtensiblePolicyReserved49                    XmrObject = 0x0049
	XmrObjectExtensiblePolicyReserved4a                    XmrObject = 0x004A
	XmrObjectExtensiblePolicyReserved4b                    XmrObject = 0x004B
	XmrObjectExtensiblePolicyReserved4c                    XmrObject = 0x004C
	XmrObjectExtensiblePolicyReserved4d                    XmrObject = 0x004D
	XmrObjectExtensiblePolicyReserved4e                    XmrObject = 0x004E
	XmrObjectExtensiblePolicyReserved4f                    XmrObject = 0x004F
	XmrObjectRemovalDateObject                             XmrObject = 0x0050
	XmrObjectAuxKeyObject                                  XmrObject = 0x0051
	XmrObjectUplinkxObject                                 XmrObject = 0x0052
	XmrObjectMaximumDefined                                XmrObject = 0x0052
)

Directories

Path Synopsis
xml/models.go
xml/models.go

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL