Commit Graph

70 Commits

Author SHA1 Message Date
John Hood a993c83632 Handle GCC 7's new -Wimplicit-fallthrough. 2017-01-31 22:12:27 -05:00
Carlos Cabanero 0ceb4f26f4 Memory Alignment issues on ARM processors
Unaligned data on ARM architectures do not perform efficiently unaligned
memory access, and in the case of ARMv7 and iOS it completely breaks. The OCB
algorithm dereferences a uint64x2_t pointer, and is replaced by a
memcpy to avoid penalties when trying to align it.

More info https://brewx.qualcomm.com/bws/content/gi/common/appseng/en/knowledgebase/docs/kb95.html
2017-01-05 00:14:36 -05:00
John Hood 9005ea6cf3 Use a table lookup for base64 decode 2016-10-29 20:50:33 -04:00
John Hood f429fd38b0 Use old AppleCommonCrypto name for AES 2016-09-25 22:24:03 -04:00
John Hood 25a65fc071 Coverity fixes: tainted/unbounded array index 2016-05-10 23:54:41 -04:00
john hood 9073983df3 crypto.cc: prefer bswap64() and ffs() if available.
Fixes #745.
2016-05-08 20:45:01 -04:00
John Hood 2ba5d2bbb2 Handle zero-length allocations in AlignedBuffer. 2016-03-31 10:41:00 -04:00
John Hood 7af87d85cc Remove redundant stringification for decrypt(). 2016-03-30 23:52:19 -04:00
John Hood c964d40dd8 Do not throw from destructors, fatal_assert() instead. 2016-03-30 23:52:19 -04:00
John Hood 255dc39c9f Factor encrypt/decrypt out of Network::Message. 2016-03-30 23:52:19 -04:00
John Hood 6abd4739de Const correctness and const-ref in Crypto and elsewhere. 2016-03-30 23:52:19 -04:00
John Hood 13928e9c10 Use a secure counter for OCB's nonce. Protect nonce in Network::Packet. 2016-03-30 23:52:19 -04:00
John Hood 6fd570f81f Various fixes for Illumos Hipster 20151003. 2016-03-30 23:52:19 -04:00
John Hood 3fa42cb8bb Support different IPv4 and IPv6 MTUs.
Closes #688.
2015-11-29 10:31:17 -05:00
John Hood 0de4082e86 base64: remove a timing variation 2015-10-20 02:39:36 -04:00
John Hood 0eb614809a Add configurable support for Apple Common Crypto and Nettle libraries. 2015-10-16 19:00:42 -04:00
John Hood db311f92f7 Replace OpenSSL base64 impl with a simple direct impl.
Unit tests, too.
2015-10-16 19:00:42 -04:00
John Hood d0db0968b1 Enable altivec on ppc64el
From http://launchpadlibrarian.net/171225681/mosh_1.2.4a-1build1_1.2.4a-1ubuntu1.diff.gz

Fixes #615.
2015-06-11 00:55:12 -04:00
John Hood dd58a398de ocb.cc: Mark local functions as static
This fixes the broken i386 build (aka generic code).
Untested on __ALTIVEC__ and __ARM_NEON__.

Signed-off-by: John Hood <cgull@glup.org>
2015-06-07 17:06:40 -04:00
Anders Kaseorg 0824e6549a base64: Make base64_encode declaration consistent with its definition
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2015-06-04 23:50:40 -04:00
Anders Kaseorg 8f6b226d8b Base64Key: Deduplicate PRNG code
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2015-06-04 23:50:40 -04:00
Geoffrey Thomas aeffb71cfc Style cleanup: "foo &x", not "foo& x" 2015-06-04 23:47:32 -04:00
Geoffrey Thomas 5721b392ab Make all exception classes inherit from std::exception
This refactors out a very common pattern of formatting "%s: %s" with
e.function.c_str() and strerror( e.the_errno ) into just the what()
method of NetworkException. It's also a prerequisite for making cleaner
public API for any exceptions we throw, and allows us to more easily
get exceptions passed back to us to handle.
2015-06-04 23:47:31 -04:00
John Hood 814a2ae55d clang/arm fixup for FreeBSD-CURRENT 2015-05-25 02:17:25 -04:00
Pasi Sjöholm ff84425885 ocb: fix gcc4.8 compiling problem with __ARM_NEON__
Fixes following problem when compiling mosh with gcc4.8 and
__ARM_NEON__ defined by using -121 instead of 135.

ocb.cc: In function 'block double_block(block)':
ocb.cc:263:56: error: narrowing conversion of '135' from
'int' to '__builtin_neon_qi' inside { } is ill-formed in
C++11 [-Werror=narrowing]

Signed-off-by: Pasi Sjöholm <pasi.sjoholm@jollamobile.com>
2015-02-03 11:21:46 +02:00
Jérémie Courrèges-Anglas 9314ea18fa use betoh64 if be64toh not found
Instead of looking for htobe64 which is be available both when
be64toh or betoh64 are, check for the latter functions.  If we
find betoh64 but not be64toh, use compat #defines.  If both
can't be found, search for OSX' OSSwapHostToBigInt64.
Also include sys/types.h in byteorder.h (which is necessary for
byteorder functions on OpenBSD), and incidentally fixes build
of networkfragment.cc.

Fixes build on OpenBSD

