diff --git a/CHANGELOG.md b/CHANGELOG.md
index 59446d5..af9a6f5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,13 @@
 
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
 
+## [0.4.2] - 2019-10-04
+
+### Fixed
+- Fixed issue where 0.4.1 was released without updating BoringSSL symbols.
+- Fixed issue caused by a bad interaction between `#[derive(Clone)]` and
+  `#[deprecated]`.
+
 ## [0.4.1] - 2019-09-27
 
 ### Added
diff --git a/Cargo.toml b/Cargo.toml
index 9a4f4ba..d5e4ec4 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,7 +6,7 @@
 
 [package]
 name = "mundane"
-version = "0.4.1"
+version = "0.4.2"
 authors = ["Joshua Liebow-Feeser <joshlf@google.com>"]
 description = "Cryptography which is easy to use and hard to misuse"
 readme = "README.md"
diff --git a/RELEASING.md b/RELEASING.md
index a3daada..2a4efde 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -10,11 +10,9 @@
 This document describes steps to follow when releasing a new version of Mundane.
 
 1. Update `Cargo.toml` with the new version number
-2. Update the `#![doc(html_root_url = ...)]` attribute in `src/lib.rs` to use
-   the new version number
-3. Update `boringssl/boringssl` by running `git submodule foreach git pull
+2. Update `boringssl/boringssl` by running `git submodule foreach git pull
    origin master`
-4. Update `boringssl/boringssl.rs`:
+3. Update `boringssl/boringssl.rs`:
   - Run `boringssl/bindgen.sh <major> <minor> <patch>`
   - Run `git diff` to verify that all of the version numbers have been updated
     correctly (namely, the `link` attribute at the top of the file is of the
@@ -24,11 +22,9 @@
     `link_name` attribute is attached to)
   - Run `boringssl/test_symbol_version_name.sh <major> <minor> <patch>` to
     verify that all of the version numbers have been updated correctly
-5. Run the `boringssl/test_symbol_conflict.sh` script, and ensure that it
-   passes.
-6. Make sure `./test.sh` passes.
-7. Update `CHANGELOG.md` - move any unreleased changes into a new section for
+4. Make sure `./test.sh` passes.
+5. Update `CHANGELOG.md` - move any unreleased changes into a new section for
    the new version.
-8. Dry run by running `cargo publish --dry-run --allow-dirty`.
-9. Commit the changes.
-10. Once the changes have been committed, publish by running `cargo publish`.
\ No newline at end of file
+6. Dry run by running `cargo publish --dry-run --allow-dirty`.
+7. Commit the changes.
+8. Once the changes have been committed, publish by running `cargo publish`.
\ No newline at end of file
diff --git a/boringssl/boringssl b/boringssl/boringssl
index 104306f..49de1fc 160000
--- a/boringssl/boringssl
+++ b/boringssl/boringssl
@@ -1 +1 @@
-Subproject commit 104306f587751f34852838915fb61ce5551c2332
+Subproject commit 49de1fc2910524c888866c7e2b0db1ba8af2a530
diff --git a/boringssl/boringssl.rs b/boringssl/boringssl.rs
index 30f904f..d8fd606 100644
--- a/boringssl/boringssl.rs
+++ b/boringssl/boringssl.rs
@@ -14,42 +14,53 @@
 #![allow(non_snake_case)]
 #![allow(non_upper_case_globals)]
 
-#[link(name = "crypto_0_4_0")]
+#[link(name = "crypto_0_4_2")]
 extern "C" {}
 
 /* automatically generated by rust-bindgen */
 
 #[repr(C)]
 #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
-pub struct __BindgenBitfieldUnit<Storage, Align> {
+pub struct __BindgenBitfieldUnit<Storage, Align>
+where
+    Storage: AsRef<[u8]> + AsMut<[u8]>,
+{
     storage: Storage,
     align: [Align; 0],
 }
-impl<Storage, Align> __BindgenBitfieldUnit<Storage, Align> {
-    #[inline]
-    pub const fn new(storage: Storage) -> Self {
-        Self { storage, align: [] }
-    }
-}
+
 impl<Storage, Align> __BindgenBitfieldUnit<Storage, Align>
 where
     Storage: AsRef<[u8]> + AsMut<[u8]>,
 {
     #[inline]
+    pub fn new(storage: Storage) -> Self {
+        Self { storage, align: [] }
+    }
+
+    #[inline]
     pub fn get_bit(&self, index: usize) -> bool {
         debug_assert!(index / 8 < self.storage.as_ref().len());
+
         let byte_index = index / 8;
         let byte = self.storage.as_ref()[byte_index];
+
         let bit_index = if cfg!(target_endian = "big") { 7 - (index % 8) } else { index % 8 };
+
         let mask = 1 << bit_index;
+
         byte & mask == mask
     }
+
     #[inline]
     pub fn set_bit(&mut self, index: usize, val: bool) {
         debug_assert!(index / 8 < self.storage.as_ref().len());
+
         let byte_index = index / 8;
         let byte = &mut self.storage.as_mut()[byte_index];
+
         let bit_index = if cfg!(target_endian = "big") { 7 - (index % 8) } else { index % 8 };
+
         let mask = 1 << bit_index;
         if val {
             *byte |= mask;
@@ -57,12 +68,15 @@
             *byte &= !mask;
         }
     }
+
     #[inline]
     pub fn get(&self, bit_offset: usize, bit_width: u8) -> u64 {
         debug_assert!(bit_width <= 64);
         debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
         debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len());
+
         let mut val = 0;
+
         for i in 0..(bit_width as usize) {
             if self.get_bit(i + bit_offset) {
                 let index =
@@ -70,13 +84,16 @@
                 val |= 1 << index;
             }
         }
+
         val
     }
+
     #[inline]
     pub fn set(&mut self, bit_offset: usize, bit_width: u8, val: u64) {
         debug_assert!(bit_width <= 64);
         debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
         debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len());
+
         for i in 0..(bit_width as usize) {
             let mask = 1 << i;
             let val_bit_is_set = val & mask == mask;
@@ -100,9 +117,44 @@
 pub const SHA256_DIGEST_LENGTH: u32 = 32;
 pub const SHA384_DIGEST_LENGTH: u32 = 48;
 pub const SHA512_DIGEST_LENGTH: u32 = 64;
-pub type __uint8_t = ::std::os::raw::c_uchar;
-pub type __uint32_t = ::std::os::raw::c_uint;
-pub type __uint64_t = ::std::os::raw::c_ulong;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct _opaque_pthread_rwlock_t {
+    pub __sig: ::std::os::raw::c_long,
+    pub __opaque: [::std::os::raw::c_char; 192usize],
+}
+#[test]
+fn bindgen_test_layout__opaque_pthread_rwlock_t() {
+    assert_eq!(
+        ::std::mem::size_of::<_opaque_pthread_rwlock_t>(),
+        200usize,
+        concat!("Size of: ", stringify!(_opaque_pthread_rwlock_t))
+    );
+    assert_eq!(
+        ::std::mem::align_of::<_opaque_pthread_rwlock_t>(),
+        8usize,
+        concat!("Alignment of ", stringify!(_opaque_pthread_rwlock_t))
+    );
+    assert_eq!(
+        unsafe { &(*(::std::ptr::null::<_opaque_pthread_rwlock_t>())).__sig as *const _ as usize },
+        0usize,
+        concat!("Offset of field: ", stringify!(_opaque_pthread_rwlock_t), "::", stringify!(__sig))
+    );
+    assert_eq!(
+        unsafe {
+            &(*(::std::ptr::null::<_opaque_pthread_rwlock_t>())).__opaque as *const _ as usize
+        },
+        8usize,
+        concat!(
+            "Offset of field: ",
+            stringify!(_opaque_pthread_rwlock_t),
+            "::",
+            stringify!(__opaque)
+        )
+    );
+}
+pub type __darwin_pthread_rwlock_t = _opaque_pthread_rwlock_t;
+pub type pthread_rwlock_t = __darwin_pthread_rwlock_t;
 pub type BIGNUM = bignum_st;
 pub type BN_GENCB = bn_gencb_st;
 pub type BN_MONT_CTX = bn_mont_ctx_st;
@@ -164,48 +216,18 @@
 pub type SHA256_CTX = sha256_state_st;
 pub type SHA512_CTX = sha512_state_st;
 pub type SHA_CTX = sha_state_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union crypto_mutex_st {
-    pub alignment: f64,
-    pub padding: [u8; 56usize],
-    _bindgen_union_align: [u64; 7usize],
-}
-#[test]
-fn bindgen_test_layout_crypto_mutex_st() {
-    assert_eq!(
-        ::std::mem::size_of::<crypto_mutex_st>(),
-        56usize,
-        concat!("Size of: ", stringify!(crypto_mutex_st))
-    );
-    assert_eq!(
-        ::std::mem::align_of::<crypto_mutex_st>(),
-        8usize,
-        concat!("Alignment of ", stringify!(crypto_mutex_st))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<crypto_mutex_st>())).alignment as *const _ as usize },
-        0usize,
-        concat!("Offset of field: ", stringify!(crypto_mutex_st), "::", stringify!(alignment))
-    );
-    assert_eq!(
-        unsafe { &(*(::std::ptr::null::<crypto_mutex_st>())).padding as *const _ as usize },
-        0usize,
-        concat!("Offset of field: ", stringify!(crypto_mutex_st), "::", stringify!(padding))
-    );
-}
-pub type CRYPTO_MUTEX = crypto_mutex_st;
+pub type CRYPTO_MUTEX = pthread_rwlock_t;
 pub type CRYPTO_refcount_t = u32;
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_BN_init"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_BN_init"]
     pub fn BN_init(bn: *mut BIGNUM);
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_BN_free"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_BN_free"]
     pub fn BN_free(bn: *mut BIGNUM);
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_BN_set_u64"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_BN_set_u64"]
     pub fn BN_set_u64(bn: *mut BIGNUM, value: u64) -> ::std::os::raw::c_int;
 }
 #[repr(C)]
@@ -351,11 +373,11 @@
     );
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_CBS_init"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_CBS_init"]
     pub fn CBS_init(cbs: *mut CBS, data: *const u8, len: usize);
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_CBS_len"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_CBS_len"]
     pub fn CBS_len(cbs: *const CBS) -> usize;
 }
 #[repr(C)]
@@ -413,7 +435,7 @@
     pub offset: usize,
     pub pending_len_len: u8,
     pub pending_is_asn1: ::std::os::raw::c_char,
-    pub is_top_level: ::std::os::raw::c_char,
+    pub is_child: ::std::os::raw::c_char,
 }
 #[test]
 fn bindgen_test_layout_cbb_st() {
@@ -449,33 +471,33 @@
         concat!("Offset of field: ", stringify!(cbb_st), "::", stringify!(pending_is_asn1))
     );
     assert_eq!(
-        unsafe { &(*(::std::ptr::null::<cbb_st>())).is_top_level as *const _ as usize },
+        unsafe { &(*(::std::ptr::null::<cbb_st>())).is_child as *const _ as usize },
         26usize,
-        concat!("Offset of field: ", stringify!(cbb_st), "::", stringify!(is_top_level))
+        concat!("Offset of field: ", stringify!(cbb_st), "::", stringify!(is_child))
     );
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_CBB_init"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_CBB_init"]
     pub fn CBB_init(cbb: *mut CBB, initial_capacity: usize) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_CBB_cleanup"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_CBB_cleanup"]
     pub fn CBB_cleanup(cbb: *mut CBB);
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_CBB_data"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_CBB_data"]
     pub fn CBB_data(cbb: *const CBB) -> *const u8;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_CBB_len"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_CBB_len"]
     pub fn CBB_len(cbb: *const CBB) -> usize;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_ED25519_keypair"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_ED25519_keypair"]
     pub fn ED25519_keypair(out_public_key: *mut u8, out_private_key: *mut u8);
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_ED25519_sign"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_ED25519_sign"]
     pub fn ED25519_sign(
         out_sig: *mut u8,
         message: *const u8,
@@ -484,7 +506,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_ED25519_verify"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_ED25519_verify"]
     pub fn ED25519_verify(
         message: *const u8,
         message_len: usize,
@@ -493,7 +515,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_ED25519_keypair_from_seed"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_ED25519_keypair_from_seed"]
     pub fn ED25519_keypair_from_seed(
         out_public_key: *mut u8,
         out_private_key: *mut u8,
@@ -501,15 +523,15 @@
     );
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_GROUP_new_by_curve_name"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_GROUP_new_by_curve_name"]
     pub fn EC_GROUP_new_by_curve_name(nid: ::std::os::raw::c_int) -> *mut EC_GROUP;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_GROUP_get_curve_name"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_GROUP_get_curve_name"]
     pub fn EC_GROUP_get_curve_name(group: *const EC_GROUP) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_curve_nid2nist"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_curve_nid2nist"]
     pub fn EC_curve_nid2nist(nid: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char;
 }
 #[repr(C)]
@@ -585,35 +607,35 @@
     );
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_KEY_new"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_KEY_new"]
     pub fn EC_KEY_new() -> *mut EC_KEY;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_KEY_free"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_KEY_free"]
     pub fn EC_KEY_free(key: *mut EC_KEY);
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_KEY_up_ref"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_KEY_up_ref"]
     pub fn EC_KEY_up_ref(key: *mut EC_KEY) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_KEY_get0_group"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_KEY_get0_group"]
     pub fn EC_KEY_get0_group(key: *const EC_KEY) -> *const EC_GROUP;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_KEY_set_group"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_KEY_set_group"]
     pub fn EC_KEY_set_group(key: *mut EC_KEY, group: *const EC_GROUP) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_KEY_generate_key"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_KEY_generate_key"]
     pub fn EC_KEY_generate_key(key: *mut EC_KEY) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_KEY_parse_private_key"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_KEY_parse_private_key"]
     pub fn EC_KEY_parse_private_key(cbs: *mut CBS, group: *const EC_GROUP) -> *mut EC_KEY;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EC_KEY_marshal_private_key"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EC_KEY_marshal_private_key"]
     pub fn EC_KEY_marshal_private_key(
         cbb: *mut CBB,
         key: *const EC_KEY,
@@ -621,7 +643,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_ECDSA_sign"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_ECDSA_sign"]
     pub fn ECDSA_sign(
         type_: ::std::os::raw::c_int,
         digest: *const u8,
@@ -632,7 +654,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_ECDSA_verify"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_ECDSA_verify"]
     pub fn ECDSA_verify(
         type_: ::std::os::raw::c_int,
         digest: *const u8,
@@ -643,7 +665,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_ECDSA_size"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_ECDSA_size"]
     pub fn ECDSA_size(key: *const EC_KEY) -> usize;
 }
 pub type ERR_print_errors_callback_t = ::std::option::Option<
@@ -654,26 +676,26 @@
     ) -> ::std::os::raw::c_int,
 >;
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_ERR_print_errors_cb"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_ERR_print_errors_cb"]
     pub fn ERR_print_errors_cb(
         callback: ERR_print_errors_callback_t,
         ctx: *mut ::std::os::raw::c_void,
     );
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_sha1"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_sha1"]
     pub fn EVP_sha1() -> *const EVP_MD;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_sha256"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_sha256"]
     pub fn EVP_sha256() -> *const EVP_MD;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_sha384"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_sha384"]
     pub fn EVP_sha384() -> *const EVP_MD;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_sha512"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_sha512"]
     pub fn EVP_sha512() -> *const EVP_MD;
 }
 #[repr(C)]
@@ -723,43 +745,43 @@
     );
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_PKEY_new"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_PKEY_new"]
     pub fn EVP_PKEY_new() -> *mut EVP_PKEY;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_PKEY_free"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_PKEY_free"]
     pub fn EVP_PKEY_free(pkey: *mut EVP_PKEY);
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_PKEY_up_ref"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_PKEY_up_ref"]
     pub fn EVP_PKEY_up_ref(pkey: *mut EVP_PKEY) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_PKEY_assign_RSA"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_PKEY_assign_RSA"]
     pub fn EVP_PKEY_assign_RSA(pkey: *mut EVP_PKEY, key: *mut RSA) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_PKEY_get1_RSA"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_PKEY_get1_RSA"]
     pub fn EVP_PKEY_get1_RSA(pkey: *const EVP_PKEY) -> *mut RSA;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_PKEY_assign_EC_KEY"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_PKEY_assign_EC_KEY"]
     pub fn EVP_PKEY_assign_EC_KEY(pkey: *mut EVP_PKEY, key: *mut EC_KEY) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_PKEY_get1_EC_KEY"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_PKEY_get1_EC_KEY"]
     pub fn EVP_PKEY_get1_EC_KEY(pkey: *const EVP_PKEY) -> *mut EC_KEY;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_parse_public_key"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_parse_public_key"]
     pub fn EVP_parse_public_key(cbs: *mut CBS) -> *mut EVP_PKEY;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_marshal_public_key"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_marshal_public_key"]
     pub fn EVP_marshal_public_key(cbb: *mut CBB, key: *const EVP_PKEY) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_PKCS5_PBKDF2_HMAC"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_PKCS5_PBKDF2_HMAC"]
     pub fn PKCS5_PBKDF2_HMAC(
         password: *const ::std::os::raw::c_char,
         password_len: usize,
@@ -772,7 +794,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_EVP_PBE_scrypt"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_EVP_PBE_scrypt"]
     pub fn EVP_PBE_scrypt(
         password: *const ::std::os::raw::c_char,
         password_len: usize,
@@ -876,15 +898,15 @@
     );
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_HMAC_CTX_init"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_HMAC_CTX_init"]
     pub fn HMAC_CTX_init(ctx: *mut HMAC_CTX);
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_HMAC_CTX_cleanup"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_HMAC_CTX_cleanup"]
     pub fn HMAC_CTX_cleanup(ctx: *mut HMAC_CTX);
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_HMAC_Init_ex"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_HMAC_Init_ex"]
     pub fn HMAC_Init_ex(
         ctx: *mut HMAC_CTX,
         key: *const ::std::os::raw::c_void,
@@ -894,7 +916,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_HMAC_Update"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_HMAC_Update"]
     pub fn HMAC_Update(
         ctx: *mut HMAC_CTX,
         data: *const u8,
@@ -902,7 +924,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_HMAC_Final"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_HMAC_Final"]
     pub fn HMAC_Final(
         ctx: *mut HMAC_CTX,
         out: *mut u8,
@@ -910,11 +932,11 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_HMAC_size"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_HMAC_size"]
     pub fn HMAC_size(ctx: *const HMAC_CTX) -> usize;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_HMAC_CTX_copy"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_HMAC_CTX_copy"]
     pub fn HMAC_CTX_copy(dest: *mut HMAC_CTX, src: *const HMAC_CTX) -> ::std::os::raw::c_int;
 }
 #[repr(C)]
@@ -959,7 +981,7 @@
     );
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_CRYPTO_memcmp"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_CRYPTO_memcmp"]
     pub fn CRYPTO_memcmp(
         a: *const ::std::os::raw::c_void,
         b: *const ::std::os::raw::c_void,
@@ -967,27 +989,27 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RAND_bytes"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RAND_bytes"]
     pub fn RAND_bytes(buf: *mut u8, len: usize) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_new"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_new"]
     pub fn RSA_new() -> *mut RSA;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_free"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_free"]
     pub fn RSA_free(rsa: *mut RSA);
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_up_ref"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_up_ref"]
     pub fn RSA_up_ref(rsa: *mut RSA) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_bits"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_bits"]
     pub fn RSA_bits(rsa: *const RSA) -> ::std::os::raw::c_uint;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_generate_key_ex"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_generate_key_ex"]
     pub fn RSA_generate_key_ex(
         rsa: *mut RSA,
         bits: ::std::os::raw::c_int,
@@ -996,7 +1018,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_sign"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_sign"]
     pub fn RSA_sign(
         hash_nid: ::std::os::raw::c_int,
         in_: *const u8,
@@ -1007,7 +1029,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_sign_pss_mgf1"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_sign_pss_mgf1"]
     pub fn RSA_sign_pss_mgf1(
         rsa: *mut RSA,
         out_len: *mut usize,
@@ -1021,7 +1043,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_verify"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_verify"]
     pub fn RSA_verify(
         hash_nid: ::std::os::raw::c_int,
         msg: *const u8,
@@ -1032,7 +1054,7 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_verify_pss_mgf1"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_verify_pss_mgf1"]
     pub fn RSA_verify_pss_mgf1(
         rsa: *mut RSA,
         msg: *const u8,
@@ -1045,15 +1067,15 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_size"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_size"]
     pub fn RSA_size(rsa: *const RSA) -> ::std::os::raw::c_uint;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_parse_private_key"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_parse_private_key"]
     pub fn RSA_parse_private_key(cbs: *mut CBS) -> *mut RSA;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_RSA_marshal_private_key"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_RSA_marshal_private_key"]
     pub fn RSA_marshal_private_key(cbb: *mut CBB, rsa: *const RSA) -> ::std::os::raw::c_int;
 }
 #[repr(C)]
@@ -1206,7 +1228,7 @@
 }
 #[test]
 fn bindgen_test_layout_rsa_st() {
-    assert_eq!(::std::mem::size_of::<rsa_st>(), 232usize, concat!("Size of: ", stringify!(rsa_st)));
+    assert_eq!(::std::mem::size_of::<rsa_st>(), 376usize, concat!("Size of: ", stringify!(rsa_st)));
     assert_eq!(
         ::std::mem::align_of::<rsa_st>(),
         8usize,
@@ -1279,37 +1301,37 @@
     );
     assert_eq!(
         unsafe { &(*(::std::ptr::null::<rsa_st>())).mont_n as *const _ as usize },
-        144usize,
+        288usize,
         concat!("Offset of field: ", stringify!(rsa_st), "::", stringify!(mont_n))
     );
     assert_eq!(
         unsafe { &(*(::std::ptr::null::<rsa_st>())).mont_p as *const _ as usize },
-        152usize,
+        296usize,
         concat!("Offset of field: ", stringify!(rsa_st), "::", stringify!(mont_p))
     );
     assert_eq!(
         unsafe { &(*(::std::ptr::null::<rsa_st>())).mont_q as *const _ as usize },
-        160usize,
+        304usize,
         concat!("Offset of field: ", stringify!(rsa_st), "::", stringify!(mont_q))
     );
     assert_eq!(
         unsafe { &(*(::std::ptr::null::<rsa_st>())).d_fixed as *const _ as usize },
-        168usize,
+        312usize,
         concat!("Offset of field: ", stringify!(rsa_st), "::", stringify!(d_fixed))
     );
     assert_eq!(
         unsafe { &(*(::std::ptr::null::<rsa_st>())).dmp1_fixed as *const _ as usize },
-        176usize,
+        320usize,
         concat!("Offset of field: ", stringify!(rsa_st), "::", stringify!(dmp1_fixed))
     );
     assert_eq!(
         unsafe { &(*(::std::ptr::null::<rsa_st>())).dmq1_fixed as *const _ as usize },
-        184usize,
+        328usize,
         concat!("Offset of field: ", stringify!(rsa_st), "::", stringify!(dmq1_fixed))
     );
     assert_eq!(
         unsafe { &(*(::std::ptr::null::<rsa_st>())).inv_small_mod_large_mont as *const _ as usize },
-        192usize,
+        336usize,
         concat!(
             "Offset of field: ",
             stringify!(rsa_st),
@@ -1319,17 +1341,17 @@
     );
     assert_eq!(
         unsafe { &(*(::std::ptr::null::<rsa_st>())).num_blindings as *const _ as usize },
-        200usize,
+        344usize,
         concat!("Offset of field: ", stringify!(rsa_st), "::", stringify!(num_blindings))
     );
     assert_eq!(
         unsafe { &(*(::std::ptr::null::<rsa_st>())).blindings as *const _ as usize },
-        208usize,
+        352usize,
         concat!("Offset of field: ", stringify!(rsa_st), "::", stringify!(blindings))
     );
     assert_eq!(
         unsafe { &(*(::std::ptr::null::<rsa_st>())).blindings_inuse as *const _ as usize },
-        216usize,
+        360usize,
         concat!("Offset of field: ", stringify!(rsa_st), "::", stringify!(blindings_inuse))
     );
 }
@@ -1359,11 +1381,11 @@
     }
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA1_Init"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA1_Init"]
     pub fn SHA1_Init(sha: *mut SHA_CTX) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA1_Update"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA1_Update"]
     pub fn SHA1_Update(
         sha: *mut SHA_CTX,
         data: *const ::std::os::raw::c_void,
@@ -1371,8 +1393,8 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA1_Final"]
-    pub fn SHA1_Final(md: *mut u8, sha: *mut SHA_CTX) -> ::std::os::raw::c_int;
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA1_Final"]
+    pub fn SHA1_Final(out: *mut u8, sha: *mut SHA_CTX) -> ::std::os::raw::c_int;
 }
 #[repr(C)]
 #[derive(Copy, Clone)]
@@ -1529,11 +1551,11 @@
     );
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA256_Init"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA256_Init"]
     pub fn SHA256_Init(sha: *mut SHA256_CTX) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA256_Update"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA256_Update"]
     pub fn SHA256_Update(
         sha: *mut SHA256_CTX,
         data: *const ::std::os::raw::c_void,
@@ -1541,8 +1563,8 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA256_Final"]
-    pub fn SHA256_Final(md: *mut u8, sha: *mut SHA256_CTX) -> ::std::os::raw::c_int;
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA256_Final"]
+    pub fn SHA256_Final(out: *mut u8, sha: *mut SHA256_CTX) -> ::std::os::raw::c_int;
 }
 #[repr(C)]
 #[derive(Copy, Clone)]
@@ -1598,11 +1620,11 @@
     );
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA384_Init"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA384_Init"]
     pub fn SHA384_Init(sha: *mut SHA512_CTX) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA384_Update"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA384_Update"]
     pub fn SHA384_Update(
         sha: *mut SHA512_CTX,
         data: *const ::std::os::raw::c_void,
@@ -1610,15 +1632,15 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA384_Final"]
-    pub fn SHA384_Final(md: *mut u8, sha: *mut SHA512_CTX) -> ::std::os::raw::c_int;
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA384_Final"]
+    pub fn SHA384_Final(out: *mut u8, sha: *mut SHA512_CTX) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA512_Init"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA512_Init"]
     pub fn SHA512_Init(sha: *mut SHA512_CTX) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA512_Update"]
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA512_Update"]
     pub fn SHA512_Update(
         sha: *mut SHA512_CTX,
         data: *const ::std::os::raw::c_void,
@@ -1626,8 +1648,8 @@
     ) -> ::std::os::raw::c_int;
 }
 extern "C" {
-    #[link_name = "__RUST_MUNDANE_0_4_0_SHA512_Final"]
-    pub fn SHA512_Final(md: *mut u8, sha: *mut SHA512_CTX) -> ::std::os::raw::c_int;
+    #[link_name = "__RUST_MUNDANE_0_4_2_SHA512_Final"]
+    pub fn SHA512_Final(out: *mut u8, sha: *mut SHA512_CTX) -> ::std::os::raw::c_int;
 }
 #[repr(C)]
 #[derive(Copy, Clone)]
diff --git a/src/hash.rs b/src/hash.rs
index 664821d..02c8a31 100644
--- a/src/hash.rs
+++ b/src/hash.rs
@@ -104,6 +104,7 @@
 // NOTE: InsecureSha1 is not publicly available; it is only used in HMAC-SHA1.
 #[cfg(feature = "insecure")]
 #[deprecated(note = "SHA-1 is considered insecure")]
+#[allow(deprecated)] // Work-around until Rust issue #56195 is resolved
 #[derive(Clone, Default)]
 pub(crate) struct InsecureSha1 {
     ctx: CStackWrapper<boringssl::SHA_CTX>,
