From af4a47cbe298e76f76cfa6dbff8190d0158bd080 Mon Sep 17 00:00:00 2001 From: Eugene Crosser Date: Thu, 7 Nov 2013 02:45:58 +0400 Subject: [PATCH 1/1] add test_auth --- .gitignore | 2 ++ Makefile.am | 5 +++-- authobj.c | 9 +++++++-- test_auth.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 test_auth.c diff --git a/.gitignore b/.gitignore index a8a0d9a..d27e9fb 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,5 @@ test_crypto test_crypto.trs test_serial test_serial.trs +test_auth +test_auth.trs diff --git a/Makefile.am b/Makefile.am index 6807079..d543a48 100644 --- a/Makefile.am +++ b/Makefile.am @@ -15,11 +15,12 @@ lib_LTLIBRARIES = pam_pcsc_cr.la pam_pcsc_cr_la_LDFLAGS = -module -avoid-version pam_pcsc_cr_la_LIBADD = libpcsc_cr.la -check_PROGRAMS = test_serial test_crypto test_chalresp +check_PROGRAMS = test_auth test_serial test_crypto test_chalresp +test_auth_LDADD = libpcsc_cr.la test_serial_LDADD = libpcsc_cr.la test_crypto_LDADD = libpcsc_cr.la test_chalresp_LDADD = libpcsc_cr.la EXTRA_DIST = autogen.sh README_CR -TESTS = test_serial test_crypto test_chalresp +TESTS = test_auth test_serial test_crypto test_chalresp diff --git a/authobj.c b/authobj.c index cb6f4f3..f06de57 100644 --- a/authobj.c +++ b/authobj.c @@ -58,10 +58,15 @@ int make_authobj(const char *id, const char *pass, const char *nonce, if (hmac(secret, secsize, challenge, challengesize, key, &keysize)) return -1; +#if 0 + int i; + for (i = 0; i < keysize; i++) printf(", 0x%02x", key[i]); + printf("\n"); +#endif if (*bufsize < datasize) return -1; *bufsize = datasize; - if (encrypt(key, keysize, data, buffer, datasize)) return -1; + if (encrypt(key, CBLKSIZE, data, buffer, datasize)) return -1; return 0; } @@ -80,7 +85,7 @@ int parse_authobj(const unsigned char *key, const int keysize, unsigned char theirhash[HASHSIZE]; int theirhashsize = HASHSIZE; - if (decrypt(key, keysize, buffer, data, datasize)) + if (decrypt(key, CBLKSIZE, buffer, data, datasize)) return -1; if (serial_init(&srl, data, datasize)) return -1; tsize = *secsize; diff --git a/test_auth.c b/test_auth.c new file mode 100644 index 0000000..55911c7 --- /dev/null +++ b/test_auth.c @@ -0,0 +1,49 @@ +#include +#include +#include "authobj.h" + +int main(int argc, char *argv[]) +{ + const char *id = "testuser"; + const char *pass = "testpassword"; + const char *nonce = "1"; + const unsigned char secret[] = {0x52, 0xf3, 0xbe, 0x1f, 0x3e, + 0x22, 0xa8, 0xee, 0xdf, 0x10, + 0x86, 0xf2, 0x17, 0xd7, 0x21, + 0x9d, 0x08, 0x14, 0x48, 0x38}; + const unsigned char *payload = (unsigned char *) + "To authorize or not to authorize?"; + unsigned char authobj[512]; + int authsize = sizeof(authobj); + unsigned char challenge[128]; + int challengesize = sizeof(challenge); + int rc; + const unsigned char key[] = {0xcc, 0x21, 0xaa, 0xb7, 0xf5, + 0x76, 0xd6, 0xe7, 0xed, 0x90, + 0x69, 0x51, 0x3d, 0x9b, 0x3a, + 0x9d, 0xa8, 0xcf, 0xf9, 0x2f}; + unsigned char newsecret[20]; + int newsecsize = sizeof(newsecret); + unsigned char newload[128]; + int newloadsize=sizeof(newload); + + rc = make_authobj(id, pass, nonce, secret, sizeof(secret), + payload, strlen((char *)payload), + authobj, &authsize); + printf("make_authobj() rc=%d size=%d\n", rc, authsize); + if (rc) return rc; + + rc = make_challenge(id, pass, nonce, challenge, &challengesize); + printf("make_challenge() rc=%d size=%d\n", rc, challengesize); + if (rc) return rc; + + rc = parse_authobj(key, sizeof(key), authobj, authsize, + newsecret, &newsecsize, newload, &newloadsize); + printf("parse_authobj() rc=%d secretsize=%d payload=\"%.*s\" (%d)\n", + rc, newsecsize, newloadsize, newload, newloadsize); + if (memcmp(secret, newsecret, newsecsize)) { + printf("extracted secret does not match\n"); + return -1; + } + return 0; +} -- 2.39.2