X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcacc%2Fsilcacc_pkcs.c;h=d1b85e327d296d36430947fbf5cfff1313a3e200;hp=d9474be8548b9052a1ae26a73de345ab8e18259c;hb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;hpb=b4e47526485cbb92f5c012c58f9d8eae3b7b8221 diff --git a/lib/silcacc/silcacc_pkcs.c b/lib/silcacc/silcacc_pkcs.c index d9474be8..d1b85e32 100644 --- a/lib/silcacc/silcacc_pkcs.c +++ b/lib/silcacc/silcacc_pkcs.c @@ -199,6 +199,8 @@ SILC_PKCS_PRIVATE_KEY_BITLEN(silc_acc_pkcs_private_key_bitlen) prv->accelerated->private_key); } +/* Accelerator routines follow */ + SILC_PKCS_PUBLIC_KEY_FREE(silc_acc_pkcs_public_key_free) { SilcAcceleratorPublicKey pub = public_key; @@ -240,7 +242,7 @@ SILC_PKCS_SIGN(silc_acc_pkcs_sign) /* Accelerate */ return prv->acc->pkcs[prv->pkcs_index].sign( &prv->acc->pkcs[prv->pkcs_index], prv->context, src, - src_len, compute_hash, hash, sign_cb, context); + src_len, compute_hash, hash, rng, sign_cb, context); } SILC_PKCS_VERIFY(silc_acc_pkcs_verify) @@ -250,7 +252,7 @@ SILC_PKCS_VERIFY(silc_acc_pkcs_verify) /* Accelerate */ return pub->acc->pkcs[pub->pkcs_index].verify( &pub->acc->pkcs[pub->pkcs_index], pub->context, - signature, signature_len, data, data_len, hash, + signature, signature_len, data, data_len, hash, rng, verify_cb, context); } @@ -278,6 +280,11 @@ SilcPublicKey silc_acc_public_key(SilcAccelerator acc, return NULL; } + if (silc_acc_get_public_key(NULL, public_key)) { + SILC_LOG_DEBUG(("Pubilc key %p is already accelerated", public_key)); + return NULL; + } + /* Check that accelerator supports this public key algorithm */ alg = silc_pkcs_get_algorithm(public_key); if (!alg) @@ -292,7 +299,7 @@ SilcPublicKey silc_acc_public_key(SilcAccelerator acc, } if (alg) { SILC_LOG_DEBUG(("Accelerator %s does not support %s/%s acceleration", - alg->name, alg->scheme)); + acc->name, alg->name, alg->scheme)); return NULL; } @@ -323,8 +330,8 @@ SilcPublicKey silc_acc_public_key(SilcAccelerator acc, acc_pubkey->pkcs_index = i; /* Accelerate the public key. Returns accelerator context. */ - if (!acc->pkcs->import_public_key(&acc->pkcs[i], public_key, 0, - &acc_pubkey->context)) { + if (!acc->pkcs[i].import_public_key(&acc->pkcs[i], public_key, 0, + &acc_pubkey->context)) { SILC_LOG_ERROR(("Error accelerating public key with accelerator '%s'", acc->name)); silc_free(acc_pubkey); @@ -361,6 +368,11 @@ SilcPrivateKey silc_acc_private_key(SilcAccelerator acc, return NULL; } + if (silc_acc_get_private_key(NULL, private_key)) { + SILC_LOG_DEBUG(("Private key %p is already accelerated", private_key)); + return NULL; + } + /* Check that accelerator supports this private key algorithm */ alg = silc_pkcs_get_algorithm(private_key); if (!alg) @@ -375,7 +387,7 @@ SilcPrivateKey silc_acc_private_key(SilcAccelerator acc, } if (alg) { SILC_LOG_DEBUG(("Accelerator %s does not support %s/%s acceleration", - alg->name, alg->scheme)); + acc->name, alg->name, alg->scheme)); return NULL; } @@ -406,8 +418,8 @@ SilcPrivateKey silc_acc_private_key(SilcAccelerator acc, acc_privkey->pkcs_index = i; /* Accelerate the public key. Returns accelerator context. */ - if (!acc->pkcs->import_private_key(&acc->pkcs[i], private_key, 0, - &acc_privkey->context)) { + if (!acc->pkcs[i].import_private_key(&acc->pkcs[i], private_key, 0, + &acc_privkey->context)) { SILC_LOG_ERROR(("Error accelerating private key with accelerator '%s'", acc->name)); silc_free(acc_privkey);