+ * Arguments: @rsa_decctx *rd@ = pointer to an RSA decryption context
+ * @rsa_priv *rp@ = pointer to RSA private key
+ * @grand *r@ = pointer to random number source for blinding
+ *
+ * Returns: ---
+ *
+ * Use: Initializes an RSA decryption context. Keeping a context
+ * for several decryption or signing operations provides a minor
+ * performance benefit.
+ *
+ * The random number source may be null if blinding is not
+ * desired. This improves decryption speed, at the risk of
+ * permitting timing attacks.
+ */
+
+void rsa_deccreate(rsa_decctx *rd, rsa_param *rp, grand *r)
+{
+ rd->rp = rp;
+ rd->r = r;
+ if (r)
+ mpmont_create(&rd->nm, rp->n);
+ mpmont_create(&rd->pm, rp->p);
+ mpmont_create(&rd->qm, rp->q);
+}
+
+/* --- @rsa_decdestroy@ --- *
+ *
+ * Arguments: @rsa_decctx *rd@ = pointer to an RSA decryption context
+ *
+ * Returns: ---
+ *
+ * Use: Destroys an RSA decryption context.
+ */
+
+void rsa_decdestroy(rsa_decctx *rd)
+{
+ if (rd->r)
+ mpmont_destroy(&rd->nm);
+ mpmont_destroy(&rd->pm);
+ mpmont_destroy(&rd->qm);
+}
+
+/* --- @rsa_dec@ --- *
+ *
+ * Arguments: @rsa_decctx *rd@ = pointer to RSA decryption context