Home / Class/ BoringSSL Class — netty Architecture

BoringSSL Class — netty Architecture

Architecture documentation for the BoringSSL class in BoringSSL.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5["BoringSSL"]
  060bba12_90b9_52cb_581d_841eb984eb6b["BoringSSL.java"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|defined in| 060bba12_90b9_52cb_581d_841eb984eb6b
  08e15557_6a5a_2a60_35af_c17df7c07aa5["SSLContext_new()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| 08e15557_6a5a_2a60_35af_c17df7c07aa5
  270ee6a3_7b13_f5a5_b9d1_1f8a7aa3f9fb["toWireFormat()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| 270ee6a3_7b13_f5a5_b9d1_1f8a7aa3f9fb
  2d2a61d3_ad6c_e32b_78a3_3fd11d4eb9ec["SSLContext_new0()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| 2d2a61d3_ad6c_e32b_78a3_3fd11d4eb9ec
  e6b0cf2c_265b_e108_5733_e58b7d9c0364["SSLContext_set_early_data_enabled()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| e6b0cf2c_265b_e108_5733_e58b7d9c0364
  71650380_3fec_ef0d_e5c6_0ee45c83603f["SSLContext_setSessionCacheSize()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| 71650380_3fec_ef0d_e5c6_0ee45c83603f
  76d817f8_bfff_557e_d162_168e18abf4d7["SSLContext_setSessionCacheTimeout()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| 76d817f8_bfff_557e_d162_168e18abf4d7
  6d50d84b_4a86_2291_bb14_216cb3ab99f3["SSLContext_setSessionTicketKeys()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| 6d50d84b_4a86_2291_bb14_216cb3ab99f3
  9c2f9a55_2465_8e3a_3061_a6b7b0dd0a70["SSLContext_set1_groups_list()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| 9c2f9a55_2465_8e3a_3061_a6b7b0dd0a70
  cfac1a9e_40fe_845f_2e4d_d8eec905ac0b["SSLContext_set1_sigalgs_list()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| cfac1a9e_40fe_845f_2e4d_d8eec905ac0b
  e3802e9c_d9fb_583b_ffbf_a2de13307145["SSLContext_free()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| e3802e9c_d9fb_583b_ffbf_a2de13307145
  b0be6c98_5c23_fc8c_7a8b_625070109c88["SSL_new()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| b0be6c98_5c23_fc8c_7a8b_625070109c88
  5358e9b9_fb58_5627_16cb_f82f6944b0cf["SSL_new0()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| 5358e9b9_fb58_5627_16cb_f82f6944b0cf
  bc674fc6_9542_a31d_2e71_485c7e560bc2["SSL_free()"]
  1df1ee72_d088_6e8a_ed64_d1236e26b4d5 -->|method| bc674fc6_9542_a31d_2e71_485c7e560bc2

Relationship Graph

Source Code

codec-classes-quic/src/main/java/io/netty/handler/codec/quic/BoringSSL.java lines 26–169

final class BoringSSL {

    static final int SSL_VERIFY_NONE = BoringSSLNativeStaticallyReferencedJniMethods.ssl_verify_none();
    static final int SSL_VERIFY_FAIL_IF_NO_PEER_CERT = BoringSSLNativeStaticallyReferencedJniMethods
            .ssl_verify_fail_if_no_peer_cert();
    static final int SSL_VERIFY_PEER = BoringSSLNativeStaticallyReferencedJniMethods.ssl_verify_peer();
    static final int X509_V_OK = BoringSSLNativeStaticallyReferencedJniMethods.x509_v_ok();
    static final int X509_V_ERR_CERT_HAS_EXPIRED =
            BoringSSLNativeStaticallyReferencedJniMethods.x509_v_err_cert_has_expired();
    static final int X509_V_ERR_CERT_NOT_YET_VALID =
            BoringSSLNativeStaticallyReferencedJniMethods.x509_v_err_cert_not_yet_valid();
    static final int X509_V_ERR_CERT_REVOKED = BoringSSLNativeStaticallyReferencedJniMethods.x509_v_err_cert_revoked();
    static final int X509_V_ERR_UNSPECIFIED = BoringSSLNativeStaticallyReferencedJniMethods.x509_v_err_unspecified();

    static long SSLContext_new(boolean server, String[] applicationProtocols,
                               BoringSSLHandshakeCompleteCallback handshakeCompleteCallback,
                               BoringSSLCertificateCallback certificateCallback,
                               BoringSSLCertificateVerifyCallback verifyCallback,
                               @Nullable BoringSSLTlsextServernameCallback servernameCallback,
                               @Nullable BoringSSLKeylogCallback keylogCallback,
                               @Nullable BoringSSLSessionCallback sessionCallback,
                               @Nullable BoringSSLPrivateKeyMethod privateKeyMethod,
                               BoringSSLSessionTicketCallback sessionTicketCallback,
                               int verifyMode,
                               byte[][] subjectNames) {
        return SSLContext_new0(server, toWireFormat(applicationProtocols),
                handshakeCompleteCallback, certificateCallback, verifyCallback, servernameCallback,
                keylogCallback, sessionCallback, privateKeyMethod, sessionTicketCallback, verifyMode, subjectNames);
    }

    private static byte @Nullable [] toWireFormat(String @Nullable [] applicationProtocols) {
        if (applicationProtocols == null) {
            return null;
        }
        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            for (String p : applicationProtocols) {
                byte[] bytes = p.getBytes(StandardCharsets.US_ASCII);
                out.write(bytes.length);
                out.write(bytes);
            }
            return out.toByteArray();
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
    }

    static native long SSLContext_new();

    private static native long SSLContext_new0(boolean server,
                                               byte @Nullable [] applicationProtocols, Object handshakeCompleteCallback,
                                               Object certificateCallback, Object verifyCallback,
                                               @Nullable Object servernameCallback, @Nullable Object keylogCallback,
                                               @Nullable Object sessionCallback,
                                               @Nullable Object privateKeyMethod,
                                               Object sessionTicketCallback,
                                               int verifyDepth, byte[][] subjectNames);
    static native void SSLContext_set_early_data_enabled(long context, boolean enabled);
    static native long SSLContext_setSessionCacheSize(long context, long size);
    static native long SSLContext_setSessionCacheTimeout(long context, long size);

    static native void SSLContext_setSessionTicketKeys(long context, boolean enableCallback);

    static int SSLContext_set1_groups_list(long ctx, String... groups) {
        if (groups == null) {
            throw new NullPointerException("curves");
        }
        if (groups.length == 0) {
            throw new IllegalArgumentException();
        }
        StringBuilder sb = new StringBuilder();
        for (String group: groups) {
            sb.append(group);
            // Groups are separated by : as explained in the manpage.
            sb.append(':');
        }
        sb.setLength(sb.length() - 1);
        return SSLContext_set1_groups_list(ctx, sb.toString());
    }

    static int SSLContext_set1_sigalgs_list(long ctx, String... sigalgs) {
        if (sigalgs.length == 0) {

Frequently Asked Questions

What is the BoringSSL class?
BoringSSL is a class in the netty codebase, defined in codec-classes-quic/src/main/java/io/netty/handler/codec/quic/BoringSSL.java.
Where is BoringSSL defined?
BoringSSL is defined in codec-classes-quic/src/main/java/io/netty/handler/codec/quic/BoringSSL.java at line 26.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free