* Generate a new software session. */
| 1306 | * Generate a new software session. |
| 1307 | */ |
| 1308 | static int |
| 1309 | swcr_newsession(device_t dev, crypto_session_t cses, |
| 1310 | const struct crypto_session_params *csp) |
| 1311 | { |
| 1312 | struct swcr_session *ses; |
| 1313 | struct swcr_encdec *swe; |
| 1314 | struct swcr_auth *swa; |
| 1315 | struct comp_algo *cxf; |
| 1316 | int error; |
| 1317 | |
| 1318 | ses = crypto_get_driver_session(cses); |
| 1319 | mtx_init(&ses->swcr_lock, "swcr session lock", NULL, MTX_DEF); |
| 1320 | |
| 1321 | error = 0; |
| 1322 | swe = &ses->swcr_encdec; |
| 1323 | swa = &ses->swcr_auth; |
| 1324 | switch (csp->csp_mode) { |
| 1325 | case CSP_MODE_COMPRESS: |
| 1326 | switch (csp->csp_cipher_alg) { |
| 1327 | case CRYPTO_DEFLATE_COMP: |
| 1328 | cxf = &comp_algo_deflate; |
| 1329 | break; |
| 1330 | #ifdef INVARIANTS |
| 1331 | default: |
| 1332 | panic("bad compression algo"); |
| 1333 | #endif |
| 1334 | } |
| 1335 | ses->swcr_compdec.sw_cxf = cxf; |
| 1336 | ses->swcr_process = swcr_compdec; |
| 1337 | break; |
| 1338 | case CSP_MODE_CIPHER: |
| 1339 | switch (csp->csp_cipher_alg) { |
| 1340 | case CRYPTO_NULL_CBC: |
| 1341 | ses->swcr_process = swcr_null; |
| 1342 | break; |
| 1343 | #ifdef INVARIANTS |
| 1344 | case CRYPTO_AES_NIST_GCM_16: |
| 1345 | case CRYPTO_AES_CCM_16: |
| 1346 | panic("bad cipher algo"); |
| 1347 | #endif |
| 1348 | default: |
| 1349 | error = swcr_setup_cipher(ses, csp); |
| 1350 | if (error == 0) |
| 1351 | ses->swcr_process = swcr_encdec; |
| 1352 | } |
| 1353 | break; |
| 1354 | case CSP_MODE_DIGEST: |
| 1355 | error = swcr_setup_auth(ses, csp); |
| 1356 | break; |
| 1357 | case CSP_MODE_AEAD: |
| 1358 | switch (csp->csp_cipher_alg) { |
| 1359 | case CRYPTO_AES_NIST_GCM_16: |
| 1360 | error = swcr_setup_gcm(ses, csp); |
| 1361 | if (error == 0) |
| 1362 | ses->swcr_process = swcr_gcm; |
| 1363 | break; |
| 1364 | case CRYPTO_AES_CCM_16: |
| 1365 | error = swcr_setup_ccm(ses, csp); |
nothing calls this directly
no test coverage detected