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; }
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; }