Я пытаюсь импортировать открытый ключ из другой системы в мою систему, используя библиотеку Microsoft MSR.TSS (C ++), чтобы настроить обмен ключами Диффи-Хеллмана.
Однако я получаю следующую ошибку: «Ошибка TPM - TPM_RC :: SIZE: Предпринята попытка присоединиться или заменить диск, для которого каталог на диске является целью предыдущей замены.»
Вот мой пример кода:
storagePrimaryHandle = MakeStoragePrimary();
TPMT_PUBLIC eccTemplate(TPM_ALG_ID::SHA256,
TPMA_OBJECT::decrypt |
TPMA_OBJECT::fixedParent |
TPMA_OBJECT::fixedTPM |
TPMA_OBJECT::sensitiveDataOrigin |
TPMA_OBJECT::userWithAuth,
NullVec,
TPMS_ECC_PARMS(
TPMT_SYM_DEF_OBJECT(TPM_ALG_ID::_NULL, 0, TPM_ALG_ID::_NULL),
TPMS_KEY_SCHEME_ECDH(TPM_ALG_ID::SHA256),
TPM_ECC_CURVE::NIST_P256,
TPMS_NULL_KDF_SCHEME()),
TPMS_ECC_POINT()
);
//Import the public key
//Create a vector with the 64 byte public key
vector<BYTE> pubVector(publicKey, publicKey + publicKeyLength);
//Indicate this is an uncompressed key
pubVector.insert(pubVector.begin(), 1, 0x04);
inPublic = _tpm.Create(storagePrimaryHandle, TPMS_SENSITIVE_CREATE(), eccTemplate, pubVector, vector<TPMS_PCR_SELECTION>());
Несколько вещей, на которые следует обратить внимание: 1) Если я передам пустой вектор вместо «pubVector», он будет работать 2) Если я опущу 0x04 (указывая на несжатый открытый ключ), он все равно не будет работать
Моя работа основана на коде: https://github.com/microsoft/TSS.MSR/tree/master/TSS.CPP/Samples