MCPcopy Create free account
hub / github.com/F-Stack/f-stack / cryptodev_key

Function cryptodev_key

freebsd/opencrypto/cryptodev.c:1207–1323  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1205}
1206
1207static int
1208cryptodev_key(struct crypt_kop *kop)
1209{
1210 struct cryptkop *krp = NULL;
1211 int error = EINVAL;
1212 int in, out, size, i;
1213
1214 if (kop->crk_iparams + kop->crk_oparams > CRK_MAXPARAM) {
1215 SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__);
1216 return (EFBIG);
1217 }
1218
1219 in = kop->crk_iparams;
1220 out = kop->crk_oparams;
1221 switch (kop->crk_op) {
1222 case CRK_MOD_EXP:
1223 if (in == 3 && out == 1)
1224 break;
1225 SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__);
1226 return (EINVAL);
1227 case CRK_MOD_EXP_CRT:
1228 if (in == 6 && out == 1)
1229 break;
1230 SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__);
1231 return (EINVAL);
1232 case CRK_DSA_SIGN:
1233 if (in == 5 && out == 2)
1234 break;
1235 SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__);
1236 return (EINVAL);
1237 case CRK_DSA_VERIFY:
1238 if (in == 7 && out == 0)
1239 break;
1240 SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__);
1241 return (EINVAL);
1242 case CRK_DH_COMPUTE_KEY:
1243 if (in == 3 && out == 1)
1244 break;
1245 SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__);
1246 return (EINVAL);
1247 default:
1248 SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__);
1249 return (EINVAL);
1250 }
1251
1252 krp = malloc(sizeof(*krp), M_XDATA, M_WAITOK | M_ZERO);
1253 krp->krp_op = kop->crk_op;
1254 krp->krp_status = kop->crk_status;
1255 krp->krp_iparams = kop->crk_iparams;
1256 krp->krp_oparams = kop->crk_oparams;
1257 krp->krp_crid = kop->crk_crid;
1258 krp->krp_status = 0;
1259 krp->krp_callback = cryptodevkey_cb;
1260
1261 for (i = 0; i < CRK_MAXPARAM; i++) {
1262 if (kop->crk_param[i].crp_nbits > 65536) {
1263 /* Limit is the same as in OpenBSD */
1264 SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__);

Callers 1

crypto_ioctlFunction · 0.85

Calls 5

mallocFunction · 0.85
crypto_kdispatchFunction · 0.85
copyinFunction · 0.50
copyoutFunction · 0.50
freeFunction · 0.50

Tested by

no test coverage detected