rk3368: support armoff
[firefly-linux-kernel-4.4.55.git] / crypto / des_generic.c
index 249f903cc453b201270bb2db5c33be1856a5d324..3ec6071309d963d2cb56ab797c0c8cb157afda54 100644 (file)
@@ -614,7 +614,7 @@ static const u32 S8[64] = {
 #define T3(x) pt[2 * (x) + 2]
 #define T4(x) pt[2 * (x) + 3]
 
-#define PC2(a, b, c, d) (T4(d) | T3(c) | T2(b) | T1(a))
+#define DES_PC2(a, b, c, d) (T4(d) | T3(c) | T2(b) | T1(a))
 
 /*
  * Encryption key expansion
@@ -639,22 +639,22 @@ unsigned long des_ekey(u32 *pe, const u8 *k)
        b = k[6]; b &= 0x0e; b <<= 4; b |= k[2] & 0x1e; b = pc1[b];
        a = k[7]; a &= 0x0e; a <<= 4; a |= k[3] & 0x1e; a = pc1[a];
 
-       pe[15 * 2 + 0] = PC2(a, b, c, d); d = rs[d];
-       pe[14 * 2 + 0] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[13 * 2 + 0] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[12 * 2 + 0] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[11 * 2 + 0] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[10 * 2 + 0] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[ 9 * 2 + 0] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[ 8 * 2 + 0] = PC2(d, a, b, c); c = rs[c];
-       pe[ 7 * 2 + 0] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[ 6 * 2 + 0] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[ 5 * 2 + 0] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[ 4 * 2 + 0] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[ 3 * 2 + 0] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[ 2 * 2 + 0] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[ 1 * 2 + 0] = PC2(c, d, a, b); b = rs[b];
-       pe[ 0 * 2 + 0] = PC2(b, c, d, a);
+       pe[15 * 2 + 0] = DES_PC2(a, b, c, d); d = rs[d];
+       pe[14 * 2 + 0] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[13 * 2 + 0] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[12 * 2 + 0] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[11 * 2 + 0] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[10 * 2 + 0] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[ 9 * 2 + 0] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[ 8 * 2 + 0] = DES_PC2(d, a, b, c); c = rs[c];
+       pe[ 7 * 2 + 0] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[ 6 * 2 + 0] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[ 5 * 2 + 0] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[ 4 * 2 + 0] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[ 3 * 2 + 0] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[ 2 * 2 + 0] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[ 1 * 2 + 0] = DES_PC2(c, d, a, b); b = rs[b];
+       pe[ 0 * 2 + 0] = DES_PC2(b, c, d, a);
 
        /* Check if first half is weak */
        w  = (a ^ c) | (b ^ d) | (rs[a] ^ c) | (b ^ rs[d]);
@@ -670,22 +670,22 @@ unsigned long des_ekey(u32 *pe, const u8 *k)
        /* Check if second half is weak */
        w |= (a ^ c) | (b ^ d) | (rs[a] ^ c) | (b ^ rs[d]);
 
-       pe[15 * 2 + 1] = PC2(a, b, c, d); d = rs[d];
-       pe[14 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[13 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[12 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[11 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[10 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[ 9 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[ 8 * 2 + 1] = PC2(d, a, b, c); c = rs[c];
-       pe[ 7 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[ 6 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[ 5 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[ 4 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[ 3 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[ 2 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[ 1 * 2 + 1] = PC2(c, d, a, b); b = rs[b];
-       pe[ 0 * 2 + 1] = PC2(b, c, d, a);
+       pe[15 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d];
+       pe[14 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[13 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[12 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[11 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[10 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[ 9 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[ 8 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c];
+       pe[ 7 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[ 6 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[ 5 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[ 4 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[ 3 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[ 2 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[ 1 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b];
+       pe[ 0 * 2 + 1] = DES_PC2(b, c, d, a);
 
        /* Fixup: 2413 5768 -> 1357 2468 */
        for (d = 0; d < 16; ++d) {
@@ -722,22 +722,22 @@ static void dkey(u32 *pe, const u8 *k)
        b = k[6]; b &= 0x0e; b <<= 4; b |= k[2] & 0x1e; b = pc1[b];
        a = k[7]; a &= 0x0e; a <<= 4; a |= k[3] & 0x1e; a = pc1[a];
 
-       pe[ 0 * 2] = PC2(a, b, c, d); d = rs[d];
-       pe[ 1 * 2] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[ 2 * 2] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[ 3 * 2] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[ 4 * 2] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[ 5 * 2] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[ 6 * 2] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[ 7 * 2] = PC2(d, a, b, c); c = rs[c];
-       pe[ 8 * 2] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[ 9 * 2] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[10 * 2] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[11 * 2] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[12 * 2] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[13 * 2] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[14 * 2] = PC2(c, d, a, b); b = rs[b];
-       pe[15 * 2] = PC2(b, c, d, a);
+       pe[ 0 * 2] = DES_PC2(a, b, c, d); d = rs[d];
+       pe[ 1 * 2] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[ 2 * 2] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[ 3 * 2] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[ 4 * 2] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[ 5 * 2] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[ 6 * 2] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[ 7 * 2] = DES_PC2(d, a, b, c); c = rs[c];
+       pe[ 8 * 2] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[ 9 * 2] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[10 * 2] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[11 * 2] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[12 * 2] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[13 * 2] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[14 * 2] = DES_PC2(c, d, a, b); b = rs[b];
+       pe[15 * 2] = DES_PC2(b, c, d, a);
 
        /* Skip to next table set */
        pt += 512;
@@ -747,22 +747,22 @@ static void dkey(u32 *pe, const u8 *k)
        b = k[2]; b &= 0xe0; b >>= 4; b |= k[6] & 0xf0; b = pc1[b + 1];
        a = k[3]; a &= 0xe0; a >>= 4; a |= k[7] & 0xf0; a = pc1[a + 1];
 
-       pe[ 0 * 2 + 1] = PC2(a, b, c, d); d = rs[d];
-       pe[ 1 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[ 2 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[ 3 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[ 4 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[ 5 * 2 + 1] = PC2(d, a, b, c); c = rs[c]; b = rs[b];
-       pe[ 6 * 2 + 1] = PC2(b, c, d, a); a = rs[a]; d = rs[d];
-       pe[ 7 * 2 + 1] = PC2(d, a, b, c); c = rs[c];
-       pe[ 8 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[ 9 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[10 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[11 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[12 * 2 + 1] = PC2(c, d, a, b); b = rs[b]; a = rs[a];
-       pe[13 * 2 + 1] = PC2(a, b, c, d); d = rs[d]; c = rs[c];
-       pe[14 * 2 + 1] = PC2(c, d, a, b); b = rs[b];
-       pe[15 * 2 + 1] = PC2(b, c, d, a);
+       pe[ 0 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d];
+       pe[ 1 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[ 2 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[ 3 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[ 4 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[ 5 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c]; b = rs[b];
+       pe[ 6 * 2 + 1] = DES_PC2(b, c, d, a); a = rs[a]; d = rs[d];
+       pe[ 7 * 2 + 1] = DES_PC2(d, a, b, c); c = rs[c];
+       pe[ 8 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[ 9 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[10 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[11 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[12 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b]; a = rs[a];
+       pe[13 * 2 + 1] = DES_PC2(a, b, c, d); d = rs[d]; c = rs[c];
+       pe[14 * 2 + 1] = DES_PC2(c, d, a, b); b = rs[b];
+       pe[15 * 2 + 1] = DES_PC2(b, c, d, a);
 
        /* Fixup: 2413 5768 -> 1357 2468 */
        for (d = 0; d < 16; ++d) {
@@ -943,59 +943,42 @@ static void des3_ede_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
        d[1] = cpu_to_le32(L);
 }
 
-static struct crypto_alg des_alg = {
+static struct crypto_alg des_algs[2] = { {
        .cra_name               =       "des",
        .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
        .cra_blocksize          =       DES_BLOCK_SIZE,
        .cra_ctxsize            =       sizeof(struct des_ctx),
        .cra_module             =       THIS_MODULE,
        .cra_alignmask          =       3,
-       .cra_list               =       LIST_HEAD_INIT(des_alg.cra_list),
        .cra_u                  =       { .cipher = {
        .cia_min_keysize        =       DES_KEY_SIZE,
        .cia_max_keysize        =       DES_KEY_SIZE,
        .cia_setkey             =       des_setkey,
        .cia_encrypt            =       des_encrypt,
        .cia_decrypt            =       des_decrypt } }
-};
-
-static struct crypto_alg des3_ede_alg = {
+}, {
        .cra_name               =       "des3_ede",
        .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
        .cra_blocksize          =       DES3_EDE_BLOCK_SIZE,
        .cra_ctxsize            =       sizeof(struct des3_ede_ctx),
        .cra_module             =       THIS_MODULE,
        .cra_alignmask          =       3,
-       .cra_list               =       LIST_HEAD_INIT(des3_ede_alg.cra_list),
        .cra_u                  =       { .cipher = {
        .cia_min_keysize        =       DES3_EDE_KEY_SIZE,
        .cia_max_keysize        =       DES3_EDE_KEY_SIZE,
        .cia_setkey             =       des3_ede_setkey,
        .cia_encrypt            =       des3_ede_encrypt,
        .cia_decrypt            =       des3_ede_decrypt } }
-};
-
-MODULE_ALIAS("des3_ede");
+} };
 
 static int __init des_generic_mod_init(void)
 {
-       int ret = 0;
-
-       ret = crypto_register_alg(&des_alg);
-       if (ret < 0)
-               goto out;
-
-       ret = crypto_register_alg(&des3_ede_alg);
-       if (ret < 0)
-               crypto_unregister_alg(&des_alg);
-out:
-       return ret;
+       return crypto_register_algs(des_algs, ARRAY_SIZE(des_algs));
 }
 
 static void __exit des_generic_mod_fini(void)
 {
-       crypto_unregister_alg(&des3_ede_alg);
-       crypto_unregister_alg(&des_alg);
+       crypto_unregister_algs(des_algs, ARRAY_SIZE(des_algs));
 }
 
 module_init(des_generic_mod_init);
@@ -1004,4 +987,7 @@ module_exit(des_generic_mod_fini);
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("DES & Triple DES EDE Cipher Algorithms");
 MODULE_AUTHOR("Dag Arne Osvik <da@osvik.no>");
-MODULE_ALIAS("des");
+MODULE_ALIAS_CRYPTO("des");
+MODULE_ALIAS_CRYPTO("des-generic");
+MODULE_ALIAS_CRYPTO("des3_ede");
+MODULE_ALIAS_CRYPTO("des3_ede-generic");