Added SILC Thread Queue API
[silc.git] / lib / silcacc / silcacc_pkcs.c
index d9474be8548b9052a1ae26a73de345ab8e18259c..d1b85e327d296d36430947fbf5cfff1313a3e200 100644 (file)
@@ -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);