Lines Matching refs:crp
107 static int esp_output_cb(struct cryptop *crp);
274 struct cryptop *crp; in esp_input() local
358 crp = crypto_getreq(cryptoid, M_NOWAIT); in esp_input()
359 if (crp == NULL) { in esp_input()
375 crp->crp_op = CRYPTO_OP_VERIFY_DIGEST; in esp_input()
377 crp->crp_aad_length = 8; /* RFC4106 5, SPI + SN */ in esp_input()
379 crp->crp_aad_length = hlen; in esp_input()
381 csp = crypto_get_params(crp->crp_session); in esp_input()
386 crp->crp_aad_length += sizeof(seqh); in esp_input()
387 crp->crp_aad = malloc(crp->crp_aad_length, M_ESP, M_NOWAIT); in esp_input()
388 if (crp->crp_aad == NULL) { in esp_input()
395 m_copydata(m, skip, SPI_SIZE, crp->crp_aad); in esp_input()
399 bcopy(&seqh, (char *)crp->crp_aad + aad_skip, sizeof(seqh)); in esp_input()
403 if (crp->crp_aad_length - aad_skip > 0) in esp_input()
405 crp->crp_aad_length - aad_skip, in esp_input()
406 (char *)crp->crp_aad + aad_skip); in esp_input()
408 crp->crp_aad_start = skip; in esp_input()
412 memcpy(crp->crp_esn, &seqh, sizeof(seqh)); in esp_input()
414 crp->crp_digest_start = m->m_pkthdr.len - alen; in esp_input()
418 crp->crp_flags = CRYPTO_F_CBIFSYNC; in esp_input()
419 crypto_use_mbuf(crp, m); in esp_input()
420 crp->crp_callback = esp_input_cb; in esp_input()
421 crp->crp_opaque = xd; in esp_input()
431 crp->crp_op |= CRYPTO_OP_DECRYPT; in esp_input()
432 crp->crp_payload_start = skip + hlen; in esp_input()
433 crp->crp_payload_length = m->m_pkthdr.len - (skip + hlen + alen); in esp_input()
437 ivp = &crp->crp_iv[0]; in esp_input()
467 crp->crp_flags |= CRYPTO_F_IV_SEPARATE; in esp_input()
469 crp->crp_iv_start = skip + hlen - sav->ivlen; in esp_input()
472 return (crypto_dispatch_async(crp, CRYPTO_ASYNC_ORDERED)); in esp_input()
474 return (crypto_dispatch(crp)); in esp_input()
479 crypto_freereq(crp); in esp_input()
492 esp_input_cb(struct cryptop *crp) in esp_input_cb() argument
506 m = crp->crp_buf.cb_mbuf; in esp_input_cb()
507 xd = crp->crp_opaque; in esp_input_cb()
524 if (crp->crp_etype) { in esp_input_cb()
525 if (crp->crp_etype == EAGAIN) { in esp_input_cb()
527 if (ipsec_updateid(sav, &crp->crp_session, &cryptoid) != 0) in esp_input_cb()
529 xd->cryptoid = crp->crp_session; in esp_input_cb()
531 return (crypto_dispatch(crp)); in esp_input_cb()
535 if (!(crp->crp_etype == EBADMSG && esph != NULL)) { in esp_input_cb()
538 crp->crp_etype)); in esp_input_cb()
539 error = crp->crp_etype; in esp_input_cb()
557 if (crp->crp_etype == EBADMSG) { in esp_input_cb()
573 free(crp->crp_aad, M_ESP), crp->crp_aad = NULL; in esp_input_cb()
574 crypto_freereq(crp), crp = NULL; in esp_input_cb()
682 if (crp != NULL) { in esp_input_cb()
683 free(crp->crp_aad, M_ESP); in esp_input_cb()
684 crypto_freereq(crp); in esp_input_cb()
697 struct cryptop *crp; in esp_output() local
870 crp = crypto_getreq(cryptoid, M_NOWAIT); in esp_output()
871 if (crp == NULL) { in esp_output()
887 crp->crp_payload_start = skip + hlen; in esp_output()
888 crp->crp_payload_length = m->m_pkthdr.len - (skip + hlen + alen); in esp_output()
889 crp->crp_op = CRYPTO_OP_ENCRYPT; in esp_output()
892 ivp = &crp->crp_iv[0]; in esp_output()
906 crp->crp_flags |= CRYPTO_F_IV_SEPARATE; in esp_output()
909 crp->crp_iv_start = skip + hlen - sav->ivlen; in esp_output()
910 m_copyback(m, crp->crp_iv_start, sav->ivlen, ivp); in esp_output()
921 crp->crp_flags |= CRYPTO_F_CBIFSYNC; in esp_output()
922 crypto_use_mbuf(crp, m); in esp_output()
923 crp->crp_callback = esp_output_cb; in esp_output()
924 crp->crp_opaque = xd; in esp_output()
928 crp->crp_op |= CRYPTO_OP_COMPUTE_DIGEST; in esp_output()
930 crp->crp_aad_length = 8; /* RFC4106 5, SPI + SN */ in esp_output()
932 crp->crp_aad_length = hlen; in esp_output()
934 csp = crypto_get_params(crp->crp_session); in esp_output()
939 crp->crp_aad_length += sizeof(seqh); in esp_output()
940 crp->crp_aad = malloc(crp->crp_aad_length, M_ESP, M_NOWAIT); in esp_output()
941 if (crp->crp_aad == NULL) { in esp_output()
948 m_copydata(m, skip, SPI_SIZE, crp->crp_aad); in esp_output()
952 bcopy(&seqh, (char *)crp->crp_aad + aad_skip, sizeof(seqh)); in esp_output()
956 if (crp->crp_aad_length - aad_skip > 0) in esp_output()
958 crp->crp_aad_length - aad_skip, in esp_output()
959 (char *)crp->crp_aad + aad_skip); in esp_output()
961 crp->crp_aad_start = skip; in esp_output()
964 memcpy(crp->crp_esn, &seqh, sizeof(seqh)); in esp_output()
966 crp->crp_digest_start = m->m_pkthdr.len - alen; in esp_output()
970 return (crypto_dispatch_async(crp, CRYPTO_ASYNC_ORDERED)); in esp_output()
972 return (crypto_dispatch(crp)); in esp_output()
977 crypto_freereq(crp); in esp_output()
991 esp_output_cb(struct cryptop *crp) in esp_output_cb() argument
1001 xd = (struct xform_data *) crp->crp_opaque; in esp_output_cb()
1003 m = crp->crp_buf.cb_mbuf; in esp_output_cb()
1010 if (crp->crp_etype) { in esp_output_cb()
1011 if (crp->crp_etype == EAGAIN) { in esp_output_cb()
1013 if (ipsec_updateid(sav, &crp->crp_session, &cryptoid) != 0) in esp_output_cb()
1015 xd->cryptoid = crp->crp_session; in esp_output_cb()
1017 return (crypto_dispatch(crp)); in esp_output_cb()
1020 DPRINTF(("%s: crypto error %d\n", __func__, crp->crp_etype)); in esp_output_cb()
1021 error = crp->crp_etype; in esp_output_cb()
1034 free(crp->crp_aad, M_ESP); in esp_output_cb()
1035 crypto_freereq(crp); in esp_output_cb()
1067 free(crp->crp_aad, M_ESP); in esp_output_cb()
1068 crypto_freereq(crp); in esp_output_cb()