#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include "cackey-chrome.h"
int main(int argc, char **argv) {
struct cackey_certificate *certificates;
char *pinPrompt = NULL, pin[32];
unsigned char signBuffer[1024];
int numCertificates, idxCertificate;
unsigned long signLength;
cackey_chrome_returnType rvSign;
numCertificates = cackey_chrome_listCertificates(&certificates);
printf("numCertificates = %i\n", numCertificates);
for (idxCertificate = 0; idxCertificate < numCertificates; idxCertificate++) {
printf("Certificate #%i: %lu bytes\n", idxCertificate, certificates[idxCertificate].certificate_len);
signLength = sizeof(signBuffer);
rvSign = cackey_chrome_signMessage(&certificates[idxCertificate], "Test", 4, signBuffer, &signLength, &pinPrompt, NULL);
if (rvSign == CACKEY_CHROME_NEEDLOGIN) {
if (pinPrompt == NULL) {
pinPrompt = strdup("Please enter your PIN: ");
}
printf("%s: ", pinPrompt);
fflush(stdout);
free(pinPrompt);
fgets(pin, sizeof(pin), stdin);
while (strlen(pin) >= 1 && pin[strlen(pin) - 1] == '\n') {
pin[strlen(pin) - 1] = '\0';
}
signLength = sizeof(signBuffer);
rvSign = cackey_chrome_signMessage(&certificates[idxCertificate], "Test", 4, signBuffer, &signLength, &pinPrompt, pin);
}
printf("Signed message \"Test\": %lu bytes (return value = %i)\n", signLength, rvSign);
}
cackey_chrome_freeCertificates(certificates, numCertificates);
cackey_chrome_terminate();
return(0);
}