char *EstEID_sign(char *certId, char *hash, EstEID_PINPromptData pinPromptData) { EstEID_log("called, hash=%s", hash); char *signature = NULL; int i; EstEID_log("calling EstEID_loadCerts()"); EstEID_Certs *certs = EstEID_loadCerts(); EstEID_log("certs loaded"); if (!certs) { EstEID_log("%s", EstEID_error); } else if ((i = EstEID_findNonRepuditionCert(certs, certId)) == NOT_FOUND) { snprintf(EstEID_error, sizeof(EstEID_error) - 1, "no cert has ID: %s", certId); EstEID_errorCode = ESTEID_CERT_NOT_FOUND_ERROR; EstEID_error[sizeof(EstEID_error) - 1] = 0; EstEID_log("%s", EstEID_error); } else if (EstEID_signHashHex(&signature, certs->slotIDs[i], certs->certs[i], hash, pinPromptData)) { EstEID_log("signature=%s", signature); } else { EstEID_log("%s", EstEID_error); } free(certId); free(hash); return signature; }
void sign(const char* hash, EstEID_Certs *certs) { for (unsigned int i = 0; i < certs->certCount; i++) { EstEID_CertInfo *certInfo = certs->certs + i; if (certInfo->usageNonRepudiation) { printf("signing!\n"); EstEID_PINPromptData pinPromptData = { promptForPIN, showAlert, NULL }; char *signature; if (EstEID_signHashHex(&signature, certInfo, hash, pinPromptData)) { printf("signature: %s\n", signature); free(signature); } else { printf("error: %s (error code: %i)\n", EstEID_error, EstEID_errorCode); } } } }