Signed-off-by: Jérémie Courrèges-Anglas <jca@wxcvbn.org>
2013-04-16 11:11:45 +02:00
Keith Winstein 9669178f07 Eliminate ocb.cc test program (closes #408)
This test doesn't return an error on failure and also was triggering a
stack protector warning on some platforms. We have an end-to-end test of
OCB in src/tests/ocb-aes.cc that seems to work well.
2013-03-27 18:36:03 -04:00
Anders Kaseorg 8c5ded4e6f Nonce::{cc_str,data}: Make const
Found by cppcheck.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2013-03-10 15:48:08 -04:00
Anders Kaseorg ecdd2dd648 PRNG: Read input using C++
In the old code, cppcheck complained about throwing in the destructor,
but like, seriously?

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2013-03-10 15:48:07 -04:00
Anders Kaseorg 14ef590220 Base64::Base64: Fix exception safety
Found by cppcheck.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2013-03-10 15:48:07 -04:00
Anders Kaseorg b6f17917f6 Add OCB test program to ‘make check’
Signed-off-by: Anders Kaseorg <andersk@mit.edu>

Closes #392.
2013-03-10 15:47:39 -04:00
Keegan McAllister cd394c61ae Allow building the ocb.c test program with -DOCB_TEST_PROGRAM 2012-10-19 15:33:48 -04:00
Keegan McAllister ee8d0ce582 Fix ocb.c test program so it builds with -Wall -Werror 2012-10-19 15:33:48 -04:00
Keegan McAllister 029e8bbde5 Import 08-SEP-2012 version of ocb.c
... plus the local changes from:

  3b2604b Handle early gcc compilers that are missing __builtin_bswap64 or __builtin_ctz
  e8236c5 Use AlignedBuffer stedda posix_memalign(). Should work on PPC OS X 10.5.
  9827d12 Switch to OpenSSL AES
2012-10-19 15:33:48 -04:00
Keith Winstein 92ecb99b71 Add OpenSSL licensing exception 2012-07-20 16:46:00 -04:00
Keith Winstein 428d9b48c5 Remove AES reference implementation 2012-07-20 16:10:53 -04:00
Keith Winstein 9827d123f8 Switch to OpenSSL AES 2012-07-20 16:10:12 -04:00
Keith Winstein 57c4904ed8 Switch to OpenSSL base64 routines 2012-07-20 16:00:21 -04:00
Keith Winstein 6616d936f6 Revert "Include config.h in base64.cc to get restrict def (may address #241)"
This reverts commit f4c8417672.

config.h was already included via base64.h, and problem is older autoconf.
2012-04-25 12:42:34 -04:00
Keith Winstein f4c8417672 Include config.h in base64.cc to get restrict def (may address #241) 2012-04-25 12:20:53 -04:00
Keith Winstein 22e7cf60d3 Keep aligned buffers around, instead of allocing on each packet
Fixes #238 github issue.
Also fixes armel "Bad alignment" problem.
2012-04-24 18:40:01 -04:00
Keith Winstein e8236c5fd4 Use AlignedBuffer stedda posix_memalign(). Should work on PPC OS X 10.5.
Fixes #233 github issue.
2012-04-22 22:46:49 -04:00
Keegan McAllister a289a2319e Preserve RLIMIT_CORE hard limit, and restore soft limit before exec
Closes #196.
2012-04-16 20:03:04 -04:00
Keegan McAllister c2a5941f88 Fall back to naive built-in byte-swap routines
EL5 lacks htobe64 and friends.  Using its byteswap.h requires an endianness
check in our headers, which is fragile and compiler-dependent.  It's a fair
amount of code [1], and is only useful on EL5.

So instead, let's include a fallback implementation of these functions, and use
it whenever we can't find the (now-)standard Linux or OS X routines.  The
fallback is endianness-independent and should work on any platform.

[1] https://github.com/rurban/mosh/commit/da1a5abd1e09f0c1e9295357bb480a643d9dc8e3
2012-04-15 23:42:15 -04:00
Keegan McAllister d2434d1a79 Check compiler support for -fno-default-inline and -pipe
clang was spewing warnings about the unrecognized -fno-default-inline.  (Oddly,
it warns only with -c, not when compiling directly to an executable.)  For
completeness we also check -pipe, even though clang is OK with that one.

It should be fine to omit either flag.  gcc -fno-default-inline drops the
implicit 'inline' annotation on functions defined inside a class scope, but
'inline' is only a hint anyway.  -fno-default-inline does not change linkage.
-pipe is merely a compile speed optimization.
2012-04-13 12:27:27 -04:00
Keegan McAllister 349e2d20c8 Use the hardening flags
Closes #79.
2012-04-13 12:25:09 -04:00
Keegan McAllister c354a69ee6 Test the Mosh crypto layer 2012-04-06 23:43:42 -04:00
Keegan McAllister d1c4b0a5d7 Test the OCB-AES reference implementation
This tests cryptographic primitives implemented by others.  It uses the same
interfaces and indeed the same compiled object code as the Mosh client and
server.  It does not particularly test any code written for the Mosh project.
2012-04-06 23:43:42 -04:00
Keegan McAllister 3b61581bcd Make aligned allocation without posix_memalign more robust
Instead of guessing the right function to use, we malloc() 15 bytes more than
we need, and compute the aligned offset within.  The AlignedBuffer class takes
care of passing the original pointer to free().
2012-04-06 23:43:41 -04:00
Keegan McAllister 0734640e14 Add a class for aligned buffers
This simplifies the core crypto routines, especially the error handling.  In
fact there was already one error path where we were failing to call free().
2012-04-06 23:43:41 -04:00