Example #1
0
static uint32_t TPM_SendLibTPMS(int sockfd, struct tpm_buffer *tb,
				const char *msg)
{
    unsigned char *respbuffer = NULL;
    uint32_t resp_size;
    uint32_t respbufsize;
    uint32_t rc;
    char mymsg[1024];

    (void) sockfd;

    snprintf(mymsg, sizeof(mymsg), "TPM_SendLibTPMS: To TPM [%s]", msg);

    showBuff(tb->buffer, mymsg);

    rc = TPMLIB_Process(&respbuffer, &resp_size, &respbufsize,
			tb->buffer, tb->used);

    if (rc != TPM_SUCCESS)
	return ERR_IO;

    if (tb->size < resp_size)
	return ERR_BUFFER;

    memcpy(tb->buffer, respbuffer, resp_size);
    tb->used = resp_size;

    free(respbuffer);

    snprintf(mymsg, sizeof(mymsg), "TPM_SendLibTPMS: From TPM [%s]", msg);

    showBuff(tb->buffer, mymsg);

    return 0;
}
Example #2
0
static uint32_t TPM_TransmitCharDev(int sock_fd, struct tpm_buffer *tb,
                                    const char *msg)
{
    uint32_t nbytes = 0;
    ssize_t nwritten = 0;
    size_t nleft = 0;
    unsigned int offset = 0;
    uint32_t ret;
    char mymsg[1024];
    
    snprintf(mymsg, sizeof(mymsg), "TPM_TransmitCharDev: To TPM [%s]",
             msg);

    ret = tpm_buffer_load32(tb, TPM_PARAMSIZE_OFFSET, &nbytes);
    if ((ret & ERR_MASK)) {
        return ret;
    }
    showBuff(tb->buffer, mymsg);

    nleft = nbytes;
    while (nleft > 0) {
	nwritten = write(sock_fd, &tb->buffer[offset], nleft);
	if (nwritten < 0) {        /* error */
	    printf("TPM_TransmitCharDev: write error %d\n", (int)nwritten);
	    return nwritten;
	}
	nleft -= nwritten;
	offset += nwritten;
    }
    return 0;
}
Example #3
0
static uint32_t TPM_TransmitSocket(int sock_fd, struct tpm_buffer *tb,
				   const char *msg)
{
    size_t nbytes = 0;
    ssize_t nwritten = 0;
    size_t nleft = 0;
    unsigned int offset = 0;
    char mymsg[1024];

    snprintf(mymsg, sizeof(mymsg), "TPM_TransmitSocket: To TPM [%s]", msg);

    nbytes = tb->used;

    showBuff(tb->buffer, mymsg);

    nleft = nbytes;
    while (nleft > 0) {
	nwritten = write(sock_fd, &tb->buffer[offset], nleft);
	if (nwritten < 0) {	/* error */
	    printf("TPM_TransmitSocket: write error %d\n", (int) nwritten);
	    return nwritten;
	}
	nleft -= nwritten;
	offset += nwritten;
    }
    return 0;
}
Example #4
0
static uint32_t
TPM_ReceiveCharDev(int sock_fd, struct tpm_buffer *tb)
{
    uint32_t rc = 0;
    uint32_t paramSize = 0;
    unsigned char *buffer = tb->buffer;

#ifndef USE_PARTIAL_READ
    /* read the whole packet */
    if (rc == 0) {
        int nread;
        nread = read(sock_fd, tb->buffer, tb->size);
        if (nread < 0) {
            rc = ERR_IO;
        } else {
            tb->used = nread;
        }
    }
#endif

#ifdef USE_PARTIAL_READ
    /* read the tag and paramSize */
    if (rc == 0) {
	rc = TPM_ReceiveBytes(sock_fd, buffer, TPM_U16_SIZE + TPM_U32_SIZE);
    }
#endif
    /* extract the paramSize */
    if (rc == 0) {
	paramSize = LOAD32(buffer, TPM_PARAMSIZE_OFFSET);
	if (paramSize > TPM_MAX_BUFF_SIZE) {
	    printf("TPM_ReceiveCharDev: paramSize %u greater than %u\n",
		   paramSize, TPM_MAX_BUFF_SIZE);
	    rc = ERR_BAD_RESP;
	}
    }
#ifdef USE_PARTIAL_READ
    /* read the rest of the packet */
    if (rc == 0) {
	rc = TPM_ReceiveBytes(sock_fd,
			      buffer + TPM_U16_SIZE + TPM_U32_SIZE,
			      paramSize - (TPM_U16_SIZE + TPM_U32_SIZE));
    }
#endif
    /* read the TPM return code from the packet */
    if (rc == 0) {
	showBuff(buffer, "TPM_ReceiveCharDev: From TPM");
	tb->used = paramSize;
	tpm_buffer_load32(tb, TPM_RETURN_OFFSET, &rc);
    }
    return rc;
}
Example #5
0
static uint32_t TPM_ReceiveSocket(int sock_fd, struct tpm_buffer *tb)
{
    uint32_t rc = 0;
    uint32_t paramSize = 0;
    uint32_t addsize = 0;
    unsigned char *buffer = tb->buffer;

    if (TPM_LowLevel_Use_VTPM())
	addsize = sizeof(uint32_t);

    /* read the tag and paramSize */
    if (rc == 0) {
	rc = TPM_ReceiveBytes(sock_fd, buffer,
			      addsize + TPM_U16_SIZE + TPM_U32_SIZE);
    }
    /* extract the paramSize */
    if (rc == 0) {
	paramSize = LOAD32(buffer, addsize + TPM_PARAMSIZE_OFFSET);
	if (paramSize > TPM_MAX_BUFF_SIZE) {
	    printf
		("TPM_ReceiveSocket: ERROR: paramSize %u greater than %u\n",
		 paramSize, TPM_MAX_BUFF_SIZE);
	    rc = ERR_BAD_RESP;
	}
    }
    /* read the rest of the packet */
    if (rc == 0) {
	rc = TPM_ReceiveBytes(sock_fd,
			      buffer + addsize + TPM_U16_SIZE +
			      TPM_U32_SIZE,
			      paramSize - (TPM_U16_SIZE + TPM_U32_SIZE));
    }
    /* read the TPM return code from the packet */
    if (rc == 0) {
	showBuff(buffer, "TPM_ReceiveSocket: From TPM");
	rc = LOAD32(buffer, addsize + TPM_RETURN_OFFSET);
	tb->used = addsize + paramSize;
    }
    return rc;
}
/**
 * recv data from a client
 * huhai
 */
