Module Name: src Committed By: pgoyette Date: Thu Jan 16 18:09:55 UTC 2014
Modified Files: src/tests/crypto/opencrypto: h_xcbcmac.c Log Message: Include all of the examples from RFC3566 To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/tests/crypto/opencrypto/h_xcbcmac.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/crypto/opencrypto/h_xcbcmac.c diff -u src/tests/crypto/opencrypto/h_xcbcmac.c:1.1 src/tests/crypto/opencrypto/h_xcbcmac.c:1.2 --- src/tests/crypto/opencrypto/h_xcbcmac.c:1.1 Tue Jan 14 17:51:39 2014 +++ src/tests/crypto/opencrypto/h_xcbcmac.c Thu Jan 16 18:09:55 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: h_xcbcmac.c,v 1.1 2014/01/14 17:51:39 pgoyette Exp $ */ +/* $NetBSD: h_xcbcmac.c,v 1.2 2014/01/16 18:09:55 pgoyette Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -36,20 +36,43 @@ #include <crypto/cryptodev.h> + +/* test vectors from RFC3566 */ unsigned char key[16] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; -char plaintx[] = {0x00, 0x01, 0x02}; -const unsigned char ciphertx[16] = { - 0x21, 0xc6, 0x0d, 0xa5, 0x34, 0x24, 0x8b, 0xce, - 0x95, 0x86, 0x64, 0xb3, 0x66, 0x77, 0x9b, 0x4c +char plaintx[1000] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21 +}; +const struct { + size_t len; + unsigned char mac[12]; +} tests[] = { + { 0, { 0x75, 0xf0, 0x25, 0x1d, 0x52, 0x8a, + 0xc0, 0x1c, 0x45, 0x73, 0xdf, 0xd5 } }, + { 3, { 0x5b, 0x37, 0x65, 0x80, 0xae, 0x2f, + 0x19, 0xaf, 0xe7, 0x21, 0x9c, 0xee } }, + { 16, { 0xd2, 0xa2, 0x46, 0xfa, 0x34, 0x9b, + 0x68, 0xa7, 0x99, 0x98, 0xa4, 0x39 } }, + { 20, { 0x47, 0xf5, 0x1b, 0x45, 0x64, 0x96, + 0x62, 0x15, 0xb8, 0x98, 0x5c, 0x63 } }, + { 32, { 0xf5, 0x4f, 0x0e, 0xc8, 0xd2, 0xb9, + 0xf3, 0xd3, 0x68, 0x07, 0x73, 0x4b } }, + { 34, { 0xbe, 0xcb, 0xb3, 0xbc, 0xcd, 0xb5, + 0x18, 0xa3, 0x06, 0x77, 0xd5, 0x48 } }, + { 1000, { 0xf0, 0xda, 0xfe, 0xe8, 0x95, 0xdb, + 0x30, 0x25, 0x37, 0x61, 0x10, 0x3b } }, }; int main(void) { - int fd, res; + int fd, res, i; struct session_op cs; struct crypt_op co; unsigned char buf[16]; @@ -65,26 +88,21 @@ main(void) if (res < 0) err(1, "CIOCGSESSION"); - memset(&co, 0, sizeof(co)); - memset(buf, 0, sizeof(buf)); - co.ses = cs.ses; - co.op = COP_ENCRYPT; - co.len = 0 /*sizeof(plaintx)*/; - co.src = plaintx; - co.mac = buf; - res = ioctl(fd, CIOCCRYPT, &co); - if (res < 0) - err(1, "CIOCCRYPT"); -#if 0 - if (memcmp(co.dst, ciphertx, sizeof(ciphertx))) - errx(1, "verification failed"); -#else - { - unsigned int i; - for (i = 0; i < sizeof(buf); i++) - printf("%02x ", buf[i]); - printf("\n"); + for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { + memset(&co, 0, sizeof(co)); + memset(buf, 0, sizeof(buf)); + if (tests[i].len == sizeof(plaintx)) + memset(&plaintx, 0, sizeof(plaintx)); + co.ses = cs.ses; + co.op = COP_ENCRYPT; + co.len = tests[i].len; + co.src = plaintx; + co.mac = buf; + res = ioctl(fd, CIOCCRYPT, &co); + if (res < 0) + err(1, "CIOCCRYPT test %d", i); + if (memcmp(buf, &tests[i].mac, sizeof(tests[i].mac))) + errx(1, "verification failed test %d", i); } -#endif return 0; }