diff options
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/async_tx/Kconfig | 14 | ||||
-rw-r--r-- | crypto/des_generic.c | 130 |
2 files changed, 79 insertions, 65 deletions
diff --git a/crypto/async_tx/Kconfig b/crypto/async_tx/Kconfig index e28e276ac611..5de2ed13b35d 100644 --- a/crypto/async_tx/Kconfig +++ b/crypto/async_tx/Kconfig | |||
@@ -22,6 +22,20 @@ config ASYNC_RAID6_RECOV | |||
22 | tristate | 22 | tristate |
23 | select ASYNC_CORE | 23 | select ASYNC_CORE |
24 | select ASYNC_PQ | 24 | select ASYNC_PQ |
25 | select ASYNC_XOR | ||
26 | |||
27 | config ASYNC_RAID6_TEST | ||
28 | tristate "Self test for hardware accelerated raid6 recovery" | ||
29 | depends on ASYNC_RAID6_RECOV | ||
30 | select ASYNC_MEMCPY | ||
31 | ---help--- | ||
32 | This is a one-shot self test that permutes through the | ||
33 | recovery of all the possible two disk failure scenarios for a | ||
34 | N-disk array. Recovery is performed with the asynchronous | ||
35 | raid6 recovery routines, and will optionally use an offload | ||
36 | engine if one is available. | ||
37 | |||
38 | If unsure, say N. | ||
25 | 39 | ||
26 | config ASYNC_TX_DISABLE_PQ_VAL_DMA | 40 | config ASYNC_TX_DISABLE_PQ_VAL_DMA |
27 | bool | 41 | bool |
diff --git a/crypto/des_generic.c b/crypto/des_generic.c index 249f903cc453..873818d48e86 100644 --- a/crypto/des_generic.c +++ b/crypto/des_generic.c | |||
@@ -614,7 +614,7 @@ static const u32 S8[64] = { | |||
614 | #define T3(x) pt[2 * (x) + 2] | 614 | #define T3(x) pt[2 * (x) + 2] |
615 | #define T4(x) pt[2 * (x) + 3] | 615 | #define T4(x) pt[2 * (x) + 3] |
616 | 616 | ||
617 | #define PC2(a, b, c, d) (T4(d) | T3(c) | T2(b) | T1(a)) | 617 | #define DES_PC2(a, b, c, d) (T4(d) | T3(c) | T2(b) | T1(a)) |
618 | 618 | ||
619 | /* | 619 | /* |
620 | * Encryption key expansion | 620 | * Encryption key expansion |
@@ -639,22 +639,22 @@ unsigned long des_ekey(u32 *pe, const u8 *k) | |||
639 | b = k[6]; b &= 0x0e; b <<= 4; b |= k[2] & 0x1e; b = pc1[b]; | 639 | b = k[6]; b &= 0x0e; b <<= 4; b |= k[2] & 0x1e; b = pc1[b]; |
640 | a = k[7]; a &= 0x0e; a <<= 4; a |= k[3] & 0x1e; a = pc1[a]; | 640 | a = k[7]; a &= 0x0e; a <<= 4; a |= k[3] & 0x1e; a = pc1[a]; |
641 | 641 | ||
642 | pe[15 * 2 + 0] = PC2(a, b, c, d); d = rs[d]; | 642 | pe[15 * 2 + 0] = DES_PC2(a, b, c, d); d = rs[d]; |
643 | pe[14 * 2 + 0] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 643 | pe[14 * 2 + 0] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
644 | pe[13 * 2 + 0] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 644 | pe[13 * 2 + 0] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
645 | pe[12 * 2 + 0] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 645 | pe[12 * 2 + 0] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
646 | pe[11 * 2 + 0] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 646 | pe[11 * 2 + 0] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
647 | pe[10 * 2 + 0] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 647 | pe[10 * 2 + 0] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
648 | pe[ 9 * 2 + 0] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 648 | pe[ 9 * 2 + 0] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
649 | pe[ 8 * 2 + 0] = PC2(d, a, b, c); c = rs[c]; | 649 | pe[ 8 * 2 + 0] = DES_PC2(d, a, b, c); c = rs[c]; |
650 | pe[ 7 * 2 + 0] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 650 | pe[ 7 * 2 + 0] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
651 | pe[ 6 * 2 + 0] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 651 | pe[ 6 * 2 + 0] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
652 | pe[ 5 * 2 + 0] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 652 | pe[ 5 * 2 + 0] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
653 | pe[ 4 * 2 + 0] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 653 | pe[ 4 * 2 + 0] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
654 | pe[ 3 * 2 + 0] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 654 | pe[ 3 * 2 + 0] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
655 | pe[ 2 * 2 + 0] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 655 | pe[ 2 * 2 + 0] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
656 | pe[ 1 * 2 + 0] = PC2(c, d, a, b); b = rs[b]; | 656 | pe[ 1 * 2 + 0] = DES_PC2(c, d, a, b); b = rs[b]; |
657 | pe[ 0 * 2 + 0] = PC2(b, c, d, a); | 657 | pe[ 0 * 2 + 0] = DES_PC2(b, c, d, a); |
658 | 658 | ||
659 | /* Check if first half is weak */ | 659 | /* Check if first half is weak */ |
660 | w = (a ^ c) | (b ^ d) | (rs[a] ^ c) | (b ^ rs[d]); | 660 | w = (a ^ c) | (b ^ d) | (rs[a] ^ c) | (b ^ rs[d]); |
@@ -670,22 +670,22 @@ unsigned long des_ekey(u32 *pe, const u8 *k) | |||
670 | /* Check if second half is weak */ | 670 | /* Check if second half is weak */ |
671 | w |= (a ^ c) | (b ^ d) | (rs[a] ^ c) | (b ^ rs[d]); | 671 | w |= (a ^ c) | (b ^ d) | (rs[a] ^ c) | (b ^ rs[d]); |
672 | 672 | ||
673 | pe[15 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; | 673 | pe[15 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; |
674 | pe[14 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 674 | pe[14 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
675 | pe[13 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 675 | pe[13 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
676 | pe[12 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 676 | pe[12 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
677 | pe[11 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 677 | pe[11 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
678 | pe[10 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 678 | pe[10 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
679 | pe[ 9 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 679 | pe[ 9 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
680 | pe[ 8 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; | 680 | pe[ 8 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; |
681 | pe[ 7 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 681 | pe[ 7 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
682 | pe[ 6 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 682 | pe[ 6 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
683 | pe[ 5 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 683 | pe[ 5 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
684 | pe[ 4 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 684 | pe[ 4 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
685 | pe[ 3 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 685 | pe[ 3 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
686 | pe[ 2 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 686 | pe[ 2 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
687 | pe[ 1 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; | 687 | pe[ 1 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; |
688 | pe[ 0 * 2 + 1] = PC2(b, c, d, a); | 688 | pe[ 0 * 2 + 1] = DES_PC2(b, c, d, a); |
689 | 689 | ||
690 | /* Fixup: 2413 5768 -> 1357 2468 */ | 690 | /* Fixup: 2413 5768 -> 1357 2468 */ |
691 | for (d = 0; d < 16; ++d) { | 691 | for (d = 0; d < 16; ++d) { |
@@ -722,22 +722,22 @@ static void dkey(u32 *pe, const u8 *k) | |||
722 | b = k[6]; b &= 0x0e; b <<= 4; b |= k[2] & 0x1e; b = pc1[b]; | 722 | b = k[6]; b &= 0x0e; b <<= 4; b |= k[2] & 0x1e; b = pc1[b]; |
723 | a = k[7]; a &= 0x0e; a <<= 4; a |= k[3] & 0x1e; a = pc1[a]; | 723 | a = k[7]; a &= 0x0e; a <<= 4; a |= k[3] & 0x1e; a = pc1[a]; |
724 | 724 | ||
725 | pe[ 0 * 2] = PC2(a, b, c, d); d = rs[d]; | 725 | pe[ 0 * 2] = DES_PC2(a, b, c, d); d = rs[d]; |
726 | pe[ 1 * 2] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 726 | pe[ 1 * 2] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
727 | pe[ 2 * 2] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 727 | pe[ 2 * 2] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
728 | pe[ 3 * 2] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 728 | pe[ 3 * 2] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
729 | pe[ 4 * 2] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 729 | pe[ 4 * 2] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
730 | pe[ 5 * 2] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 730 | pe[ 5 * 2] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
731 | pe[ 6 * 2] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 731 | pe[ 6 * 2] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
732 | pe[ 7 * 2] = PC2(d, a, b, c); c = rs[c]; | 732 | pe[ 7 * 2] = DES_PC2(d, a, b, c); c = rs[c]; |
733 | pe[ 8 * 2] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 733 | pe[ 8 * 2] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
734 | pe[ 9 * 2] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 734 | pe[ 9 * 2] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
735 | pe[10 * 2] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 735 | pe[10 * 2] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
736 | pe[11 * 2] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 736 | pe[11 * 2] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
737 | pe[12 * 2] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 737 | pe[12 * 2] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
738 | pe[13 * 2] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 738 | pe[13 * 2] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
739 | pe[14 * 2] = PC2(c, d, a, b); b = rs[b]; | 739 | pe[14 * 2] = DES_PC2(c, d, a, b); b = rs[b]; |
740 | pe[15 * 2] = PC2(b, c, d, a); | 740 | pe[15 * 2] = DES_PC2(b, c, d, a); |
741 | 741 | ||
742 | /* Skip to next table set */ | 742 | /* Skip to next table set */ |
743 | pt += 512; | 743 | pt += 512; |
@@ -747,22 +747,22 @@ static void dkey(u32 *pe, const u8 *k) | |||
747 | b = k[2]; b &= 0xe0; b >>= 4; b |= k[6] & 0xf0; b = pc1[b + 1]; | 747 | b = k[2]; b &= 0xe0; b >>= 4; b |= k[6] & 0xf0; b = pc1[b + 1]; |
748 | a = k[3]; a &= 0xe0; a >>= 4; a |= k[7] & 0xf0; a = pc1[a + 1]; | 748 | a = k[3]; a &= 0xe0; a >>= 4; a |= k[7] & 0xf0; a = pc1[a + 1]; |
749 | 749 | ||
750 | pe[ 0 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; | 750 | pe[ 0 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; |
751 | pe[ 1 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 751 | pe[ 1 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
752 | pe[ 2 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 752 | pe[ 2 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
753 | pe[ 3 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 753 | pe[ 3 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
754 | pe[ 4 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 754 | pe[ 4 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
755 | pe[ 5 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b]; | 755 | pe[ 5 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b]; |
756 | pe[ 6 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d]; | 756 | pe[ 6 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d]; |
757 | pe[ 7 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; | 757 | pe[ 7 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; |
758 | pe[ 8 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 758 | pe[ 8 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
759 | pe[ 9 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 759 | pe[ 9 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
760 | pe[10 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 760 | pe[10 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
761 | pe[11 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 761 | pe[11 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
762 | pe[12 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a]; | 762 | pe[12 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a]; |
763 | pe[13 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c]; | 763 | pe[13 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c]; |
764 | pe[14 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; | 764 | pe[14 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; |
765 | pe[15 * 2 + 1] = PC2(b, c, d, a); | 765 | pe[15 * 2 + 1] = DES_PC2(b, c, d, a); |
766 | 766 | ||
767 | /* Fixup: 2413 5768 -> 1357 2468 */ | 767 | /* Fixup: 2413 5768 -> 1357 2468 */ |
768 | for (d = 0; d < 16; ++d) { | 768 | for (d = 0; d < 16; ++d) { |