xform_esp.c (282046) | xform_esp.c (285336) |
---|---|
1/* $FreeBSD: head/sys/netipsec/xform_esp.c 282046 2015-04-27 00:55:56Z ae $ */ | 1/* $FreeBSD: head/sys/netipsec/xform_esp.c 285336 2015-07-09 18:16:35Z gnn $ */ |
2/* $OpenBSD: ip_esp.c,v 1.69 2001/06/26 06:18:59 angelos Exp $ */ 3/*- 4 * The authors of this code are John Ioannidis (ji@tla.org), 5 * Angelos D. Keromytis (kermit@csd.uch.gr) and 6 * Niels Provos (provos@physnet.uni-hamburg.de). 7 * 8 * The original version of this code was written by John Ioannidis 9 * for BSD/OS in Athens, Greece, in November 1995. --- 106 unchanged lines hidden (view full) --- 116 case SADB_X_EALG_CAST128CBC: 117 return &enc_xform_cast5; 118 case SADB_X_EALG_SKIPJACK: 119 return &enc_xform_skipjack; 120 case SADB_EALG_NULL: 121 return &enc_xform_null; 122 case SADB_X_EALG_CAMELLIACBC: 123 return &enc_xform_camellia; | 2/* $OpenBSD: ip_esp.c,v 1.69 2001/06/26 06:18:59 angelos Exp $ */ 3/*- 4 * The authors of this code are John Ioannidis (ji@tla.org), 5 * Angelos D. Keromytis (kermit@csd.uch.gr) and 6 * Niels Provos (provos@physnet.uni-hamburg.de). 7 * 8 * The original version of this code was written by John Ioannidis 9 * for BSD/OS in Athens, Greece, in November 1995. --- 106 unchanged lines hidden (view full) --- 116 case SADB_X_EALG_CAST128CBC: 117 return &enc_xform_cast5; 118 case SADB_X_EALG_SKIPJACK: 119 return &enc_xform_skipjack; 120 case SADB_EALG_NULL: 121 return &enc_xform_null; 122 case SADB_X_EALG_CAMELLIACBC: 123 return &enc_xform_camellia; |
124 case SADB_X_EALG_AESCTR: 125 return &enc_xform_aes_icm; 126 case SADB_X_EALG_AESGCM16: 127 return &enc_xform_aes_nist_gcm; 128 case SADB_X_EALG_AESGMAC: 129 return &enc_xform_aes_nist_gmac; |
|
124 } 125 return NULL; 126} 127 128size_t 129esp_hdrsiz(struct secasvar *sav) 130{ 131 size_t size; --- 61 unchanged lines hidden (view full) --- 193 } 194 195 /* 196 * NB: The null xform needs a non-zero blocksize to keep the 197 * crypto code happy but if we use it to set ivlen then 198 * the ESP header will be processed incorrectly. The 199 * compromise is to force it to zero here. 200 */ | 130 } 131 return NULL; 132} 133 134size_t 135esp_hdrsiz(struct secasvar *sav) 136{ 137 size_t size; --- 61 unchanged lines hidden (view full) --- 199 } 200 201 /* 202 * NB: The null xform needs a non-zero blocksize to keep the 203 * crypto code happy but if we use it to set ivlen then 204 * the ESP header will be processed incorrectly. The 205 * compromise is to force it to zero here. 206 */ |
201 sav->ivlen = (txform == &enc_xform_null ? 0 : txform->blocksize); | 207 sav->ivlen = (txform == &enc_xform_null ? 0 : txform->ivsize); |
202 sav->iv = (caddr_t) malloc(sav->ivlen, M_XDATA, M_WAITOK); 203 key_randomfill(sav->iv, sav->ivlen); /*XXX*/ 204 205 /* 206 * Setup AH-related state. 207 */ 208 if (sav->alg_auth != 0) { 209 error = ah_init0(sav, xsp, &cria); 210 if (error) 211 return error; 212 } 213 214 /* NB: override anything set in ah_init0 */ 215 sav->tdb_xform = xsp; 216 sav->tdb_encalgxform = txform; 217 | 208 sav->iv = (caddr_t) malloc(sav->ivlen, M_XDATA, M_WAITOK); 209 key_randomfill(sav->iv, sav->ivlen); /*XXX*/ 210 211 /* 212 * Setup AH-related state. 213 */ 214 if (sav->alg_auth != 0) { 215 error = ah_init0(sav, xsp, &cria); 216 if (error) 217 return error; 218 } 219 220 /* NB: override anything set in ah_init0 */ 221 sav->tdb_xform = xsp; 222 sav->tdb_encalgxform = txform; 223 |
224 /* 225 * Whenever AES-GCM is used for encryption, one 226 * of the AES authentication algorithms is chosen 227 * as well, based on the key size. 228 */ 229 if (sav->alg_enc == SADB_X_EALG_AESGCM16) { 230 switch (keylen) { 231 case AES_128_HMAC_KEY_LEN: 232 sav->alg_auth = SADB_X_AALG_AES128GMAC; 233 sav->tdb_authalgxform = &auth_hash_nist_gmac_aes_128; 234 break; 235 case AES_192_HMAC_KEY_LEN: 236 sav->alg_auth = SADB_X_AALG_AES192GMAC; 237 sav->tdb_authalgxform = &auth_hash_nist_gmac_aes_192; 238 break; 239 case AES_256_HMAC_KEY_LEN: 240 sav->alg_auth = SADB_X_AALG_AES256GMAC; 241 sav->tdb_authalgxform = &auth_hash_nist_gmac_aes_256; 242 break; 243 default: 244 DPRINTF(("%s: invalid key length %u" 245 "for algorithm %s\n", __func__, 246 keylen, txform->name)); 247 return EINVAL; 248 } 249 bzero(&cria, sizeof(cria)); 250 cria.cri_alg = sav->tdb_authalgxform->type; 251 cria.cri_klen = _KEYBITS(sav->key_enc) + 4; 252 cria.cri_key = sav->key_enc->key_data; 253 } 254 |
|
218 /* Initialize crypto session. */ 219 bzero(&crie, sizeof (crie)); 220 crie.cri_alg = sav->tdb_encalgxform->type; 221 crie.cri_klen = _KEYBITS(sav->key_enc); 222 crie.cri_key = sav->key_enc->key_data; | 255 /* Initialize crypto session. */ 256 bzero(&crie, sizeof (crie)); 257 crie.cri_alg = sav->tdb_encalgxform->type; 258 crie.cri_klen = _KEYBITS(sav->key_enc); 259 crie.cri_key = sav->key_enc->key_data; |
260 if (sav->alg_enc == SADB_X_EALG_AESGCM16) 261 arc4rand(crie.cri_iv, sav->ivlen, 0); 262 |
|
223 /* XXX Rounds ? */ 224 225 if (sav->tdb_authalgxform && sav->tdb_encalgxform) { 226 /* init both auth & enc */ 227 crie.cri_next = &cria; 228 error = crypto_newsession(&sav->tdb_cryptoid, 229 &crie, V_crypto_support); 230 } else if (sav->tdb_encalgxform) { --- 53 unchanged lines hidden (view full) --- 284 /* Valid IP Packet length ? */ 285 if ( (skip&3) || (m->m_pkthdr.len&3) ){ 286 DPRINTF(("%s: misaligned packet, skip %u pkt len %u", 287 __func__, skip, m->m_pkthdr.len)); 288 ESPSTAT_INC(esps_badilen); 289 m_freem(m); 290 return EINVAL; 291 } | 263 /* XXX Rounds ? */ 264 265 if (sav->tdb_authalgxform && sav->tdb_encalgxform) { 266 /* init both auth & enc */ 267 crie.cri_next = &cria; 268 error = crypto_newsession(&sav->tdb_cryptoid, 269 &crie, V_crypto_support); 270 } else if (sav->tdb_encalgxform) { --- 53 unchanged lines hidden (view full) --- 324 /* Valid IP Packet length ? */ 325 if ( (skip&3) || (m->m_pkthdr.len&3) ){ 326 DPRINTF(("%s: misaligned packet, skip %u pkt len %u", 327 __func__, skip, m->m_pkthdr.len)); 328 ESPSTAT_INC(esps_badilen); 329 m_freem(m); 330 return EINVAL; 331 } |
292 | |
293 /* XXX don't pullup, just copy header */ 294 IP6_EXTHDR_GET(esp, struct newesp *, m, skip, sizeof (struct newesp)); 295 296 esph = sav->tdb_authalgxform; 297 espx = sav->tdb_encalgxform; 298 299 /* Determine the ESP header length */ 300 if (sav->flags & SADB_X_EXT_OLD) 301 hlen = sizeof (struct esp) + sav->ivlen; 302 else 303 hlen = sizeof (struct newesp) + sav->ivlen; 304 /* Authenticator hash size */ | 332 /* XXX don't pullup, just copy header */ 333 IP6_EXTHDR_GET(esp, struct newesp *, m, skip, sizeof (struct newesp)); 334 335 esph = sav->tdb_authalgxform; 336 espx = sav->tdb_encalgxform; 337 338 /* Determine the ESP header length */ 339 if (sav->flags & SADB_X_EXT_OLD) 340 hlen = sizeof (struct esp) + sav->ivlen; 341 else 342 hlen = sizeof (struct newesp) + sav->ivlen; 343 /* Authenticator hash size */ |
305 if (esph != NULL) { 306 switch (esph->type) { 307 case CRYPTO_SHA2_256_HMAC: 308 case CRYPTO_SHA2_384_HMAC: 309 case CRYPTO_SHA2_512_HMAC: 310 alen = esph->hashsize/2; 311 break; 312 default: 313 alen = AH_HMAC_HASHLEN; 314 break; 315 } 316 } | 344 alen = esph ? esph->hashsize : 0; |
317 318 /* 319 * Verify payload length is multiple of encryption algorithm 320 * block size. 321 * 322 * NB: This works for the null algorithm because the blocksize 323 * is 4 and all packets must be 4-byte aligned regardless 324 * of the algorithm. 325 */ 326 plen = m->m_pkthdr.len - (skip + hlen + alen); 327 if ((plen & (espx->blocksize - 1)) || (plen <= 0)) { | 345 346 /* 347 * Verify payload length is multiple of encryption algorithm 348 * block size. 349 * 350 * NB: This works for the null algorithm because the blocksize 351 * is 4 and all packets must be 4-byte aligned regardless 352 * of the algorithm. 353 */ 354 plen = m->m_pkthdr.len - (skip + hlen + alen); 355 if ((plen & (espx->blocksize - 1)) || (plen <= 0)) { |
328 DPRINTF(("%s: payload of %d octets not a multiple of %d octets," 329 " SA %s/%08lx\n", __func__, 330 plen, espx->blocksize, ipsec_address(&sav->sah->saidx.dst, 331 buf, sizeof(buf)), (u_long) ntohl(sav->spi))); 332 ESPSTAT_INC(esps_badilen); 333 m_freem(m); 334 return EINVAL; | 356 if (!espx || sav->alg_enc != SADB_X_EALG_AESGCM16) { 357 DPRINTF(("%s: payload of %d octets not a multiple of %d octets," 358 " SA %s/%08lx\n", __func__, 359 plen, espx->blocksize, ipsec_address(&sav->sah->saidx.dst, 360 buf, sizeof(buf)), (u_long) ntohl(sav->spi))); 361 ESPSTAT_INC(esps_badilen); 362 m_freem(m); 363 return EINVAL; 364 } |
335 } 336 337 /* 338 * Check sequence number. 339 */ 340 if (esph != NULL && sav->replay != NULL && 341 !ipsec_chkreplay(ntohl(esp->esp_seq), sav)) { 342 DPRINTF(("%s: packet replay check for %s\n", __func__, --- 29 unchanged lines hidden (view full) --- 372 373 if (esph != NULL) { 374 struct cryptodesc *crda = crp->crp_desc; 375 376 IPSEC_ASSERT(crda != NULL, ("null ah crypto descriptor")); 377 378 /* Authentication descriptor */ 379 crda->crd_skip = skip; | 365 } 366 367 /* 368 * Check sequence number. 369 */ 370 if (esph != NULL && sav->replay != NULL && 371 !ipsec_chkreplay(ntohl(esp->esp_seq), sav)) { 372 DPRINTF(("%s: packet replay check for %s\n", __func__, --- 29 unchanged lines hidden (view full) --- 402 403 if (esph != NULL) { 404 struct cryptodesc *crda = crp->crp_desc; 405 406 IPSEC_ASSERT(crda != NULL, ("null ah crypto descriptor")); 407 408 /* Authentication descriptor */ 409 crda->crd_skip = skip; |
380 crda->crd_len = m->m_pkthdr.len - (skip + alen); | 410 if (espx && espx->type == CRYPTO_AES_NIST_GCM_16) 411 crda->crd_len = hlen - sav->ivlen; 412 else 413 crda->crd_len = m->m_pkthdr.len - (skip + alen); |
381 crda->crd_inject = m->m_pkthdr.len - alen; 382 383 crda->crd_alg = esph->type; | 414 crda->crd_inject = m->m_pkthdr.len - alen; 415 416 crda->crd_alg = esph->type; |
384 crda->crd_key = sav->key_auth->key_data; 385 crda->crd_klen = _KEYBITS(sav->key_auth); | 417 if (espx && (espx->type == CRYPTO_AES_NIST_GCM_16)) { 418 crda->crd_key = sav->key_enc->key_data; 419 crda->crd_klen = _KEYBITS(sav->key_enc); 420 } else { 421 crda->crd_key = sav->key_auth->key_data; 422 crda->crd_klen = _KEYBITS(sav->key_auth); 423 } |
386 387 /* Copy the authenticator */ 388 m_copydata(m, m->m_pkthdr.len - alen, alen, 389 (caddr_t) (tc + 1)); 390 391 /* Chain authentication request */ 392 crde = crda->crd_next; 393 } else { --- 21 unchanged lines hidden (view full) --- 415 IPSEC_ASSERT(crde != NULL, ("null esp crypto descriptor")); 416 crde->crd_skip = skip + hlen; 417 crde->crd_len = m->m_pkthdr.len - (skip + hlen + alen); 418 crde->crd_inject = skip + hlen - sav->ivlen; 419 420 crde->crd_alg = espx->type; 421 crde->crd_key = sav->key_enc->key_data; 422 crde->crd_klen = _KEYBITS(sav->key_enc); | 424 425 /* Copy the authenticator */ 426 m_copydata(m, m->m_pkthdr.len - alen, alen, 427 (caddr_t) (tc + 1)); 428 429 /* Chain authentication request */ 430 crde = crda->crd_next; 431 } else { --- 21 unchanged lines hidden (view full) --- 453 IPSEC_ASSERT(crde != NULL, ("null esp crypto descriptor")); 454 crde->crd_skip = skip + hlen; 455 crde->crd_len = m->m_pkthdr.len - (skip + hlen + alen); 456 crde->crd_inject = skip + hlen - sav->ivlen; 457 458 crde->crd_alg = espx->type; 459 crde->crd_key = sav->key_enc->key_data; 460 crde->crd_klen = _KEYBITS(sav->key_enc); |
461 if (espx && (espx->type == CRYPTO_AES_NIST_GCM_16)) 462 crde->crd_flags |= CRD_F_IV_EXPLICIT; 463 |
|
423 /* XXX Rounds ? */ 424 425 return (crypto_dispatch(crp)); 426} 427 428/* 429 * ESP input callback from the crypto driver. 430 */ --- 53 unchanged lines hidden (view full) --- 484 DPRINTF(("%s: bogus returned buffer from crypto\n", __func__)); 485 error = EINVAL; 486 goto bad; 487 } 488 ESPSTAT_INC(esps_hist[sav->alg_enc]); 489 490 /* If authentication was performed, check now. */ 491 if (esph != NULL) { | 464 /* XXX Rounds ? */ 465 466 return (crypto_dispatch(crp)); 467} 468 469/* 470 * ESP input callback from the crypto driver. 471 */ --- 53 unchanged lines hidden (view full) --- 525 DPRINTF(("%s: bogus returned buffer from crypto\n", __func__)); 526 error = EINVAL; 527 goto bad; 528 } 529 ESPSTAT_INC(esps_hist[sav->alg_enc]); 530 531 /* If authentication was performed, check now. */ 532 if (esph != NULL) { |
492 switch (esph->type) { 493 case CRYPTO_SHA2_256_HMAC: 494 case CRYPTO_SHA2_384_HMAC: 495 case CRYPTO_SHA2_512_HMAC: 496 alen = esph->hashsize/2; 497 break; 498 default: 499 alen = AH_HMAC_HASHLEN; 500 break; 501 } | 533 alen = esph->hashsize; |
502 AHSTAT_INC(ahs_hist[sav->alg_auth]); 503 /* Copy the authenticator from the packet */ 504 m_copydata(m, m->m_pkthdr.len - alen, alen, aalg); 505 ptr = (caddr_t) (tc + 1); 506 507 /* Verify authenticator */ 508 if (bcmp(ptr, aalg, alen) != 0) { 509 DPRINTF(("%s: authentication hash mismatch for " --- 148 unchanged lines hidden (view full) --- 658 else 659 hlen = sizeof (struct newesp) + sav->ivlen; 660 661 rlen = m->m_pkthdr.len - skip; /* Raw payload length. */ 662 /* 663 * NB: The null encoding transform has a blocksize of 4 664 * so that headers are properly aligned. 665 */ | 534 AHSTAT_INC(ahs_hist[sav->alg_auth]); 535 /* Copy the authenticator from the packet */ 536 m_copydata(m, m->m_pkthdr.len - alen, alen, aalg); 537 ptr = (caddr_t) (tc + 1); 538 539 /* Verify authenticator */ 540 if (bcmp(ptr, aalg, alen) != 0) { 541 DPRINTF(("%s: authentication hash mismatch for " --- 148 unchanged lines hidden (view full) --- 690 else 691 hlen = sizeof (struct newesp) + sav->ivlen; 692 693 rlen = m->m_pkthdr.len - skip; /* Raw payload length. */ 694 /* 695 * NB: The null encoding transform has a blocksize of 4 696 * so that headers are properly aligned. 697 */ |
666 blks = espx->blocksize; /* IV blocksize */ | 698 blks = espx->ivsize; /* IV blocksize */ |
667 668 /* XXX clamp padding length a la KAME??? */ 669 padding = ((blks - ((rlen + 2) % blks)) % blks) + 2; 670 671 if (esph) | 699 700 /* XXX clamp padding length a la KAME??? */ 701 padding = ((blks - ((rlen + 2) % blks)) % blks) + 2; 702 703 if (esph) |
672 switch (esph->type) { 673 case CRYPTO_SHA2_256_HMAC: 674 case CRYPTO_SHA2_384_HMAC: 675 case CRYPTO_SHA2_512_HMAC: 676 alen = esph->hashsize/2; 677 break; 678 default: 679 alen = AH_HMAC_HASHLEN; 680 break; 681 } | 704 alen = esph->hashsize; |
682 else 683 alen = 0; 684 685 ESPSTAT_INC(esps_output); 686 687 saidx = &sav->sah->saidx; 688 /* Check for maximum packet size violations. */ 689 switch (saidx->dst.sa.sa_family) { --- 11 unchanged lines hidden (view full) --- 701 DPRINTF(("%s: unknown/unsupported protocol " 702 "family %d, SA %s/%08lx\n", __func__, 703 saidx->dst.sa.sa_family, ipsec_address(&saidx->dst, 704 buf, sizeof(buf)), (u_long) ntohl(sav->spi))); 705 ESPSTAT_INC(esps_nopf); 706 error = EPFNOSUPPORT; 707 goto bad; 708 } | 705 else 706 alen = 0; 707 708 ESPSTAT_INC(esps_output); 709 710 saidx = &sav->sah->saidx; 711 /* Check for maximum packet size violations. */ 712 switch (saidx->dst.sa.sa_family) { --- 11 unchanged lines hidden (view full) --- 724 DPRINTF(("%s: unknown/unsupported protocol " 725 "family %d, SA %s/%08lx\n", __func__, 726 saidx->dst.sa.sa_family, ipsec_address(&saidx->dst, 727 buf, sizeof(buf)), (u_long) ntohl(sav->spi))); 728 ESPSTAT_INC(esps_nopf); 729 error = EPFNOSUPPORT; 730 goto bad; 731 } |
732 DPRINTF(("%s: skip %d hlen %d rlen %d padding %d alen %d blksd %d\n", 733 __func__, skip, hlen, rlen, padding, alen, blks)); |
|
709 if (skip + hlen + rlen + padding + alen > maxpacketsize) { 710 DPRINTF(("%s: packet in SA %s/%08lx got too big " 711 "(len %u, max len %u)\n", __func__, 712 ipsec_address(&saidx->dst, buf, sizeof(buf)), 713 (u_long) ntohl(sav->spi), 714 skip + hlen + rlen + padding + alen, maxpacketsize)); 715 ESPSTAT_INC(esps_toobig); 716 error = EMSGSIZE; --- 98 unchanged lines hidden (view full) --- 815 crde->crd_len = m->m_pkthdr.len - (skip + hlen + alen); 816 crde->crd_flags = CRD_F_ENCRYPT; 817 crde->crd_inject = skip + hlen - sav->ivlen; 818 819 /* Encryption operation. */ 820 crde->crd_alg = espx->type; 821 crde->crd_key = sav->key_enc->key_data; 822 crde->crd_klen = _KEYBITS(sav->key_enc); | 734 if (skip + hlen + rlen + padding + alen > maxpacketsize) { 735 DPRINTF(("%s: packet in SA %s/%08lx got too big " 736 "(len %u, max len %u)\n", __func__, 737 ipsec_address(&saidx->dst, buf, sizeof(buf)), 738 (u_long) ntohl(sav->spi), 739 skip + hlen + rlen + padding + alen, maxpacketsize)); 740 ESPSTAT_INC(esps_toobig); 741 error = EMSGSIZE; --- 98 unchanged lines hidden (view full) --- 840 crde->crd_len = m->m_pkthdr.len - (skip + hlen + alen); 841 crde->crd_flags = CRD_F_ENCRYPT; 842 crde->crd_inject = skip + hlen - sav->ivlen; 843 844 /* Encryption operation. */ 845 crde->crd_alg = espx->type; 846 crde->crd_key = sav->key_enc->key_data; 847 crde->crd_klen = _KEYBITS(sav->key_enc); |
848 if (espx->type == CRYPTO_AES_NIST_GCM_16) 849 crde->crd_flags |= CRD_F_IV_EXPLICIT; |
|
823 /* XXX Rounds ? */ 824 } else 825 crda = crp->crp_desc; 826 827 /* IPsec-specific opaque crypto info. */ 828 tc = (struct tdb_crypto *) malloc(sizeof(struct tdb_crypto), 829 M_XDATA, M_NOWAIT|M_ZERO); 830 if (tc == NULL) { --- 18 unchanged lines hidden (view full) --- 849 crp->crp_buf = (caddr_t) m; 850 crp->crp_callback = esp_output_cb; 851 crp->crp_opaque = (caddr_t) tc; 852 crp->crp_sid = sav->tdb_cryptoid; 853 854 if (esph) { 855 /* Authentication descriptor. */ 856 crda->crd_skip = skip; | 850 /* XXX Rounds ? */ 851 } else 852 crda = crp->crp_desc; 853 854 /* IPsec-specific opaque crypto info. */ 855 tc = (struct tdb_crypto *) malloc(sizeof(struct tdb_crypto), 856 M_XDATA, M_NOWAIT|M_ZERO); 857 if (tc == NULL) { --- 18 unchanged lines hidden (view full) --- 876 crp->crp_buf = (caddr_t) m; 877 crp->crp_callback = esp_output_cb; 878 crp->crp_opaque = (caddr_t) tc; 879 crp->crp_sid = sav->tdb_cryptoid; 880 881 if (esph) { 882 /* Authentication descriptor. */ 883 crda->crd_skip = skip; |
857 crda->crd_len = m->m_pkthdr.len - (skip + alen); | 884 if (espx && espx->type == CRYPTO_AES_NIST_GCM_16) 885 crda->crd_len = hlen - sav->ivlen; 886 else 887 crda->crd_len = m->m_pkthdr.len - (skip + alen); |
858 crda->crd_inject = m->m_pkthdr.len - alen; 859 860 /* Authentication operation. */ 861 crda->crd_alg = esph->type; | 888 crda->crd_inject = m->m_pkthdr.len - alen; 889 890 /* Authentication operation. */ 891 crda->crd_alg = esph->type; |
862 crda->crd_key = sav->key_auth->key_data; 863 crda->crd_klen = _KEYBITS(sav->key_auth); | 892 if (espx && espx->type == CRYPTO_AES_NIST_GCM_16) { 893 crda->crd_key = sav->key_enc->key_data; 894 crda->crd_klen = _KEYBITS(sav->key_enc); 895 } else { 896 crda->crd_key = sav->key_auth->key_data; 897 crda->crd_klen = _KEYBITS(sav->key_auth); 898 } 899 |
864 } 865 866 return crypto_dispatch(crp); 867bad: 868 if (m) 869 m_freem(m); 870 return (error); 871} --- 76 unchanged lines hidden (view full) --- 948 int alen; 949 950 switch (esph->type) { 951 case CRYPTO_SHA2_256_HMAC: 952 case CRYPTO_SHA2_384_HMAC: 953 case CRYPTO_SHA2_512_HMAC: 954 alen = esph->hashsize/2; 955 break; | 900 } 901 902 return crypto_dispatch(crp); 903bad: 904 if (m) 905 m_freem(m); 906 return (error); 907} --- 76 unchanged lines hidden (view full) --- 984 int alen; 985 986 switch (esph->type) { 987 case CRYPTO_SHA2_256_HMAC: 988 case CRYPTO_SHA2_384_HMAC: 989 case CRYPTO_SHA2_512_HMAC: 990 alen = esph->hashsize/2; 991 break; |
992 case CRYPTO_AES_128_GMAC: 993 case CRYPTO_AES_192_GMAC: 994 case CRYPTO_AES_256_GMAC: 995 alen = esph->hashsize; 996 break; |
|
956 default: 957 alen = AH_HMAC_HASHLEN; 958 break; 959 } 960 m_copyback(m, m->m_pkthdr.len - alen, 961 alen, ipseczeroes); 962 } 963 } --- 33 unchanged lines hidden --- | 997 default: 998 alen = AH_HMAC_HASHLEN; 999 break; 1000 } 1001 m_copyback(m, m->m_pkthdr.len - alen, 1002 alen, ipseczeroes); 1003 } 1004 } --- 33 unchanged lines hidden --- |