diff options
Diffstat (limited to 'src/lib/libcrypto/des/destest.c')
-rw-r--r-- | src/lib/libcrypto/des/destest.c | 103 |
1 files changed, 61 insertions, 42 deletions
diff --git a/src/lib/libcrypto/des/destest.c b/src/lib/libcrypto/des/destest.c index df0d615d6b..58e8c35dcb 100644 --- a/src/lib/libcrypto/des/destest.c +++ b/src/lib/libcrypto/des/destest.c | |||
@@ -56,25 +56,26 @@ | |||
56 | * [including the GNU Public Licence.] | 56 | * [including the GNU Public Licence.] |
57 | */ | 57 | */ |
58 | 58 | ||
59 | #if defined(WIN32) || defined(WIN16) || defined(WINDOWS) | 59 | #include <stdio.h> |
60 | #ifndef MSDOS | 60 | #include <stdlib.h> |
61 | #define MSDOS | 61 | |
62 | #include <openssl/e_os2.h> | ||
63 | #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16) || defined(OPENSSL_SYS_WINDOWS) | ||
64 | #ifndef OPENSSL_SYS_MSDOS | ||
65 | #define OPENSSL_SYS_MSDOS | ||
62 | #endif | 66 | #endif |
63 | #endif | 67 | #endif |
64 | 68 | ||
65 | #include <stdio.h> | 69 | #ifndef OPENSSL_SYS_MSDOS |
66 | #include <stdlib.h> | 70 | #if !defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_VMS_DECC) |
67 | #ifndef MSDOS | ||
68 | #if !defined(VMS) || defined(__DECC) | ||
69 | #include <openssl/opensslconf.h> | ||
70 | #include OPENSSL_UNISTD | 71 | #include OPENSSL_UNISTD |
71 | #endif /* VMS */ | 72 | #endif |
72 | #else | 73 | #else |
73 | #include <io.h> | 74 | #include <io.h> |
74 | #endif | 75 | #endif |
75 | #include <string.h> | 76 | #include <string.h> |
76 | 77 | ||
77 | #ifdef NO_DES | 78 | #ifdef OPENSSL_NO_DES |
78 | int main(int argc, char *argv[]) | 79 | int main(int argc, char *argv[]) |
79 | { | 80 | { |
80 | printf("No DES support\n"); | 81 | printf("No DES support\n"); |
@@ -83,7 +84,7 @@ int main(int argc, char *argv[]) | |||
83 | #else | 84 | #else |
84 | #include <openssl/des.h> | 85 | #include <openssl/des.h> |
85 | 86 | ||
86 | #if defined(PERL5) || defined(__FreeBSD__) | 87 | #if defined(PERL5) || defined(__FreeBSD__) || defined(NeXT) |
87 | #define crypt(c,s) (des_crypt((c),(s))) | 88 | #define crypt(c,s) (des_crypt((c),(s))) |
88 | #endif | 89 | #endif |
89 | 90 | ||
@@ -348,19 +349,19 @@ int main(int argc, char *argv[]) | |||
348 | int num; | 349 | int num; |
349 | char *str; | 350 | char *str; |
350 | 351 | ||
351 | #ifndef NO_DESCBCM | 352 | #ifndef OPENSSL_NO_DESCBCM |
352 | printf("Doing cbcm\n"); | 353 | printf("Doing cbcm\n"); |
353 | if ((j=des_set_key_checked(&cbc_key,ks)) != 0) | 354 | if ((j=DES_set_key_checked(&cbc_key,&ks)) != 0) |
354 | { | 355 | { |
355 | printf("Key error %d\n",j); | 356 | printf("Key error %d\n",j); |
356 | err=1; | 357 | err=1; |
357 | } | 358 | } |
358 | if ((j=des_set_key_checked(&cbc2_key,ks2)) != 0) | 359 | if ((j=DES_set_key_checked(&cbc2_key,&ks2)) != 0) |
359 | { | 360 | { |
360 | printf("Key error %d\n",j); | 361 | printf("Key error %d\n",j); |
361 | err=1; | 362 | err=1; |
362 | } | 363 | } |
363 | if ((j=des_set_key_checked(&cbc3_key,ks3)) != 0) | 364 | if ((j=DES_set_key_checked(&cbc3_key,&ks3)) != 0) |
364 | { | 365 | { |
365 | printf("Key error %d\n",j); | 366 | printf("Key error %d\n",j); |
366 | err=1; | 367 | err=1; |
@@ -372,9 +373,9 @@ int main(int argc, char *argv[]) | |||
372 | memcpy(iv3,cbc_iv,sizeof(cbc_iv)); | 373 | memcpy(iv3,cbc_iv,sizeof(cbc_iv)); |
373 | memset(iv2,'\0',sizeof iv2); | 374 | memset(iv2,'\0',sizeof iv2); |
374 | 375 | ||
375 | des_ede3_cbcm_encrypt(cbc_data,cbc_out,16L,ks,ks2,ks3,&iv3,&iv2, | 376 | DES_ede3_cbcm_encrypt(cbc_data,cbc_out,16L,&ks,&ks2,&ks3,&iv3,&iv2, |
376 | DES_ENCRYPT); | 377 | DES_ENCRYPT); |
377 | des_ede3_cbcm_encrypt(&cbc_data[16],&cbc_out[16],i-16,ks,ks2,ks3, | 378 | DES_ede3_cbcm_encrypt(&cbc_data[16],&cbc_out[16],i-16,&ks,&ks2,&ks3, |
378 | &iv3,&iv2,DES_ENCRYPT); | 379 | &iv3,&iv2,DES_ENCRYPT); |
379 | /* if (memcmp(cbc_out,cbc3_ok, | 380 | /* if (memcmp(cbc_out,cbc3_ok, |
380 | (unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0) | 381 | (unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0) |
@@ -385,7 +386,7 @@ int main(int argc, char *argv[]) | |||
385 | */ | 386 | */ |
386 | memcpy(iv3,cbc_iv,sizeof(cbc_iv)); | 387 | memcpy(iv3,cbc_iv,sizeof(cbc_iv)); |
387 | memset(iv2,'\0',sizeof iv2); | 388 | memset(iv2,'\0',sizeof iv2); |
388 | des_ede3_cbcm_encrypt(cbc_out,cbc_in,i,ks,ks2,ks3,&iv3,&iv2,DES_DECRYPT); | 389 | DES_ede3_cbcm_encrypt(cbc_out,cbc_in,i,&ks,&ks2,&ks3,&iv3,&iv2,DES_DECRYPT); |
389 | if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0) | 390 | if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0) |
390 | { | 391 | { |
391 | int n; | 392 | int n; |
@@ -404,7 +405,7 @@ int main(int argc, char *argv[]) | |||
404 | printf("Doing ecb\n"); | 405 | printf("Doing ecb\n"); |
405 | for (i=0; i<NUM_TESTS; i++) | 406 | for (i=0; i<NUM_TESTS; i++) |
406 | { | 407 | { |
407 | des_set_key_unchecked(&key_data[i],ks); | 408 | DES_set_key_unchecked(&key_data[i],&ks); |
408 | memcpy(in,plain_data[i],8); | 409 | memcpy(in,plain_data[i],8); |
409 | memset(out,0,8); | 410 | memset(out,0,8); |
410 | memset(outin,0,8); | 411 | memset(outin,0,8); |
@@ -430,9 +431,9 @@ int main(int argc, char *argv[]) | |||
430 | printf("Doing ede ecb\n"); | 431 | printf("Doing ede ecb\n"); |
431 | for (i=0; i<(NUM_TESTS-1); i++) | 432 | for (i=0; i<(NUM_TESTS-1); i++) |
432 | { | 433 | { |
433 | des_set_key_unchecked(&key_data[i],ks); | 434 | DES_set_key_unchecked(&key_data[i],&ks); |
434 | des_set_key_unchecked(&key_data[i+1],ks2); | 435 | DES_set_key_unchecked(&key_data[i+1],&ks2); |
435 | des_set_key_unchecked(&key_data[i+2],ks3); | 436 | DES_set_key_unchecked(&key_data[i+2],&ks3); |
436 | memcpy(in,plain_data[i],8); | 437 | memcpy(in,plain_data[i],8); |
437 | memset(out,0,8); | 438 | memset(out,0,8); |
438 | memset(outin,0,8); | 439 | memset(outin,0,8); |
@@ -456,7 +457,7 @@ int main(int argc, char *argv[]) | |||
456 | #endif | 457 | #endif |
457 | 458 | ||
458 | printf("Doing cbc\n"); | 459 | printf("Doing cbc\n"); |
459 | if ((j=des_set_key_checked(&cbc_key,ks)) != 0) | 460 | if ((j=DES_set_key_checked(&cbc_key,&ks)) != 0) |
460 | { | 461 | { |
461 | printf("Key error %d\n",j); | 462 | printf("Key error %d\n",j); |
462 | err=1; | 463 | err=1; |
@@ -483,7 +484,7 @@ int main(int argc, char *argv[]) | |||
483 | 484 | ||
484 | #ifndef LIBDES_LIT | 485 | #ifndef LIBDES_LIT |
485 | printf("Doing desx cbc\n"); | 486 | printf("Doing desx cbc\n"); |
486 | if ((j=des_set_key_checked(&cbc_key,ks)) != 0) | 487 | if ((j=DES_set_key_checked(&cbc_key,&ks)) != 0) |
487 | { | 488 | { |
488 | printf("Key error %d\n",j); | 489 | printf("Key error %d\n",j); |
489 | err=1; | 490 | err=1; |
@@ -509,17 +510,17 @@ int main(int argc, char *argv[]) | |||
509 | #endif | 510 | #endif |
510 | 511 | ||
511 | printf("Doing ede cbc\n"); | 512 | printf("Doing ede cbc\n"); |
512 | if ((j=des_set_key_checked(&cbc_key,ks)) != 0) | 513 | if ((j=DES_set_key_checked(&cbc_key,&ks)) != 0) |
513 | { | 514 | { |
514 | printf("Key error %d\n",j); | 515 | printf("Key error %d\n",j); |
515 | err=1; | 516 | err=1; |
516 | } | 517 | } |
517 | if ((j=des_set_key_checked(&cbc2_key,ks2)) != 0) | 518 | if ((j=DES_set_key_checked(&cbc2_key,&ks2)) != 0) |
518 | { | 519 | { |
519 | printf("Key error %d\n",j); | 520 | printf("Key error %d\n",j); |
520 | err=1; | 521 | err=1; |
521 | } | 522 | } |
522 | if ((j=des_set_key_checked(&cbc3_key,ks3)) != 0) | 523 | if ((j=DES_set_key_checked(&cbc3_key,&ks3)) != 0) |
523 | { | 524 | { |
524 | printf("Key error %d\n",j); | 525 | printf("Key error %d\n",j); |
525 | err=1; | 526 | err=1; |
@@ -530,13 +531,22 @@ int main(int argc, char *argv[]) | |||
530 | /* i=((i+7)/8)*8; */ | 531 | /* i=((i+7)/8)*8; */ |
531 | memcpy(iv3,cbc_iv,sizeof(cbc_iv)); | 532 | memcpy(iv3,cbc_iv,sizeof(cbc_iv)); |
532 | 533 | ||
533 | des_ede3_cbc_encrypt(cbc_data,cbc_out,16L,ks,ks2,ks3,&iv3,DES_ENCRYPT); | 534 | des_ede3_cbc_encrypt(cbc_data,cbc_out,16L,ks,ks2,ks3,&iv3, |
535 | DES_ENCRYPT); | ||
534 | des_ede3_cbc_encrypt(&(cbc_data[16]),&(cbc_out[16]),i-16,ks,ks2,ks3, | 536 | des_ede3_cbc_encrypt(&(cbc_data[16]),&(cbc_out[16]),i-16,ks,ks2,ks3, |
535 | &iv3,DES_ENCRYPT); | 537 | &iv3,DES_ENCRYPT); |
536 | if (memcmp(cbc_out,cbc3_ok, | 538 | if (memcmp(cbc_out,cbc3_ok, |
537 | (unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0) | 539 | (unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0) |
538 | { | 540 | { |
541 | int n; | ||
542 | |||
539 | printf("des_ede3_cbc_encrypt encrypt error\n"); | 543 | printf("des_ede3_cbc_encrypt encrypt error\n"); |
544 | for(n=0 ; n < i ; ++n) | ||
545 | printf(" %02x",cbc_out[n]); | ||
546 | printf("\n"); | ||
547 | for(n=0 ; n < i ; ++n) | ||
548 | printf(" %02x",cbc3_ok[n]); | ||
549 | printf("\n"); | ||
540 | err=1; | 550 | err=1; |
541 | } | 551 | } |
542 | 552 | ||
@@ -544,13 +554,21 @@ int main(int argc, char *argv[]) | |||
544 | des_ede3_cbc_encrypt(cbc_out,cbc_in,i,ks,ks2,ks3,&iv3,DES_DECRYPT); | 554 | des_ede3_cbc_encrypt(cbc_out,cbc_in,i,ks,ks2,ks3,&iv3,DES_DECRYPT); |
545 | if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0) | 555 | if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0) |
546 | { | 556 | { |
557 | int n; | ||
558 | |||
547 | printf("des_ede3_cbc_encrypt decrypt error\n"); | 559 | printf("des_ede3_cbc_encrypt decrypt error\n"); |
560 | for(n=0 ; n < i ; ++n) | ||
561 | printf(" %02x",cbc_data[n]); | ||
562 | printf("\n"); | ||
563 | for(n=0 ; n < i ; ++n) | ||
564 | printf(" %02x",cbc_in[n]); | ||
565 | printf("\n"); | ||
548 | err=1; | 566 | err=1; |
549 | } | 567 | } |
550 | 568 | ||
551 | #ifndef LIBDES_LIT | 569 | #ifndef LIBDES_LIT |
552 | printf("Doing pcbc\n"); | 570 | printf("Doing pcbc\n"); |
553 | if ((j=des_set_key_checked(&cbc_key,ks)) != 0) | 571 | if ((j=DES_set_key_checked(&cbc_key,&ks)) != 0) |
554 | { | 572 | { |
555 | printf("Key error %d\n",j); | 573 | printf("Key error %d\n",j); |
556 | err=1; | 574 | err=1; |
@@ -613,7 +631,7 @@ int main(int argc, char *argv[]) | |||
613 | printf("done\n"); | 631 | printf("done\n"); |
614 | 632 | ||
615 | printf("Doing ofb\n"); | 633 | printf("Doing ofb\n"); |
616 | des_set_key_checked(&ofb_key,ks); | 634 | DES_set_key_checked(&ofb_key,&ks); |
617 | memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv)); | 635 | memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv)); |
618 | des_ofb_encrypt(plain,ofb_buf1,64,sizeof(plain)/8,ks,&ofb_tmp); | 636 | des_ofb_encrypt(plain,ofb_buf1,64,sizeof(plain)/8,ks,&ofb_tmp); |
619 | if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0) | 637 | if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0) |
@@ -642,7 +660,7 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]); | |||
642 | } | 660 | } |
643 | 661 | ||
644 | printf("Doing ofb64\n"); | 662 | printf("Doing ofb64\n"); |
645 | des_set_key_checked(&ofb_key,ks); | 663 | DES_set_key_checked(&ofb_key,&ks); |
646 | memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv)); | 664 | memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv)); |
647 | memset(ofb_buf1,0,sizeof(ofb_buf1)); | 665 | memset(ofb_buf1,0,sizeof(ofb_buf1)); |
648 | memset(ofb_buf2,0,sizeof(ofb_buf1)); | 666 | memset(ofb_buf2,0,sizeof(ofb_buf1)); |
@@ -659,7 +677,8 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]); | |||
659 | } | 677 | } |
660 | memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv)); | 678 | memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv)); |
661 | num=0; | 679 | num=0; |
662 | des_ofb64_encrypt(ofb_buf1,ofb_buf2,sizeof(ofb_buf1),ks,&ofb_tmp,&num); | 680 | des_ofb64_encrypt(ofb_buf1,ofb_buf2,sizeof(ofb_buf1),ks,&ofb_tmp, |
681 | &num); | ||
663 | if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0) | 682 | if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0) |
664 | { | 683 | { |
665 | printf("ofb64_encrypt decrypt error\n"); | 684 | printf("ofb64_encrypt decrypt error\n"); |
@@ -667,15 +686,15 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]); | |||
667 | } | 686 | } |
668 | 687 | ||
669 | printf("Doing ede_ofb64\n"); | 688 | printf("Doing ede_ofb64\n"); |
670 | des_set_key_checked(&ofb_key,ks); | 689 | DES_set_key_checked(&ofb_key,&ks); |
671 | memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv)); | 690 | memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv)); |
672 | memset(ofb_buf1,0,sizeof(ofb_buf1)); | 691 | memset(ofb_buf1,0,sizeof(ofb_buf1)); |
673 | memset(ofb_buf2,0,sizeof(ofb_buf1)); | 692 | memset(ofb_buf2,0,sizeof(ofb_buf1)); |
674 | num=0; | 693 | num=0; |
675 | for (i=0; i<sizeof(plain); i++) | 694 | for (i=0; i<sizeof(plain); i++) |
676 | { | 695 | { |
677 | des_ede3_ofb64_encrypt(&(plain[i]),&(ofb_buf1[i]),1,ks,ks,ks, | 696 | des_ede3_ofb64_encrypt(&(plain[i]),&(ofb_buf1[i]),1,ks,ks, |
678 | &ofb_tmp,&num); | 697 | ks,&ofb_tmp,&num); |
679 | } | 698 | } |
680 | if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0) | 699 | if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0) |
681 | { | 700 | { |
@@ -684,8 +703,8 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]); | |||
684 | } | 703 | } |
685 | memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv)); | 704 | memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv)); |
686 | num=0; | 705 | num=0; |
687 | des_ede3_ofb64_encrypt(ofb_buf1,ofb_buf2,sizeof(ofb_buf1),ks, | 706 | des_ede3_ofb64_encrypt(ofb_buf1,ofb_buf2,sizeof(ofb_buf1),ks,ks,ks, |
688 | ks,ks,&ofb_tmp,&num); | 707 | &ofb_tmp,&num); |
689 | if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0) | 708 | if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0) |
690 | { | 709 | { |
691 | printf("ede_ofb64_encrypt decrypt error\n"); | 710 | printf("ede_ofb64_encrypt decrypt error\n"); |
@@ -693,7 +712,7 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]); | |||
693 | } | 712 | } |
694 | 713 | ||
695 | printf("Doing cbc_cksum\n"); | 714 | printf("Doing cbc_cksum\n"); |
696 | des_set_key_checked(&cbc_key,ks); | 715 | DES_set_key_checked(&cbc_key,&ks); |
697 | cs=des_cbc_cksum(cbc_data,&cret,strlen((char *)cbc_data),ks,&cbc_iv); | 716 | cs=des_cbc_cksum(cbc_data,&cret,strlen((char *)cbc_data),ks,&cbc_iv); |
698 | if (cs != cbc_cksum_ret) | 717 | if (cs != cbc_cksum_ret) |
699 | { | 718 | { |
@@ -708,7 +727,7 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]); | |||
708 | } | 727 | } |
709 | 728 | ||
710 | printf("Doing quad_cksum\n"); | 729 | printf("Doing quad_cksum\n"); |
711 | cs=quad_cksum(cbc_data,(des_cblock *)lqret, | 730 | cs=des_quad_cksum(cbc_data,(des_cblock *)lqret, |
712 | (long)strlen((char *)cbc_data),2,(des_cblock *)cbc_iv); | 731 | (long)strlen((char *)cbc_data),2,(des_cblock *)cbc_iv); |
713 | if (cs != 0x70d7a63aL) | 732 | if (cs != 0x70d7a63aL) |
714 | { | 733 | { |
@@ -829,7 +848,7 @@ static int cfb_test(int bits, unsigned char *cfb_cipher) | |||
829 | des_key_schedule ks; | 848 | des_key_schedule ks; |
830 | int i,err=0; | 849 | int i,err=0; |
831 | 850 | ||
832 | des_set_key_checked(&cfb_key,ks); | 851 | DES_set_key_checked(&cfb_key,&ks); |
833 | memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv)); | 852 | memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv)); |
834 | des_cfb_encrypt(plain,cfb_buf1,bits,sizeof(plain),ks,&cfb_tmp, | 853 | des_cfb_encrypt(plain,cfb_buf1,bits,sizeof(plain),ks,&cfb_tmp, |
835 | DES_ENCRYPT); | 854 | DES_ENCRYPT); |
@@ -858,7 +877,7 @@ static int cfb64_test(unsigned char *cfb_cipher) | |||
858 | des_key_schedule ks; | 877 | des_key_schedule ks; |
859 | int err=0,i,n; | 878 | int err=0,i,n; |
860 | 879 | ||
861 | des_set_key_checked(&cfb_key,ks); | 880 | DES_set_key_checked(&cfb_key,&ks); |
862 | memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv)); | 881 | memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv)); |
863 | n=0; | 882 | n=0; |
864 | des_cfb64_encrypt(plain,cfb_buf1,12,ks,&cfb_tmp,&n,DES_ENCRYPT); | 883 | des_cfb64_encrypt(plain,cfb_buf1,12,ks,&cfb_tmp,&n,DES_ENCRYPT); |
@@ -891,7 +910,7 @@ static int ede_cfb64_test(unsigned char *cfb_cipher) | |||
891 | des_key_schedule ks; | 910 | des_key_schedule ks; |
892 | int err=0,i,n; | 911 | int err=0,i,n; |
893 | 912 | ||
894 | des_set_key_checked(&cfb_key,ks); | 913 | DES_set_key_checked(&cfb_key,&ks); |
895 | memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv)); | 914 | memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv)); |
896 | n=0; | 915 | n=0; |
897 | des_ede3_cfb64_encrypt(plain,cfb_buf1,12,ks,ks,ks,&cfb_tmp,&n, | 916 | des_ede3_cfb64_encrypt(plain,cfb_buf1,12,ks,ks,ks,&cfb_tmp,&n, |