| 
									
										
										
										
											2005-04-17 11:37:13 +00:00
										 |  |  | #include <tomcrypt_test.h>
 | 
					
						
							| 
									
										
										
										
											2004-05-31 02:36:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-07-20 17:48:02 +00:00
										 |  |  | #ifdef LTC_MDSA
 | 
					
						
							| 
									
										
										
										
											2004-10-30 03:00:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-05-31 02:36:47 +00:00
										 |  |  | int dsa_test(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |    unsigned char msg[16], out[1024], out2[1024]; | 
					
						
							| 
									
										
										
										
											2005-11-18 05:15:37 +00:00
										 |  |  |    unsigned long x, y; | 
					
						
							| 
									
										
										
										
											2004-10-30 03:00:26 +00:00
										 |  |  |    int stat1, stat2; | 
					
						
							| 
									
										
										
										
											2004-05-31 02:36:47 +00:00
										 |  |  |    dsa_key key, key2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    /* make a random key */ | 
					
						
							| 
									
										
										
										
											2005-04-17 11:37:13 +00:00
										 |  |  |    DO(dsa_make_key(&yarrow_prng, find_prng("yarrow"), 20, 128, &key)); | 
					
						
							| 
									
										
										
										
											2004-05-31 02:36:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    /* verify it */ | 
					
						
							|  |  |  |    DO(dsa_verify_key(&key, &stat1)); | 
					
						
							| 
									
										
										
										
											2005-06-09 00:08:13 +00:00
										 |  |  |    if (stat1 == 0) { fprintf(stderr, "dsa_verify_key "); return 1; } | 
					
						
							| 
									
										
										
										
											2005-11-18 05:15:37 +00:00
										 |  |  |     | 
					
						
							|  |  |  |    /* encrypt a message */ | 
					
						
							|  |  |  |    for (x = 0; x < 16; x++) { msg[x] = x; } | 
					
						
							|  |  |  |    x = sizeof(out); | 
					
						
							|  |  |  |    DO(dsa_encrypt_key(msg, 16, out, &x, &yarrow_prng, find_prng("yarrow"), find_hash("sha1"), &key)); | 
					
						
							|  |  |  |     | 
					
						
							|  |  |  |    /* decrypt */ | 
					
						
							|  |  |  |    y = sizeof(out2); | 
					
						
							|  |  |  |    DO(dsa_decrypt_key(out, x, out2, &y, &key)); | 
					
						
							|  |  |  |     | 
					
						
							|  |  |  |    if (y != 16 || memcmp(out2, msg, 16)) { | 
					
						
							|  |  |  |       fprintf(stderr, "dsa_decrypt failed, y == %lu\n", y); | 
					
						
							|  |  |  |       return 1; | 
					
						
							|  |  |  |    } | 
					
						
							| 
									
										
										
										
											2004-05-31 02:36:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    /* sign the message */ | 
					
						
							|  |  |  |    x = sizeof(out); | 
					
						
							| 
									
										
										
										
											2005-04-17 11:37:13 +00:00
										 |  |  |    DO(dsa_sign_hash(msg, sizeof(msg), out, &x, &yarrow_prng, find_prng("yarrow"), &key)); | 
					
						
							| 
									
										
										
										
											2004-05-31 02:36:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    /* verify it once */ | 
					
						
							|  |  |  |    DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    /* Modify and verify again */ | 
					
						
							|  |  |  |    msg[0] ^= 1; | 
					
						
							|  |  |  |    DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat2, &key)); | 
					
						
							|  |  |  |    msg[0] ^= 1; | 
					
						
							| 
									
										
										
										
											2005-06-09 00:08:13 +00:00
										 |  |  |    if (!(stat1 == 1 && stat2 == 0)) { fprintf(stderr, "dsa_verify %d %d", stat1, stat2); return 1; } | 
					
						
							| 
									
										
										
										
											2004-05-31 02:36:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    /* test exporting it */ | 
					
						
							|  |  |  |    x = sizeof(out2); | 
					
						
							|  |  |  |    DO(dsa_export(out2, &x, PK_PRIVATE, &key)); | 
					
						
							|  |  |  |    DO(dsa_import(out2, x, &key2)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    /* verify a signature with it */ | 
					
						
							|  |  |  |    DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key2)); | 
					
						
							| 
									
										
										
										
											2005-06-09 00:08:13 +00:00
										 |  |  |    if (stat1 == 0) { fprintf(stderr, "dsa_verify (import private) %d ", stat1); return 1; } | 
					
						
							| 
									
										
										
										
											2004-05-31 02:36:47 +00:00
										 |  |  |    dsa_free(&key2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    /* export as public now */ | 
					
						
							|  |  |  |    x = sizeof(out2); | 
					
						
							|  |  |  |    DO(dsa_export(out2, &x, PK_PUBLIC, &key)); | 
					
						
							| 
									
										
										
										
											2005-06-09 00:08:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-05-31 02:36:47 +00:00
										 |  |  |    DO(dsa_import(out2, x, &key2)); | 
					
						
							|  |  |  |    /* verify a signature with it */ | 
					
						
							|  |  |  |    DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key2)); | 
					
						
							| 
									
										
										
										
											2005-06-09 00:08:13 +00:00
										 |  |  |    if (stat1 == 0) { fprintf(stderr, "dsa_verify (import public) %d ", stat1); return 1; } | 
					
						
							| 
									
										
										
										
											2004-05-31 02:36:47 +00:00
										 |  |  |    dsa_free(&key2); | 
					
						
							|  |  |  |    dsa_free(&key); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    return 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2004-10-30 03:00:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int dsa_test(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2005-06-09 00:08:13 +00:00
										 |  |  |   fprintf(stderr, "NOP"); | 
					
						
							| 
									
										
										
										
											2004-10-30 03:00:26 +00:00
										 |  |  |   return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-06-09 00:08:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* $Source$ */ | 
					
						
							|  |  |  | /* $Revision$ */ | 
					
						
							|  |  |  | /* $Date$ */ |