Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/boringssl.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2016-06-28Switch perlasm calling convention.David Benjamin
Depending on architecture, perlasm differed on which one or both of: perl foo.pl flavor output.S perl foo.pl flavor > output.S Upstream has now unified on the first form after making a number of changes to their files (the second does not even work for their x86 files anymore). Sync those portions of our perlasm scripts with upstream and update CMakeLists.txt and generate_build_files.py per the new convention. This imports various commits like this one: 184bc45f683c76531d7e065b6553ca9086564576 (this was done by taking a diff, so I don't have the full list) Confirmed that generate_build_files.py sees no change. BUG=14 Change-Id: Id2fb5b8bc2a7369d077221b5df9a6947d41f50d2 Reviewed-on: https://boringssl-review.googlesource.com/8518 Reviewed-by: Adam Langley <agl@google.com>
2016-06-10Wrap MSVC-only warning pragmas in a macro.David Benjamin
There's a __pragma expression which allows this. Android builds us Windows with MinGW for some reason, so we actually do have to tolerate non-MSVC-compatible Windows compilers. (Clang for Windows is much more sensible than MinGW and intentionally mimicks MSVC.) MinGW doesn't understand MSVC's pragmas and warns a lot. #pragma warning is safe to suppress, so wrap those to shush them. This also lets us do away with a few ifdefs. Change-Id: I1f5a8bec4940d4b2d947c4c1cc9341bc15ec4972 Reviewed-on: https://boringssl-review.googlesource.com/8236 Reviewed-by: Adam Langley <agl@google.com>
2016-05-02Start assuming MSVC 2015.David Benjamin
BUG=43 Change-Id: I46ad1ca62b8921a03fae51f5d7bbe1c68fc0b170 Reviewed-on: https://boringssl-review.googlesource.com/7821 Reviewed-by: Steven Valdez <svaldez@google.com> Reviewed-by: David Benjamin <davidben@google.com>
2016-04-19Switch all 'num' parameters in crypto/modes to unsigned.David Benjamin
Also switch the EVP_CIPHER copy to cut down on how frequently we need to cast back and forth. BUG=22 Change-Id: I9af1e586ca27793a4ee6193bbb348cf2b28a126e Reviewed-on: https://boringssl-review.googlesource.com/7689 Reviewed-by: Steven Valdez <svaldez@google.com> Reviewed-by: David Benjamin <davidben@google.com>
2016-03-26Fix build when using Visual Studio 2015 Update 1.Brian Smith
Many of the compatibility issues are described at https://msdn.microsoft.com/en-us/library/mt612856.aspx. The macros that suppressed warnings on a per-function basis no longer work in Update 1, so replace them with #pragmas. Update 1 warns when |size_t| arguments to |printf| are casted, so stop doing that casting. Unfortunately, this requires an ugly hack to continue working in MSVC 2013 as MSVC 2013 doesn't support "%zu". Finally, Update 1 has new warnings, some of which need to be suppressed. --- Updated by davidben to give up on suppressing warnings in crypto/x509 and crypto/x509v3 as those directories aren't changed much from upstream. In each of these cases, upstream opted just blindly initialize the variable, so do the same. Also switch C4265 to level 4, per Microsoft's recommendation and work around a bug in limits.h that happens to get fixed by Google include order style. (limits.h is sensitive to whether corecrt.h, pulled in by stddef.h and some other headers, is included before it. The reason it affected just one file is we often put the file's header first, which means base.h is pulling in stddef.h. Relying on this is ugly, but it's no worse than what everything else is doing and this doesn't seem worth making something as tame as limits.h so messy to use.) Change-Id: I02d1f935356899f424d3525d03eca401bfa3e6cd Reviewed-on: https://boringssl-review.googlesource.com/7480 Reviewed-by: David Benjamin <davidben@google.com>
2016-03-22Fix aarch64 build.David Benjamin
We recently gained -Werror=missing-prototypes. (See also, we really need to get those Android bots...) Change-Id: I3962d3050bccf5f5a057d029b5cbff1695ca1a03 Reviewed-on: https://boringssl-review.googlesource.com/7540 Reviewed-by: Emily Stark (Dunn) <estark@google.com> Reviewed-by: David Benjamin <davidben@google.com>
2016-03-11Remove unused functions.David Benjamin
We never heap-allocate a GCM128_CONTEXT. Change-Id: I7e89419ce4d81c1598a4b3a214c44dbbcd709651 Reviewed-on: https://boringssl-review.googlesource.com/7430 Reviewed-by: Steven Valdez <svaldez@google.com> Reviewed-by: David Benjamin <davidben@google.com>
2016-03-03Clarify use of |$end0| in stitched x86-64 AES-GCM code.Brian Smith
There was some uncertainty about what the code is doing with |$end0| and whether it was necessary for |$len| to be a multiple of 16 or 96. Hopefully these added comments make it clear that the code is correct except for the caveat regarding low memory addresses. Change-Id: Iea546a59dc7aeb400f50ac5d2d7b9cb88ace9027 Reviewed-on: https://boringssl-review.googlesource.com/7194 Reviewed-by: Adam Langley <agl@google.com>
2016-03-01Fix build.David Benjamin
Forgot to delete a line. Change-Id: Ia1fb2904398816d495045dc237337f0be5b09272 Reviewed-on: https://boringssl-review.googlesource.com/7250 Reviewed-by: Steven Valdez <svaldez@google.com> Reviewed-by: David Benjamin <davidben@google.com>
2016-03-01modes/ctr.c: Ensure ecount_buf alignment in CRYPTO_ctr128_encrypt.Steven Valdez
This isn't a problem when called from EVP, since the buffer is aligned in the EVP_CIPHER_CTX. The increment counter code is also fixed to deal with overflow. (Imported from upstream's 6533a0b8d1ed12aa5f7dfd7a429eec67c5486bb5) Change-Id: I8d7191c3d3873db254a551085d2358d90bc8397a Reviewed-on: https://boringssl-review.googlesource.com/7233 Reviewed-by: David Benjamin <davidben@google.com>
2016-02-27Fix implementation-specific behavior in gcm_test.cAaron Green
gcm_test.c includes a test case that does a 'malloc(0)'. This test case currently fails if malloc(0) returns NULL. According to the standard, malloc's behavior with a size of 0is implementation specific and may either be NULL or another pointer suitable to be passed to free(). This change modifies gcm_test.c to handle a return value of NULL. It has been tested with a custom allocator on an experimental branch. Change-Id: I35514ec9735cedffc621f7dfae42b4c6664a1766 Reviewed-on: https://boringssl-review.googlesource.com/7122 Reviewed-by: Adam Langley <agl@google.com>
2016-02-26Use correct counter after invoking stitched AES-NI GCM code.Brian Smith
Commit a3d9528e9e212e0dcda30dcb561092c3b3a69010 has a bug that could cause counters to be reused if |$avx=2| were set in the AES-NI AES-GCM assembly code, if the EVP interface were used with certain coding patterns, as demonstrated by the test cases added in a5ee83f67e83d4065d1aa40137e8dd8b1c83b3e5. This changes the encryption code in the same way the decryption code was changed in a3d9528e9e212e0dcda30dcb561092c3b3a69010. This doesn't have any effect currently since the AES-NI AES-GCM code has |$avx=0| now, so |aesni_gcm_encrypt| doesn't change the counter. Change-Id: Iba69cb4d2043d1ea57c6538b398246af28cba006 Reviewed-on: https://boringssl-review.googlesource.com/7193 Reviewed-by: Adam Langley <agl@google.com>
2016-02-25Remove unused |ccm128_context| in crypto/modes/internal.h.Brian Smith
Note that this structure has a weak pointer to the key, which was a problem corrected in the AES-GCM code in 0f8bfdeb3383749eecfefb17a36416e6b35fa10c. Also, it uses |void *| instead of |const AES_KEY *| to refer to that key. Change-Id: I70e632e3370ab27eb800bc1c0c64d2bd36b7cafb Reviewed-on: https://boringssl-review.googlesource.com/7123 Reviewed-by: David Benjamin <davidben@google.com>
2016-02-24Unify AEAD and EVP code paths for AES-GCM.Brian Smith
This change makes the AEAD and EVP code paths use the same code for AES-GCM. When AVX instructions are enabled in the assembly this will allow them to use the stitched AES-GCM implementation. Note that the stitched implementations are no-ops for small inputs (smaller than 288 bytes for encryption; smaller than 96 bytes for decryption). This means that only a handful of test cases with longish inputs actually test the stitched code. Change-Id: Iece8003d90448dcac9e0bde1f42ff102ebe1a1c9 Reviewed-on: https://boringssl-review.googlesource.com/7173 Reviewed-by: Adam Langley <agl@google.com>
2016-02-18Restore |xmm7| correctly on Win64 in aesni-gcm-x86_64.Brian Smith
See OpenSSL df057ea6c8a20e4babc047689507dfafde59ffd6. Change-Id: Ife10dc13ca335cd51434d7769ff85c6929f10226 Reviewed-on: https://boringssl-review.googlesource.com/7172 Reviewed-by: David Benjamin <davidben@google.com>
2016-02-12Use |kSizeTWithoutLower4Bits| in crypto/modes/gcm.c.Brian Smith
Some instances were missed in eca509c8daf998a6eb84f32a85c2f3137d692e55. Change-Id: I53a6bd944fbf0df439b8e6f9db761f61d7237ba2 Reviewed-on: https://boringssl-review.googlesource.com/7103 Reviewed-by: David Benjamin <davidben@google.com>
2016-02-12Don't cast |OPENSSL_malloc|/|OPENSSL_realloc| result.Brian Smith
C has implicit conversion of |void *| to other pointer types so these casts are unnecessary. Clean them up to make the code easier to read and to make it easier to find dangerous casts. Change-Id: I26988a672e8ed4d69c75cfbb284413999b475464 Reviewed-on: https://boringssl-review.googlesource.com/7102 Reviewed-by: David Benjamin <davidben@google.com>
2016-02-11Mark ARM assembly globals hidden uniformly in arm-xlate.pl.David Benjamin
We'd manually marked some of them hidden, but missed some. Do it in the perlasm driver instead since we will never expose an asm symbol directly. This reduces some of our divergence from upstream on these files (and indeed we'd accidentally lose some .hiddens at one point). BUG=586141 Change-Id: Ie1bfc6f38ba73d33f5c56a8a40c2bf1668562e7e Reviewed-on: https://boringssl-review.googlesource.com/7140 Reviewed-by: Adam Langley <agl@google.com>
2016-01-22Fix trivial -Wcast-qual violations.Brian Smith
Fix casts from const to non-const where dropping the constness is completely unnecessary. The changes to chacha_vec.c don't result in any changes to chacha_vec_arm.S. Change-Id: I2f10081fd0e73ff5db746347c5971f263a5221a6 Reviewed-on: https://boringssl-review.googlesource.com/6923 Reviewed-by: David Benjamin <davidben@google.com>
2015-11-17Use UINT64_C instead of OPENSSL_U64.David Benjamin
stdint.h already has macros for this. The spec says that, in C++, __STDC_CONSTANT_MACROS is needed, so define it for bytestring_test.cc. Chromium seems to use these macros without trouble, so I'm assuming we can rely on them. Change-Id: I56d178689b44d22c6379911bbb93d3b01dd832a3 Reviewed-on: https://boringssl-review.googlesource.com/6510 Reviewed-by: Adam Langley <agl@google.com>
2015-11-17modes/asm/ghash-armv4.pl: extend Apple fix to all clang cases.David Benjamin
Triggered by RT#3989. (Imported from upstream's fbab8baddef8d3346ae40ff068871e2ddaf10270. This doesn't seem to affect us, but avoid getting out of sync.) Change-Id: I164e2a72e4b75e286ceaa03745ed9bcbf6c3e32e Reviewed-on: https://boringssl-review.googlesource.com/6512 Reviewed-by: Adam Langley <agl@google.com>
2015-10-28Get rid of all compiler version checks in perlasm files.David Benjamin
Since we pre-generate our perlasm, having the output of these files be sensitive to the environment the run in is unhelpful. It would be bad to suddenly change what features we do or don't compile in whenever workstations' toolchains change or if developers do or don't have CC variables set. Previously, all compiler-version-gated features were turned on in https://boringssl-review.googlesource.com/6260, but this broke the build. I also wasn't thorough enough in gathering performance numbers. So, flip them all to off instead. I'll enable them one-by-one as they're tested. This should result in no change to generated assembly. Change-Id: Ib4259b3f97adc4939cb0557c5580e8def120d5bc Reviewed-on: https://boringssl-review.googlesource.com/6383 Reviewed-by: Adam Langley <agl@google.com>
2015-10-27Fix the shared builders by exporting GCM symbols.Adam Langley
gcm_test.cc needs to access the internal GCM symbols. This is unfortunate because it means that they have to be marked OPENSSL_EXPORT just for this. To compensate, modes.h is removed and its contents copied into crypto/modes/internal.h. Change-Id: I1777b2ef8afd154c43417137673a28598a7ec30e Reviewed-on: https://boringssl-review.googlesource.com/6360 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-10-27Revert "Get rid of all compiler version checks in perlasm files."David Benjamin
This reverts commit b9c26014dee618cddbcfdf465f906fc69ddd8a75. The win64 bot seems unhappy. Will sniff at it tomorrow. In the meantime, get the tree green again. Change-Id: I058ddb3ec549beee7eabb2f3f72feb0a4a5143b2 Reviewed-on: https://boringssl-review.googlesource.com/6353 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-10-27Make |gcm128_context| memcpy-safe.Brian Smith
This removes the confusion about whether |gcm128_context| copies the key (it didn't) or whether the caller is responsible for keeping the key alive for the lifetime of the |gcm128_context| (it was). Change-Id: Ia0ad0a8223e664381fbbfb56570b2545f51cad9f Reviewed-on: https://boringssl-review.googlesource.com/6053 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-10-27Fix constness of |gcm128_context.key|.Brian Smith
The key is never modified through the key pointer member, and the calling code relies on that fact for maintaining its own const-correctness. Change-Id: I63946451aa7c400cd127895a61c30d9a647b1b8c Reviewed-on: https://boringssl-review.googlesource.com/6040 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-10-27Clarify confusing conditionals in crypto/gcm/gcm.c.Brian Smith
MSVC was warning about the assignment in the |if| condition. Also, the formatting of the negative number made it look like a subtraction. Finally, what was being calculated was unclear. Change-Id: If56c672302c638aac6a87f715e8dcbb87ecb56ed Reviewed-on: https://boringssl-review.googlesource.com/6212 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-10-27|assert| → |OPENSSL_STATIC_ASSERT| where possible.Matt Braithwaite
Change-Id: If8643c7308e6c3666de4104d097458187dbe268c Reviewed-on: https://boringssl-review.googlesource.com/6057 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-10-26Add a run_tests target to run all tests.David Benjamin
It's very annoying having to remember the right incant every time I want to switch around between my build, build-release, build-asan, etc., output directories. Unfortunately, this target is pretty unfriendly without CMake 3.2+ (and Ninja 1.5+). This combination gives a USES_TERMINAL flag to add_custom_target which uses Ninja's "console" pool, otherwise the output buffering gets in the way. Ubuntu LTS is still on an older CMake, so do a version check in the meantime. CMake also has its own test mechanism (CTest), but this doesn't use it. It seems to prefer knowing what all the tests are and then tries to do its own output management and parallelizing and such. We already have our own runners. all_tests.go could actually be converted tidily, but generate_build_files.py also needs to read it, and runner.go has very specific needs. Naming the target ninja -C build test would be nice, but CTest squats that name and CMake grumps when you use a reserved name, so I've gone with run_tests. Change-Id: Ibd20ebd50febe1b4e91bb19921f3bbbd9fbcf66c Reviewed-on: https://boringssl-review.googlesource.com/6270 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-10-26Get rid of all compiler version checks in perlasm files.David Benjamin
Since we pre-generate our perlasm, having the output of these files be sensitive to the environment the run in is unhelpful. It would be bad to suddenly change what features we do or don't compile in whenever workstations' toolchains change. Enable all compiler-version-gated features as they should all be runtime-gated anyway. This should align with what upstream's files would have produced on modern toolschains. We should assume our assemblers can take whatever we'd like to throw at them. (If it turns out some can't, we'd rather find out and probably switch the problematic instructions to explicit byte sequences.) This actually results in a fairly significant change to the assembly we generate. I'm guessing upstream's buildsystem sets the CC environment variable, while ours doesn't and so the version checks were all coming out conservative. diffstat of generated files: linux-x86/crypto/sha/sha1-586.S | 1176 ++++++++++++ linux-x86/crypto/sha/sha256-586.S | 2248 ++++++++++++++++++++++++ linux-x86_64/crypto/bn/rsaz-avx2.S | 1644 +++++++++++++++++ linux-x86_64/crypto/bn/rsaz-x86_64.S | 638 ++++++ linux-x86_64/crypto/bn/x86_64-mont.S | 332 +++ linux-x86_64/crypto/bn/x86_64-mont5.S | 1130 ++++++++++++ linux-x86_64/crypto/modes/aesni-gcm-x86_64.S | 754 ++++++++ linux-x86_64/crypto/modes/ghash-x86_64.S | 475 +++++ linux-x86_64/crypto/sha/sha1-x86_64.S | 1121 ++++++++++++ linux-x86_64/crypto/sha/sha256-x86_64.S | 1062 +++++++++++ linux-x86_64/crypto/sha/sha512-x86_64.S | 2241 ++++++++++++++++++++++++ mac-x86/crypto/sha/sha1-586.S | 1174 ++++++++++++ mac-x86/crypto/sha/sha256-586.S | 2248 ++++++++++++++++++++++++ mac-x86_64/crypto/bn/rsaz-avx2.S | 1637 +++++++++++++++++ mac-x86_64/crypto/bn/rsaz-x86_64.S | 638 ++++++ mac-x86_64/crypto/bn/x86_64-mont.S | 331 +++ mac-x86_64/crypto/bn/x86_64-mont5.S | 1130 ++++++++++++ mac-x86_64/crypto/modes/aesni-gcm-x86_64.S | 750 ++++++++ mac-x86_64/crypto/modes/ghash-x86_64.S | 475 +++++ mac-x86_64/crypto/sha/sha1-x86_64.S | 1121 ++++++++++++ mac-x86_64/crypto/sha/sha256-x86_64.S | 1062 +++++++++++ mac-x86_64/crypto/sha/sha512-x86_64.S | 2241 ++++++++++++++++++++++++ win-x86/crypto/sha/sha1-586.asm | 1173 ++++++++++++ win-x86/crypto/sha/sha256-586.asm | 2248 ++++++++++++++++++++++++ win-x86_64/crypto/bn/rsaz-avx2.asm | 1858 +++++++++++++++++++- win-x86_64/crypto/bn/rsaz-x86_64.asm | 638 ++++++ win-x86_64/crypto/bn/x86_64-mont.asm | 352 +++ win-x86_64/crypto/bn/x86_64-mont5.asm | 1184 ++++++++++++ win-x86_64/crypto/modes/aesni-gcm-x86_64.asm | 933 ++++++++++ win-x86_64/crypto/modes/ghash-x86_64.asm | 515 +++++ win-x86_64/crypto/sha/sha1-x86_64.asm | 1152 ++++++++++++ win-x86_64/crypto/sha/sha256-x86_64.asm | 1088 +++++++++++ win-x86_64/crypto/sha/sha512-x86_64.asm | 2499 ++++++ SHA* gets faster. RSA and AES-GCM seem to be more of a wash and even slower sometimes! This is a little concerning. Though when I repeated the latter two, it's definitely noisy (RSA in particular), so we may wish to repeat in a more controlled environment. We could also flip some of these toggles to something other than the highest setting if it seems some of the variants aren't desirable. We just shouldn't have them enabled or disabled on accident. This aligns us closer to upstream though. $ /tmp/bssl.old speed SHA- Did 5028000 SHA-1 (16 bytes) operations in 1000048us (5027758.7 ops/sec): 80.4 MB/s Did 1708000 SHA-1 (256 bytes) operations in 1000257us (1707561.2 ops/sec): 437.1 MB/s Did 73000 SHA-1 (8192 bytes) operations in 1008406us (72391.5 ops/sec): 593.0 MB/s Did 3041000 SHA-256 (16 bytes) operations in 1000311us (3040054.5 ops/sec): 48.6 MB/s Did 779000 SHA-256 (256 bytes) operations in 1000820us (778361.7 ops/sec): 199.3 MB/s Did 26000 SHA-256 (8192 bytes) operations in 1009875us (25745.8 ops/sec): 210.9 MB/s Did 1837000 SHA-512 (16 bytes) operations in 1000251us (1836539.0 ops/sec): 29.4 MB/s Did 803000 SHA-512 (256 bytes) operations in 1000969us (802222.6 ops/sec): 205.4 MB/s Did 41000 SHA-512 (8192 bytes) operations in 1016768us (40323.8 ops/sec): 330.3 MB/s $ /tmp/bssl.new speed SHA- Did 5354000 SHA-1 (16 bytes) operations in 1000104us (5353443.2 ops/sec): 85.7 MB/s Did 1779000 SHA-1 (256 bytes) operations in 1000121us (1778784.8 ops/sec): 455.4 MB/s Did 87000 SHA-1 (8192 bytes) operations in 1012641us (85914.0 ops/sec): 703.8 MB/s Did 3517000 SHA-256 (16 bytes) operations in 1000114us (3516599.1 ops/sec): 56.3 MB/s Did 935000 SHA-256 (256 bytes) operations in 1000096us (934910.2 ops/sec): 239.3 MB/s Did 38000 SHA-256 (8192 bytes) operations in 1004476us (37830.7 ops/sec): 309.9 MB/s Did 2930000 SHA-512 (16 bytes) operations in 1000259us (2929241.3 ops/sec): 46.9 MB/s Did 1008000 SHA-512 (256 bytes) operations in 1000509us (1007487.2 ops/sec): 257.9 MB/s Did 45000 SHA-512 (8192 bytes) operations in 1000593us (44973.3 ops/sec): 368.4 MB/s $ /tmp/bssl.old speed RSA Did 820 RSA 2048 signing operations in 1017008us (806.3 ops/sec) Did 27000 RSA 2048 verify operations in 1015400us (26590.5 ops/sec) Did 1292 RSA 2048 (3 prime, e=3) signing operations in 1008185us (1281.5 ops/sec) Did 65000 RSA 2048 (3 prime, e=3) verify operations in 1011388us (64268.1 ops/sec) Did 120 RSA 4096 signing operations in 1061027us (113.1 ops/sec) Did 8208 RSA 4096 verify operations in 1002717us (8185.8 ops/sec) $ /tmp/bssl.new speed RSA Did 760 RSA 2048 signing operations in 1003351us (757.5 ops/sec) Did 25900 RSA 2048 verify operations in 1028931us (25171.8 ops/sec) Did 1320 RSA 2048 (3 prime, e=3) signing operations in 1040806us (1268.2 ops/sec) Did 63000 RSA 2048 (3 prime, e=3) verify operations in 1016042us (62005.3 ops/sec) Did 104 RSA 4096 signing operations in 1008718us (103.1 ops/sec) Did 6875 RSA 4096 verify operations in 1093441us (6287.5 ops/sec) $ /tmp/bssl.old speed GCM Did 5316000 AES-128-GCM (16 bytes) seal operations in 1000082us (5315564.1 ops/sec): 85.0 MB/s Did 712000 AES-128-GCM (1350 bytes) seal operations in 1000252us (711820.6 ops/sec): 961.0 MB/s Did 149000 AES-128-GCM (8192 bytes) seal operations in 1003182us (148527.4 ops/sec): 1216.7 MB/s Did 5919750 AES-256-GCM (16 bytes) seal operations in 1000016us (5919655.3 ops/sec): 94.7 MB/s Did 800000 AES-256-GCM (1350 bytes) seal operations in 1000951us (799239.9 ops/sec): 1079.0 MB/s Did 152000 AES-256-GCM (8192 bytes) seal operations in 1000765us (151883.8 ops/sec): 1244.2 MB/s $ /tmp/bssl.new speed GCM Did 5315000 AES-128-GCM (16 bytes) seal operations in 1000125us (5314335.7 ops/sec): 85.0 MB/s Did 755000 AES-128-GCM (1350 bytes) seal operations in 1000878us (754337.7 ops/sec): 1018.4 MB/s Did 151000 AES-128-GCM (8192 bytes) seal operations in 1005655us (150150.9 ops/sec): 1230.0 MB/s Did 5913500 AES-256-GCM (16 bytes) seal operations in 1000041us (5913257.6 ops/sec): 94.6 MB/s Did 782000 AES-256-GCM (1350 bytes) seal operations in 1001484us (780841.2 ops/sec): 1054.1 MB/s Did 121000 AES-256-GCM (8192 bytes) seal operations in 1006389us (120231.8 ops/sec): 984.9 MB/s Change-Id: I0efb32f896c597abc7d7e55c31d038528a5c72a1 Reviewed-on: https://boringssl-review.googlesource.com/6260 Reviewed-by: Adam Langley <alangley@gmail.com>
2015-10-21Allow ARM capabilities to be set at compile time.Adam Langley
Some ARM environments don't support |getauxval| or signals and need to configure the capabilities of the chip at compile time. This change adds defines that allow them to do so. Change-Id: I4e6987f69dd13444029bc7ac7ed4dbf8fb1faa76 Reviewed-on: https://boringssl-review.googlesource.com/6280 Reviewed-by: Adam Langley <agl@google.com>
2015-09-25Fix several minor points noticed by Kenny.Adam Langley
∙ Some comments had the wrong function name at the beginning. ∙ Some ARM asm ended up with two #if defined(__arm__) lines – one from the .pl file and one inserted by the translation script. Change-Id: Ia8032cd09f06a899bf205feebc2d535a5078b521 Reviewed-on: https://boringssl-review.googlesource.com/6000 Reviewed-by: Adam Langley <agl@google.com>
2015-08-26Move arm_arch.h and fix up lots of include paths.Adam Langley
arm_arch.h is included from ARM asm files, but lives in crypto/, not openssl/include/. Since the asm files are often built from a different location than their position in the source tree, relative include paths are unlikely to work so, rather than having crypto/ be a de-facto, second global include path, this change moves arm_arch.h to include/openssl/. It also removes entries from many include paths because they should be needed as relative includes are always based on the locations of the source file. Change-Id: I638ff43d641ca043a4fc06c0d901b11c6ff73542 Reviewed-on: https://boringssl-review.googlesource.com/5746 Reviewed-by: Adam Langley <agl@google.com>
2015-08-19Re-add the C version (only) of |EVP_aes_256_xts|Matt Braithwaite
Change-Id: I63c70f93a0f9395673c9fbe01eb5d864a14a48b6 Reviewed-on: https://boringssl-review.googlesource.com/5520 Reviewed-by: Adam Langley <agl@google.com> Reviewed-by: Matt Braithwaite <mab@google.com>
2015-08-07Remove BIO dependency from cmac_test.Brian Smith
This is the only test amongst the tests for core crypto functionality that depends on crypto/bio. This change removes that dependency. This also factors out the duplicative hexdump logic into a shared function. Change-Id: Ic280a71d086555a6993c05f183b94e1d38b60932 Reviewed-on: https://boringssl-review.googlesource.com/5622 Reviewed-by: Adam Langley <agl@google.com>
2015-08-04Fix more warnings about old-style prototypes.Brian Smith
Replace |()| with |(void)| in some prototypes to avoid compiler warnings about old-style prototypes when building in some non-default configurations for ARM. Change-Id: Id57825084941c997bb7c41ec8ed94962f97ff732 Reviewed-on: https://boringssl-review.googlesource.com/5570 Reviewed-by: Adam Langley <agl@google.com>
2015-07-29Convert remaining Latin-1 files to UTF-8.David Benjamin
See upstream's 9f0b86c68bb96d49301bbd6473c8235ca05ca06b. Generated by using upstream's script in 5a3ce86e21715a683ff0d32421ed5c6d5e84234d and then manually throwing out the false positives. (We converted a bunch of stuff already in 91157550061d5d794898fe47b95384a7ba5f7b9d.) This may require some wrestling with depot_tools to land in Chromium due to Rietveld's encoding bugs, but hopefully that will avoid future problems; Rietveld breaks if either old or new file is Latin-1. Change-Id: I26dcb20c7377f92a0c843ef5d74d440a82ea8ceb Reviewed-on: https://boringssl-review.googlesource.com/5483 Reviewed-by: Adam Langley <agl@google.com>
2015-05-28Add some comments and tweak assertions for cbc.c.David Benjamin
See https://boringssl-review.googlesource.com/#/c/4832/. Change-Id: Icf457a2b47bc2d5b84dddc454d5ca8ec328b5169 Reviewed-on: https://boringssl-review.googlesource.com/4860 Reviewed-by: Adam Langley <agl@google.com>
2015-05-21Fix test used for not-in-place CBC mode.Adam Langley
With NO_ASM defined, the recent AEAD changes broke the tests. The problem is that the generic CBC mode code tests whether in != out and omits to save the IV, assuming that it'll be able to read the old ciphertext block. However, consider the case where out = in - 16: 1 2 3 4 |-------|-------|------|-------| ^ ^ | | out in First time around, 1 = decrypt(2) ^ iv and everything is fine, because the IV was preconfigured. However, the next iteration of the loop sets 2 = decrypt(3) and tries to XOR it with the contents of the previous ciphertext block… from 2. Change-Id: Ibabff430704fad246de132b4d6d514f6a0362734
2015-05-21Fix some malloc test crashs.David Benjamin
This isn't exhaustive. There are still failures in some tests which probably ought to get C++'d first. Change-Id: Iac58df9d98cdfd94603d54374a531b2559df64c3 Reviewed-on: https://boringssl-review.googlesource.com/4795 Reviewed-by: Adam Langley <agl@google.com>
2015-05-21Add malloc test support to unit tests.David Benjamin
Currently far from passing and I haven't even tried with a leak checker yet. Also bn_test is slow. Change-Id: I4fe2783aa5f7897839ca846062ae7e4a367d2469 Reviewed-on: https://boringssl-review.googlesource.com/4794 Reviewed-by: Adam Langley <agl@google.com>
2015-05-12Fix invalid assert in CRYPTO_ctr128_encrypt.David Benjamin
As with CRYPTO_ctr128_encrypt_ctr32, NULL in and out are legal in the degenerate case when len is 0. This fixes one of the two failures on the bots. Change-Id: If6016dfc3963d9c06c849fc8eba9908556f66666 Reviewed-on: https://boringssl-review.googlesource.com/4721 Reviewed-by: Adam Langley <agl@google.com>
2015-05-11Fix asserts in CRYPTO_ctr128_encrypt_ctr32.David Benjamin
NULL in and out are legal in the degenerate case when len is 0. Change-Id: Ibf0600a4f635a03103b1ae914918fdcf23a75a39 Reviewed-on: https://boringssl-review.googlesource.com/4705 Reviewed-by: Adam Langley <agl@google.com>
2015-05-05Don't use .arch in aarch64 asm with Clang.Adam Langley
Clang (3.6, at least) doesn't like .arch when its internal as is used. Instead, one has to pass -march=armv8-a+crypto on the command line. Change-Id: Ifc5b57fbebd0eb53658481b0a0c111e808c81d93 Reviewed-on: https://boringssl-review.googlesource.com/4411 Reviewed-by: Adam Langley <agl@google.com>
2015-05-05Remove unnecessary NULL checks, part 4.David Benjamin
Finish up crypto, minus the legacy modules we haven't been touching much. Change-Id: I0e9e1999a627aed5fb14841f8a2a7d0b68398e85 Reviewed-on: https://boringssl-review.googlesource.com/4517 Reviewed-by: Adam Langley <agl@google.com>
2015-05-05modes/asm/ghashv8-armx.pl: additional performance data.David Benjamin
(Imported from upstream's 9b6b470afee13e011152cd1c5006251cc69d03b2) Change-Id: I8eea6336eda947229693825cfc07d0dfc30261c1 Reviewed-on: https://boringssl-review.googlesource.com/4494 Reviewed-by: Adam Langley <agl@google.com>
2015-05-05Add assembly support for 32-bit iOS.David Benjamin
(Imported from upstream's 313e6ec11fb8a7bda1676ce5804bee8755664141) BUG=338886 Change-Id: Id635e78b9afaad5ca311e3aeed888c9aedeb9637 Reviewed-on: https://boringssl-review.googlesource.com/4490 Reviewed-by: Adam Langley <agl@google.com>
2015-05-05Remove inconsistency in ARM support.David Benjamin
This facilitates "universal" builds, ones that target multiple architectures, e.g. ARMv5 through ARMv7. (Imported from upstream's c1669e1c205dc8e695fb0c10a655f434e758b9f7) This is a change from a while ago which was a source of divergence between our perlasm and upstream's. This change in upstream came with the following comment in Configure: Note that -march is not among compiler options in below linux-armv4 target line. Not specifying one is intentional to give you choice to: a) rely on your compiler default by not specifying one; b) specify your target platform explicitly for optimal performance, e.g. -march=armv6 or -march=armv7-a; c) build "universal" binary that targets *range* of platforms by specifying minimum and maximum supported architecture; As for c) option. It actually makes no sense to specify maximum to be less than ARMv7, because it's the least requirement for run-time switch between platform-specific code paths. And without run-time switch performance would be equivalent to one for minimum. Secondly, there are some natural limitations that you'd have to accept and respect. Most notably you can *not* build "universal" binary for big-endian platform. This is because ARMv7 processor always picks instructions in little-endian order. Another similar limitation is that -mthumb can't "cross" -march=armv6t2 boundary, because that's where it became Thumb-2. Well, this limitation is a bit artificial, because it's not really impossible, but it's deemed too tricky to support. And of course you have to be sure that your binutils are actually up to the task of handling maximum target platform. Change-Id: Ie5f674d603393f0a1354a0d0973987484a4a650c Reviewed-on: https://boringssl-review.googlesource.com/4488 Reviewed-by: Adam Langley <agl@google.com>
2015-05-05ARM assembly pack: get ARMv7 instruction endianness right.David Benjamin
Pointer out and suggested by: Ard Biesheuvel. (Imported from upstream's 5dcf70a1c57c2019bfad640fe14fd4a73212860a) This is from a while ago, but it's one source of divergence between our copy of these files and master's. Change-Id: I6525a27f25eb86a92420c32996af47ecc42ee020 Reviewed-on: https://boringssl-review.googlesource.com/4487 Reviewed-by: Adam Langley <agl@google.com>
2015-04-29modes/asm/ghashv8-armx.pl: up to 90% performance improvement.David Benjamin
(Imported from upstream's 7eeeb49e1103533bc81c234eb19613353866e474) Here are the performance numbers on a Nexus 9 (32-bit binary): Before: Did 4376000 AES-128-GCM (16 bytes) seal operations in 1000016us (4375930.0 ops/sec): 70.0 MB/s Did 642000 AES-128-GCM (1350 bytes) seal operations in 1001090us (641301.0 ops/sec): 865.8 MB/s Did 126000 AES-128-GCM (8192 bytes) seal operations in 1001460us (125816.3 ops/sec): 1030.7 MB/s Did 4120000 AES-256-GCM (16 bytes) seal operations in 1000004us (4119983.5 ops/sec): 65.9 MB/s Did 547000 AES-256-GCM (1350 bytes) seal operations in 1001165us (546363.5 ops/sec): 737.6 MB/s Did 99000 AES-256-GCM (8192 bytes) seal operations in 1000027us (98997.3 ops/sec): 811.0 MB/s After: Did 4569000 AES-128-GCM (16 bytes) seal operations in 1000011us (4568949.7 ops/sec): 73.1 MB/s Did 796000 AES-128-GCM (1350 bytes) seal operations in 1000161us (795871.9 ops/sec): 1074.4 MB/s Did 162000 AES-128-GCM (8192 bytes) seal operations in 1003828us (161382.2 ops/sec): 1322.0 MB/s Did 4398000 AES-256-GCM (16 bytes) seal operations in 1000001us (4397995.6 ops/sec): 70.4 MB/s Did 634000 AES-256-GCM (1350 bytes) seal operations in 1001290us (633183.2 ops/sec): 854.8 MB/s Did 122000 AES-256-GCM (8192 bytes) seal operations in 1005650us (121314.6 ops/sec): 993.8 MB/s Change-Id: I2fef921069ad174f5651dfe59be262625fb3f7c9 Reviewed-on: https://boringssl-review.googlesource.com/4483 Reviewed-by: Adam Langley <agl@google.com>