summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton <anton@picapica>2019-02-17 21:07:43 +0400
committerAnton <anton@picapica>2019-02-17 21:07:43 +0400
commitd79beba74ce55e7506d7866616e824df85b0b72d (patch)
treecf18ab1aad0c9bbbb220d4c22abf64ed4a85b2b1
parent3fa5f1cbb4ceb82eaab8ed1cca64b509b168640c (diff)
downloadpica-pica-d79beba74ce55e7506d7866616e824df85b0b72d.tar.gz
pica-pica-d79beba74ce55e7506d7866616e824df85b0b72d.zip
tests: test program for signature functions
-rw-r--r--tests/test_signverify.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/test_signverify.c b/tests/test_signverify.c
new file mode 100644
index 0000000..42ab359
--- /dev/null
+++ b/tests/test_signverify.c
@@ -0,0 +1,101 @@
+#include "../PICA_signverify.h"
+#include <openssl/rand.h>
+#include <openssl/pem.h>
+#include <openssl/x509.h>
+
+#include <stdio.h>
+
+int main(int argc, char **argv)
+{
+ char databuf[512];
+ void* dataptrs[2];
+ int datalengths[2];
+ unsigned char *sig;
+ int siglen;
+ int ret;
+ EVP_PKEY *privkey, *pubkey;
+ FILE *f;
+ X509 *x;
+ RSA *rsa;
+
+ OpenSSL_add_all_algorithms();
+
+ RAND_pseudo_bytes(databuf, sizeof databuf);
+
+ dataptrs[0] = databuf;
+ datalengths[0] = sizeof databuf;
+
+ dataptrs[1] = NULL;
+ datalengths[1] = 0;
+
+ f = fopen(argv[1], "r");
+
+ if (!f)
+ {
+ fprintf(stderr, "failed to open %s\n", argv[1]);
+ return -1;
+ }
+
+ privkey = EVP_PKEY_new();
+
+ x = PEM_read_X509(f, 0, 0, 0);
+
+ if (!x)
+ {
+ fprintf(stderr, "failed to read X.509 cert from file");
+ return -1;
+ }
+
+ //pubkey = x->cert_info->key->pkey;
+ pubkey = X509_get_pubkey(x);
+
+ if (!pubkey)
+ {
+ fprintf(stderr, "no pubkey found");
+ }
+
+ //fclose(f);
+
+ //f = fopen(argv[1], "r");
+
+ rsa = PEM_read_RSAPrivateKey(f, NULL, NULL, NULL);
+ fclose(f);
+
+ if (!rsa)
+ {
+ fprintf(stderr, "failed to read RSA private key from file");
+ return -1;
+ }
+
+ ret = EVP_PKEY_set1_RSA(privkey, rsa);
+
+ ret = PICA_do_signature(privkey, dataptrs, datalengths, &sig, &siglen);
+
+ ret = PICA_signverify(pubkey, dataptrs, datalengths, sig, siglen);
+
+ printf("signature length is %i octets\n", siglen);
+
+ if (ret != 1)
+ {
+ fprintf(stderr, "signature verification failed\n");
+ return -1;
+ }
+
+ databuf[0] += 1;//modify data
+
+ ret = PICA_signverify(pubkey, dataptrs, datalengths, sig, siglen);
+
+ if (ret == 1)
+ {
+ fprintf(stderr, "err signature matched on corrupted data!\n");
+ return -1;
+ }
+
+ free(sig);
+ RSA_free(rsa);
+ EVP_PKEY_free(pubkey);
+ EVP_PKEY_free(privkey);
+ X509_free(x);
+
+ return 0;
+}