HDCP

1. 概述

HDCP(High-bandwidth Digital Content Protection):高带宽数字内容保护技术。它可以提供很高的带宽,无损地传输数字视频和音频信号。为了保证HDMI或者DVI传输的高清晰信号不会被非法录制,就出现了HDCP技术。当用户进行非法复制时,该技术会进行干扰,降低复制出来的影像的质量,从而对内容进行保护。在拿到raw/original key后,此Key可以通过SstarHDCPTool加密并烧录到指定存储区。

2. SstarHDCPTool HDCP key 加密&烧录

由于HDCP key 的解析格式要求,请使用最新版本SstarHDCPTool(http://hcgit04-master:9080/#/admin/projects/sigmastar/android/tools 中可以git到sstar_hdcp_tool)。主要介绍Fastboot 模式下 HDCP key 的烧录方式。

2.1. 系统要求

硬件:USB 连接线、SigmaStar 开发板

软件:SstarHDCPTool 软件包

系统:Fastboot 模式

2.2. HDCP key 加密

  • Raw key说明

    Bytes(4+308n) 说明
    First 4 bytes(0-3) 1:transmitter 
    2:receiver 如“0x00 0x00 0x00 0x02”,表示HDCP Key for Rx
    8 bytes(4-11) Key selection vector(KSV). Only first 5 bytes are valid
    280 bytes(12-291) Device key(raw key)
    20 bytes(292-311) SHA-1 hash value
  • HDCP Tool encode key

    1. 选择 HDCP SOURCE 文件。

    2. 选择ENCODE KEY(加密后文件存储位置),建议使用数字命名,e.g.000000.bin。

    3. 选择key version(v1.4 / v 2.2),HeaderSize和KeySize无需修改。

    4. Cut可以选择keys in one file,输入密钥(16 bytes),之后点击start,获得加密后的key。

  • One key one file 加密格式说明

    Header AES key HDCP key
    16 bytes 16 bytes Encode key size(offset0、1)
    0-1: Encription key size
    2-3:Version
    4-15:Reserve
    16-31:AES encryption key HDCP1.4: [32:319] Encription Key
    (KSV in first 5bytes after decryption)
    HDCP2.2: [32:943] Encription Key
  • 烧录步骤

    1. 选择ENCODE KEY(加密后文件)作为HDCP KEY FILE路径。(格式不正确的话将提示错误)

    2. 选择对应的HDCP key version(1.4 / 2.2),Connect Type选择FastBoot,单次烧录的话HDCP Key Index 保持为0。

    3. 开发板进入fastboot 模式,点击烧录,即将HDCP KEY烧录到指定存储区(过程中串口会弹出KEY内容)。

3. HDCP v1.4 解析相关API

3.1. hdmirx_hdcp_read

  • 说明

    支持优先到指定裸分区读取HDCP data,若裸分区不存在该data再到指定分区读取hdcp14.bin文件,依据加密格式解析,对帧头信息进行验证并解密出HDCP key。

  • 定义

    static int hdmirx_hdcp_read(uint8_t* hdcp)
    
  • 形参

    参数名称 描述 输入/输出
    hdcp 存放解密后的hdcp key指针 输入
  • 返回值

    • 0:成功。

    • -1:失败。

  • 依赖

    • 头文件:openssl/aes.h, peripherals.h

    • 库文件:libcrypto.so, libperipherals.so

3.2. MI_HDMIRX_LoadHdcp

  • 说明

    加载 HDMI RX HDCP Key。

  • 语法

    MI_S32 MI_HDMIRX_LoadHdcp(MI_HDMIRX_DeviceId_e ePortId, MI_HDMIRX_Hdcp_t *pstHdcp);
    
  • 形参

    参数名称 描述 输入/输出
    ePortId 端口 ID, 对应HDMI 输入端口 ID 输入
    pstHdcp HDMI RX hdcp key 输入
  • 返回值

    • MI_SUCCESS(0):成功。

    • 非0:失败。

  • 依赖

    • 头文件:mi_hdmirx.h

    • 库文件:libmi_hdmirx.a / libmi_hdmirx.so