Ejemplo n.º 1
0
static int ec_command_dev(int command, int version,
			  const void *outdata, int outsize,
			  void *indata, int insize)
{
	struct cros_ec_command s_cmd;
	int r;

	s_cmd.command = command;
	s_cmd.version = version;
	s_cmd.result = 0xff;
	s_cmd.outsize = outsize;
	s_cmd.outdata = (uint8_t *)outdata;
	s_cmd.insize = insize;
	s_cmd.indata = indata;

	r = ioctl(fd, CROS_EC_DEV_IOCXCMD, &s_cmd);
	if (r < 0) {
		fprintf(stderr, "ioctl %d, errno %d (%s), EC result %d (%s)\n",
			r, errno, strerror(errno), s_cmd.result,
			strresult(s_cmd.result));
		if (errno == EAGAIN && s_cmd.result == EC_RES_IN_PROGRESS) {
			s_cmd.command = EC_CMD_RESEND_RESPONSE;
			r = ioctl(fd, CROS_EC_DEV_IOCXCMD, &s_cmd);
			fprintf(stderr,
				"ioctl %d, errno %d (%s), EC result %d (%s)\n",
				r, errno, strerror(errno), s_cmd.result,
				strresult(s_cmd.result));
		}
	} else if (s_cmd.result != EC_RES_SUCCESS) {
		fprintf(stderr, "EC result %d (%s)\n", s_cmd.result,
			strresult(s_cmd.result));
		return -EECRESULT - s_cmd.result;
	}

	return r;
}
Ejemplo n.º 2
0
TSS_RESULT MyFunc_CreatePubKey(RSA *rsa, int padding, TSS_HKEY *hKey){
  TSS_HCONTEXT hContext;
  TSS_RESULT result;
  UINT32 encScheme, sizeN, keySize;
  BYTE n[2048];

  switch(padding){
    case RSA_PKCS1_PADDING:
      encScheme = TSS_ES_RSAESPKCSV15;
      break;

    case RSA_PKCS1_OAEP_PADDING:
      encScheme = TSS_ES_RSAESOAEP_SHA1_MGF1;
      break;

    case RSA_NO_PADDING:
      encScheme = TSS_ES_NONE;
      break;

    default:
      return TSS_E_INTERNAL_ERROR;
      break;
  }

  if((keySize = get_tss_key_size(RSA_size(rsa) * 8 )) == 0){
    return TSS_E_BAD_PARAMETER;
  }

  result = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_RSAKEY, TSS_KEY_TYPE_LEGACY | keySize, hKey);

  if(result != TSS_SUCCESS){
    LogError("Tspi_Context_CreateObject failed:%s", strresult(result));
    return result;
  }

  if((sizeN = BN_bn2bin(rsa->n, n)) <= 0){
    LogError("BN_bn2bin failed");
    ERR_print_errors_fp(stdout);
    Tspi_Context_CloseObject(hContext, *hKey);
    return TSS_E_FAIL;
  }

  result = Tspi_SetAttribData(*hKey, TSS_TSPATTRIB_KEY_BLOB, TSS_TSPATTRIB_KEYBLOB_PUBLIC_KEY, sizeN, n);

  if(result != TSS_SUCCESS){
    LogError("Tspi_SetAttribData failed:%s", strresult(result));
    Tspi_Context_CloseObject(hContext, *hKey);
    return result;
  }

  result = Tspi_SetAttribUnit32(*hKey, TSS_TSPATTRIB_KEY_INFO, TSS_TSPATTRIB_KEYINFO_ALGORITHM, TSS_ALG_RSA );

  if(result != TSS_SUCCESS){
    LogError("Tspi_SetAttribUnit32 failed:%s", strresult(result));
    Tspi_Context_CloseObject(hContext, *hKey);
    return result;
  }

  result = Tspi_SetAttribUnit32(*hKey, TSS_TSPATTRIB_RSAKEY_INFO, TSS_TSPATTRIB_KEYINFO_RSA_PRIMES, 2);
  if(result != TSS_SUCCESS){
    LogError("Tspi_SetAttribUnit32 failed:%s", strresult(result));
    Tspi_Context_CloseObject(hContext, *hKey);
    return result;
  }

  result = Tspi_SetAttribUnit32(*hKey, TSS_TSPATTRIB_KEY_INFO, TSS_TSPATTRIB_KEYINFO_ENCSCHEME, encScheme);

  if(result != TSS_SUCCESS){
    LogError("Tspi_Setattribunit32 failed:%s", strresult(result));
    Tspi_Context_CloseObject(hContext,*hKey);
    return result;
  }
  return TSS_SUCCESS;
}