OLD | NEW |
1 #if defined(__arm__) | 1 #if defined(__arm__) |
2 | 2 |
3 @ ==================================================================== | 3 @ ==================================================================== |
4 @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL | 4 @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL |
5 @ project. The module is, however, dual licensed under OpenSSL and | 5 @ project. The module is, however, dual licensed under OpenSSL and |
6 @ CRYPTOGAMS licenses depending on where you obtain it. For further | 6 @ CRYPTOGAMS licenses depending on where you obtain it. For further |
7 @ details see http://www.openssl.org/~appro/cryptogams/. | 7 @ details see http://www.openssl.org/~appro/cryptogams/. |
8 @ | 8 @ |
9 @ Specific modes and adaptation for Linux kernel by Ard Biesheuvel | 9 @ Specific modes and adaptation for Linux kernel by Ard Biesheuvel |
10 @ <ard.biesheuvel@linaro.org>. Permission to use under GPL terms is | 10 @ <ard.biesheuvel@linaro.org>. Permission to use under GPL terms is |
(...skipping 1825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1836 vst1.8 {q8,q9}, [r8]! | 1836 vst1.8 {q8,q9}, [r8]! |
1837 veor q11, q7, q13 | 1837 veor q11, q7, q13 |
1838 veor q12, q2, q14 | 1838 veor q12, q2, q14 |
1839 vst1.8 {q10,q11}, [r8]! | 1839 vst1.8 {q10,q11}, [r8]! |
1840 vst1.8 {q12}, [r8]! | 1840 vst1.8 {q12}, [r8]! |
1841 | 1841 |
1842 vld1.64 {q8}, [r0,:128] @ next round tweak | 1842 vld1.64 {q8}, [r0,:128] @ next round tweak |
1843 b .Lxts_enc_done | 1843 b .Lxts_enc_done |
1844 .align 4 | 1844 .align 4 |
1845 .Lxts_enc_6: | 1845 .Lxts_enc_6: |
1846 vst1.64 {q14}, [r0,:128] @ next round tweak | |
1847 | |
1848 veor q4, q4, q12 | 1846 veor q4, q4, q12 |
1849 #ifndef BSAES_ASM_EXTENDED_KEY | 1847 #ifndef BSAES_ASM_EXTENDED_KEY |
1850 add r4, sp, #0x90 @ pass key schedule | 1848 add r4, sp, #0x90 @ pass key schedule |
1851 #else | 1849 #else |
1852 add r4, r10, #248 @ pass key schedule | 1850 add r4, r10, #248 @ pass key schedule |
1853 #endif | 1851 #endif |
1854 veor q5, q5, q13 | 1852 veor q5, q5, q13 |
1855 mov r5, r1 @ pass rounds | 1853 mov r5, r1 @ pass rounds |
1856 mov r0, sp | 1854 mov r0, sp |
1857 | 1855 |
(...skipping 15 matching lines...) Expand all Loading... |
1873 vld1.64 {q8}, [r0,:128] @ next round tweak | 1871 vld1.64 {q8}, [r0,:128] @ next round tweak |
1874 b .Lxts_enc_done | 1872 b .Lxts_enc_done |
1875 | 1873 |
1876 @ put this in range for both ARM and Thumb mode adr instructions | 1874 @ put this in range for both ARM and Thumb mode adr instructions |
1877 .align 5 | 1875 .align 5 |
1878 .Lxts_magic: | 1876 .Lxts_magic: |
1879 .quad 1, 0x87 | 1877 .quad 1, 0x87 |
1880 | 1878 |
1881 .align 5 | 1879 .align 5 |
1882 .Lxts_enc_5: | 1880 .Lxts_enc_5: |
1883 vst1.64 {q13}, [r0,:128] @ next round tweak | |
1884 | |
1885 veor q3, q3, q11 | 1881 veor q3, q3, q11 |
1886 #ifndef BSAES_ASM_EXTENDED_KEY | 1882 #ifndef BSAES_ASM_EXTENDED_KEY |
1887 add r4, sp, #0x90 @ pass key schedule | 1883 add r4, sp, #0x90 @ pass key schedule |
1888 #else | 1884 #else |
1889 add r4, r10, #248 @ pass key schedule | 1885 add r4, r10, #248 @ pass key schedule |
1890 #endif | 1886 #endif |
1891 veor q4, q4, q12 | 1887 veor q4, q4, q12 |
1892 mov r5, r1 @ pass rounds | 1888 mov r5, r1 @ pass rounds |
1893 mov r0, sp | 1889 mov r0, sp |
1894 | 1890 |
1895 bl _bsaes_encrypt8 | 1891 bl _bsaes_encrypt8 |
1896 | 1892 |
1897 vld1.64 {q8,q9}, [r0,:128]! | 1893 vld1.64 {q8,q9}, [r0,:128]! |
1898 vld1.64 {q10,q11}, [r0,:128]! | 1894 vld1.64 {q10,q11}, [r0,:128]! |
1899 veor q0, q0, q8 | 1895 veor q0, q0, q8 |
1900 vld1.64 {q12}, [r0,:128]! | 1896 vld1.64 {q12}, [r0,:128]! |
1901 veor q1, q1, q9 | 1897 veor q1, q1, q9 |
1902 veor q8, q4, q10 | 1898 veor q8, q4, q10 |
1903 vst1.8 {q0,q1}, [r8]! | 1899 vst1.8 {q0,q1}, [r8]! |
1904 veor q9, q6, q11 | 1900 veor q9, q6, q11 |
1905 veor q10, q3, q12 | 1901 veor q10, q3, q12 |
1906 vst1.8 {q8,q9}, [r8]! | 1902 vst1.8 {q8,q9}, [r8]! |
1907 vst1.8 {q10}, [r8]! | 1903 vst1.8 {q10}, [r8]! |
1908 | 1904 |
1909 vld1.64 {q8}, [r0,:128] @ next round tweak | 1905 vld1.64 {q8}, [r0,:128] @ next round tweak |
1910 b .Lxts_enc_done | 1906 b .Lxts_enc_done |
1911 .align 4 | 1907 .align 4 |
1912 .Lxts_enc_4: | 1908 .Lxts_enc_4: |
1913 vst1.64 {q12}, [r0,:128] @ next round tweak | |
1914 | |
1915 veor q2, q2, q10 | 1909 veor q2, q2, q10 |
1916 #ifndef BSAES_ASM_EXTENDED_KEY | 1910 #ifndef BSAES_ASM_EXTENDED_KEY |
1917 add r4, sp, #0x90 @ pass key schedule | 1911 add r4, sp, #0x90 @ pass key schedule |
1918 #else | 1912 #else |
1919 add r4, r10, #248 @ pass key schedule | 1913 add r4, r10, #248 @ pass key schedule |
1920 #endif | 1914 #endif |
1921 veor q3, q3, q11 | 1915 veor q3, q3, q11 |
1922 mov r5, r1 @ pass rounds | 1916 mov r5, r1 @ pass rounds |
1923 mov r0, sp | 1917 mov r0, sp |
1924 | 1918 |
1925 bl _bsaes_encrypt8 | 1919 bl _bsaes_encrypt8 |
1926 | 1920 |
1927 vld1.64 {q8,q9}, [r0,:128]! | 1921 vld1.64 {q8,q9}, [r0,:128]! |
1928 vld1.64 {q10,q11}, [r0,:128]! | 1922 vld1.64 {q10,q11}, [r0,:128]! |
1929 veor q0, q0, q8 | 1923 veor q0, q0, q8 |
1930 veor q1, q1, q9 | 1924 veor q1, q1, q9 |
1931 veor q8, q4, q10 | 1925 veor q8, q4, q10 |
1932 vst1.8 {q0,q1}, [r8]! | 1926 vst1.8 {q0,q1}, [r8]! |
1933 veor q9, q6, q11 | 1927 veor q9, q6, q11 |
1934 vst1.8 {q8,q9}, [r8]! | 1928 vst1.8 {q8,q9}, [r8]! |
1935 | 1929 |
1936 vld1.64 {q8}, [r0,:128] @ next round tweak | 1930 vld1.64 {q8}, [r0,:128] @ next round tweak |
1937 b .Lxts_enc_done | 1931 b .Lxts_enc_done |
1938 .align 4 | 1932 .align 4 |
1939 .Lxts_enc_3: | 1933 .Lxts_enc_3: |
1940 vst1.64 {q11}, [r0,:128] @ next round tweak | |
1941 | |
1942 veor q1, q1, q9 | 1934 veor q1, q1, q9 |
1943 #ifndef BSAES_ASM_EXTENDED_KEY | 1935 #ifndef BSAES_ASM_EXTENDED_KEY |
1944 add r4, sp, #0x90 @ pass key schedule | 1936 add r4, sp, #0x90 @ pass key schedule |
1945 #else | 1937 #else |
1946 add r4, r10, #248 @ pass key schedule | 1938 add r4, r10, #248 @ pass key schedule |
1947 #endif | 1939 #endif |
1948 veor q2, q2, q10 | 1940 veor q2, q2, q10 |
1949 mov r5, r1 @ pass rounds | 1941 mov r5, r1 @ pass rounds |
1950 mov r0, sp | 1942 mov r0, sp |
1951 | 1943 |
1952 bl _bsaes_encrypt8 | 1944 bl _bsaes_encrypt8 |
1953 | 1945 |
1954 vld1.64 {q8,q9}, [r0,:128]! | 1946 vld1.64 {q8,q9}, [r0,:128]! |
1955 vld1.64 {q10}, [r0,:128]! | 1947 vld1.64 {q10}, [r0,:128]! |
1956 veor q0, q0, q8 | 1948 veor q0, q0, q8 |
1957 veor q1, q1, q9 | 1949 veor q1, q1, q9 |
1958 veor q8, q4, q10 | 1950 veor q8, q4, q10 |
1959 vst1.8 {q0,q1}, [r8]! | 1951 vst1.8 {q0,q1}, [r8]! |
1960 vst1.8 {q8}, [r8]! | 1952 vst1.8 {q8}, [r8]! |
1961 | 1953 |
1962 vld1.64 {q8}, [r0,:128] @ next round tweak | 1954 vld1.64 {q8}, [r0,:128] @ next round tweak |
1963 b .Lxts_enc_done | 1955 b .Lxts_enc_done |
1964 .align 4 | 1956 .align 4 |
1965 .Lxts_enc_2: | 1957 .Lxts_enc_2: |
1966 vst1.64 {q10}, [r0,:128] @ next round tweak | |
1967 | |
1968 veor q0, q0, q8 | 1958 veor q0, q0, q8 |
1969 #ifndef BSAES_ASM_EXTENDED_KEY | 1959 #ifndef BSAES_ASM_EXTENDED_KEY |
1970 add r4, sp, #0x90 @ pass key schedule | 1960 add r4, sp, #0x90 @ pass key schedule |
1971 #else | 1961 #else |
1972 add r4, r10, #248 @ pass key schedule | 1962 add r4, r10, #248 @ pass key schedule |
1973 #endif | 1963 #endif |
1974 veor q1, q1, q9 | 1964 veor q1, q1, q9 |
1975 mov r5, r1 @ pass rounds | 1965 mov r5, r1 @ pass rounds |
1976 mov r0, sp | 1966 mov r0, sp |
1977 | 1967 |
1978 bl _bsaes_encrypt8 | 1968 bl _bsaes_encrypt8 |
1979 | 1969 |
1980 vld1.64 {q8,q9}, [r0,:128]! | 1970 vld1.64 {q8,q9}, [r0,:128]! |
1981 veor q0, q0, q8 | 1971 veor q0, q0, q8 |
1982 veor q1, q1, q9 | 1972 veor q1, q1, q9 |
1983 vst1.8 {q0,q1}, [r8]! | 1973 vst1.8 {q0,q1}, [r8]! |
1984 | 1974 |
1985 vld1.64 {q8}, [r0,:128] @ next round tweak | 1975 vld1.64 {q8}, [r0,:128] @ next round tweak |
1986 b .Lxts_enc_done | 1976 b .Lxts_enc_done |
1987 .align 4 | 1977 .align 4 |
1988 .Lxts_enc_1: | 1978 .Lxts_enc_1: |
1989 mov r0, sp | 1979 mov r0, sp |
1990 » veor» q0, q8 | 1980 » veor» q0, q0, q8 |
1991 mov r1, sp | 1981 mov r1, sp |
1992 vst1.8 {q0}, [sp,:128] | 1982 vst1.8 {q0}, [sp,:128] |
1993 mov r2, r10 | 1983 mov r2, r10 |
1994 mov r4, r3 @ preserve fp | 1984 mov r4, r3 @ preserve fp |
1995 | 1985 |
1996 bl AES_encrypt | 1986 bl AES_encrypt |
1997 | 1987 |
1998 vld1.8 {q0}, [sp,:128] | 1988 vld1.8 {q0}, [sp,:128] |
1999 veor q0, q0, q8 | 1989 veor q0, q0, q8 |
2000 vst1.8 {q0}, [r8]! | 1990 vst1.8 {q0}, [r8]! |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2369 veor q9, q4, q11 | 2359 veor q9, q4, q11 |
2370 veor q10, q2, q12 | 2360 veor q10, q2, q12 |
2371 vst1.8 {q8,q9}, [r8]! | 2361 vst1.8 {q8,q9}, [r8]! |
2372 veor q11, q7, q13 | 2362 veor q11, q7, q13 |
2373 vst1.8 {q10,q11}, [r8]! | 2363 vst1.8 {q10,q11}, [r8]! |
2374 | 2364 |
2375 vld1.64 {q8}, [r0,:128] @ next round tweak | 2365 vld1.64 {q8}, [r0,:128] @ next round tweak |
2376 b .Lxts_dec_done | 2366 b .Lxts_dec_done |
2377 .align 4 | 2367 .align 4 |
2378 .Lxts_dec_5: | 2368 .Lxts_dec_5: |
2379 vst1.64 {q13}, [r0,:128] @ next round tweak | |
2380 | |
2381 veor q3, q3, q11 | 2369 veor q3, q3, q11 |
2382 #ifndef BSAES_ASM_EXTENDED_KEY | 2370 #ifndef BSAES_ASM_EXTENDED_KEY |
2383 add r4, sp, #0x90 @ pass key schedule | 2371 add r4, sp, #0x90 @ pass key schedule |
2384 #else | 2372 #else |
2385 add r4, r10, #248 @ pass key schedule | 2373 add r4, r10, #248 @ pass key schedule |
2386 #endif | 2374 #endif |
2387 veor q4, q4, q12 | 2375 veor q4, q4, q12 |
2388 mov r5, r1 @ pass rounds | 2376 mov r5, r1 @ pass rounds |
2389 mov r0, sp | 2377 mov r0, sp |
2390 | 2378 |
2391 bl _bsaes_decrypt8 | 2379 bl _bsaes_decrypt8 |
2392 | 2380 |
2393 vld1.64 {q8,q9}, [r0,:128]! | 2381 vld1.64 {q8,q9}, [r0,:128]! |
2394 vld1.64 {q10,q11}, [r0,:128]! | 2382 vld1.64 {q10,q11}, [r0,:128]! |
2395 veor q0, q0, q8 | 2383 veor q0, q0, q8 |
2396 vld1.64 {q12}, [r0,:128]! | 2384 vld1.64 {q12}, [r0,:128]! |
2397 veor q1, q1, q9 | 2385 veor q1, q1, q9 |
2398 veor q8, q6, q10 | 2386 veor q8, q6, q10 |
2399 vst1.8 {q0,q1}, [r8]! | 2387 vst1.8 {q0,q1}, [r8]! |
2400 veor q9, q4, q11 | 2388 veor q9, q4, q11 |
2401 veor q10, q2, q12 | 2389 veor q10, q2, q12 |
2402 vst1.8 {q8,q9}, [r8]! | 2390 vst1.8 {q8,q9}, [r8]! |
2403 vst1.8 {q10}, [r8]! | 2391 vst1.8 {q10}, [r8]! |
2404 | 2392 |
2405 vld1.64 {q8}, [r0,:128] @ next round tweak | 2393 vld1.64 {q8}, [r0,:128] @ next round tweak |
2406 b .Lxts_dec_done | 2394 b .Lxts_dec_done |
2407 .align 4 | 2395 .align 4 |
2408 .Lxts_dec_4: | 2396 .Lxts_dec_4: |
2409 vst1.64 {q12}, [r0,:128] @ next round tweak | |
2410 | |
2411 veor q2, q2, q10 | 2397 veor q2, q2, q10 |
2412 #ifndef BSAES_ASM_EXTENDED_KEY | 2398 #ifndef BSAES_ASM_EXTENDED_KEY |
2413 add r4, sp, #0x90 @ pass key schedule | 2399 add r4, sp, #0x90 @ pass key schedule |
2414 #else | 2400 #else |
2415 add r4, r10, #248 @ pass key schedule | 2401 add r4, r10, #248 @ pass key schedule |
2416 #endif | 2402 #endif |
2417 veor q3, q3, q11 | 2403 veor q3, q3, q11 |
2418 mov r5, r1 @ pass rounds | 2404 mov r5, r1 @ pass rounds |
2419 mov r0, sp | 2405 mov r0, sp |
2420 | 2406 |
2421 bl _bsaes_decrypt8 | 2407 bl _bsaes_decrypt8 |
2422 | 2408 |
2423 vld1.64 {q8,q9}, [r0,:128]! | 2409 vld1.64 {q8,q9}, [r0,:128]! |
2424 vld1.64 {q10,q11}, [r0,:128]! | 2410 vld1.64 {q10,q11}, [r0,:128]! |
2425 veor q0, q0, q8 | 2411 veor q0, q0, q8 |
2426 veor q1, q1, q9 | 2412 veor q1, q1, q9 |
2427 veor q8, q6, q10 | 2413 veor q8, q6, q10 |
2428 vst1.8 {q0,q1}, [r8]! | 2414 vst1.8 {q0,q1}, [r8]! |
2429 veor q9, q4, q11 | 2415 veor q9, q4, q11 |
2430 vst1.8 {q8,q9}, [r8]! | 2416 vst1.8 {q8,q9}, [r8]! |
2431 | 2417 |
2432 vld1.64 {q8}, [r0,:128] @ next round tweak | 2418 vld1.64 {q8}, [r0,:128] @ next round tweak |
2433 b .Lxts_dec_done | 2419 b .Lxts_dec_done |
2434 .align 4 | 2420 .align 4 |
2435 .Lxts_dec_3: | 2421 .Lxts_dec_3: |
2436 vst1.64 {q11}, [r0,:128] @ next round tweak | |
2437 | |
2438 veor q1, q1, q9 | 2422 veor q1, q1, q9 |
2439 #ifndef BSAES_ASM_EXTENDED_KEY | 2423 #ifndef BSAES_ASM_EXTENDED_KEY |
2440 add r4, sp, #0x90 @ pass key schedule | 2424 add r4, sp, #0x90 @ pass key schedule |
2441 #else | 2425 #else |
2442 add r4, r10, #248 @ pass key schedule | 2426 add r4, r10, #248 @ pass key schedule |
2443 #endif | 2427 #endif |
2444 veor q2, q2, q10 | 2428 veor q2, q2, q10 |
2445 mov r5, r1 @ pass rounds | 2429 mov r5, r1 @ pass rounds |
2446 mov r0, sp | 2430 mov r0, sp |
2447 | 2431 |
2448 bl _bsaes_decrypt8 | 2432 bl _bsaes_decrypt8 |
2449 | 2433 |
2450 vld1.64 {q8,q9}, [r0,:128]! | 2434 vld1.64 {q8,q9}, [r0,:128]! |
2451 vld1.64 {q10}, [r0,:128]! | 2435 vld1.64 {q10}, [r0,:128]! |
2452 veor q0, q0, q8 | 2436 veor q0, q0, q8 |
2453 veor q1, q1, q9 | 2437 veor q1, q1, q9 |
2454 veor q8, q6, q10 | 2438 veor q8, q6, q10 |
2455 vst1.8 {q0,q1}, [r8]! | 2439 vst1.8 {q0,q1}, [r8]! |
2456 vst1.8 {q8}, [r8]! | 2440 vst1.8 {q8}, [r8]! |
2457 | 2441 |
2458 vld1.64 {q8}, [r0,:128] @ next round tweak | 2442 vld1.64 {q8}, [r0,:128] @ next round tweak |
2459 b .Lxts_dec_done | 2443 b .Lxts_dec_done |
2460 .align 4 | 2444 .align 4 |
2461 .Lxts_dec_2: | 2445 .Lxts_dec_2: |
2462 vst1.64 {q10}, [r0,:128] @ next round tweak | |
2463 | |
2464 veor q0, q0, q8 | 2446 veor q0, q0, q8 |
2465 #ifndef BSAES_ASM_EXTENDED_KEY | 2447 #ifndef BSAES_ASM_EXTENDED_KEY |
2466 add r4, sp, #0x90 @ pass key schedule | 2448 add r4, sp, #0x90 @ pass key schedule |
2467 #else | 2449 #else |
2468 add r4, r10, #248 @ pass key schedule | 2450 add r4, r10, #248 @ pass key schedule |
2469 #endif | 2451 #endif |
2470 veor q1, q1, q9 | 2452 veor q1, q1, q9 |
2471 mov r5, r1 @ pass rounds | 2453 mov r5, r1 @ pass rounds |
2472 mov r0, sp | 2454 mov r0, sp |
2473 | 2455 |
2474 bl _bsaes_decrypt8 | 2456 bl _bsaes_decrypt8 |
2475 | 2457 |
2476 vld1.64 {q8,q9}, [r0,:128]! | 2458 vld1.64 {q8,q9}, [r0,:128]! |
2477 veor q0, q0, q8 | 2459 veor q0, q0, q8 |
2478 veor q1, q1, q9 | 2460 veor q1, q1, q9 |
2479 vst1.8 {q0,q1}, [r8]! | 2461 vst1.8 {q0,q1}, [r8]! |
2480 | 2462 |
2481 vld1.64 {q8}, [r0,:128] @ next round tweak | 2463 vld1.64 {q8}, [r0,:128] @ next round tweak |
2482 b .Lxts_dec_done | 2464 b .Lxts_dec_done |
2483 .align 4 | 2465 .align 4 |
2484 .Lxts_dec_1: | 2466 .Lxts_dec_1: |
2485 mov r0, sp | 2467 mov r0, sp |
2486 » veor» q0, q8 | 2468 » veor» q0, q0, q8 |
2487 mov r1, sp | 2469 mov r1, sp |
2488 vst1.8 {q0}, [sp,:128] | 2470 vst1.8 {q0}, [sp,:128] |
| 2471 mov r5, r2 @ preserve magic |
2489 mov r2, r10 | 2472 mov r2, r10 |
2490 mov r4, r3 @ preserve fp | 2473 mov r4, r3 @ preserve fp |
2491 mov r5, r2 @ preserve magic | |
2492 | 2474 |
2493 bl AES_decrypt | 2475 bl AES_decrypt |
2494 | 2476 |
2495 vld1.8 {q0}, [sp,:128] | 2477 vld1.8 {q0}, [sp,:128] |
2496 veor q0, q0, q8 | 2478 veor q0, q0, q8 |
2497 vst1.8 {q0}, [r8]! | 2479 vst1.8 {q0}, [r8]! |
2498 mov r3, r4 | 2480 mov r3, r4 |
2499 mov r2, r5 | 2481 mov r2, r5 |
2500 | 2482 |
2501 vmov q8, q9 @ next round tweak | 2483 vmov q8, q9 @ next round tweak |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2568 mov sp, r3 | 2550 mov sp, r3 |
2569 #ifdef XTS_CHAIN_TWEAK | 2551 #ifdef XTS_CHAIN_TWEAK |
2570 vst1.8 {q8}, [r1] | 2552 vst1.8 {q8}, [r1] |
2571 #endif | 2553 #endif |
2572 VFP_ABI_POP | 2554 VFP_ABI_POP |
2573 ldmia sp!, {r4,r5,r6,r7,r8,r9,r10, pc} @ return | 2555 ldmia sp!, {r4,r5,r6,r7,r8,r9,r10, pc} @ return |
2574 | 2556 |
2575 .size bsaes_xts_decrypt,.-bsaes_xts_decrypt | 2557 .size bsaes_xts_decrypt,.-bsaes_xts_decrypt |
2576 #endif | 2558 #endif |
2577 #endif | 2559 #endif |
OLD | NEW |