static int cp_hash_init_test(struct cp_test *test, size_t len) { unsigned char *scratchpad = NULL; #define MAX_KEYLEN 128 unsigned char data[MAX_KEYLEN]; dbg("Initializing hash test %s\n", test->testname); if (!test->driver_name) { printf(DRIVER_NAME": missing driver_name for %s\n", test->testname); return -EFAULT; } if (kcapi_md_init(&test->u.hash.handle, test->driver_name)) { printf(DRIVER_NAME": could not allocate shash handle for " "%s\n", test->driver_name); goto out; } /* HMAC */ if (test->u.hash.hmac) { if (kcapi_md_blocksize(&test->u.hash.handle) > MAX_KEYLEN) { printf(DRIVER_NAME": key length for cipher %s too large %u\n", test->driver_name, kcapi_md_blocksize(&test->u.hash.handle)); goto out; } cp_read_random(data, kcapi_md_blocksize(&test->u.hash.handle)); if (kcapi_md_setkey(&test->u.hash.handle, data, kcapi_md_blocksize(&test->u.hash.handle))) { printf(DRIVER_NAME": key could not be set\n"); goto out; } } if (len < 4) len = 4; if (posix_memalign((void *)&scratchpad, kcapi_md_blocksize(&test->u.hash.handle), kcapi_md_blocksize(&test->u.hash.handle) * len)){ printf(DRIVER_NAME": could not allocate scratchpad for " "%s\n", test->driver_name); goto out; } cp_read_random(scratchpad, kcapi_md_blocksize(&test->u.hash.handle) * len); test->u.hash.inputlen = len * kcapi_md_blocksize(&test->u.hash.handle); test->u.hash.scratchpad = scratchpad; return 0; out: kcapi_md_destroy(&test->u.hash.handle); if (scratchpad) free(scratchpad); return -ENOMEM; }
/**************************************************************************** * Random Number Generators ****************************************************************************/ static int cp_rng_init_test(struct cp_test *test, size_t len) { unsigned char *scratchpad = NULL; #define SEEDSIZE 64 unsigned char seed[SEEDSIZE]; dbg("Initializing RNG test %s\n", test->testname); if (!test->driver_name) { printf(DRIVER_NAME": missing driver_name for %s\n", test->testname); return -EFAULT; } if (kcapi_rng_init(&test->u.rng.handle, test->driver_name, 0)) { printf(DRIVER_NAME": could not allocate rng handle for " "%s\n", test->driver_name); goto out; } dbg("testing RNG %s allocated\n", test->driver_name); cp_read_random(seed, SEEDSIZE); if (kcapi_rng_seed(&test->u.rng.handle, seed, SEEDSIZE)) { printf(DRIVER_NAME": seed could not be set\n"); goto out; } if (!len) len = 1; if (posix_memalign((void *)&scratchpad, 16, test->u.rng.blocksize * len)) { printf(DRIVER_NAME": could not allocate scratchpad for " "%s\n", test->driver_name); goto out; } test->u.rng.scratchpad = scratchpad; test->u.rng.inputlen = len * test->u.rng.blocksize; return 0; out: kcapi_rng_destroy(&test->u.rng.handle); if (scratchpad) free(scratchpad); return -ENOMEM; }