static void cryptodev_des_ncbc_encrypt(des_cblock (*input), des_cblock (*output), long length, des_key_schedule schedule, des_cblock (*ivec), int enc) { if (cryptodev_fd != -1) { char key[8]; des_cblock iv; memcpy(key, schedule, 8); memcpy(&iv, ivec, sizeof(des_cblock)); cryptodev_des_cryptodev_internal( CRYPTO_DES_CBC, key, enc ? COP_ENCRYPT : COP_DECRYPT, input, output, length, &iv, sizeof(des_cblock)); memcpy(ivec, &iv, sizeof(des_cblock)); } }
static void cryptodev_des_ecb_encrypt( des_cblock (*input), des_cblock (*output), des_key_schedule ks, int enc) { if (cryptodev_fd != -1) { char key[8]; des_cblock iv; memcpy(key, ks, 8); memset(&iv, 0, sizeof(des_cblock)); /* single block ecb == single block cbc with iv=0 */ cryptodev_des_cryptodev_internal( CRYPTO_DES_CBC, key, enc ? COP_ENCRYPT : COP_DECRYPT, input, output, sizeof(des_cblock), &iv, sizeof(des_cblock)); } }
static void cryptodev_des_cbc_encrypt(des_cblock (*input), des_cblock (*output), long length, des_key_schedule schedule, des_cblock (*ivec), int enc) { if (cryptodev_fd != -1) { char key[8]; des_cblock iv; memcpy(key, schedule, 8); memcpy(&iv, ivec, sizeof(des_cblock)); cryptodev_des_cryptodev_internal( CRYPTO_DES_CBC, key, enc ? COP_ENCRYPT : COP_DECRYPT, input, output, length, &iv, sizeof(des_cblock)); /* intentionally do NOT copy out the iv into ivec, this is the * ONLY difference between the cbc and ncbc versions */ } }
static void cryptodev_des_encrypt( DES_LONG *data, des_key_schedule ks, int enc) { if (cryptodev_fd != -1) { char key[8]; des_cblock iv; des_cblock datac; register DES_LONG l; unsigned char *p; p=&datac[0]; l=data[0]; l2c(l,p); l=data[1]; l2c(l,p); memcpy(key, ks, 8); memset(&iv, 0, sizeof(des_cblock)); /* single block ecb == single block cbc with iv=0 */ cryptodev_des_cryptodev_internal( CRYPTO_DES_CBC, key, enc ? COP_ENCRYPT : COP_DECRYPT, &datac, &datac, sizeof(des_cblock), &iv, sizeof(des_cblock)); p=datac; c2l(p,l); data[0]=l; c2l(p,l); data[1]=l; } }