示例#1
0
static jboolean setHDMIDRMKey(JNIEnv* env, jobject clazz) {
    bool ret = false;	
#if defined (MTK_HDMI_SUPPORT)
#if defined (MTK_DRM_KEY_MNG_SUPPORT)


    ALOGI("[HDMI] JNI MtkHdmiManagerService.setHDMIDRMKey end\n");
	hdmi_hdcp_drmkey hKey;
    int i;
    int ret_temp = 0;
    unsigned char* enckbdrm = NULL;
    unsigned int inlength = 0;


    ret_temp = get_encrypt_drmkey(HDCP_1X_TX_ID,&enckbdrm,&inlength);    
        if(ret_temp !=0 ) {
            ALOGI("[HDMI] JNI setHDMIDRMKey get_encrypt_drmkey failed %d", ret_temp);
            return ret;
        }
    
	memcpy(hKey.u1Hdcpkey, (unsigned char*)enckbdrm, sizeof(hKey.u1Hdcpkey));
    for (i=0; i<sizeof(hKey.u1Hdcpkey); i++) {
        ALOGI("[HDMI] JNI setHDMIDRMKey key[%d] = %x\n", i, hKey.u1Hdcpkey[i]);
    }
	ret = hdmi_ioctl(MTK_HDMI_HDCP_KEY, (long)&hKey);
    ALOGI("[HDMI] JNI setHDMIDRMKey ret = %d\n",ret);
    free_encrypt_drmkey(enckbdrm);
#endif
#endif
	ALOGI("[HDMI] JNI MtkHdmiManagerService.setHDMIDRMKey end\n");
	return ret;
}
int main(void)
{
    DRMKeyID id = WIDEVINE_ID;
    int ret = 0;
    unsigned char* enckbdrm = NULL;
    unsigned int inlength = 0;
    unsigned char* kbdrm = NULL;
    unsigned int outlength = 0;
    for(; id<DRM_KEY_MAX; id++) 
    {
        ret = get_encrypt_drmkey(id,&enckbdrm,&inlength);
        if(ret!=0) {
            printf("KeyID:%d get fail!\n",id);
            continue;
        }
        
        /*don't call decrypt_drmkey and free_drmkey while TEE is enable*/
        ret = decrypt_drmkey (enckbdrm,inlength, &kbdrm, &outlength);
        if(ret!=0) {
            printf("KeyID:%d decrypt fail!\n",id);
            continue;
        }
        free_drmkey (kbdrm);
        /*don't call decrypt_drmkey and free_drmkey while TEE is enable*/
        
        free_encrypt_drmkey (enckbdrm);
    }
    return 0;
}