int dataRecv(int sockfd, struct _protocol *p) {
	int n = 0;
	int i = 0;
	int ret = 0;
	int send_len = 0;
	char buff[100];
	while ((n = read(sockfd, buff, 100)) > 0) {

		UCT_DEBUG("read:");
		showBuff(buff,n);
		UCT_DEBUG("\r\n");

		for( i=0; i<n; i++) {
			ret = netIn(buff[i]);
		}

		sleep(1);

	}
	UCT_DEBUG("end read\n");
	return 0;
}
Example #7
0
static uint32_t TPM_TransmitSocket(int sock_fd, struct tpm_buffer *tb,
                                   const char *msg)
{
    size_t nbytes = 0;
    ssize_t nwritten = 0;
    size_t nleft = 0;
    unsigned int offset = 0;
    char mymsg[1024];
    
    snprintf(mymsg, sizeof(mymsg), "TPM_TransmitSocket: To TPM [%s]",
             msg);

    nbytes = tb->used;

    showBuff(tb->buffer, mymsg);

    nleft = nbytes;
    while (nleft > 0) {
#ifdef TPM_POSIX
	nwritten = write(sock_fd, &tb->buffer[offset], nleft);
	if (nwritten < 0) {        /* error */
	    printf("TPM_TransmitSocket: write error %d\n", (int)nwritten);
	    return ERR_IO;
	}
#endif
#ifdef TPM_WINDOWS
	/* cast for winsock.  Unix uses void * */
	nwritten = send(sock_fd, (char *)(&tb->buffer[offset]), nleft,0);
	if (nwritten == SOCKET_ERROR) {        /* error */
	    printf("TPM_TransmitSocket: write error %d\n", (int)nwritten);
	    return ERR_IO;
	}
#endif
	nleft -= nwritten;
	offset += nwritten;
    }
    return 0;
}