4 unsigned char *signature = NULL;
5 SilcUInt32 signature_len;
6 SilcBool success = FALSE;
8 static void sign_cb(SilcBool success, const unsigned char *sig,
9 SilcUInt32 sig_len, void *context)
11 SILC_LOG_HEXDUMP(("Signature"), sig, sig_len);
12 signature = silc_memdup(sig, sig_len);
13 signature_len = sig_len;
16 static void verify_cb(SilcBool s, void *context)
18 SILC_LOG_DEBUG(("Verify %s", s ? "success" : "failed"));
22 int main(int argc, char **argv)
24 const SilcPKCSAlgorithm *alg;
26 void *public_key, *private_key;
28 unsigned char tmp[20];
30 if (argc > 1 && !strcmp(argv[1], "-d")) {
32 silc_log_debug_hexdump(TRUE);
33 silc_log_set_debug_string("*dsa*,*pkcs*");
36 silc_crypto_init(NULL);
38 rng = silc_rng_alloc();
40 silc_hash_alloc("sha1", &hash);
42 SILC_LOG_DEBUG(("Generate DSA keypair"));
43 alg = silc_pkcs_find_algorithm("dsa", "dss");
44 if (!silc_dsa_generate_key(alg, 2048, rng, &public_key, &private_key))
47 SILC_LOG_DEBUG(("Key length: %d",
48 silc_dsa_public_key_bitlen(alg, public_key)));
50 SILC_LOG_DEBUG(("Sign"));
51 memset(tmp, 0, sizeof(tmp));
52 silc_dsa_sign(alg, private_key, tmp, sizeof(tmp), TRUE, hash, rng,
55 SILC_LOG_DEBUG(("Verify"));
56 silc_dsa_verify(alg, public_key, signature, signature_len,
57 tmp, sizeof(tmp), hash, rng, verify_cb, NULL);
63 SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
64 fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");