Beispiel #1
0
static void
xmitFile(char *filename) //IN : file to be transmitted.
{
   FILE *fp;
   size_t readLen;
   char buf[BUF_BASE64_SIZE];

   /*
    * We have a unique identifier saying that this is guest dumping the
    * output of logs and not any other logging information from the guest.
    */
   char base64B[BUF_BASE64_SIZE * 2] = ">";
   char *base64Buf = base64B + 1;

   if (!(fp = fopen(filename, "rb"))) {
      Warning("Unable to open file %s with errno %d\n", filename, errno);
      exit(-1);
   }

   //XXX the format below is hardcoded and used by extractFile
   RpcVMX_Log("%s: %s: ver - %d", LOG_START_MARK, filename, LOG_VERSION);
   while ((readLen = fread(buf, 1, sizeof buf, fp)) > 0 ) {
      if (Base64_Encode(buf, readLen, base64Buf, sizeof base64B - 1, NULL)) {
         RpcVMX_Log("%s", base64B);
      } else {
         Warning("Error in Base64_Encode\n");
         goto exit;
      }
   }
exit:
   RpcVMX_Log(LOG_END_MARK);
   fclose(fp);
}
Beispiel #2
0
int Encrypt_Ex(const char *Key, const char *AppIP, const char *pInput3DES, char *pOutputCGIParameter, int iOutputLen, char *pErrMsg)
{
	char szKey[MAX_CGIPARA_LEN];
	int iRet, iLen, iInputLen, iLenAfterEncrypt;
	char szOutTmp[iOutputLen];
	char szOutTmp2[iOutputLen];
	char szInputBuf[iOutputLen];

	memset(pOutputCGIParameter, 0x0, iOutputLen);
	memset(szOutTmp, 0x0, sizeof(szOutTmp));
	memset(szOutTmp2, 0x0, sizeof(szOutTmp2));
	memset(szInputBuf, 0x0, sizeof(szInputBuf));
	
	//pre operator
	char sKey[MAX_CGIPARA_LEN]={0};
	strncpy(sKey, Key, MAX_CGIPARA_LEN);
	if ((iLen = strlen(sKey)) < 24)
	{
		for (int i = iLen;i < 24;i++)
			sKey[i] = '0';
	}
	if ((iRet = Create3DesKey(sKey, szKey, sizeof(szKey), pErrMsg)) != PAYPORTAL_OK)
	{
		sprintf(pErrMsg, "Create3DesKey fail [key=%s]", sKey);
		return iRet;
	}

	iInputLen =strlen(pInput3DES) + strlen("&AppIP=") + strlen(AppIP);
	if (iInputLen> iOutputLen)
	{
		strcpy(pErrMsg, "require more output buffer");
		return ENCRYPE_FAIL;
	}
	
	strcpy(szInputBuf, pInput3DES);
	strcat(szInputBuf, "&AppIP=");
	strcat(szInputBuf, AppIP);

	if ((iRet = Portal_des_encrypt(szKey, (unsigned char *)szInputBuf, (unsigned char *)szOutTmp, iInputLen, iOutputLen, &iLenAfterEncrypt, DES_ENCRYPT,pErrMsg)) != PAYPORTAL_OK)
	{
		strcat(pErrMsg, "Portal_des_encrypt err");
		return iRet;
	}
	if ((iRet = Base64_Encode((const unsigned char *)szOutTmp, iLenAfterEncrypt, szOutTmp2, iOutputLen, &iLenAfterEncrypt))!= 0)
	{
		sprintf(pErrMsg, "Base64_Encode err [Ret=%d]", iRet);
		return ENCRYPE_FAIL;
	}
	encode_hexstring(szOutTmp2, strlen(szOutTmp2), pOutputCGIParameter);
	return PAYPORTAL_OK;
}
static void create_tpm_enrollment_device()
{
    INDIVIDUAL_ENROLLMENT_HANDLE indiv_enrollment = NULL;

    PROVISIONING_SERVICE_CLIENT_HANDLE prov_sc_handle = prov_sc_create_from_connection_string(g_prov_conn_string);
    ASSERT_IS_NOT_NULL(prov_sc_handle, "Failure creating provisioning service client");

    prov_sc_set_trace(prov_sc_handle, TRACING_STATUS_ON);

    PROV_AUTH_HANDLE auth_handle = prov_auth_create();
    ASSERT_IS_NOT_NULL(auth_handle, "Failure creating auth client");

    char* registration_id = prov_auth_get_registration_id(auth_handle);
    ASSERT_IS_NOT_NULL(registration_id, "Failure prov_auth_get_common_name");

    if (prov_sc_get_individual_enrollment(prov_sc_handle, registration_id, &indiv_enrollment) != 0)
    {
        BUFFER_HANDLE ek_handle = prov_auth_get_endorsement_key(auth_handle);
        ASSERT_IS_NOT_NULL(ek_handle, "Failure prov_auth_get_endorsement_key");

        STRING_HANDLE ek_value = Base64_Encode(ek_handle);
        ASSERT_IS_NOT_NULL(ek_value, "Failure Base64_Encode Endorsement key");

        ATTESTATION_MECHANISM_HANDLE attest_handle = attestationMechanism_createWithTpm(STRING_c_str(ek_value), NULL);
        ASSERT_IS_NOT_NULL(attest_handle, "Failure attestationMechanism_createWithTpm");

        indiv_enrollment = individualEnrollment_create(registration_id, attest_handle);
        ASSERT_IS_NOT_NULL(indiv_enrollment, "Failure hsm_client_riot_get_certificate ");

        BUFFER_delete(ek_handle);
        STRING_delete(ek_value);
    }
    free(registration_id);
    individualEnrollment_destroy(indiv_enrollment);
    prov_auth_destroy(auth_handle);
    prov_sc_destroy(prov_sc_handle);
}
gboolean
FoundryToolsDaemonGetToolsProperties(RpcInData *data) // IN
{
   VixError err = VIX_OK;
   int additionalError = 0;
   static char resultBuffer[DEFAULT_RESULT_MSG_MAX_LENGTH];
   char *serializedBuffer = NULL;
   size_t serializedBufferLength = 0;
   char *base64Buffer = NULL;
   size_t base64BufferLength = 0;
   Bool success;
   char *returnBuffer = NULL;
   GKeyFile *confDictRef;
   
   /*
    * Collect some values about the host.
    */
   confDictRef = data->clientData;

   err = VixTools_GetToolsPropertiesImpl(confDictRef,
                                         &serializedBuffer,
                                         &serializedBufferLength);
   if (VIX_OK == err) {
      base64BufferLength = Base64_EncodedLength(serializedBuffer, serializedBufferLength) + 1;
      base64Buffer = Util_SafeMalloc(base64BufferLength);
      success = Base64_Encode(serializedBuffer, 
                              serializedBufferLength, 
                              base64Buffer, 
                              base64BufferLength, 
                              &base64BufferLength);
      if (!success) {
         base64Buffer[0] = 0;
         err = VIX_E_FAIL;
         goto abort;
      }
      base64Buffer[base64BufferLength] = 0;
   }


abort:
   returnBuffer = base64Buffer;
   if (NULL == base64Buffer) {
      returnBuffer = "";
   }
   if (VIX_OK != err) {
      additionalError = Err_Errno();
   }

   /*
    * All VMXI tools commands return results that start with a VMXI error
    * and a guest-OS-specific error.
    */
   Str_Sprintf(resultBuffer,
               sizeof(resultBuffer),
               "%"FMT64"d %d %s",
               err,
               additionalError,
               returnBuffer);
   RPCIN_SETRETVALS(data, resultBuffer, TRUE);

   free(serializedBuffer);
   free(base64Buffer);
   
   return TRUE;
} // FoundryToolsDaemonGetToolsProperties
Beispiel #5
0
static int Probe(TProxy *pProxy)
{
	if (pProxy->m_status == PROXY_STATUS_CONNECTING)
	{
		int rv;
		rv = XOS_TCPConnectProbe(pProxy->m_sock);
		if (rv == -1)
		{
			printf("proxy probe select failed.\r\n");
			return PROXY_PROBE_ERROR;
		}
		else if (rv == 0)
		{
			//连接成功,根据不同的代理类型进入不同的状态
			pProxy->m_uiOperationBeginTime = XOS_GetTickCount();
			switch (pProxy->m_iProxyType)
			{
			case PROXY_TYPE_HTTP:
					sprintf(pProxy->m_sendbuf, "%s:%s", pProxy->m_szUserName, pProxy->m_szPassword);
					Base64_Encode(pProxy->m_tmpbuf, pProxy->m_sendbuf, strlen(pProxy->m_sendbuf));
					sprintf(pProxy->m_sendbuf, "CONNECT %s HTTP/1.0\r\nProxy-Connection: Keep-Alive\r\nProxy-Authorization: Basic %s\r\nPragma: no-cache\r\n\r\n",
						pProxy->m_szDestAddr, pProxy->m_tmpbuf);
					pProxy->m_ihaveSendLen = 0;
					pProxy->m_isendbufLen = strlen(pProxy->m_sendbuf);
					pProxy->m_status = PROXY_STATUS_CONNECTION_REQUEST;
					break;
				case PROXY_TYPE_SOCKET4:
					pProxy->m_sendbuf[0] = 0x04;
					pProxy->m_sendbuf[1] = 0x01;
					*(XOS_U16*)(&pProxy->m_sendbuf[2]) = htons(pProxy->m_usDestPort);
					*(XOS_U32*)(&pProxy->m_sendbuf[4]) = pProxy->m_uiDestIP;
					strcat(&pProxy->m_sendbuf[8], pProxy->m_szUserName);
					pProxy->m_isendbufLen = (int)(8+strlen(pProxy->m_szUserName)+1);
					//??????这个地方的发送假设可以一次发完
					pProxy->m_status = PROXY_STATUS_CONNECTION_REQUEST;
					break;
				case PROXY_TYPE_SOCKET5:
					if(strcmp(pProxy->m_szUserName, "") != 0)
					{
						memcpy(pProxy->m_sendbuf, "\005\002\002\000", 4);
					}
					else
					{
						memcpy(pProxy->m_sendbuf, "\005\001\000", 3);
					}
					pProxy->m_ihaveSendLen = 0;
					pProxy->m_isendbufLen = strlen(pProxy->m_sendbuf);
					pProxy->m_status = PROXY_STATUS_NEGOTIATION_REQUEST;
					break;
				default:
					return PROXY_PROBE_ERROR;
			}
		}
		else //rv == 1
		{
			return PROXY_PROBE_WOULDBLOCK;
		}
	}
	
	switch (pProxy->m_iProxyType)
	{
		case PROXY_TYPE_HTTP:
			return pProxy->ProbeHttp(pProxy);
		case PROXY_TYPE_SOCKET4:
			return pProxy->ProbeSocket4(pProxy);
		case PROXY_TYPE_SOCKET5:
			return pProxy->ProbeSocket5(pProxy);
		default:
			return PROXY_PROBE_ERROR;
	}
}
STRING_HANDLE SASToken_Create(STRING_HANDLE key, STRING_HANDLE scope, STRING_HANDLE keyName, size_t expiry)
{
    STRING_HANDLE result = NULL;
    char tokenExpirationTime[32] = { 0 };

    /*Codes_SRS_SASTOKEN_06_001: [If key is NULL then SASToken_Create shall return NULL.]*/
    /*Codes_SRS_SASTOKEN_06_003: [If scope is NULL then SASToken_Create shall return NULL.]*/
    /*Codes_SRS_SASTOKEN_06_007: [If keyName is NULL then SASToken_Create shall return NULL.]*/
    if ((key == NULL) ||
        (scope == NULL) ||
        (keyName == NULL))
    {
        LogError("Invalid Parameter to SASToken_Create. handle key: %p, handle scope: %p, handle keyName: %p\r\n", key, scope, keyName);
    }
    else
    {
        BUFFER_HANDLE decodedKey;
        /*Codes_SRS_SASTOKEN_06_029: [The key parameter is decoded from base64.]*/
        if ((decodedKey = Base64_Decoder(STRING_c_str(key))) == NULL)
        {
            /*Codes_SRS_SASTOKEN_06_030: [If there is an error in the decoding then SASToken_Create shall return NULL.]*/
            LogError("Unable to decode the key for generating the SAS.\r\n");
        }
        else
        {
            /*Codes_SRS_SASTOKEN_06_026: [If the conversion to string form fails for any reason then SASToken_Create shall return NULL.]*/
            if (size_tToString(tokenExpirationTime, sizeof(tokenExpirationTime), expiry) != 0)
            {
                LogError("For some reason converting seconds to a string failed.  No SAS can be generated.\r\n");
            }
            else
            {
                STRING_HANDLE toBeHashed = NULL;
                BUFFER_HANDLE hash = NULL;
                if (((hash = BUFFER_new()) == NULL) ||
                    ((toBeHashed = STRING_new()) == NULL) ||
                    ((result = STRING_new()) == NULL))
                {
                    LogError("Unable to allocate memory to prepare SAS token.\r\n")
                }
                else
                {
                    /*Codes_SRS_SASTOKEN_06_009: [The scope is the basis for creating a STRING_HANDLE.]*/
                    /*Codes_SRS_SASTOKEN_06_010: [A "\n" is appended to that string.]*/
                    /*Codes_SRS_SASTOKEN_06_011: [tokenExpirationTime is appended to that string.]*/
                    if ((STRING_concat_with_STRING(toBeHashed, scope) != 0) ||
                        (STRING_concat(toBeHashed, "\n") != 0) ||
                        (STRING_concat(toBeHashed, tokenExpirationTime) != 0))
                    {
                        LogError("Unable to build the input to the HMAC to prepare SAS token.\r\n");
                        STRING_delete(result);
                        result = NULL;
                    }
                    else
                    {
                        STRING_HANDLE base64Signature = NULL;
                        STRING_HANDLE urlEncodedSignature = NULL;
                        /*Codes_SRS_SASTOKEN_06_013: [If an error is returned from the HMAC256 function then NULL is returned from SASToken_Create.]*/
                        /*Codes_SRS_SASTOKEN_06_012: [An HMAC256 hash is calculated using the decodedKey, over toBeHashed.]*/
                        /*Codes_SRS_SASTOKEN_06_014: [If there are any errors from the following operations then NULL shall be returned.]*/
                        /*Codes_SRS_SASTOKEN_06_015: [The hash is base 64 encoded.]*/
                        /*Codes_SRS_SASTOKEN_06_028: [base64Signature shall be url encoded.]*/
                        /*Codes_SRS_SASTOKEN_06_016: [The string "SharedAccessSignature sr=" is the first part of the result of SASToken_Create.]*/
                        /*Codes_SRS_SASTOKEN_06_017: [The scope parameter is appended to result.]*/
                        /*Codes_SRS_SASTOKEN_06_018: [The string "&sig=" is appended to result.]*/
                        /*Codes_SRS_SASTOKEN_06_019: [The string urlEncodedSignature shall be appended to result.]*/
                        /*Codes_SRS_SASTOKEN_06_020: [The string "&se=" shall be appended to result.]*/
                        /*Codes_SRS_SASTOKEN_06_021: [tokenExpirationTime is appended to result.]*/
                        /*Codes_SRS_SASTOKEN_06_022: [The string "&skn=" is appended to result.]*/
                        /*Codes_SRS_SASTOKEN_06_023: [The argument keyName is appended to result.]*/
                        if ((HMACSHA256_ComputeHash(BUFFER_u_char(decodedKey), BUFFER_length(decodedKey), (const unsigned char*)STRING_c_str(toBeHashed), STRING_length(toBeHashed), hash) != HMACSHA256_OK) ||
                            ((base64Signature = Base64_Encode(hash)) == NULL) ||
                            ((urlEncodedSignature = URL_Encode(base64Signature)) == NULL) ||
                            (STRING_copy(result, "SharedAccessSignature sr=") != 0) ||
                            (STRING_concat_with_STRING(result, scope) != 0) ||
                            (STRING_concat(result, "&sig=") != 0) ||
                            (STRING_concat_with_STRING(result, urlEncodedSignature) != 0) ||
                            (STRING_concat(result, "&se=") != 0) ||
                            (STRING_concat(result, tokenExpirationTime) != 0) ||
                            (STRING_concat(result, "&skn=") != 0) ||
                            (STRING_concat_with_STRING(result, keyName) != 0))
                        {
                            LogError("Unable to build the SAS token.\r\n");
                            STRING_delete(result);
                            result = NULL;
                        }
                        else
                        {
                            /* everything OK */
                        }
                        STRING_delete(base64Signature);
                        STRING_delete(urlEncodedSignature);
                    }
                }
                STRING_delete(toBeHashed);
                BUFFER_delete(hash);
            }
            BUFFER_delete(decodedKey);
        }
    }

    return result;
}