Package playReady (v1.9.3) [up] [repository]

certificate.go

chain.go

common.go

crypto.go

license.go

models_cert.go

models_xmr.go

Index

Constants

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

Functions

func GenerateKey() (*ecdsa.PrivateKey, error)
func ParseRawPrivateKey(data []byte) (*ecdsa.PrivateKey, error)
func PrivateKeyBytes(key *ecdsa.PrivateKey) ([]byte, error)
func UuidOrGuid(data []byte)

Types

type AsymmetricEncryptionType

AsymmetricEncryptionType is used for encrypting the content key

type AsymmetricEncryptionType uint16

Constants

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

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

type BasicInfo

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

type BcertObject

type BcertObject uint16

Constants

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

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

type CertId

type CertId struct {
	Rgb [16]byte
}

Methods

func (c CertId) String() string

type CertKey

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
}

Functions

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

Methods

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

type ChainHeader

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

type ClientId

type ClientId struct {
	Rgb [16]byte
}

Methods

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

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

type EccDeviceKey

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

type FeatureInfo

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

type KeyInfo

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

type KeyMaterial

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
}

Functions

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

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

Methods

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

type ManufacturerInfo

type ManufacturerInfo struct {
	Header              ObjectHeader
	Flags               uint32
	ManufacturerStrings ManufacturerStrings
}

type ManufacturerStrings

type ManufacturerStrings struct {
	ManufacturerName PaddedString
	ModelName        PaddedString
	ModelNumber      PaddedString
}

type ObjectHeader

type ObjectHeader struct {
	Flags    uint16
	Type     uint16
	CbLength uint32
}

type OuterContainer

type OuterContainer struct {
	Valid         bool
	ContainerKeys KeyMaterial
	Signature     Signature
}

type PaddedString

type PaddedString string

Methods

func (ps PaddedString) String() string

type Signature

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

type SignatureData

type SignatureData struct {
	Cb    uint16
	Value []byte
}

type SignatureInfo

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

type UnknownRecord

type UnknownRecord struct {
	Flags uint16
	Value []byte
}

type XmrObject

type XmrObject uint16

Constants

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
)