Licensing Information
Open Source Used In Cisco Nexus 9000 Series 7.0(3)I5(1)
3241
krp->krp_param[IXP_PARAM_EXP].crp_nbits,
krp->krp_param[IXP_PARAM_MOD].crp_nbits,
krp->krp_param[IXP_PARAM_RES].crp_nbits);
if (krp->krp_op != CRK_MOD_EXP) {
krp->krp_status = EOPNOTSUPP;
goto err;
}
q = (struct ixp_pkq *) kmalloc(sizeof(*q), GFP_KERNEL);
if (q == NULL) {
krp->krp_status = ENOMEM;
goto err;
}
/*
* The PKE engine does not appear to zero the output buffer
* appropriately, so we need to do it all here.
*/
memset(q, 0, sizeof(*q));
q->pkq_krp = krp;
INIT_LIST_HEAD(&q->pkq_list);
if (ixp_copy_ibuf(&krp->krp_param[IXP_PARAM_BASE], &q->pkq_op.modExpOpr.M,
q->pkq_ibuf0))
rc = 1;
if (!rc && ixp_copy_ibuf(&krp->krp_param[IXP_PARAM_EXP],
&q->pkq_op.modExpOpr.e, q->pkq_ibuf1))
rc = 2;
if (!rc && ixp_copy_ibuf(&krp->krp_param[IXP_PARAM_MOD],
&q->pkq_op.modExpOpr.N, q->pkq_ibuf2))
rc = 3;
if (rc) {
kfree(q);
krp->krp_status = ERANGE;
goto err;
}
q->pkq_result.pData = q->pkq_obuf;
q->pkq_result.dataLen =
(krp->krp_param[IXP_PARAM_RES].crp_nbits + 31) / 32;
spin_lock_irqsave(&ixp_pkq_lock, flags);
list_add_tail(&q->pkq_list, &ixp_pkq);
spin_unlock_irqrestore(&ixp_pkq_lock, flags);










