summaryrefslogtreecommitdiffstats
path: root/example-cipher.c
diff options
context:
space:
mode:
Diffstat (limited to 'example-cipher.c')
-rw-r--r--example-cipher.c102
1 files changed, 99 insertions, 3 deletions
diff --git a/example-cipher.c b/example-cipher.c
index 500d773..d7982ae 100644
--- a/example-cipher.c
+++ b/example-cipher.c
@@ -30,9 +30,9 @@ test_crypto(int cfd)
memset(&sess, 0, sizeof(sess));
memset(&cryp, 0, sizeof(cryp));
- memset(&plaintext, 0x15, sizeof(plaintext));
- memset(&key, 0x33, sizeof(key));
- memset(&iv, 0x03, sizeof(iv));
+ memset(plaintext, 0x15, sizeof(plaintext));
+ memset(key, 0x33, sizeof(key));
+ memset(iv, 0x03, sizeof(iv));
/* Get crypto session for AES128 */
sess.cipher = CRYPTO_AES_CBC;
@@ -89,6 +89,98 @@ test_crypto(int cfd)
return 0;
}
+static int test_aes(int cfd)
+{
+ char plaintext1[BLOCK_SIZE];
+ char ciphertext1[BLOCK_SIZE] = { 0xdf, 0x55, 0x6a, 0x33, 0x43, 0x8d, 0xb8, 0x7b, 0xc4, 0x1b, 0x17, 0x52, 0xc5, 0x5e, 0x5e, 0x49 };
+ char iv1[BLOCK_SIZE];
+ char key1[KEY_SIZE] = { 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ char plaintext2[BLOCK_SIZE] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00 };
+ char ciphertext2[BLOCK_SIZE] = { 0xb7, 0x97, 0x2b, 0x39, 0x41, 0xc4, 0x4b, 0x90, 0xaf, 0xa7, 0xb2, 0x64, 0xbf, 0xba, 0x73, 0x87 };
+ char iv2[BLOCK_SIZE];
+ char key2[KEY_SIZE];
+
+ struct session_op sess;
+ struct crypt_op cryp;
+
+ memset(&sess, 0, sizeof(sess));
+ memset(&cryp, 0, sizeof(cryp));
+
+ memset(plaintext1, 0x0, sizeof(plaintext1));
+ memset(iv1, 0x0, sizeof(iv1));
+
+ /* Get crypto session for AES128 */
+ sess.cipher = CRYPTO_AES_CBC;
+ sess.keylen = KEY_SIZE;
+ sess.key = key1;
+ if (ioctl(cfd, CIOCGSESSION, &sess)) {
+ perror("ioctl(CIOCGSESSION)");
+ return 1;
+ }
+
+ /* Encrypt data.in to data.encrypted */
+ cryp.ses = sess.ses;
+ cryp.len = sizeof(plaintext1);
+ cryp.src = plaintext1;
+ cryp.dst = plaintext1;
+ cryp.iv = iv1;
+ cryp.op = COP_ENCRYPT;
+ if (ioctl(cfd, CIOCCRYPT, &cryp)) {
+ perror("ioctl(CIOCCRYPT)");
+ return 1;
+ }
+
+ /* Verify the result */
+ if (memcmp(plaintext1, ciphertext1, sizeof(plaintext1)) != 0) {
+ fprintf(stderr,
+ "FAIL: Decrypted data are different from the input data.\n");
+ return 1;
+ }
+
+ /* Test 2 */
+
+ memset(key2, 0x0, sizeof(key2));
+ memset(iv2, 0x0, sizeof(iv2));
+
+ /* Get crypto session for AES128 */
+ sess.cipher = CRYPTO_AES_CBC;
+ sess.keylen = KEY_SIZE;
+ sess.key = key2;
+ if (ioctl(cfd, CIOCGSESSION, &sess)) {
+ perror("ioctl(CIOCGSESSION)");
+ return 1;
+ }
+
+ /* Encrypt data.in to data.encrypted */
+ cryp.ses = sess.ses;
+ cryp.len = sizeof(plaintext2);
+ cryp.src = plaintext2;
+ cryp.dst = plaintext2;
+ cryp.iv = iv2;
+ cryp.op = COP_ENCRYPT;
+ if (ioctl(cfd, CIOCCRYPT, &cryp)) {
+ perror("ioctl(CIOCCRYPT)");
+ return 1;
+ }
+
+ /* Verify the result */
+ if (memcmp(plaintext2, ciphertext2, sizeof(plaintext2)) != 0) {
+ fprintf(stderr,
+ "FAIL: Decrypted data are different from the input data.\n");
+ return 1;
+ }
+
+ printf("AES Test passed\n");
+
+ /* Finish crypto session */
+ if (ioctl(cfd, CIOCFSESSION, &sess.ses)) {
+ perror("ioctl(CIOCFSESSION)");
+ return 1;
+ }
+
+ return 0;
+}
+
int
main()
{
@@ -114,6 +206,9 @@ main()
}
/* Run the test itself */
+ if (test_aes(cfd))
+ return 1;
+
if (test_crypto(cfd))
return 1;
@@ -131,3 +226,4 @@ main()
return 0;
}
+