+++ /dev/null
-#include "silc.h"
-#include "dsa.h"
-
-unsigned char *signature = NULL;
-SilcUInt32 signature_len;
-SilcBool success = FALSE;
-
-static void sign_cb(SilcBool success, const unsigned char *sig,
- SilcUInt32 sig_len, void *context)
-{
- SILC_LOG_HEXDUMP(("Signature"), sig, sig_len);
- signature = silc_memdup(sig, sig_len);
- signature_len = sig_len;
-}
-
-static void verify_cb(SilcBool s, void *context)
-{
- SILC_LOG_DEBUG(("Verify %s", s ? "success" : "failed"));
- success = s;
-}
-
-int main(int argc, char **argv)
-{
- const SilcPKCSAlgorithm *alg;
- SilcRng rng;
- void *public_key, *private_key;
- SilcHash hash;
- unsigned char tmp[20];
-
- if (argc > 1 && !strcmp(argv[1], "-d")) {
- silc_log_debug(TRUE);
- silc_log_debug_hexdump(TRUE);
- silc_log_set_debug_string("*dsa*,*pkcs*");
- }
-
- silc_crypto_init(NULL);
-
- rng = silc_rng_alloc();
- silc_rng_init(rng);
- silc_hash_alloc("sha1", &hash);
-
- SILC_LOG_DEBUG(("Generate DSA keypair"));
- alg = silc_pkcs_find_algorithm("dsa", "dss");
- if (!silc_dsa_generate_key(alg, 2048, rng, &public_key, &private_key))
- goto err;
-
- SILC_LOG_DEBUG(("Key length: %d",
- silc_dsa_public_key_bitlen(alg, public_key)));
-
- SILC_LOG_DEBUG(("Sign"));
- memset(tmp, 0, sizeof(tmp));
- silc_dsa_sign(alg, private_key, tmp, sizeof(tmp), TRUE, hash, rng,
- sign_cb, NULL);
-
- SILC_LOG_DEBUG(("Verify"));
- silc_dsa_verify(alg, public_key, signature, signature_len,
- tmp, sizeof(tmp), hash, rng, verify_cb, NULL);
-
- silc_rng_free(rng);
- silc_free(signature);
-
- err:
- SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
- fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
-
- return success;
-}