Я пытаюсь подписать csr, используя X509_REQ_sign с механизмом TPM (tpm2tss). Я могу выполнить sh подпись запроса без движка, используя следующий код:
X509_REQ* req = NULL;
unsigned char* reqBytes = NULL;
char* csrString = NULL;
if((req = X509_REQ_new()) && \
X509_REQ_set_subject_name(req, subject) && \
X509_REQ_set_pubkey(req, keyPair) && \
X509_REQ_sign(req, keyPair, EVP_sha256()))
{
int reqLen = i2d_X509_REQ(req, NULL);
reqBytes = malloc(reqLen);
unsigned char* tempReqBytes = reqBytes;
i2d_X509_REQ(req, &tempReqBytes);
csrString = base64_encode(reqBytes, (size_t)reqLen, false, NULL);
}
free(reqBytes);
X509_REQ_free(req);
return csrString;
Как правильно изменить функцию EVP_sha256 () со стандартного конверта на движок tpm2tss? KeyPair может использоваться только в модуле TPM (так как он существует как зашифрованный BLOB в файловой системе). Движок знает об этом и расшифровывает BLOB, прежде чем подписывать запрос закрытым ключом.