1 #include <tomcrypt_test.h> 2 3 #ifdef MDSA 4 5 int dsa_test(void) 6 { 7 unsigned char msg[16], out[1024], out2[1024]; 8 unsigned long x, y; 9 int stat1, stat2; 10 dsa_key key, key2; 11 12 /* make a random key */ 13 DO(dsa_make_key(&yarrow_prng, find_prng("yarrow"), 20, 128, &key)); 14 15 /* verify it */ 16 DO(dsa_verify_key(&key, &stat1)); 17 if (stat1 == 0) { fprintf(stderr, "dsa_verify_key "); return 1; } 18 19 /* encrypt a message */ 20 for (x = 0; x < 16; x++) { msg[x] = x; } 21 x = sizeof(out); 22 DO(dsa_encrypt_key(msg, 16, out, &x, &yarrow_prng, find_prng("yarrow"), find_hash("sha1"), &key)); 23 24 /* decrypt */ 25 y = sizeof(out2); 26 DO(dsa_decrypt_key(out, x, out2, &y, &key)); 27 28 if (y != 16 || memcmp(out2, msg, 16)) { 29 fprintf(stderr, "dsa_decrypt failed, y == %lu\n", y); 30 return 1; 31 } 32 33 /* sign the message */ 34 x = sizeof(out); 35 DO(dsa_sign_hash(msg, sizeof(msg), out, &x, &yarrow_prng, find_prng("yarrow"), &key)); 36 37 /* verify it once */ 38 DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key)); 39 40 /* Modify and verify again */ 41 msg[0] ^= 1; 42 DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat2, &key)); 43 msg[0] ^= 1; 44 if (!(stat1 == 1 && stat2 == 0)) { fprintf(stderr, "dsa_verify %d %d", stat1, stat2); return 1; } 45 46 /* test exporting it */ 47 x = sizeof(out2); 48 DO(dsa_export(out2, &x, PK_PRIVATE, &key)); 49 DO(dsa_import(out2, x, &key2)); 50 51 /* verify a signature with it */ 52 DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key2)); 53 if (stat1 == 0) { fprintf(stderr, "dsa_verify (import private) %d ", stat1); return 1; } 54 dsa_free(&key2); 55 56 /* export as public now */ 57 x = sizeof(out2); 58 DO(dsa_export(out2, &x, PK_PUBLIC, &key)); 59 60 DO(dsa_import(out2, x, &key2)); 61 /* verify a signature with it */ 62 DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key2)); 63 if (stat1 == 0) { fprintf(stderr, "dsa_verify (import public) %d ", stat1); return 1; } 64 dsa_free(&key2); 65 dsa_free(&key); 66 67 return 0; 68 } 69 70 #else 71 72 int dsa_test(void) 73 { 74 fprintf(stderr, "NOP"); 75 return 0; 76 } 77 78 #endif 79 80 /* $Source: /cvs/libtom/libtomcrypt/testprof/dsa_test.c,v $ */ 81 /* $Revision: 1.9 $ */ 82 /* $Date: 2005/10/30 18:49:14 $ */ 83