Esempio n. 1
0
INT CL_ThreadUnix::GetPriorityExt()
{
    int Priority = 0;
#if defined(_FOR_ANDROID_) || defined (_LINUX)
    Priority = getpriority(PRIO_PROCESS, m_dwThreadID);

#elif defined(_FOR_APPLE_)
    if (m_dwThreadID != (DWORD)gettid()) return -1;
    double macproi = getCurrentThreadPriority();
    Priority =  255 - macproi * (255 - 249);
#endif

    return Priority;
}
Esempio n. 2
0
/**
 * low level API to decrypt Ekpubrx(Km)
 */
static H2status decryptEKpubKm(unsigned char *message)
{
	H2status stat = H2_OK;
	static H2_AKENoStoredEkmPayLoad no_stored_km_payload;
	
	memset(&no_stored_km_payload,0x00,sizeof(H2_AKENoStoredEkmPayLoad));
	
    ALOGI("hdcp decryptEKpubKm start\n");
    
    #ifdef DECRYPT_NO_INTERRUPT
	int orgThreadPriority=0;
	int orgThreadPolicy=0;

	// - adjust thread policy and priority
	getCurrentThreadPriority(&orgThreadPolicy,&orgThreadPriority);
	changeSelfThreadParam(SCHED_FIFO,16);
    #endif

	memcpy( no_stored_km_payload.EKpub_Km, message, EKPUBKM_SIZE );    
	stat = hdcp2_SetEKpubKm( no_stored_km_payload.EKpub_Km );
	
	#ifdef DECRYPT_NO_INTERRUPT
	// - restore thread policy and priority
	changeSelfThreadParam(orgThreadPolicy,orgThreadPriority);
    #endif

	if ( stat != H2_OK )
    {
	   ALOGI("hdcp decryptEKpubKm 1mDecryption of EKpubKm failed!\n");
	}
	// km is existence
	gKmExistence=1;
	
	
	ALOGI("hdcp decryptEKpubKm 1mDecryption of EKpubKm success!\n");
	return stat;
}
Esempio n. 3
0
int h2MessageParse( unsigned char *message, unsigned int length )
{
   int rc = 0;
   do
   {

      if ( NULL == message )
      {
         break;
      }
      unsigned char msgId = *message;
      
      switch( msgId )
      {
         /**
          * TX -> RX messages
          */
         case AKE_INIT:
            rc = processAkeInit( message, length );
            break;
         case AKE_NO_STORED_EKM:
         {
#ifdef DECRYPT_NO_INTERRUPT
	        int orgThreadPriority=0;
	        int orgThreadPolicy=0;

	        // - adjust thread policy and priority
	        getCurrentThreadPriority(&orgThreadPolicy,&orgThreadPriority);
	        changeSelfThreadParam(SCHED_FIFO,16);
            #endif
            rc = processAkeNoStoredEkm( message, length );
            /** Start pairing process */
            gPairingState = PAIRING_SEND_HPRIME;
#ifdef DECRYPT_NO_INTERRUPT
	        // - restore thread policy and priority
	        changeSelfThreadParam(orgThreadPolicy,orgThreadPriority);
            #endif
}
            break;
         case AKE_STORED_EKM:
            rc = processAkeStoredEkm( message, length );
            gPairingState = PAIRING_SEND_HPRIME;
            break;
         case LC_INIT:
         {   
        	 // 1. Transmitter supports pre-computation && is HDCP 2.1 or HDCP 2.2
        	 // 2. Receiver supports pre-computation && is HDCP 2.1 or HDCP 2.2
			if (((getPreComputation()&0x01) == H2_LC_INIT_PRECOMPUTATION) && ((getSelfPreComputation()&0x01) == H2_LC_INIT_PRECOMPUTATION) && IsCapHDCP2Plus())
			{
				DPRINT(("\033[0;31;31m[DHDCP] process LC_Init, PreCompute mode [%s %d]\033[m\n",
						__FILE__,
						__LINE__ ));
				rc = processLcInitWithPreComputation( message, length );
			}
			else
			{
				DPRINT(("\033[0;31;31m[DHDCP] process LC_Init, None-preCompute mode [%s %d]\033[m\n",
						__FILE__,
						__LINE__ ));
				rc = processLcInitWithoutPreComputation( message, length );
			}
		}	
        break;
        case RTT_CHALLENGE:
            rc = processRTTChallenge( message, length );	
        break;   
        case AKE_TRANSMITTER_INFO: //for hdcp2.1
            rc = processAkeTransmitterInfo( message, length );
        break;
        case SKE_SEND_EKS:
            rc = processSkeSendEks( message, length );
        break;
        case REP_AUTH_SEND_ACK:
		 	rc = processRepAuthSendAck(message, length);
        break;
        case REP_AUTH_STREAM_MANAGE:		 	
		 	rc = processRepAuthStreamManage(message, length);
        break;
            /**
             * RX -> TX messages. We should not receive these!
             */
        case AKE_SEND_CERT:
        case AKE_SEND_RRX:
        case AKE_SEND_H_PRIME:
        case AKE_SEND_PAIRING_INFO:
        case LC_SEND_L_PRIME:
        case REP_AUTH_SEND_RXID_LIST:
           ALOGI("TX received on RX!\n");
           /* TODO: Error handling? */
           rc = -1;
        break;
        default:
            ALOGI("HDCP received unknown message\n");
            rc = -2;
        break;
      }
   } while( 0 );

   return rc;
}
Esempio n. 4
0
int h2MessagePoll( unsigned char *message, unsigned int length )
{
    int rc = 0;
    
    switch ( gPairingState )
    {
        case PAIRING_INIT:
        break;
        case PAIRING_SEND_HPRIME:
        {                 
            DPRINT(("\033[0;31;31m[DHDCP] PAIRING_SEND_HPRIME start\033[m\n")); 
        
            #ifdef SPEED_UP_NO_STORED_KM
            if(gKmExistence==0)
            {
                DPRINT(("\033[0;31;31m[DHDCP] decrypt Ekpubrx(km) before AKE_Send_H_prime\033[m\n"));
                H2status stat = decryptEKpubKm(tmpKpubkmBuf);
            
                if ( stat != H2_OK )
                {
                    printf("Decryption of EKpubKm failed!\r\n");
                    return STATUS_ERROR_DECRYPTION_FAILED;        /** No pending message. Timeout will notify TX of an error */
                }
            }
            #endif
        
            H2uint8 Kd_tmp[KD_SIZE]={0};		 	
            static H2_AKESendHprimePayLoad sendPayload;
            
            memset(&sendPayload,0x00,sizeof(sendPayload));
            /** Make sure there's room for the outgoing message */
            if ( length < AKE_MSG_SEND_HPRIME_SIZE )
            {
                ALOGI("buffer too small for AKE Send Hprime message!\r\n");
                rc = STATUS_ERROR_OUTGOING_MSG_TOO_LARGE;
                
                DPRINT(("\033[0;31;31m[DHDCP] PAIRING_SEND_HPRIME end STATUS_ERROR_OUTGOING_MSG_TOO_LARGE\033[m\n")); 
                break;
            }
            
            int modeHDCP22=0;
		
	        #ifdef DECRYPT_NO_INTERRUPT                                                      		
	        int orgThreadPriority=0;                                               		
	        int orgThreadPolicy=0;                                                 		
                                                                                 		
	        // - adjust thread policy and priority                                 		
	        getCurrentThreadPriority(&orgThreadPolicy,&orgThreadPriority);         		
	        changeSelfThreadParam(SCHED_FIFO,16);                                  		
            #endif                                                               		
				
            if(getHDCPCAP()==CAP_HDCP2_2 && getRTKHDCPSTR()->transmitterVersion==0x2)
            modeHDCP22=1;
          	
            // Verbose debug print during QA phase
            DPRINT(("\033[0;31;31m[DHDCP] Process compute H' HDCPCap=%d TransmitterVersion=%d protocalBit=%d modeHDCP22=%d [%s %d]\033[m\n",
          		        getHDCPCAP(),
          		        getRTKHDCPSTR()->transmitterVersion,
          		        hdcp22_GetProtocolDescriptorBit(),
          		        modeHDCP22,
          		        __FILE__,
          		        __LINE__ ));
            /* Gen Kd = dkey0 || dkey1 */
            RCP_HDCP2_GenKd(SRAM_KM_ENTRY, SessionSecrets.rtx, SessionSecrets.rRx,SessionSecrets.rn, SRAM_KD_ENTRY,modeHDCP22);
            spu_GetKD(Kd_tmp);
            
            /** Compute HPrime from Kd, RTX, and Repeater */
            /** Copy Hprime into the outgoing message */
            if(getHDCPCAP()==CAP_HDCP2_2 && getRTKHDCPSTR()->transmitterVersion==0x2 && hdcp22_GetProtocolDescriptorBit()==0x1)
            {
                ALOGI( "h2MessagePoll[%d] 2.2 case!\r\n",__LINE__);
                DPRINT(("\033[0;31;31m[DHDCP] do Compute_Hprime_22\033[m\n"));
                Compute_Hprime_22(Kd_tmp,SessionSecrets.rtx,HDCP_REPEATER,
                		getRTKHDCPSTR()->receiverVersion,getRTKHDCPSTR()->receiverCapMask,
                		getRTKHDCPSTR()->transmitterVersion,getRTKHDCPSTR()->transmitterCapMask,
                		SessionSecrets.hPrime);
            }
            else
            {
            	ALOGI( "h2MessagePoll[%d] 2.0 2.1 case!\r\n",__LINE__);
            	DPRINT(("\033[0;31;31m[DHDCP] do Compute_Hprime\033[m\n"));
            	Compute_Hprime(Kd_tmp, SessionSecrets.rtx, HDCP_REPEATER, SessionSecrets.hPrime);
            }
            memset(Kd_tmp, 0x00, KD_SIZE);
          
            #ifdef DECRYPT_NO_INTERRUPT                                 
	        // - restore thread policy and priority                       
	        changeSelfThreadParam(orgThreadPolicy,orgThreadPriority);     
            #endif     
            /** Copy Hprime into the outgoing message */
            hdcp2_GethPrime( sendPayload.Hprime, sizeof(sendPayload.Hprime));
            
            /** Pack the message for transmission */
                 message[0] = AKE_SEND_H_PRIME;
          	 memcpy( message+1, sendPayload.Hprime, H_SIZE );
            
            /** Signal that a message is waiting */
            rc = STATUS_OK_PENDING_MSG;
            gPairingState = (gbNoStoredEkm ? PAIRING_SEND_PAIRING_INFO : PAIRING_INIT );
                
            DPRINT(("\033[0;31;31m[DHDCP] PAIRING_SEND_HPRIME end  ok\033[m\n"));    
        }
        break;
        case PAIRING_SEND_PAIRING_INFO:
        {
           
              ALOGI( " hdcp processRepAuthSendAck PAIRING_SEND_PAIRING_INFOS!\r\n" ); 
              static H2_AKESendPairingInfoPayLoad sendPayload;
        
			  #ifdef DECRYPT_NO_INTERRUPT                                    
			  int orgThreadPriority=0;                                         
              int orgThreadPolicy=0;                                           
                                                                 
              // - adjust thread policy and priority                           
              getCurrentThreadPriority(&orgThreadPolicy,&orgThreadPriority);   
              changeSelfThreadParam(SCHED_FIFO,16);                            
              #endif               
              hdcp2_GetEKhKm( sendPayload.Ekh_Km, sizeof( sendPayload.Ekh_Km ));
        
              #ifdef DECRYPT_NO_INTERRUPT                                    
	          // - restore thread policy and priority                          
	          changeSelfThreadParam(orgThreadPolicy,orgThreadPriority);        
              #endif         
              message[0] = AKE_SEND_PAIRING_INFO;
              memcpy( message+1, sendPayload.Ekh_Km, EKHKM_SIZE ); /** Copy rrx */
              length = EKHKM_SIZE + 1;
        
              gPairingState = PAIRING_INIT;
              rc = STATUS_OK_PENDING_MSG;
              DPRINT(("\033[0;31;31m[DHDCP] PAIRING_SEND_PAIRING_INFO end  ok\033[m\n")); 
        }
        break;
        default:
           gPairingState = PAIRING_INIT;
        break;
    }
    return rc;
}