diff --git a/mainline/conscrypt/sdk/Android.bp b/mainline/conscrypt/sdk/Android.bp
deleted file mode 100755
index 9f2166a..0000000
--- a/mainline/conscrypt/sdk/Android.bp
+++ /dev/null
@@ -1,222 +0,0 @@
-// This is auto-generated. DO NOT EDIT.
-
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-java_import {
-    name: "conscrypt-module-sdk_conscrypt@current",
-    sdk_member_name: "conscrypt",
-    visibility: [
-        "//device:__subpackages__",
-        "//external/conscrypt:__subpackages__",
-        "//system/apex/tests",
-    ],
-    apex_available: [
-        "com.android.conscrypt",
-        "test_com.android.conscrypt",
-    ],
-    jars: ["java/conscrypt.jar"],
-}
-
-java_import {
-    name: "conscrypt",
-    prefer: false,
-    visibility: [
-        "//device:__subpackages__",
-        "//external/conscrypt:__subpackages__",
-        "//system/apex/tests",
-    ],
-    apex_available: [
-        "com.android.conscrypt",
-        "test_com.android.conscrypt",
-    ],
-    jars: ["java/conscrypt.jar"],
-}
-
-java_sdk_library_import {
-    name: "conscrypt-module-sdk_conscrypt.module.public.api@current",
-    sdk_member_name: "conscrypt.module.public.api",
-    visibility: [
-        "//external/conscrypt",
-        "//frameworks/base",
-        "//frameworks/base/api",
-        "//libcore",
-        "//packages/modules/IPsec",
-        "//packages/modules/common/sdk",
-        "//prebuilts:__subpackages__",
-    ],
-    apex_available: ["//apex_available:platform"],
-    shared_library: false,
-    public: {
-        jars: ["sdk_library/public/conscrypt.module.public.api-stubs.jar"],
-        stub_srcs: ["sdk_library/public/conscrypt.module.public.api_stub_sources"],
-        current_api: "sdk_library/public/conscrypt.module.public.api.txt",
-        removed_api: "sdk_library/public/conscrypt.module.public.api-removed.txt",
-        sdk_version: "none",
-    },
-}
-
-java_sdk_library_import {
-    name: "conscrypt.module.public.api",
-    prefer: false,
-    visibility: [
-        "//external/conscrypt",
-        "//frameworks/base",
-        "//frameworks/base/api",
-        "//libcore",
-        "//packages/modules/IPsec",
-        "//packages/modules/common/sdk",
-        "//prebuilts:__subpackages__",
-    ],
-    apex_available: ["//apex_available:platform"],
-    shared_library: false,
-    public: {
-        jars: ["sdk_library/public/conscrypt.module.public.api-stubs.jar"],
-        stub_srcs: ["sdk_library/public/conscrypt.module.public.api_stub_sources"],
-        current_api: "sdk_library/public/conscrypt.module.public.api.txt",
-        removed_api: "sdk_library/public/conscrypt.module.public.api-removed.txt",
-        sdk_version: "none",
-    },
-}
-
-java_sdk_library_import {
-    name: "conscrypt-module-sdk_conscrypt.module.intra.core.api@current",
-    sdk_member_name: "conscrypt.module.intra.core.api",
-    visibility: [
-        "//external/conscrypt",
-        "//external/okhttp",
-        "//libcore:__subpackages__",
-        "//prebuilts:__subpackages__",
-    ],
-    apex_available: ["//apex_available:platform"],
-    shared_library: false,
-    public: {
-        jars: ["sdk_library/public/conscrypt.module.intra.core.api-stubs.jar"],
-        stub_srcs: ["sdk_library/public/conscrypt.module.intra.core.api_stub_sources"],
-        current_api: "sdk_library/public/conscrypt.module.intra.core.api.txt",
-        removed_api: "sdk_library/public/conscrypt.module.intra.core.api-removed.txt",
-        sdk_version: "none",
-    },
-}
-
-java_sdk_library_import {
-    name: "conscrypt.module.intra.core.api",
-    prefer: false,
-    visibility: [
-        "//external/conscrypt",
-        "//external/okhttp",
-        "//libcore:__subpackages__",
-        "//prebuilts:__subpackages__",
-    ],
-    apex_available: ["//apex_available:platform"],
-    shared_library: false,
-    public: {
-        jars: ["sdk_library/public/conscrypt.module.intra.core.api-stubs.jar"],
-        stub_srcs: ["sdk_library/public/conscrypt.module.intra.core.api_stub_sources"],
-        current_api: "sdk_library/public/conscrypt.module.intra.core.api.txt",
-        removed_api: "sdk_library/public/conscrypt.module.intra.core.api-removed.txt",
-        sdk_version: "none",
-    },
-}
-
-java_sdk_library_import {
-    name: "conscrypt-module-sdk_conscrypt.module.platform.api@current",
-    sdk_member_name: "conscrypt.module.platform.api",
-    visibility: [
-        "//external/conscrypt",
-        "//external/wycheproof",
-        "//libcore:__subpackages__",
-        "//prebuilts:__subpackages__",
-    ],
-    apex_available: ["//apex_available:platform"],
-    shared_library: false,
-    public: {
-        jars: ["sdk_library/public/conscrypt.module.platform.api-stubs.jar"],
-        stub_srcs: ["sdk_library/public/conscrypt.module.platform.api_stub_sources"],
-        current_api: "sdk_library/public/conscrypt.module.platform.api.txt",
-        removed_api: "sdk_library/public/conscrypt.module.platform.api-removed.txt",
-        sdk_version: "none",
-    },
-}
-
-java_sdk_library_import {
-    name: "conscrypt.module.platform.api",
-    prefer: false,
-    visibility: [
-        "//external/conscrypt",
-        "//external/wycheproof",
-        "//libcore:__subpackages__",
-        "//prebuilts:__subpackages__",
-    ],
-    apex_available: ["//apex_available:platform"],
-    shared_library: false,
-    public: {
-        jars: ["sdk_library/public/conscrypt.module.platform.api-stubs.jar"],
-        stub_srcs: ["sdk_library/public/conscrypt.module.platform.api_stub_sources"],
-        current_api: "sdk_library/public/conscrypt.module.platform.api.txt",
-        removed_api: "sdk_library/public/conscrypt.module.platform.api-removed.txt",
-        sdk_version: "none",
-    },
-}
-
-cc_prebuilt_library_shared {
-    name: "conscrypt-module-sdk_libconscrypt_jni@current",
-    sdk_member_name: "libconscrypt_jni",
-    visibility: ["//external/conscrypt:__subpackages__"],
-    apex_available: ["//apex_available:platform"],
-    installable: false,
-    stl: "c++_static",
-    compile_multilib: "both",
-    shared_libs: ["liblog"],
-    arch: {
-        arm64: {
-            srcs: ["arm64/lib/libconscrypt_jni.so"],
-        },
-        x86_64: {
-            srcs: ["x86_64/lib/libconscrypt_jni.so"],
-        },
-        arm: {
-            srcs: ["arm/lib/libconscrypt_jni.so"],
-        },
-        x86: {
-            srcs: ["x86/lib/libconscrypt_jni.so"],
-        },
-    },
-}
-
-cc_prebuilt_library_shared {
-    name: "libconscrypt_jni",
-    prefer: false,
-    visibility: ["//external/conscrypt:__subpackages__"],
-    apex_available: ["//apex_available:platform"],
-    stl: "c++_static",
-    compile_multilib: "both",
-    shared_libs: ["liblog"],
-    arch: {
-        arm64: {
-            srcs: ["arm64/lib/libconscrypt_jni.so"],
-        },
-        x86_64: {
-            srcs: ["x86_64/lib/libconscrypt_jni.so"],
-        },
-        arm: {
-            srcs: ["arm/lib/libconscrypt_jni.so"],
-        },
-        x86: {
-            srcs: ["x86/lib/libconscrypt_jni.so"],
-        },
-    },
-}
-
-sdk_snapshot {
-    name: "conscrypt-module-sdk@current",
-    visibility: ["//external/conscrypt:__subpackages__"],
-    java_boot_libs: ["conscrypt-module-sdk_conscrypt@current"],
-    java_sdk_libs: [
-        "conscrypt-module-sdk_conscrypt.module.public.api@current",
-        "conscrypt-module-sdk_conscrypt.module.intra.core.api@current",
-        "conscrypt-module-sdk_conscrypt.module.platform.api@current",
-    ],
-    native_shared_libs: ["conscrypt-module-sdk_libconscrypt_jni@current"],
-}
diff --git a/mainline/conscrypt/sdk/arm/lib/libconscrypt_jni.so b/mainline/conscrypt/sdk/arm/lib/libconscrypt_jni.so
deleted file mode 100755
index c090d29..0000000
--- a/mainline/conscrypt/sdk/arm/lib/libconscrypt_jni.so
+++ /dev/null
Binary files differ
diff --git a/mainline/conscrypt/sdk/arm64/lib/libconscrypt_jni.so b/mainline/conscrypt/sdk/arm64/lib/libconscrypt_jni.so
deleted file mode 100755
index d142bd6..0000000
--- a/mainline/conscrypt/sdk/arm64/lib/libconscrypt_jni.so
+++ /dev/null
Binary files differ
diff --git a/mainline/conscrypt/sdk/java/conscrypt.jar b/mainline/conscrypt/sdk/java/conscrypt.jar
deleted file mode 100644
index 61b20a4..0000000
--- a/mainline/conscrypt/sdk/java/conscrypt.jar
+++ /dev/null
Binary files differ
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api-removed.txt b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api-removed.txt
deleted file mode 100644
index d802177..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api-removed.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 2.0
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api-stubs.jar b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api-stubs.jar
deleted file mode 100644
index 2c026e1..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api-stubs.jar
+++ /dev/null
Binary files differ
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api.txt b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api.txt
deleted file mode 100644
index 6fce26f..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-// Signature format: 2.0
-package com.android.org.conscrypt {
-
-  public class OpenSSLMessageDigestJDK extends java.security.MessageDigestSpi implements java.lang.Cloneable {
-  }
-
-  public static final class OpenSSLMessageDigestJDK.MD5 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-    ctor public OpenSSLMessageDigestJDK.MD5() throws java.security.NoSuchAlgorithmException;
-  }
-
-  public static final class OpenSSLMessageDigestJDK.SHA1 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-    ctor public OpenSSLMessageDigestJDK.SHA1() throws java.security.NoSuchAlgorithmException;
-  }
-
-  public static final class OpenSSLMessageDigestJDK.SHA224 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-    ctor public OpenSSLMessageDigestJDK.SHA224() throws java.security.NoSuchAlgorithmException;
-  }
-
-  public static final class OpenSSLMessageDigestJDK.SHA256 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-    ctor public OpenSSLMessageDigestJDK.SHA256() throws java.security.NoSuchAlgorithmException;
-  }
-
-  public static final class OpenSSLMessageDigestJDK.SHA384 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-    ctor public OpenSSLMessageDigestJDK.SHA384() throws java.security.NoSuchAlgorithmException;
-  }
-
-  public static final class OpenSSLMessageDigestJDK.SHA512 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-    ctor public OpenSSLMessageDigestJDK.SHA512() throws java.security.NoSuchAlgorithmException;
-  }
-
-  public final class OpenSSLProvider extends java.security.Provider {
-    ctor public OpenSSLProvider();
-  }
-
-  public final class OpenSSLRandom extends java.security.SecureRandomSpi implements java.io.Serializable {
-    ctor public OpenSSLRandom();
-  }
-
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/android/net/ssl/SSLEngines.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/android/net/ssl/SSLEngines.java
deleted file mode 100644
index 379b7b2..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/android/net/ssl/SSLEngines.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package android.net.ssl;
-
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLException;
-
-/**
- * Static utility methods for accessing additional functionality of supported instances of
- * {@link javax.net.ssl.SSLEngine SSLEngine}.  Engines from the platform TLS provider will be compatible with all
- * methods in this class.
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public class SSLEngines {
-
-private SSLEngines() { throw new RuntimeException("Stub!"); }
-
-/**
- * Returns whether the given engine can be used with the methods in this class.  In general,
- * only engines from the platform TLS provider are supported.
- */
-
-public static boolean isSupportedEngine(javax.net.ssl.SSLEngine engine) { throw new RuntimeException("Stub!"); }
-
-/**
- * Enables or disables the use of session tickets.
- *
- * <p>This function must be called before the handshake is started or it will have no effect.
- *
- * @param engine the engine
- * @param useSessionTickets whether to enable or disable the use of session tickets
- * @throws java.lang.IllegalArgumentException if the given engine is not a platform engine
- */
-
-public static void setUseSessionTickets(javax.net.ssl.SSLEngine engine, boolean useSessionTickets) { throw new RuntimeException("Stub!"); }
-
-/**
- * Exports a value derived from the TLS master secret as described in RFC 5705.
- *
- * A number of protocols leverage Transport Layer Security (TLS) to perform key
- * establishment but then use some of the keying material for their own purposes.
- *
- * This method allows an application to export keying material from a TLS connection.
- * The exported material will be the same on the client and server if they pass in
- * the same values for {@code label} and {@code context}.  See RFC 5705 for further
- * details.
- *
- * @param engine the engine to use for exporting keying material
- * @param label the label to use in calculating the exported value.  This must be
- * an ASCII-only string.
- * @param context the application-specific context value to use in calculating the
- * exported value.  This may be {@code null} to use no application context, which is
- * treated differently than an empty byte array.
- * @param length the number of bytes of keying material to return.
- * @return a value of the specified length, or {@code null} if the handshake has not yet
- * completed or the connection has been closed.
- * @throws javax.net.ssl.SSLException if the value could not be exported.
- */
-
-public static byte[] exportKeyingMaterial(javax.net.ssl.SSLEngine engine, java.lang.String label, byte[] context, int length) throws javax.net.ssl.SSLException { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/android/net/ssl/SSLSockets.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/android/net/ssl/SSLSockets.java
deleted file mode 100644
index 590417d..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/android/net/ssl/SSLSockets.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package android.net.ssl;
-
-import javax.net.ssl.SSLSocket;
-import javax.net.ssl.SSLException;
-
-/**
- * Static utility methods for accessing additional functionality of supported instances of
- * {@link javax.net.ssl.SSLSocket SSLSocket}.  Sockets from the platform TLS provider will be compatible with all
- * methods in this class.
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public class SSLSockets {
-
-private SSLSockets() { throw new RuntimeException("Stub!"); }
-
-/**
- * Returns whether the given socket can be used with the methods in this class.  In general,
- * only sockets from the platform TLS provider are supported.
- */
-
-public static boolean isSupportedSocket(javax.net.ssl.SSLSocket socket) { throw new RuntimeException("Stub!"); }
-
-/**
- * Enables or disables the use of session tickets.
- *
- * <p>This function must be called before the handshake is started or it will have no effect.
- *
- * @param socket the socket
- * @param useSessionTickets whether to enable or disable the use of session tickets
- * @throws java.lang.IllegalArgumentException if the given socket is not a platform socket
- */
-
-public static void setUseSessionTickets(javax.net.ssl.SSLSocket socket, boolean useSessionTickets) { throw new RuntimeException("Stub!"); }
-
-/**
- * Exports a value derived from the TLS master secret as described in RFC 5705.
- *
- * A number of protocols leverage Transport Layer Security (TLS) to perform key
- * establishment but then use some of the keying material for their own purposes.
- *
- * This method allows an application to export keying material from a TLS connection.
- * The exported material will be the same on the client and server if they pass in
- * the same values for {@code label} and {@code context}.  See RFC 5705 for further
- * details.
- *
- * @param socket the socket to use for exporting keying material
- * @param label the label to use in calculating the exported value.  This must be
- * an ASCII-only string.
- * @param context the application-specific context value to use in calculating the
- * exported value.  This may be {@code null} to use no application context, which is
- * treated differently than an empty byte array.
- * @param length the number of bytes of keying material to return.
- * @return a value of the specified length, or {@code null} if the handshake has not yet
- * completed or the connection has been closed.
- * @throws javax.net.ssl.SSLException if the value could not be exported.
- */
-
-public static byte[] exportKeyingMaterial(javax.net.ssl.SSLSocket socket, java.lang.String label, byte[] context, int length) throws javax.net.ssl.SSLException { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/com/android/org/conscrypt/OpenSSLMessageDigestJDK.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/com/android/org/conscrypt/OpenSSLMessageDigestJDK.java
deleted file mode 100644
index 9cc5cc0..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/com/android/org/conscrypt/OpenSSLMessageDigestJDK.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-
-/**
- * Implements the JDK MessageDigest interface using OpenSSL's EVP API.
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public class OpenSSLMessageDigestJDK extends java.security.MessageDigestSpi implements java.lang.Cloneable {
-
-private OpenSSLMessageDigestJDK() { throw new RuntimeException("Stub!"); }
-
-protected synchronized void engineReset() { throw new RuntimeException("Stub!"); }
-
-protected int engineGetDigestLength() { throw new RuntimeException("Stub!"); }
-
-protected synchronized void engineUpdate(byte input) { throw new RuntimeException("Stub!"); }
-
-protected synchronized void engineUpdate(byte[] input, int offset, int len) { throw new RuntimeException("Stub!"); }
-
-protected synchronized void engineUpdate(java.nio.ByteBuffer input) { throw new RuntimeException("Stub!"); }
-
-protected synchronized byte[] engineDigest() { throw new RuntimeException("Stub!"); }
-
-public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
-/**
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public static final class MD5 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-
-public MD5() throws java.security.NoSuchAlgorithmException { throw new RuntimeException("Stub!"); }
-}
-
-/**
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public static final class SHA1 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-
-public SHA1() throws java.security.NoSuchAlgorithmException { throw new RuntimeException("Stub!"); }
-}
-
-/**
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public static final class SHA224 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-
-public SHA224() throws java.security.NoSuchAlgorithmException { throw new RuntimeException("Stub!"); }
-}
-
-/**
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public static final class SHA256 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-
-public SHA256() throws java.security.NoSuchAlgorithmException { throw new RuntimeException("Stub!"); }
-}
-
-/**
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public static final class SHA384 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-
-public SHA384() throws java.security.NoSuchAlgorithmException { throw new RuntimeException("Stub!"); }
-}
-
-/**
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public static final class SHA512 extends com.android.org.conscrypt.OpenSSLMessageDigestJDK {
-
-public SHA512() throws java.security.NoSuchAlgorithmException { throw new RuntimeException("Stub!"); }
-}
-
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/com/android/org/conscrypt/OpenSSLProvider.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/com/android/org/conscrypt/OpenSSLProvider.java
deleted file mode 100644
index 95c0b29..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/com/android/org/conscrypt/OpenSSLProvider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-import java.security.Provider;
-
-/**
- * Provider that uses BoringSSL to perform the actual cryptographic operations.
- * <p>
- * Every algorithm should have its IANA assigned OID as an alias. See the following URLs for each
- * type: <ul> <li><a
- * href="http://www.iana.org/assignments/hash-function-text-names/hash-function-text-names.xml">Hash
- * functions</a></li> <li><a href="http://www.iana.org/assignments/dssc/dssc.xml">Signature
- * algorithms</a></li> <li><a
- * href="http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html">NIST cryptographic
- * algorithms</a></li>
- * </ul>
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public final class OpenSSLProvider extends java.security.Provider {
-
-public OpenSSLProvider() { super(null, (double)0, null); throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/com/android/org/conscrypt/OpenSSLRandom.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/com/android/org/conscrypt/OpenSSLRandom.java
deleted file mode 100644
index c4a12d1..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.intra.core.api_stub_sources/com/android/org/conscrypt/OpenSSLRandom.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-
-/**
- * Implements {@link java.security.SecureRandom} using BoringSSL's RAND interface.
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public final class OpenSSLRandom extends java.security.SecureRandomSpi implements java.io.Serializable {
-
-public OpenSSLRandom() { throw new RuntimeException("Stub!"); }
-
-protected void engineSetSeed(byte[] seed) { throw new RuntimeException("Stub!"); }
-
-protected void engineNextBytes(byte[] bytes) { throw new RuntimeException("Stub!"); }
-
-protected byte[] engineGenerateSeed(int numBytes) { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api-removed.txt b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api-removed.txt
deleted file mode 100644
index d802177..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api-removed.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 2.0
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api-stubs.jar b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api-stubs.jar
deleted file mode 100644
index bda1652..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api-stubs.jar
+++ /dev/null
Binary files differ
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api.txt b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api.txt
deleted file mode 100644
index b645383..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-// Signature format: 2.0
-package com.android.org.conscrypt {
-
-  public interface CertPinManager {
-  }
-
-  public final class ClientSessionContext implements javax.net.ssl.SSLSessionContext {
-    method public final java.util.Enumeration<byte[]> getIds();
-    method public final javax.net.ssl.SSLSession getSession(byte[]);
-    method public final int getSessionCacheSize();
-    method public final int getSessionTimeout();
-    method public void setPersistentCache(com.android.org.conscrypt.SSLClientSessionCache);
-    method public final void setSessionCacheSize(int) throws java.lang.IllegalArgumentException;
-    method public final void setSessionTimeout(int) throws java.lang.IllegalArgumentException;
-  }
-
-  public final class Conscrypt {
-    method public static javax.net.ssl.X509TrustManager getDefaultX509TrustManager() throws java.security.KeyManagementException;
-  }
-
-  public interface ConscryptCertStore {
-  }
-
-  public final class FileClientSessionCache {
-    method public static com.android.org.conscrypt.SSLClientSessionCache usingDirectory(java.io.File) throws java.io.IOException;
-  }
-
-  public final class OpenSSLProvider extends java.security.Provider {
-    ctor public OpenSSLProvider();
-  }
-
-  public abstract class OpenSSLSocketImpl extends javax.net.ssl.SSLSocket {
-    method public void addHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener);
-    method public final void connect(java.net.SocketAddress) throws java.io.IOException;
-    method public final void connect(java.net.SocketAddress, int) throws java.io.IOException;
-    method @Deprecated public final byte[] getAlpnSelectedProtocol();
-    method @Deprecated public final byte[] getNpnSelectedProtocol();
-    method public final int getPort();
-    method public final int getSoTimeout() throws java.net.SocketException;
-    method public void removeHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener);
-    method public final void sendUrgentData(int) throws java.io.IOException;
-    method @Deprecated public final void setAlpnProtocols(byte[]);
-    method public abstract void setChannelIdPrivateKey(java.security.PrivateKey);
-    method public void setHandshakeTimeout(int) throws java.net.SocketException;
-    method public void setHostname(String);
-    method @Deprecated public final void setNpnProtocols(byte[]);
-    method public final void setOOBInline(boolean) throws java.net.SocketException;
-    method public final void setSoTimeout(int) throws java.net.SocketException;
-    method public void setSoWriteTimeout(int) throws java.net.SocketException;
-    method public abstract void setUseSessionTickets(boolean);
-  }
-
-  public interface SSLClientSessionCache {
-  }
-
-  public final class TrustManagerImpl extends javax.net.ssl.X509ExtendedTrustManager {
-    ctor public TrustManagerImpl(java.security.KeyStore);
-    ctor public TrustManagerImpl(java.security.KeyStore, com.android.org.conscrypt.CertPinManager, com.android.org.conscrypt.ConscryptCertStore);
-    method public void checkClientTrusted(java.security.cert.X509Certificate[], String) throws java.security.cert.CertificateException;
-    method public void checkClientTrusted(java.security.cert.X509Certificate[], String, java.net.Socket) throws java.security.cert.CertificateException;
-    method public void checkClientTrusted(java.security.cert.X509Certificate[], String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
-    method public java.util.List<java.security.cert.X509Certificate> checkServerTrusted(java.security.cert.X509Certificate[], String, String) throws java.security.cert.CertificateException;
-    method public java.util.List<java.security.cert.X509Certificate> getTrustedChainForServer(java.security.cert.X509Certificate[], String, java.net.Socket) throws java.security.cert.CertificateException;
-    method public java.util.List<java.security.cert.X509Certificate> getTrustedChainForServer(java.security.cert.X509Certificate[], String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
-    method public void handleTrustStorageUpdate();
-  }
-
-  public final class TrustedCertificateIndex {
-    ctor public TrustedCertificateIndex();
-    method public java.util.Set<java.security.cert.TrustAnchor> findAllByIssuerAndSignature(java.security.cert.X509Certificate);
-    method public java.security.cert.TrustAnchor findByIssuerAndSignature(java.security.cert.X509Certificate);
-    method public java.security.cert.TrustAnchor findBySubjectAndPublicKey(java.security.cert.X509Certificate);
-    method public java.security.cert.TrustAnchor index(java.security.cert.X509Certificate);
-  }
-
-  public class TrustedCertificateStore implements com.android.org.conscrypt.ConscryptCertStore {
-    ctor public TrustedCertificateStore();
-    method public java.util.Set<java.lang.String> aliases();
-    method public java.util.Set<java.lang.String> allSystemAliases();
-    method public boolean containsAlias(String);
-    method public void deleteCertificateEntry(String) throws java.security.cert.CertificateException, java.io.IOException;
-    method public java.util.Set<java.security.cert.X509Certificate> findAllIssuers(java.security.cert.X509Certificate);
-    method public java.security.cert.X509Certificate findIssuer(java.security.cert.X509Certificate);
-    method public java.security.cert.Certificate getCertificate(String);
-    method public java.security.cert.Certificate getCertificate(String, boolean);
-    method public String getCertificateAlias(java.security.cert.Certificate);
-    method public String getCertificateAlias(java.security.cert.Certificate, boolean);
-    method public java.util.List<java.security.cert.X509Certificate> getCertificateChain(java.security.cert.X509Certificate) throws java.security.cert.CertificateException;
-    method public java.io.File getCertificateFile(java.io.File, java.security.cert.X509Certificate);
-    method public java.util.Date getCreationDate(String);
-    method public java.security.cert.X509Certificate getTrustAnchor(java.security.cert.X509Certificate);
-    method public void installCertificate(java.security.cert.X509Certificate) throws java.security.cert.CertificateException, java.io.IOException;
-    method public static final boolean isUser(String);
-    method public boolean isUserAddedCertificate(java.security.cert.X509Certificate);
-    method public static void setDefaultUserDirectory(java.io.File);
-    method public java.util.Set<java.lang.String> userAliases();
-  }
-
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/CertPinManager.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/CertPinManager.java
deleted file mode 100644
index cadaecb..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/CertPinManager.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-
-/**
- * Interface for classes that implement certificate pinning for use in {@link com.android.org.conscrypt.TrustManagerImpl TrustManagerImpl}.
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public interface CertPinManager {
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/ClientSessionContext.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/ClientSessionContext.java
deleted file mode 100644
index 2be0c9f..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/ClientSessionContext.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-
-/**
- * Caches client sessions. Indexes by host and port. Users are typically
- * looking to reuse any session for a given host and port.
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public final class ClientSessionContext implements javax.net.ssl.SSLSessionContext {
-
-ClientSessionContext() { throw new RuntimeException("Stub!"); }
-
-/**
- * Applications should not use this method. Instead use {@link com.android.org.conscrypt.Conscrypt#setClientSessionCache(javax.net.ssl.SSLContext,com.android.org.conscrypt.SSLClientSessionCache)  }.
- */
-
-public void setPersistentCache(com.android.org.conscrypt.SSLClientSessionCache persistentCache) { throw new RuntimeException("Stub!"); }
-
-public final void setSessionTimeout(int seconds) throws java.lang.IllegalArgumentException { throw new RuntimeException("Stub!"); }
-
-public final int getSessionCacheSize() { throw new RuntimeException("Stub!"); }
-
-public final int getSessionTimeout() { throw new RuntimeException("Stub!"); }
-
-/**
- * This method is provided for API-compatibility only, not intended for use. No guarantees
- * are made WRT performance.
- */
-
-public final java.util.Enumeration<byte[]> getIds() { throw new RuntimeException("Stub!"); }
-
-/**
- * This is provided for API-compatibility only, not intended for use. No guarantees are
- * made WRT performance or the validity of the returned session.
- */
-
-public final javax.net.ssl.SSLSession getSession(byte[] sessionId) { throw new RuntimeException("Stub!"); }
-
-public final void setSessionCacheSize(int size) throws java.lang.IllegalArgumentException { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/Conscrypt.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/Conscrypt.java
deleted file mode 100644
index 263243f..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/Conscrypt.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.org.conscrypt;
-
-
-/**
- * Core API for creating and configuring all Conscrypt types.
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public final class Conscrypt {
-
-private Conscrypt() { throw new RuntimeException("Stub!"); }
-
-/**
- * Gets the default X.509 trust manager.
- */
-
-public static javax.net.ssl.X509TrustManager getDefaultX509TrustManager() throws java.security.KeyManagementException { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/ConscryptCertStore.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/ConscryptCertStore.java
deleted file mode 100644
index d565484..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/ConscryptCertStore.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-
-/**
- * A certificate store that supports additional operations that are used in
- * TrustManagerImpl.  This is primarily implemented by the cert store on the
- * Android platform.
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public interface ConscryptCertStore {
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/FileClientSessionCache.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/FileClientSessionCache.java
deleted file mode 100644
index e2b7d01..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/FileClientSessionCache.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * File-based cache implementation. Only one process should access the
- * underlying directory at a time.
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public final class FileClientSessionCache {
-
-private FileClientSessionCache() { throw new RuntimeException("Stub!"); }
-
-/**
- * Returns a cache backed by the given directory. Creates the directory
- * (including parent directories) if necessary. This cache should have
- * exclusive access to the given directory.
- *
- * @param directory to store files in
- * @return a cache backed by the given directory
- * @throws java.io.IOException if the file exists and is not a directory or if
- *  creating the directories fails
- */
-
-public static synchronized com.android.org.conscrypt.SSLClientSessionCache usingDirectory(java.io.File directory) throws java.io.IOException { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/OpenSSLProvider.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/OpenSSLProvider.java
deleted file mode 100644
index 95c0b29..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/OpenSSLProvider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-import java.security.Provider;
-
-/**
- * Provider that uses BoringSSL to perform the actual cryptographic operations.
- * <p>
- * Every algorithm should have its IANA assigned OID as an alias. See the following URLs for each
- * type: <ul> <li><a
- * href="http://www.iana.org/assignments/hash-function-text-names/hash-function-text-names.xml">Hash
- * functions</a></li> <li><a href="http://www.iana.org/assignments/dssc/dssc.xml">Signature
- * algorithms</a></li> <li><a
- * href="http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html">NIST cryptographic
- * algorithms</a></li>
- * </ul>
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public final class OpenSSLProvider extends java.security.Provider {
-
-public OpenSSLProvider() { super(null, (double)0, null); throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/OpenSSLSocketImpl.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/OpenSSLSocketImpl.java
deleted file mode 100644
index c509a57..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/OpenSSLSocketImpl.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-
-/**
- * Public shim allowing us to stay backward-compatible with legacy applications which were using
- * Conscrypt's extended socket API before the introduction of the {@link com.android.org.conscrypt.Conscrypt Conscrypt} class.
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public abstract class OpenSSLSocketImpl extends javax.net.ssl.SSLSocket {
-
-OpenSSLSocketImpl() { throw new RuntimeException("Stub!"); }
-
-public void setHostname(java.lang.String hostname) { throw new RuntimeException("Stub!"); }
-
-public java.io.FileDescriptor getFileDescriptor$() { throw new RuntimeException("Stub!"); }
-
-public void setSoWriteTimeout(int writeTimeoutMilliseconds) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public void setHandshakeTimeout(int handshakeTimeoutMilliseconds) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public abstract javax.net.ssl.SSLSession getHandshakeSession();
-
-public abstract void setUseSessionTickets(boolean useSessionTickets);
-
-public abstract void setChannelIdPrivateKey(java.security.PrivateKey privateKey);
-
-/**
- * @deprecated NPN is not supported
- */
-
-@Deprecated
-public final byte[] getNpnSelectedProtocol() { throw new RuntimeException("Stub!"); }
-
-/**
- * @deprecated NPN is not supported
- */
-
-@Deprecated
-public final void setNpnProtocols(byte[] npnProtocols) { throw new RuntimeException("Stub!"); }
-
-/**
- * @deprecated use {@link #getApplicationProtocol()} instead.
- */
-
-@Deprecated
-public final byte[] getAlpnSelectedProtocol() { throw new RuntimeException("Stub!"); }
-
-/**
- * @deprecated Use {@link #setAlpnProtocols(java.lang.String[])} instead.
- */
-
-@Deprecated
-public final void setAlpnProtocols(byte[] protocols) { throw new RuntimeException("Stub!"); }
-
-public java.net.InetAddress getInetAddress() { throw new RuntimeException("Stub!"); }
-
-public boolean getOOBInline() throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public int getLocalPort() { throw new RuntimeException("Stub!"); }
-
-public void setReceiveBufferSize(int size) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public boolean isInputShutdown() { throw new RuntimeException("Stub!"); }
-
-public void removeHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener listener) { throw new RuntimeException("Stub!"); }
-
-public void setTcpNoDelay(boolean on) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public boolean isConnected() { throw new RuntimeException("Stub!"); }
-
-public boolean getKeepAlive() throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public java.net.InetAddress getLocalAddress() { throw new RuntimeException("Stub!"); }
-
-public void bind(java.net.SocketAddress bindpoint) throws java.io.IOException { throw new RuntimeException("Stub!"); }
-
-public java.nio.channels.SocketChannel getChannel() { throw new RuntimeException("Stub!"); }
-
-public int getSoLinger() throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public boolean getTcpNoDelay() throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public void setSoLinger(boolean on, int linger) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public final int getSoTimeout() throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public boolean isOutputShutdown() { throw new RuntimeException("Stub!"); }
-
-public void close() throws java.io.IOException { throw new RuntimeException("Stub!"); }
-
-public final void connect(java.net.SocketAddress endpoint) throws java.io.IOException { throw new RuntimeException("Stub!"); }
-
-/**
- * Try to extract the peer's hostname if it's available from the endpoint address.
- */
-
-public final void connect(java.net.SocketAddress endpoint, int timeout) throws java.io.IOException { throw new RuntimeException("Stub!"); }
-
-public void setTrafficClass(int tc) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public final void setOOBInline(boolean on) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public java.net.SocketAddress getLocalSocketAddress() { throw new RuntimeException("Stub!"); }
-
-public int getReceiveBufferSize() throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public void setReuseAddress(boolean on) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public void addHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener listener) { throw new RuntimeException("Stub!"); }
-
-public int getTrafficClass() throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public boolean getReuseAddress() throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public final void setSoTimeout(int readTimeoutMilliseconds) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public void setKeepAlive(boolean on) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public java.io.InputStream getInputStream() throws java.io.IOException { throw new RuntimeException("Stub!"); }
-
-public void shutdownOutput() throws java.io.IOException { throw new RuntimeException("Stub!"); }
-
-public void shutdownInput() throws java.io.IOException { throw new RuntimeException("Stub!"); }
-
-public void setPerformancePreferences(int connectionTime, int latency, int bandwidth) { throw new RuntimeException("Stub!"); }
-
-public final int getPort() { throw new RuntimeException("Stub!"); }
-
-public final void sendUrgentData(int data) throws java.io.IOException { throw new RuntimeException("Stub!"); }
-
-public boolean isClosed() { throw new RuntimeException("Stub!"); }
-
-public boolean isBound() { throw new RuntimeException("Stub!"); }
-
-public void setSendBufferSize(int size) throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public int getSendBufferSize() throws java.net.SocketException { throw new RuntimeException("Stub!"); }
-
-public java.io.OutputStream getOutputStream() throws java.io.IOException { throw new RuntimeException("Stub!"); }
-
-public java.lang.String toString() { throw new RuntimeException("Stub!"); }
-
-public java.net.SocketAddress getRemoteSocketAddress() { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/SSLClientSessionCache.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/SSLClientSessionCache.java
deleted file mode 100644
index c39f2e9..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/SSLClientSessionCache.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-import javax.net.ssl.SSLSession;
-
-/**
- * A persistent {@link javax.net.ssl.SSLSession} cache used by
- * {@link javax.net.ssl.SSLSessionContext} to share client-side SSL sessions
- * across processes. For example, this cache enables applications to
- * persist and reuse sessions across restarts.
- *
- * <p>The {@code SSLSessionContext} implementation converts
- * {@code SSLSession}s into raw bytes and vice versa. The exact makeup of the
- * session data is dependent upon the caller's implementation and is opaque to
- * the {@code SSLClientSessionCache} implementation.
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public interface SSLClientSessionCache {
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/TrustManagerImpl.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/TrustManagerImpl.java
deleted file mode 100644
index d6db07a..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/TrustManagerImpl.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// License from Apache Harmony:
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-import javax.net.ssl.X509ExtendedTrustManager;
-import java.security.cert.CertificateException;
-
-/**
- *
- * TrustManager implementation. The implementation is based on CertPathValidator
- * PKIX and CertificateFactory X509 implementations. This implementations should
- * be provided by some certification provider.
- *
- * @see javax.net.ssl.X509ExtendedTrustManager
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public final class TrustManagerImpl extends javax.net.ssl.X509ExtendedTrustManager {
-
-/**
- * Creates X509TrustManager based on a keystore
- */
-
-public TrustManagerImpl(java.security.KeyStore keyStore) { throw new RuntimeException("Stub!"); }
-
-public TrustManagerImpl(java.security.KeyStore keyStore, com.android.org.conscrypt.CertPinManager manager, com.android.org.conscrypt.ConscryptCertStore certStore) { throw new RuntimeException("Stub!"); }
-
-public void checkClientTrusted(java.security.cert.X509Certificate[] chain, java.lang.String authType) throws java.security.cert.CertificateException { throw new RuntimeException("Stub!"); }
-
-public void checkClientTrusted(java.security.cert.X509Certificate[] chain, java.lang.String authType, java.net.Socket socket) throws java.security.cert.CertificateException { throw new RuntimeException("Stub!"); }
-
-public void checkClientTrusted(java.security.cert.X509Certificate[] chain, java.lang.String authType, javax.net.ssl.SSLEngine engine) throws java.security.cert.CertificateException { throw new RuntimeException("Stub!"); }
-
-public void checkServerTrusted(java.security.cert.X509Certificate[] chain, java.lang.String authType) throws java.security.cert.CertificateException { throw new RuntimeException("Stub!"); }
-
-/**
- * For backward compatibility with older Android API that used String for the hostname only.
- */
-
-public java.util.List<java.security.cert.X509Certificate> checkServerTrusted(java.security.cert.X509Certificate[] chain, java.lang.String authType, java.lang.String hostname) throws java.security.cert.CertificateException { throw new RuntimeException("Stub!"); }
-
-/**
- * Returns the full trusted certificate chain found from {@code certs}.
- *
- * Throws {@link java.security.cert.CertificateException CertificateException} when no trusted chain can be found from {@code certs}.
- */
-
-public java.util.List<java.security.cert.X509Certificate> getTrustedChainForServer(java.security.cert.X509Certificate[] certs, java.lang.String authType, java.net.Socket socket) throws java.security.cert.CertificateException { throw new RuntimeException("Stub!"); }
-
-/**
- * Returns the full trusted certificate chain found from {@code certs}.
- *
- * Throws {@link java.security.cert.CertificateException CertificateException} when no trusted chain can be found from {@code certs}.
- */
-
-public java.util.List<java.security.cert.X509Certificate> getTrustedChainForServer(java.security.cert.X509Certificate[] certs, java.lang.String authType, javax.net.ssl.SSLEngine engine) throws java.security.cert.CertificateException { throw new RuntimeException("Stub!"); }
-
-public void checkServerTrusted(java.security.cert.X509Certificate[] chain, java.lang.String authType, java.net.Socket socket) throws java.security.cert.CertificateException { throw new RuntimeException("Stub!"); }
-
-public void checkServerTrusted(java.security.cert.X509Certificate[] chain, java.lang.String authType, javax.net.ssl.SSLEngine engine) throws java.security.cert.CertificateException { throw new RuntimeException("Stub!"); }
-
-public void handleTrustStorageUpdate() { throw new RuntimeException("Stub!"); }
-
-public java.security.cert.X509Certificate[] getAcceptedIssuers() { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/TrustedCertificateIndex.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/TrustedCertificateIndex.java
deleted file mode 100644
index 4b2c8b5..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/TrustedCertificateIndex.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-import java.security.cert.TrustAnchor;
-
-/**
- * Indexes {@code TrustAnchor} instances so they can be found in O(1)
- * time instead of O(N).
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public final class TrustedCertificateIndex {
-
-public TrustedCertificateIndex() { throw new RuntimeException("Stub!"); }
-
-public java.security.cert.TrustAnchor index(java.security.cert.X509Certificate cert) { throw new RuntimeException("Stub!"); }
-
-public java.security.cert.TrustAnchor findByIssuerAndSignature(java.security.cert.X509Certificate cert) { throw new RuntimeException("Stub!"); }
-
-public java.security.cert.TrustAnchor findBySubjectAndPublicKey(java.security.cert.X509Certificate cert) { throw new RuntimeException("Stub!"); }
-
-public java.util.Set<java.security.cert.TrustAnchor> findAllByIssuerAndSignature(java.security.cert.X509Certificate cert) { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/TrustedCertificateStore.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/TrustedCertificateStore.java
deleted file mode 100644
index 98cfa4f..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.platform.api_stub_sources/com/android/org/conscrypt/TrustedCertificateStore.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package com.android.org.conscrypt;
-
-import java.io.File;
-import java.security.cert.X509Certificate;
-import java.security.cert.CertificateException;
-
-/**
- * A source for trusted root certificate authority (CA) certificates
- * supporting an immutable system CA directory along with mutable
- * directories allowing the user addition of custom CAs and user
- * removal of system CAs. This store supports the {@code
- * TrustedCertificateKeyStoreSpi} wrapper to allow a traditional
- * KeyStore interface for use with {@link
- * javax.net.ssl.TrustManagerFactory.init}.
- *
- * <p>The CAs are accessed via {@code KeyStore} style aliases. Aliases
- * are made up of a prefix identifying the source ("system:" vs
- * "user:") and a suffix based on the OpenSSL X509_NAME_hash_old
- * function of the CA's subject name. For example, the system CA for
- * "C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification
- * Authority" could be represented as "system:7651b327.0". By using
- * the subject hash, operations such as {@link #getCertificateAlias
- * getCertificateAlias} can be implemented efficiently without
- * scanning the entire store.
- *
- * <p>In addition to supporting the {@code
- * TrustedCertificateKeyStoreSpi} implementation, {@code
- * TrustedCertificateStore} also provides the additional public
- * method  {@link #findIssuer} to allow  efficient lookup operations
- * for CAs again based on the file naming convention.
- *
- * <p>The KeyChainService users the {@link installCertificate} and
- * {@link #deleteCertificateEntry} to install user CAs as well as
- * delete those user CAs as well as system CAs. The deletion of system
- * CAs is performed by placing an exact copy of that CA in the deleted
- * directory. Such deletions are intended to persist across upgrades
- * but not intended to mask a CA with a matching name or public key
- * but is otherwise reissued in a system update. Reinstalling a
- * deleted system certificate simply removes the copy from the deleted
- * directory, reenabling the original in the system directory.
- *
- * <p>Note that the default mutable directory is created by init via
- * configuration in the system/core/rootdir/init.rc file. The
- * directive "mkdir /data/misc/keychain 0775 system system"
- * ensures that its owner and group are the system uid and system
- * gid and that it is world readable but only writable by the system
- * user.
- * @hide This class is not part of the Android public SDK API
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public class TrustedCertificateStore implements com.android.org.conscrypt.ConscryptCertStore {
-
-public TrustedCertificateStore() { throw new RuntimeException("Stub!"); }
-
-public static final boolean isUser(java.lang.String alias) { throw new RuntimeException("Stub!"); }
-
-public static void setDefaultUserDirectory(java.io.File root) { throw new RuntimeException("Stub!"); }
-
-public java.security.cert.Certificate getCertificate(java.lang.String alias) { throw new RuntimeException("Stub!"); }
-
-public java.security.cert.Certificate getCertificate(java.lang.String alias, boolean includeDeletedSystem) { throw new RuntimeException("Stub!"); }
-
-public java.util.Date getCreationDate(java.lang.String alias) { throw new RuntimeException("Stub!"); }
-
-public java.util.Set<java.lang.String> aliases() { throw new RuntimeException("Stub!"); }
-
-public java.util.Set<java.lang.String> userAliases() { throw new RuntimeException("Stub!"); }
-
-public java.util.Set<java.lang.String> allSystemAliases() { throw new RuntimeException("Stub!"); }
-
-public boolean containsAlias(java.lang.String alias) { throw new RuntimeException("Stub!"); }
-
-public java.lang.String getCertificateAlias(java.security.cert.Certificate c) { throw new RuntimeException("Stub!"); }
-
-public java.lang.String getCertificateAlias(java.security.cert.Certificate c, boolean includeDeletedSystem) { throw new RuntimeException("Stub!"); }
-
-/**
- * Returns true to indicate that the certificate was added by the
- * user, false otherwise.
- */
-
-public boolean isUserAddedCertificate(java.security.cert.X509Certificate cert) { throw new RuntimeException("Stub!"); }
-
-/**
- * Returns a File for where the certificate is found if it exists
- * or where it should be installed if it does not exist. The
- * caller can disambiguate these cases by calling {@code
- * File.exists()} on the result.
- *
- * @VisibleForTesting
- */
-
-public java.io.File getCertificateFile(java.io.File dir, java.security.cert.X509Certificate x) { throw new RuntimeException("Stub!"); }
-
-/**
- * This non-{@code KeyStoreSpi} public interface is used by {@code
- * TrustManagerImpl} to locate a CA certificate with the same name
- * and public key as the provided {@code X509Certificate}. We
- * match on the name and public key and not the entire certificate
- * since a CA may be reissued with the same name and PublicKey but
- * with other differences (for example when switching signature
- * from md2WithRSAEncryption to SHA1withRSA)
- */
-
-public java.security.cert.X509Certificate getTrustAnchor(java.security.cert.X509Certificate c) { throw new RuntimeException("Stub!"); }
-
-/**
- * This non-{@code KeyStoreSpi} public interface is used by {@code
- * TrustManagerImpl} to locate the CA certificate that signed the
- * provided {@code X509Certificate}.
- */
-
-public java.security.cert.X509Certificate findIssuer(java.security.cert.X509Certificate c) { throw new RuntimeException("Stub!"); }
-
-public java.util.Set<java.security.cert.X509Certificate> findAllIssuers(java.security.cert.X509Certificate c) { throw new RuntimeException("Stub!"); }
-
-/**
- * Attempt to build a certificate chain from the supplied {@code leaf}
- * argument through the chain of issuers as high up as known. If the chain
- * can't be completed, the most complete chain available will be returned.
- * This means that a list with only the {@code leaf} certificate is returned
- * if no issuer certificates could be found.
- *
- * @throws java.security.cert.CertificateException if there was a problem parsing the
- *             certificates
- */
-
-public java.util.List<java.security.cert.X509Certificate> getCertificateChain(java.security.cert.X509Certificate leaf) throws java.security.cert.CertificateException { throw new RuntimeException("Stub!"); }
-
-/**
- * This non-{@code KeyStoreSpi} public interface is used by the
- * {@code KeyChainService} to install new CA certificates. It
- * silently ignores the certificate if it already exists in the
- * store.
- */
-
-public void installCertificate(java.security.cert.X509Certificate cert) throws java.security.cert.CertificateException, java.io.IOException { throw new RuntimeException("Stub!"); }
-
-/**
- * This could be considered the implementation of {@code
- * TrustedCertificateKeyStoreSpi.engineDeleteEntry} but we
- * consider {@code TrustedCertificateKeyStoreSpi} to be read
- * only. Instead, this is used by the {@code KeyChainService} to
- * delete CA certificates.
- */
-
-public void deleteCertificateEntry(java.lang.String alias) throws java.security.cert.CertificateException, java.io.IOException { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api-removed.txt b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api-removed.txt
deleted file mode 100644
index d802177..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api-removed.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 2.0
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api-stubs.jar b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api-stubs.jar
deleted file mode 100644
index 8da2932..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api-stubs.jar
+++ /dev/null
Binary files differ
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api.txt b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api.txt
deleted file mode 100644
index 809495c..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-// Signature format: 2.0
-package android.net.ssl {
-
-  public class SSLEngines {
-    method @Nullable public static byte[] exportKeyingMaterial(@NonNull javax.net.ssl.SSLEngine, @NonNull String, @Nullable byte[], int) throws javax.net.ssl.SSLException;
-    method public static boolean isSupportedEngine(@NonNull javax.net.ssl.SSLEngine);
-    method public static void setUseSessionTickets(@NonNull javax.net.ssl.SSLEngine, boolean);
-  }
-
-  public class SSLSockets {
-    method @Nullable public static byte[] exportKeyingMaterial(@NonNull javax.net.ssl.SSLSocket, @NonNull String, @Nullable byte[], int) throws javax.net.ssl.SSLException;
-    method public static boolean isSupportedSocket(@NonNull javax.net.ssl.SSLSocket);
-    method public static void setUseSessionTickets(@NonNull javax.net.ssl.SSLSocket, boolean);
-  }
-
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api_stub_sources/android/net/ssl/SSLEngines.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api_stub_sources/android/net/ssl/SSLEngines.java
deleted file mode 100644
index cada3e2..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api_stub_sources/android/net/ssl/SSLEngines.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package android.net.ssl;
-
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLException;
-
-/**
- * Static utility methods for accessing additional functionality of supported instances of
- * {@link javax.net.ssl.SSLEngine SSLEngine}.  Engines from the platform TLS provider will be compatible with all
- * methods in this class.
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public class SSLEngines {
-
-private SSLEngines() { throw new RuntimeException("Stub!"); }
-
-/**
- * Returns whether the given engine can be used with the methods in this class.  In general,
- * only engines from the platform TLS provider are supported.
- */
-
-public static boolean isSupportedEngine(@android.annotation.NonNull javax.net.ssl.SSLEngine engine) { throw new RuntimeException("Stub!"); }
-
-/**
- * Enables or disables the use of session tickets.
- *
- * <p>This function must be called before the handshake is started or it will have no effect.
- *
- * @param engine the engine
- * @param useSessionTickets whether to enable or disable the use of session tickets
- * @throws java.lang.IllegalArgumentException if the given engine is not a platform engine
- */
-
-public static void setUseSessionTickets(@android.annotation.NonNull javax.net.ssl.SSLEngine engine, boolean useSessionTickets) { throw new RuntimeException("Stub!"); }
-
-/**
- * Exports a value derived from the TLS master secret as described in RFC 5705.
- *
- * A number of protocols leverage Transport Layer Security (TLS) to perform key
- * establishment but then use some of the keying material for their own purposes.
- *
- * This method allows an application to export keying material from a TLS connection.
- * The exported material will be the same on the client and server if they pass in
- * the same values for {@code label} and {@code context}.  See RFC 5705 for further
- * details.
- *
- * @param engine the engine to use for exporting keying material
- * @param label the label to use in calculating the exported value.  This must be
- * an ASCII-only string.
- * @param context the application-specific context value to use in calculating the
- * exported value.  This may be {@code null} to use no application context, which is
- * treated differently than an empty byte array.
- * @param length the number of bytes of keying material to return.
- * @return a value of the specified length, or {@code null} if the handshake has not yet
- * completed or the connection has been closed.
- * @throws javax.net.ssl.SSLException if the value could not be exported.
- */
-
-@android.annotation.Nullable
-public static byte[] exportKeyingMaterial(@android.annotation.NonNull javax.net.ssl.SSLEngine engine, @android.annotation.NonNull java.lang.String label, @android.annotation.Nullable byte[] context, int length) throws javax.net.ssl.SSLException { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api_stub_sources/android/net/ssl/SSLSockets.java b/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api_stub_sources/android/net/ssl/SSLSockets.java
deleted file mode 100644
index 146aeb5..0000000
--- a/mainline/conscrypt/sdk/sdk_library/public/conscrypt.module.public.api_stub_sources/android/net/ssl/SSLSockets.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package android.net.ssl;
-
-import javax.net.ssl.SSLSocket;
-import javax.net.ssl.SSLException;
-
-/**
- * Static utility methods for accessing additional functionality of supported instances of
- * {@link javax.net.ssl.SSLSocket SSLSocket}.  Sockets from the platform TLS provider will be compatible with all
- * methods in this class.
- */
-
-@SuppressWarnings({"unchecked", "deprecation", "all"})
-public class SSLSockets {
-
-private SSLSockets() { throw new RuntimeException("Stub!"); }
-
-/**
- * Returns whether the given socket can be used with the methods in this class.  In general,
- * only sockets from the platform TLS provider are supported.
- */
-
-public static boolean isSupportedSocket(@android.annotation.NonNull javax.net.ssl.SSLSocket socket) { throw new RuntimeException("Stub!"); }
-
-/**
- * Enables or disables the use of session tickets.
- *
- * <p>This function must be called before the handshake is started or it will have no effect.
- *
- * @param socket the socket
- * @param useSessionTickets whether to enable or disable the use of session tickets
- * @throws java.lang.IllegalArgumentException if the given socket is not a platform socket
- */
-
-public static void setUseSessionTickets(@android.annotation.NonNull javax.net.ssl.SSLSocket socket, boolean useSessionTickets) { throw new RuntimeException("Stub!"); }
-
-/**
- * Exports a value derived from the TLS master secret as described in RFC 5705.
- *
- * A number of protocols leverage Transport Layer Security (TLS) to perform key
- * establishment but then use some of the keying material for their own purposes.
- *
- * This method allows an application to export keying material from a TLS connection.
- * The exported material will be the same on the client and server if they pass in
- * the same values for {@code label} and {@code context}.  See RFC 5705 for further
- * details.
- *
- * @param socket the socket to use for exporting keying material
- * @param label the label to use in calculating the exported value.  This must be
- * an ASCII-only string.
- * @param context the application-specific context value to use in calculating the
- * exported value.  This may be {@code null} to use no application context, which is
- * treated differently than an empty byte array.
- * @param length the number of bytes of keying material to return.
- * @return a value of the specified length, or {@code null} if the handshake has not yet
- * completed or the connection has been closed.
- * @throws javax.net.ssl.SSLException if the value could not be exported.
- */
-
-@android.annotation.Nullable
-public static byte[] exportKeyingMaterial(@android.annotation.NonNull javax.net.ssl.SSLSocket socket, @android.annotation.NonNull java.lang.String label, @android.annotation.Nullable byte[] context, int length) throws javax.net.ssl.SSLException { throw new RuntimeException("Stub!"); }
-}
-
diff --git a/mainline/conscrypt/sdk/x86/lib/libconscrypt_jni.so b/mainline/conscrypt/sdk/x86/lib/libconscrypt_jni.so
deleted file mode 100755
index 8139073..0000000
--- a/mainline/conscrypt/sdk/x86/lib/libconscrypt_jni.so
+++ /dev/null
Binary files differ
diff --git a/mainline/conscrypt/sdk/x86_64/lib/libconscrypt_jni.so b/mainline/conscrypt/sdk/x86_64/lib/libconscrypt_jni.so
deleted file mode 100755
index 5b8f38d..0000000
--- a/mainline/conscrypt/sdk/x86_64/lib/libconscrypt_jni.so
+++ /dev/null
Binary files differ
diff --git a/mainline/update.py b/mainline/update.py
index 5829bab..23567f2 100755
--- a/mainline/update.py
+++ b/mainline/update.py
@@ -67,7 +67,6 @@
 # Conscrypt
 mainline_install_list.extend(
     InstallApexEntries('com.android.conscrypt', 'conscrypt/apex') +
-    InstallSdkEntries('conscrypt-module-sdk', 'conscrypt/sdk') +
     InstallSdkEntries('conscrypt-module-test-exports', 'conscrypt/test-exports') +
     InstallSdkEntries('conscrypt-module-host-exports', 'conscrypt/host-exports'))
 
