- p = ivoff + ivlen;
- CAST_cbc_encrypt(p, p, (long)(ep - p), &schedule, ivoff,
- CAST_DECRYPT);
- advance = ivoff - (u_char *)esp + ivlen;
- break;
- }
-#else
- goto fail;
-#endif /*HAVE_LIBCRYPTO*/
-
- case DES3CBC:
-#if defined(HAVE_LIBCRYPTO)
- {
-#if OPENSSL_VERSION_NUMBER >= 0x00907000L
- DES_key_schedule s1, s2, s3;
-
- DES_set_odd_parity((DES_cblock *)secret);
- DES_set_odd_parity((DES_cblock *)(secret + 8));
- DES_set_odd_parity((DES_cblock *)(secret + 16));
- if(DES_set_key_checked((DES_cblock *)secret, s1) != 0) {
- printf("failed to schedule key 1\n");
- }
- if(DES_set_key_checked((DES_cblock *)(secret + 8), s2)!=0) {
- printf("failed to schedule key 2\n");
- }
- if(DES_set_key_checked((DES_cblock *)(secret + 16), s3)!=0) {
- printf("failed to schedule key 3\n");
- }
-
- p = ivoff + ivlen;
- DES_ede3_cbc_encrypt((const unsigned char *)p, p,
- (long)(ep - p),
- &s1, &s2, &s3,
- (DES_cblock *)ivoff, DES_DECRYPT);
-#else
- des_key_schedule s1, s2, s3;
-
- des_check_key = 1;
- des_set_odd_parity((void *)secret);
- des_set_odd_parity((void *)(secret + 8));
- des_set_odd_parity((void *)(secret + 16));
- if(des_set_key((void *)secret, s1) != 0) {
- printf("failed to schedule key 1\n");
- }
- if(des_set_key((void *)(secret + 8), s2)!=0) {
- printf("failed to schedule key 2\n");
- }
- if(des_set_key((void *)(secret + 16), s3)!=0) {
- printf("failed to schedule key 3\n");
- }
-
- p = ivoff + ivlen;
- des_ede3_cbc_encrypt((void *)p, (void *)p,
- (long)(ep - p),
- s1, s2, s3,
- (void *)ivoff, DES_DECRYPT);
-#endif
- advance = ivoff - (u_char *)esp + ivlen;
- break;
- }
-#else
- goto fail;
-#endif /*HAVE_LIBCRYPTO*/
-
- case NONE:
- default:
- advance = sizeof(struct newesp) + espsecret_xform->replaysize;
- break;
- }
-
- ep = ep - espsecret_xform->authlen;