Example #1
0
static int do_tpm_raw_transfer(cmd_tbl_t *cmdtp, int flag,
		int argc, char * const argv[])
{
	struct udevice *dev;
	void *command;
	uint8_t response[1024];
	size_t count, response_length = sizeof(response);
	uint32_t rc;

	command = parse_byte_string(argv[1], NULL, &count);
	if (!command) {
		printf("Couldn't parse byte string %s\n", argv[1]);
		return CMD_RET_FAILURE;
	}

	rc = get_tpm(&dev);
	if (rc)
		return rc;

	rc = tpm_xfer(dev, command, count, response, &response_length);
	free(command);
	if (!rc) {
		puts("tpm response:\n");
		print_byte_string(response, response_length);
	}

	return report_return_code(rc);
}
Example #2
0
static int do_tpm_nv_write_value(cmd_tbl_t *cmdtp, int flag,
		int argc, char * const argv[])
{
	uint32_t index, rc;
	size_t count;
	void *data;

	if (argc != 3)
		return CMD_RET_USAGE;
	index = simple_strtoul(argv[1], NULL, 0);
	data = parse_byte_string(argv[2], NULL, &count);
	if (!data) {
		printf("Couldn't parse byte string %s\n", argv[2]);
		return CMD_RET_FAILURE;
	}

	rc = tpm_nv_write_value(index, data, count);
	free(data);

	return convert_return_code(rc);
}
Example #3
0
static int do_tpm_extend(cmd_tbl_t *cmdtp, int flag,
		int argc, char * const argv[])
{
	uint32_t index, rc;
	uint8_t in_digest[20], out_digest[20];

	if (argc != 3)
		return CMD_RET_USAGE;
	index = simple_strtoul(argv[1], NULL, 0);
	if (!parse_byte_string(argv[2], in_digest, NULL)) {
		printf("Couldn't parse byte string %s\n", argv[2]);
		return CMD_RET_FAILURE;
	}

	rc = tpm_extend(index, in_digest, out_digest);
	if (!rc) {
		puts("PCR value after execution of the command:\n");
		print_byte_string(out_digest, sizeof(out_digest));
	}

	return convert_return_code(rc);
}
Example #4
0
static int do_tpmutil_raw_transfer(cmd_tbl_t *cmdtp, int flag,
		int argc, char * const argv[])
{
	void *command;
	uint8_t response[1024];
	size_t count, response_length = sizeof(response);
	uint32_t rc;

	command = parse_byte_string(argv[1], NULL, &count);
	if (!command) {
		printf("Couldn't parse byte string %s\n", argv[1]);
		return CMD_RET_FAILURE;
	}

	rc = tis_sendrecv(command, count, response, &response_length);
	free(command);
	if (!rc) {
		puts("tpm response:\n");
		print_byte_string(response, response_length);
	}

	return convert_return_code(rc);
}
Example #5
0
static int do_tpm_get_pub_key_oiap(cmd_tbl_t *cmdtp, int flag,
		int argc, char * const argv[])
{
	uint32_t key_handle, err;
	uint8_t usage_auth[DIGEST_LENGTH];
	uint8_t pub_key_buffer[TPM_PUBKEY_MAX_LENGTH];
	size_t pub_key_len = sizeof(pub_key_buffer);

	if (argc < 3)
		return CMD_RET_USAGE;

	key_handle = simple_strtoul(argv[1], NULL, 0);
	if (strlen(argv[2]) != 2 * DIGEST_LENGTH)
		return CMD_RET_FAILURE;
	parse_byte_string(argv[2], usage_auth, NULL);

	err = tpm_get_pub_key_oiap(key_handle, usage_auth,
			pub_key_buffer, &pub_key_len);
	if (!err) {
		printf("dump of received pub key structure:\n");
		print_byte_string(pub_key_buffer, pub_key_len);
	}
	return convert_return_code(err);
}
Example #6
0
static int do_tpm_load_key2_oiap(cmd_tbl_t *cmdtp, int flag,
		int argc, char * const argv[])
{
	uint32_t parent_handle, key_len, key_handle, err;
	uint8_t usage_auth[DIGEST_LENGTH];
	void *key;

	if (argc < 5)
		return CMD_RET_USAGE;

	parent_handle = simple_strtoul(argv[1], NULL, 0);
	key = (void *)simple_strtoul(argv[2], NULL, 0);
	key_len = simple_strtoul(argv[3], NULL, 0);
	if (strlen(argv[4]) != 2 * DIGEST_LENGTH)
		return CMD_RET_FAILURE;
	parse_byte_string(argv[4], usage_auth, NULL);

	err = tpm_load_key2_oiap(parent_handle, key, key_len, usage_auth,
			&key_handle);
	if (!err)
		printf("Key handle is 0x%x\n", key_handle);

	return convert_return_code(err);
}
Example #7
0
int main(int argc, char * const argv[]) {
  int i;
  int fd;
  int opt;
  while ((opt = getopt(argc, argv, "hpw:r:")) != -1) {
    switch (opt) {
    case 'h':
      usage(argv[0]);
      return 0;
    case 'p':
      g_use_pec = 1;
      break;
    case 'w':
      g_has_write = 1;
      if ((g_n_write = parse_byte_string(optarg)) <= 0) {
        usage(argv[0]);
        return -1;
      }
      break;
    case 'r':
      g_has_read = 1;
      g_n_read = atoi(optarg);
      break;
    default:
      usage(argv[0]);
      return -1;
    }
  }

  /* make sure we still have arguments for bus and slave address */
  if (optind + 2 != argc) {
    printf("Bus or slave address is missing\n");
    usage(argv[0]);
    return -1;
  }

  g_bus = atoi(argv[optind]);
  g_slave_addr = strtoul(argv[optind + 1], NULL, 0);
  if ((g_slave_addr & 0x80)) {
    printf("Slave address must be 7-bit\n");
    return -1;
  }

  if (!g_has_write && !g_has_read) {
    /* by default, read, first byte read is the length */
    g_has_read = 1;
    g_n_read = 0;
  }

  printf("Bus: %d\nDevice address: 0x%x\n", g_bus, g_slave_addr);
  if (g_has_write) {
    printf("To write %d bytes:", g_n_write);
    for (i = 0; i < g_n_write; i++) {
      printf(" 0x%x", g_write_bytes[i]);
    }
    printf("\n");
  }
  if (g_has_read) {
    if (g_n_read) {
      printf("To read %d bytes.\n", g_n_read);
    } else {
      printf("To read data.\n");
    }
  }

  fd = i2c_open();
  if (fd < 0) {
    return -1;
  }

  if (i2c_io(fd) < 0) {
    return -1;
  }

  if (g_has_read) {
    printf("Received:\n ");
    if (g_n_read == 0) {
      g_n_read = g_read_bytes[0] + 1;
    }
    for (i = 0; i < g_n_read; i++) {
      printf(" 0x%x", g_read_bytes[i]);
    }
    printf("\n");
  }

  return 0;
}