| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
server handshake flow and into the server and client key exchange
message types. It already was hidden from the client handshake code.
|
| |
|
|
|
|
|
| |
and will choose one depending on which ciphersuites the client
offered.
|
| |
|
|
|
|
|
|
|
| |
the values let policy specify them. Also choose an ECC curve for
server kex from the client hello. Choice is via policy, default
implementation is to choose the first curve the client supports out of
the server's preference list.
|
|
|
|
|
| |
avoid negotiating an ECDH key exchange if the client didn't send any
curves that we know about.
|
|
|
|
|
|
|
| |
there.
Only named curves supported, likely won't ever support explicit curves
cause that's just asking for problems.
|
|
|
|
|
|
| |
That happens to be true for DH and export RSA key exchanges but isn't
true for ECDH or SRP. (It's almost true for SRP, but if the salt had a
leading zero byte it would be lost in the conversion).
|
|
|
|
| |
for such a minor change.
|
|
|
|
|
| |
everything into a new namespace (Botan::TLS), removing the TLS_
prefixes on everything.
|
|
|
|
|
| |
the client key exchange object to interpret the message on the basis
of the chosen ciphersuite.
|
|
|
|
|
|
|
| |
directly (if it was sent), so that the client implementation doesn't
have to know what key exchange mechanisms we actually support.
Return a value in ECC curves extension serialization method.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
counterparty by using the highest preference hash they have available
for the signature type we are generating. This does mean we will do
stupid things, if the counterparty is stupid (for instance some
versions of GnuTLS will prefer SHA-1 over the SHA-2s - likely someone
misread the spec and ordered the list backwards). But because we
filter out MD5 we'll never use that; even in the worst case, if
someone requests only MD5, we'll skip over it and use SHA-1 as the
fallback algorithm. Theoretically this is against the spec because we
"MUST" send something compatible, but seriously, fuck em. Right in the
eye.
|
|
|
|
|
|
|
|
| |
policy. Only functional change here from before is we now send DSA
with SHA-2. This is fine, OpenSSL does it as well and while the spec
says to wait until NIST comes up with a way to prevent hash
impersonation, it doesn't really make sense to avoid possible hash
substitution attacks by using the weakest available hash...
|
|
|
|
|
|
|
|
| |
the ciphersuite code and a set of strings specifying the underlying
suite algorithms. Remove it entirely.
Some things are likely broken. One I know about is that we always send
the hash/signature type indicator but should only do so for TLS >= 1.2
|
| |
|
| |
|
|
|
|
|
|
| |
remain broken.
New interface for querying the TLS extensions, much cleaner.
|
| |
|
|
|
|
|
|
|
|
| |
basic connection with a GnuTLS server does work. Currently we don't
respect the signature_algorithms extension at all, and using SHA-256
with a 12-byte finished value is hardcoded though the spec is that it
can depend on the ciphersuite (likely relevant for GOST ciphersuites
in particular).
|
|
|
|
|
|
| |
Instead deserialize directly in the constructors that are passed the
raw message data. This makes it easier to pass contextual information
needed for decoding (eg, version numbers) where necessary.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
entire handshake state in many cases makes things simpler to update,
in that each message type already knows what it needs depending on the
version, params, etc, and this way a) that knowledge doesn't need to
percolate up the the actual client and server handshake code and b)
each message type can be updated for new formats/version without
having to change its callers. Downside is it hides the dependency
information away, and makes it non-obvious what needs to be created
beforehand for each message to work correctly. However this is
(almost) entirely predicated on the handshake message flows, and these
we control with the next expected message scheme, so this should be
fairly safe to do.
This checkin only updates the ones where it was immediately relevant
but for consistency probably all of them should be updated in the same
way.
|
|
|
|
|
|
| |
Add getters for major and minor protocoll version on TLS_Session.
Add Certificate_Type code points for ECC certs.
|
|
|
|
| |
per-se, it's a notification by the client. Rename accordingly.
|
|
|
|
|
|
| |
a timestamp. Instead we used random values for all, but hypothetically
it would be useful for the timestamp to be correct in case someone
decides to interpret that field. Which they hopefully won't.
|
|
|
|
|
|
| |
Add support for NPN on the server side. Server is initialized with the
list of protocols it wants to offer, once the handshake completes the
client requested protocol is available via a getter.
|
|
|
|
| |
tested with google.com:443
|
|
|
|
|
| |
what certs, keys, etc are available to the app. Needs polishing but it
seems like it should be sound.
|
| |
|
|
|
|
|
|
|
|
| |
Add a new callback that is called with the session info when a
handshake completes. Currently only called on the server side as
the client doesn't have session resumption yet.
Rename CipherSuite to TLS_Cipher_Suite.
|
|
|
|
|
|
|
| |
on the client side at the moment. Tested with gnutls-cli --recordsize.
Save the fragment size and the secure renegotiation flags in the
session state.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
client and server. Server side can handle SCSV values as well,
client always sends the extension instead.
Handle an empty SNI extension coming back from the server - this is
used to indicate that it understood the name. Also add better checking
for extensions by passing in what the supposed size of the extension
is.
Only send the secure negotiation extension in the server hello if the
client indicated support for it.
|
| |
|
|
|
|
|
| |
extension (client side only at the moment). Add an interface that
allows applications to request renegotiation.
|
| |
|
|
|
|
|
|
|
|
| |
Add support for sending and reading the SRP identifier extension.
Add some helper classes for managing TLS extensions
Add ciphersuite codes for SRP key exchange.
|
| |
|
| |
|
|
|
|
| |
hashing.
|
|
|
|
|
| |
TLS 1.0/1.1, SSLv3 uses a different hash format. Only RSA certs tested
so far.
|
| |
|
|
|
|
|
|
| |
Pass a session manager to TLS_Client's constructor. Currently unused.
Add time-based session expiration to the in-memory session cache.
|
| |
|
|
|
|
| |
with TLS at the moment, SessionKeys is a mess.
|
| |
|
|
|