Mercurial > dropbear
comparison libtomcrypt/testprof/dsa_test.c @ 399:a707e6148060
merge of '5fdf69ca60d1683cdd9f4c2595134bed26394834'
and '6b61c50f4cf888bea302ac8fcf5dbb573b443251'
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sat, 03 Feb 2007 08:20:34 +0000 |
parents | 0cbe8f6dbf9e |
children | f849a5ca2efc |
comparison
equal
deleted
inserted
replaced
394:17d097fc111c | 399:a707e6148060 |
---|---|
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 $ */ |