crypto-algorithms.c

Basic implementations of standard cryptography algorithms, like AES and SHA-1
git clone git://git.finwo.net/lib/crypto-algorithms.c
Log | Files | Refs | README

des_test.c (3374B)


      1 /*********************************************************************
      2 * Filename:   des_test.c
      3 * Author:     Brad Conte (brad AT bradconte.com)
      4 * Copyright:
      5 * Disclaimer: This code is presented "as is" without any guarantees.
      6 * Details:    Performs known-answer tests on the corresponding DES
      7 	          implementation. These tests do not encompass the full
      8 	          range of available test vectors, however, if the tests
      9 	          pass it is very, very likely that the code is correct
     10 	          and was compiled properly. This code also serves as
     11 	          example usage of the functions.
     12 *********************************************************************/
     13 
     14 /*************************** HEADER FILES ***************************/
     15 #include <stdio.h>
     16 #include <memory.h>
     17 #include "des.h"
     18 
     19 /*********************** FUNCTION DEFINITIONS ***********************/
     20 int des_test()
     21 {
     22 	BYTE pt1[DES_BLOCK_SIZE] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xE7};
     23 	BYTE pt2[DES_BLOCK_SIZE] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
     24 	BYTE pt3[DES_BLOCK_SIZE] = {0x54,0x68,0x65,0x20,0x71,0x75,0x66,0x63};
     25 	BYTE ct1[DES_BLOCK_SIZE] = {0xc9,0x57,0x44,0x25,0x6a,0x5e,0xd3,0x1d};
     26 	BYTE ct2[DES_BLOCK_SIZE] = {0x85,0xe8,0x13,0x54,0x0f,0x0a,0xb4,0x05};
     27 	BYTE ct3[DES_BLOCK_SIZE] = {0xc9,0x57,0x44,0x25,0x6a,0x5e,0xd3,0x1d};
     28 	BYTE ct4[DES_BLOCK_SIZE] = {0xA8,0x26,0xFD,0x8C,0xE5,0x3B,0x85,0x5F};
     29 	BYTE key1[DES_BLOCK_SIZE] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
     30 	BYTE key2[DES_BLOCK_SIZE] = {0x13,0x34,0x57,0x79,0x9B,0xBC,0xDF,0xF1};
     31 	BYTE three_key1[DES_BLOCK_SIZE * 3] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
     32 	                                       0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
     33 	                                       0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
     34 	BYTE three_key2[DES_BLOCK_SIZE * 3] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
     35 	                                       0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,0x01,
     36 	                                       0x45,0x67,0x89,0xAB,0xCD,0xEF,0x01,0x23};
     37 
     38 	BYTE schedule[16][6];
     39 	BYTE three_schedule[3][16][6];
     40 	BYTE buf[DES_BLOCK_SIZE];
     41 	int pass = 1;
     42 
     43 	des_key_setup(key1, schedule, DES_ENCRYPT);
     44 	des_crypt(pt1, buf, schedule);
     45 	pass = pass && !memcmp(ct1, buf, DES_BLOCK_SIZE);
     46 
     47 	des_key_setup(key1, schedule, DES_DECRYPT);
     48 	des_crypt(ct1, buf, schedule);
     49 	pass = pass && !memcmp(pt1, buf, DES_BLOCK_SIZE);
     50 
     51 	des_key_setup(key2, schedule, DES_ENCRYPT);
     52 	des_crypt(pt2, buf, schedule);
     53 	pass = pass && !memcmp(ct2, buf, DES_BLOCK_SIZE);
     54 
     55 	des_key_setup(key2, schedule, DES_DECRYPT);
     56 	des_crypt(ct2, buf, schedule);
     57 	pass = pass && !memcmp(pt2, buf, DES_BLOCK_SIZE);
     58 
     59 	three_des_key_setup(three_key1, three_schedule, DES_ENCRYPT);
     60 	three_des_crypt(pt1, buf, three_schedule);
     61 	pass = pass && !memcmp(ct3, buf, DES_BLOCK_SIZE);
     62 
     63 	three_des_key_setup(three_key1, three_schedule, DES_DECRYPT);
     64 	three_des_crypt(ct3, buf, three_schedule);
     65 	pass = pass && !memcmp(pt1, buf, DES_BLOCK_SIZE);
     66 
     67 	three_des_key_setup(three_key2, three_schedule, DES_ENCRYPT);
     68 	three_des_crypt(pt3, buf, three_schedule);
     69 	pass = pass && !memcmp(ct4, buf, DES_BLOCK_SIZE);
     70 
     71 	three_des_key_setup(three_key2, three_schedule, DES_DECRYPT);
     72 	three_des_crypt(ct4, buf, three_schedule);
     73 	pass = pass && !memcmp(pt3, buf, DES_BLOCK_SIZE);
     74 
     75 	return(pass);
     76 }
     77 
     78 int main()
     79 {
     80 	printf("DES test: %s\n", des_test() ? "SUCCEEDED" : "FAILED");
     81 
     82 	return(0);
     83 }