예제 #1
0
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;
}
예제 #2
0
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);
			}
		}
	}
}