diff options
Diffstat (limited to 'src/OpenSSL/SSL.py')
-rw-r--r-- | src/OpenSSL/SSL.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/OpenSSL/SSL.py b/src/OpenSSL/SSL.py index ec33814..b664254 100644 --- a/src/OpenSSL/SSL.py +++ b/src/OpenSSL/SSL.py @@ -2031,6 +2031,30 @@ class Connection(object): _lib.SSL_SESSION_get_master_key(session, outp, length) return _ffi.buffer(outp, length)[:] + def export_keying_material(self, label, olen, context=None): + """ + Obtain keying material for application use. + + :param label - a disambiguating label string as described in RFC 5705 + :param olen - the length of the exported key material in bytes + :param context - a per-association context value + :return the exported key material bytes or None + """ + outp = _no_zero_allocator("unsigned char[]", olen) + context_buf = _ffi.NULL + context_len = 0 + use_context = 0 + if context is not None: + context_buf = context + context_len = len(context) + use_context = 1 + success = _lib.SSL_export_keying_material(self._ssl, outp, olen, + label, len(label), + context_buf, context_len, + use_context) + _openssl_assert(success == 1) + return _ffi.buffer(outp, olen)[:] + def sock_shutdown(self, *args, **kwargs): """ See shutdown(2) |