Fairplay-KSM es una implementación NetCore del protocolo Apple DRM. Según Apple, Fairplay Streaming (FPS) ofrece claves de forma segura para los dispositivos móviles de Apple, Apple TV y Safari on MacOS, que permitirá la reproducción del contenido de video cifrado.
Esta implementación se puede utilizar como expedidor de licencia o depurador SPC-CKC (parcialmente implementado).
Fairplay ha sido empaquetado como paquete Nuget, por lo que solo debe incluir el paquete FoolishTech.FairPlay en su proyecto.
dotnet add package FoolishTech.FairPlay
Antes de usar el módulo, debe solicitar el paquete de implementación a Apple.
Después de eso, puede ejecutar su propio servidor de licencias HTTP. Echa un vistazo a nuestros ejemplos.
using System ;
using System . Text ;
using System . Threading . Tasks ;
using FoolishTech . FairPlay ;
using FoolishTech . FairPlay . Models ;
using FoolishTech . FairPlay . Interfaces ;
using FoolishTech . FairPlay . Exceptions ;
namespace FoolishTech . SimpleExpeditor
{
public class HardcodedKeyLocator : IContentKeyLocator
{
Task < IContentKey > IContentKeyLocator . FetchContentKey ( byte [ ] contentId , object info /* Object passed on GenerateCKC */ )
{
string id = Encoding . UTF8 . GetString ( contentId ) ;
if ( id . Equals ( "twelve" ) ) return Task . FromResult < IContentKey > ( new FPStaticKey ( "3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" , "D5FBD6B82ED93E4EF98AE40931EE33B7" ) ) ;
else throw new ArgumentOutOfRangeException ( nameof ( contentId ) , $ "We can't find key for content id $ { contentId } " ) ;
}
}
public class SimpleFairPlay
{
public async Task < byte [ ] > Resolve ( byte [ ] spc )
{
try {
FPProvider provider = new FPProvider ( new byte [ ] { /* Certificate+PrivKey P12 */ } , "" /* P12 Passphrase */ , new byte [ ] { /* ASK */ } ) ;
IContentKeyLocator locator = new HardcodedKeyLocator ( ) ;
FPServer server = new FPServer ( provider , locator ) ;
return await server . GenerateCKC ( spc , new Object ( ) ) ;
} catch ( FPKeyLocatorException ) {
// Exception throwed on IContentKeyLocator
} catch ( Exception ) {
// Any other exception.
}
return null ;
}
}
} ¡Sí! Solicitud de extracción abierta. :D
Diego Fernández - [email protected]