Fix release issues with 0.4.1

- In the 0.4.1 release, we forgot to update symbol names, resulting
  in linker errors
- Fix bad interaction between `#[derive]` and `#[deprecated]`
- Update `RELEASING.md`

Change-Id: I10cd7910e21f01db60ae3992f54e45f5e725d8af
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>,