@@ -1,14 +1,53 @@ +#include +#include +#include #include #include "cackey-chrome.h" int main(int argc, char **argv) { struct cackey_certificate *certificates; - int numCertificates; + 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); }