diff --git a/Cargo.lock b/Cargo.lock
index 6f56ae5..95b79f6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -8,7 +8,7 @@ version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
 dependencies = [
- "crypto-common",
+ "crypto-common 0.1.6",
  "generic-array",
 ]
 
@@ -19,7 +19,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
 dependencies = [
  "cfg-if",
- "cipher",
+ "cipher 0.4.4",
+ "cpufeatures",
+]
+
+[[package]]
+name = "aes"
+version = "0.9.0-pre"
+source = "git+https://github.com/baloo/block-ciphers.git?branch=baloo/bump-cipher/0.5.0-pre.3#bbc6d549f5abff8ce5301abf1f97d9c494ada85c"
+dependencies = [
+ "cfg-if",
+ "cipher 0.5.0-pre.3",
  "cpufeatures",
 ]
 
@@ -30,9 +40,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1"
 dependencies = [
  "aead",
- "aes",
- "cipher",
- "ctr",
+ "aes 0.8.3",
+ "cipher 0.4.4",
+ "ctr 0.9.2",
  "ghash",
  "subtle",
 ]
@@ -57,9 +67,8 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
 
 [[package]]
 name = "bcrypt-pbkdf"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2"
+version = "0.11.0-pre.0"
+source = "git+https://github.com/RustCrypto/password-hashes.git#fe67dc8dfea507913f345acea032818f8f729800"
 dependencies = [
  "blowfish",
  "pbkdf2",
@@ -68,20 +77,20 @@ dependencies = [
 
 [[package]]
 name = "block-buffer"
-version = "0.10.4"
+version = "0.11.0-pre.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+checksum = "3ded684142010808eb980d9974ef794da2bcf97d13396143b1515e9f0fb4a10e"
 dependencies = [
- "generic-array",
+ "crypto-common 0.2.0-pre.5",
 ]
 
 [[package]]
 name = "block-padding"
-version = "0.3.3"
+version = "0.4.0-pre.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
+checksum = "e8ab21a8964437caf2e83a92a1221ce65e356a2a9b8b52d58bece04005fe114e"
 dependencies = [
- "generic-array",
+ "hybrid-array",
 ]
 
 [[package]]
@@ -91,7 +100,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7"
 dependencies = [
  "byteorder",
- "cipher",
+ "cipher 0.4.4",
 ]
 
 [[package]]
@@ -108,11 +117,10 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
 
 [[package]]
 name = "cbc"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
+version = "0.2.0-pre"
+source = "git+https://github.com/baloo/block-modes.git?branch=baloo/bump-prereleases#27f5bd1be6b7e1f3a4e1d1002a43833441b752bd"
 dependencies = [
- "cipher",
+ "cipher 0.5.0-pre.3",
 ]
 
 [[package]]
@@ -123,12 +131,11 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
 name = "chacha20"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
+version = "0.10.0-pre"
+source = "git+https://github.com/RustCrypto/stream-ciphers.git#943863351f0f7f538e5b2862f9dd43342a61a86d"
 dependencies = [
  "cfg-if",
- "cipher",
+ "cipher 0.5.0-pre.3",
  "cpufeatures",
 ]
 
@@ -138,15 +145,25 @@ version = "0.4.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
 dependencies = [
- "crypto-common",
- "inout",
+ "crypto-common 0.1.6",
+ "inout 0.1.3",
+]
+
+[[package]]
+name = "cipher"
+version = "0.5.0-pre.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4edc902a09138d9a0d02800f2c214f15295555e4d126bf4b312ea6f3bce7ae46"
+dependencies = [
+ "crypto-common 0.2.0-pre.5",
+ "inout 0.2.0-pre.4",
 ]
 
 [[package]]
 name = "const-oid"
-version = "0.9.5"
+version = "0.10.0-pre.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+checksum = "f7e3352a27098ba6b09546e5f13b15165e6a88b5c2723afecb3ea9576b27e3ea"
 
 [[package]]
 name = "cpufeatures"
@@ -159,11 +176,12 @@ dependencies = [
 
 [[package]]
 name = "crypto-bigint"
-version = "0.5.5"
+version = "0.6.0-pre.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
+checksum = "1943d7beadd9ce2b25f3bae73b9e9336fccc1edf38bdec1ed58d3aa183989e11"
 dependencies = [
- "generic-array",
+ "hybrid-array",
+ "num-traits",
  "rand_core",
  "subtle",
  "zeroize",
@@ -179,20 +197,38 @@ dependencies = [
  "typenum",
 ]
 
+[[package]]
+name = "crypto-common"
+version = "0.2.0-pre.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7aa2ec04f5120b830272a481e8d9d8ba4dda140d2cda59b0f1110d5eb93c38e"
+dependencies = [
+ "getrandom",
+ "hybrid-array",
+ "rand_core",
+]
+
 [[package]]
 name = "ctr"
 version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
 dependencies = [
- "cipher",
+ "cipher 0.4.4",
+]
+
+[[package]]
+name = "ctr"
+version = "0.10.0-pre"
+source = "git+https://github.com/baloo/block-modes.git?branch=baloo/bump-prereleases#27f5bd1be6b7e1f3a4e1d1002a43833441b752bd"
+dependencies = [
+ "cipher 0.5.0-pre.3",
 ]
 
 [[package]]
 name = "curve25519-dalek"
-version = "4.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c"
+version = "4.2.0-pre"
+source = "git+https://github.com/baloo/curve25519-dalek.git?branch=baloo/rust-crypto/digest-sha2-bumps#70f0a07c65d3cbc9b01583c19cc9cd6b4ae5e407"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -207,8 +243,7 @@ dependencies = [
 [[package]]
 name = "curve25519-dalek-derive"
 version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
+source = "git+https://github.com/baloo/curve25519-dalek.git?branch=baloo/rust-crypto/digest-sha2-bumps#70f0a07c65d3cbc9b01583c19cc9cd6b4ae5e407"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -217,9 +252,9 @@ dependencies = [
 
 [[package]]
 name = "der"
-version = "0.7.8"
+version = "0.8.0-pre.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
+checksum = "b489fd2221710c1dd46637d66b984161fb66134f81437a8489800306bcc2ecea"
 dependencies = [
  "const-oid",
  "zeroize",
@@ -227,36 +262,34 @@ dependencies = [
 
 [[package]]
 name = "des"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffdd80ce8ce993de27e9f063a444a4d53ce8e8db4c1f00cc03af5ad5a9867a1e"
+version = "0.9.0-pre"
+source = "git+https://github.com/baloo/block-ciphers.git?branch=baloo/bump-cipher/0.5.0-pre.3#bbc6d549f5abff8ce5301abf1f97d9c494ada85c"
 dependencies = [
- "cipher",
+ "cipher 0.5.0-pre.3",
 ]
 
 [[package]]
 name = "digest"
-version = "0.10.7"
+version = "0.11.0-pre.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+checksum = "065d93ead7c220b85d5b4be4795d8398eac4ff68b5ee63895de0a3c1fb6edf25"
 dependencies = [
  "block-buffer",
  "const-oid",
- "crypto-common",
+ "crypto-common 0.2.0-pre.5",
  "subtle",
 ]
 
 [[package]]
 name = "dsa"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48bc224a9084ad760195584ce5abb3c2c34a225fa312a128ad245a6b412b7689"
+version = "0.7.0-pre"
+source = "git+https://github.com/RustCrypto/signatures.git#3bbea81e1f0168484975c699bb707cdf117827a5"
 dependencies = [
  "digest",
  "num-bigint-dig",
  "num-traits",
  "pkcs8",
- "rfc6979",
+ "rfc6979 0.5.0-pre.3 (git+https://github.com/RustCrypto/signatures.git)",
  "sha2",
  "signature",
  "zeroize",
@@ -264,32 +297,30 @@ dependencies = [
 
 [[package]]
 name = "ecdsa"
-version = "0.16.9"
+version = "0.17.0-pre.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
+checksum = "d7e045ee5c360512162782f3d4cb07d2f4ce8c4ef9bf7c77ec16d1cf60b3d5ca"
 dependencies = [
  "der",
  "digest",
  "elliptic-curve",
- "rfc6979",
+ "rfc6979 0.5.0-pre.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "signature",
  "spki",
 ]
 
 [[package]]
 name = "ed25519"
-version = "2.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
+version = "2.3.0-pre"
+source = "git+https://github.com/baloo/signatures.git?branch=baloo/pkcs8-0.11.0-pre.0#f16ce1807c9407fe132c64691d7797112555092d"
 dependencies = [
  "signature",
 ]
 
 [[package]]
 name = "ed25519-dalek"
-version = "2.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871"
+version = "2.2.0-pre"
+source = "git+https://github.com/baloo/curve25519-dalek.git?branch=baloo/rust-crypto/digest-sha2-bumps#70f0a07c65d3cbc9b01583c19cc9cd6b4ae5e407"
 dependencies = [
  "curve25519-dalek",
  "ed25519",
@@ -299,16 +330,16 @@ dependencies = [
 
 [[package]]
 name = "elliptic-curve"
-version = "0.13.8"
+version = "0.14.0-pre.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
+checksum = "4a1775af172997a40c14854c3a9fde9e03e5772084b334b6a0bb18bf7f93ac16"
 dependencies = [
  "base16ct",
  "crypto-bigint",
  "digest",
  "ff",
- "generic-array",
  "group",
+ "hybrid-array",
  "pkcs8",
  "rand_core",
  "sec1",
@@ -340,7 +371,6 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
 dependencies = [
  "typenum",
  "version_check",
- "zeroize",
 ]
 
 [[package]]
@@ -383,23 +413,42 @@ checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46"
 
 [[package]]
 name = "hmac"
-version = "0.12.1"
+version = "0.13.0-pre.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+checksum = "ffd790a0795ee332ed3e8959e5b177beb70d7112eb7d345428ec17427897d5ce"
 dependencies = [
  "digest",
 ]
 
+[[package]]
+name = "hybrid-array"
+version = "0.2.0-rc.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcda354500b318c287a6b91c1cfbc42edd53d52d259a80783ceb5e3986fca2b2"
+dependencies = [
+ "typenum",
+ "zeroize",
+]
+
 [[package]]
 name = "inout"
 version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
 dependencies = [
- "block-padding",
  "generic-array",
 ]
 
+[[package]]
+name = "inout"
+version = "0.2.0-pre.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a2cc35b920cc3b344af824e64e508ffc2c819fc2368ed4d253244446194d2fe"
+dependencies = [
+ "block-padding",
+ "hybrid-array",
+]
+
 [[package]]
 name = "lazy_static"
 version = "1.4.0"
@@ -477,9 +526,8 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
 
 [[package]]
 name = "p256"
-version = "0.13.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
+version = "0.14.0-pre.0"
+source = "git+https://github.com/RustCrypto/elliptic-curves.git#3edabece47212ae9ad60a65a9bb9495b332d7d60"
 dependencies = [
  "ecdsa",
  "elliptic-curve",
@@ -489,9 +537,8 @@ dependencies = [
 
 [[package]]
 name = "p384"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
+version = "0.14.0-pre"
+source = "git+https://github.com/RustCrypto/elliptic-curves.git#3edabece47212ae9ad60a65a9bb9495b332d7d60"
 dependencies = [
  "ecdsa",
  "elliptic-curve",
@@ -501,13 +548,13 @@ dependencies = [
 
 [[package]]
 name = "p521"
-version = "0.13.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2"
+version = "0.14.0-pre"
+source = "git+https://github.com/RustCrypto/elliptic-curves.git#3edabece47212ae9ad60a65a9bb9495b332d7d60"
 dependencies = [
  "base16ct",
  "ecdsa",
  "elliptic-curve",
+ "primefield",
  "primeorder",
  "rand_core",
  "sha2",
@@ -515,27 +562,26 @@ dependencies = [
 
 [[package]]
 name = "pbkdf2"
-version = "0.12.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
+version = "0.13.0-pre.0"
+source = "git+https://github.com/RustCrypto/password-hashes.git#fe67dc8dfea507913f345acea032818f8f729800"
 dependencies = [
  "digest",
 ]
 
 [[package]]
 name = "pem-rfc7468"
-version = "0.7.0"
+version = "1.0.0-pre.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+checksum = "76a65e1c27d1680f8805b3f8c9949f08d6aa5d6cbd088c9896e64a53821dc27d"
 dependencies = [
  "base64ct",
 ]
 
 [[package]]
 name = "pkcs1"
-version = "0.7.5"
+version = "0.8.0-pre.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
+checksum = "4f6af6e88ac39402f67488e22faa9eb15cf065f520cf4a09419393691a6d0133"
 dependencies = [
  "der",
  "pkcs8",
@@ -544,9 +590,9 @@ dependencies = [
 
 [[package]]
 name = "pkcs8"
-version = "0.10.2"
+version = "0.11.0-pre.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+checksum = "935c09e0aecb0cb8f8907b57438b19a068cb74a25189b06724f061170b2465ff"
 dependencies = [
  "der",
  "spki",
@@ -587,11 +633,15 @@ version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
 
+[[package]]
+name = "primefield"
+version = "0.14.0-pre"
+source = "git+https://github.com/RustCrypto/elliptic-curves.git#3edabece47212ae9ad60a65a9bb9495b332d7d60"
+
 [[package]]
 name = "primeorder"
-version = "0.13.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
+version = "0.14.0-pre.0"
+source = "git+https://github.com/RustCrypto/elliptic-curves.git#3edabece47212ae9ad60a65a9bb9495b332d7d60"
 dependencies = [
  "elliptic-curve",
 ]
@@ -645,9 +695,18 @@ dependencies = [
 
 [[package]]
 name = "rfc6979"
-version = "0.4.0"
+version = "0.5.0-pre.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+checksum = "045972f2f66b9467a2f6834b7fd0f9b23ca214b4a8700b880c36edb726e96da6"
+dependencies = [
+ "hmac",
+ "subtle",
+]
+
+[[package]]
+name = "rfc6979"
+version = "0.5.0-pre.3"
+source = "git+https://github.com/RustCrypto/signatures.git#3bbea81e1f0168484975c699bb707cdf117827a5"
 dependencies = [
  "hmac",
  "subtle",
@@ -655,9 +714,9 @@ dependencies = [
 
 [[package]]
 name = "rsa"
-version = "0.9.6"
+version = "0.10.0-pre.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc"
+checksum = "43e0089f12e510517c97e1adc17d0f8374efbabdd021dfb7645d6619f85633e9"
 dependencies = [
  "const-oid",
  "digest",
@@ -685,13 +744,13 @@ dependencies = [
 
 [[package]]
 name = "sec1"
-version = "0.7.3"
+version = "0.8.0-pre.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+checksum = "02dc081ed777a3bab68583b52ffb8221677b6e90d483b320963a247e2c07f328"
 dependencies = [
  "base16ct",
  "der",
- "generic-array",
+ "hybrid-array",
  "pkcs8",
  "subtle",
  "zeroize",
@@ -725,9 +784,9 @@ dependencies = [
 
 [[package]]
 name = "sha1"
-version = "0.10.6"
+version = "0.11.0-pre.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+checksum = "3885de8cb916f223718c1ccd47a840b91f806333e76002dc5cb3862154b4fed3"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -736,9 +795,9 @@ dependencies = [
 
 [[package]]
 name = "sha2"
-version = "0.10.8"
+version = "0.11.0-pre.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+checksum = "8f33549bf3064b62478926aa89cbfc7c109aab66ae8f0d5d2ef839e482cc30d6"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -747,9 +806,9 @@ dependencies = [
 
 [[package]]
 name = "signature"
-version = "2.2.0"
+version = "2.3.0-pre.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+checksum = "1700c22ba9ce32c7b0a1495068a906c3552e7db386af7cf865162e0dea498523"
 dependencies = [
  "digest",
  "rand_core",
@@ -769,9 +828,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
 
 [[package]]
 name = "spki"
-version = "0.7.3"
+version = "0.8.0-pre.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
+checksum = "cb2b56670f5ef52934c97efad30bf42585de0c33ec3e2a886e38b80d2db67243"
 dependencies = [
  "base64ct",
  "der",
@@ -781,12 +840,12 @@ dependencies = [
 name = "ssh-cipher"
 version = "0.2.0"
 dependencies = [
- "aes",
+ "aes 0.9.0-pre",
  "aes-gcm",
  "cbc",
  "chacha20",
- "cipher",
- "ctr",
+ "cipher 0.5.0-pre.3",
+ "ctr 0.10.0-pre",
  "des",
  "poly1305",
  "ssh-encoding",
@@ -865,7 +924,7 @@ version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
 dependencies = [
- "crypto-common",
+ "crypto-common 0.1.6",
  "subtle",
 ]
 
diff --git a/Cargo.toml b/Cargo.toml
index e0ac07a..0a9451e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -8,3 +8,25 @@ members = [
 
 [profile.dev]
 opt-level = 2
+
+[patch.crates-io]
+p256          = { git = "https://github.com/RustCrypto/elliptic-curves.git" }
+p384          = { git = "https://github.com/RustCrypto/elliptic-curves.git" }
+p521          = { git = "https://github.com/RustCrypto/elliptic-curves.git" }
+
+ed25519       = { git = "https://github.com/baloo/signatures.git", branch = "baloo/pkcs8-0.11.0-pre.0" }
+ed25519-dalek = { git = "https://github.com/baloo/curve25519-dalek.git", branch = "baloo/rust-crypto/digest-sha2-bumps" }
+
+dsa           = { git = "https://github.com/RustCrypto/signatures.git" }
+
+bcrypt-pbkdf  = { git = "https://github.com/RustCrypto/password-hashes.git" }
+
+chacha20      = { git = "https://github.com/RustCrypto/stream-ciphers.git" }
+
+# https://github.com/RustCrypto/block-ciphers/pull/411
+aes           = { git = "https://github.com/baloo/block-ciphers.git", branch = "baloo/bump-cipher/0.5.0-pre.3" }
+des           = { git = "https://github.com/baloo/block-ciphers.git", branch = "baloo/bump-cipher/0.5.0-pre.3" }
+
+# https://github.com/RustCrypto/block-modes/pull/56
+cbc           = { git = "https://github.com/baloo/block-modes.git", branch = "baloo/bump-prereleases" }
+ctr           = { git = "https://github.com/baloo/block-modes.git", branch = "baloo/bump-prereleases" }
diff --git a/ssh-cipher/Cargo.toml b/ssh-cipher/Cargo.toml
index 20ce096..8fc7380 100644
--- a/ssh-cipher/Cargo.toml
+++ b/ssh-cipher/Cargo.toml
@@ -18,17 +18,17 @@ edition = "2021"
 rust-version = "1.60"
 
 [dependencies]
-cipher = "0.4"
+cipher = "=0.5.0-pre.3"
 encoding = { package = "ssh-encoding", version = "0.2", path = "../ssh-encoding" }
 
 # optional dependencies
-aes = { version = "0.8", optional = true, default-features = false }
+aes = { version = "=0.9.0-pre", optional = true, default-features = false }
 aes-gcm = { version = "0.10", optional = true, default-features = false, features = ["aes"] }
-cbc = { version = "0.1", optional = true }
-ctr = { version = "0.9", optional = true, default-features = false }
-chacha20 = { version = "0.9", optional = true, default-features = false }
-des = { version = "0.8", optional = true, default-features = false }
-poly1305 = { version = "0.8", optional = true, default-features = false }
+cbc = { version = "=0.2.0-pre", optional = true }
+ctr = { version = "=0.10.0-pre", optional = true, default-features = false }
+chacha20 = { version = "=0.10.0-pre", optional = true, default-features = false }
+des = { version = "=0.9.0-pre", optional = true, default-features = false }
+poly1305 = { version = "0.8.0", optional = true, default-features = false }
 subtle = { version = "2", optional = true, default-features = false }
 
 [features]
diff --git a/ssh-encoding/Cargo.toml b/ssh-encoding/Cargo.toml
index 0c1b6ac..a59df85 100644
--- a/ssh-encoding/Cargo.toml
+++ b/ssh-encoding/Cargo.toml
@@ -17,8 +17,8 @@ rust-version = "1.60"
 [dependencies]
 base64 = { package = "base64ct", version = "1.4", optional = true }
 bytes = { version = "1", optional = true, default-features = false }
-pem = { package = "pem-rfc7468", version = "0.7", optional = true }
-sha2 = { version = "0.10", optional = true, default-features = false }
+pem = { package = "pem-rfc7468", version = "=1.0.0-pre.0", optional = true }
+sha2 = { version = "=0.11.0-pre.3", optional = true, default-features = false }
 
 [dev-dependencies]
 hex-literal = "0.4.1"
diff --git a/ssh-encoding/tests/encode.rs b/ssh-encoding/tests/encode.rs
index d3994ff..4576251 100644
--- a/ssh-encoding/tests/encode.rs
+++ b/ssh-encoding/tests/encode.rs
@@ -43,7 +43,7 @@ fn encode_byte_slice() {
 #[test]
 fn encode_byte_vec() {
     let mut out = Vec::new();
-    Vec::from(b"example".as_ref()).encode(&mut out).unwrap();
+    Vec::from(b"example").encode(&mut out).unwrap();
     assert_eq!(out, hex!("000000076578616d706c65"));
 }
 
diff --git a/ssh-key/Cargo.toml b/ssh-key/Cargo.toml
index 993fbf1..393783d 100644
--- a/ssh-key/Cargo.toml
+++ b/ssh-key/Cargo.toml
@@ -19,24 +19,24 @@ rust-version = "1.65"
 [dependencies]
 cipher = { package = "ssh-cipher", version = "0.2", path = "../ssh-cipher" }
 encoding = { package = "ssh-encoding", version = "0.2", features = ["base64", "pem", "sha2"], path = "../ssh-encoding" }
-sha2 = { version = "0.10.8", default-features = false }
-signature = { version = "2", default-features = false }
+sha2 = { version = "=0.11.0-pre.3", default-features = false }
+signature = { version = "=2.3.0-pre.3", default-features = false }
 subtle = { version = "2", default-features = false }
 zeroize = { version = "1", default-features = false }
 
 # optional dependencies
-bcrypt-pbkdf = { version = "0.10", optional = true, default-features = false, features = ["alloc"] }
+bcrypt-pbkdf = { version = "=0.11.0-pre.0", optional = true, default-features = false, features = ["alloc"] }
 bigint = { package = "num-bigint-dig", version = "0.8", optional = true, default-features = false }
-dsa = { version = "0.6", optional = true, default-features = false }
-ed25519-dalek = { version = "2", optional = true, default-features = false }
-p256 = { version = "0.13", optional = true, default-features = false, features = ["ecdsa"] }
-p384 = { version = "0.13", optional = true, default-features = false, features = ["ecdsa"] }
-p521 = { version = "0.13.3", optional = true, default-features = false, features = ["ecdsa", "getrandom"] } # TODO(tarcieri): RFC6979
+dsa = { version = "=0.7.0-pre", optional = true, default-features = false }
+ed25519-dalek = { version = "=2.2.0-pre", optional = true, default-features = false }
+p256 = { version = "=0.14.0-pre.0", optional = true, default-features = false, features = ["ecdsa"] }
+p384 = { version = "=0.14.0-pre", optional = true, default-features = false, features = ["ecdsa"] }
+p521 = { version = "=0.14.0-pre", optional = true, default-features = false, features = ["ecdsa", "getrandom"] } # TODO(tarcieri): RFC6979
 rand_core = { version = "0.6.4", optional = true, default-features = false }
-rsa = { version = "0.9", optional = true, default-features = false, features = ["sha2"] }
-sec1 = { version = "0.7.3", optional = true, default-features = false, features = ["point"] }
+rsa = { version = "=0.10.0-pre.1", optional = true, default-features = false, features = ["sha2"] }
+sec1 = { version = "=0.8.0-pre.1", optional = true, default-features = false, features = ["point"] }
 serde = { version = "1", optional = true }
-sha1 = { version = "0.10", optional = true, default-features = false }
+sha1 = { version = "=0.11.0-pre.3", optional = true, default-features = false }
 
 [dev-dependencies]
 hex-literal = "0.4.1"
diff --git a/ssh-key/src/lib.rs b/ssh-key/src/lib.rs
index adf7d2a..5595896 100644
--- a/ssh-key/src/lib.rs
+++ b/ssh-key/src/lib.rs
@@ -54,11 +54,11 @@
 //! if let Some(ed25519_public_key) = public_key.key_data().ed25519() {
 //!     assert_eq!(
 //!         ed25519_public_key.as_ref(),
-//!         [
+//!         &[
 //!             0xb3, 0x3e, 0xae, 0xf3, 0x7e, 0xa2, 0xdf, 0x7c, 0xaa, 0x1, 0xd, 0xef, 0xde, 0xa3,
 //!             0x4e, 0x24, 0x1f, 0x65, 0xf1, 0xb5, 0x29, 0xa4, 0xf4, 0x3e, 0xd1, 0x43, 0x27, 0xf5,
 //!             0xc5, 0x4a, 0xab, 0x62
-//!         ].as_ref()
+//!         ]
 //!     );
 //! }
 //! # Ok(())
@@ -103,20 +103,20 @@
 //! if let Some(ed25519_keypair) = private_key.key_data().ed25519() {
 //!     assert_eq!(
 //!         ed25519_keypair.public.as_ref(),
-//!         [
+//!         &[
 //!             0xb3, 0x3e, 0xae, 0xf3, 0x7e, 0xa2, 0xdf, 0x7c, 0xaa, 0x1, 0xd, 0xef, 0xde, 0xa3,
 //!             0x4e, 0x24, 0x1f, 0x65, 0xf1, 0xb5, 0x29, 0xa4, 0xf4, 0x3e, 0xd1, 0x43, 0x27, 0xf5,
 //!             0xc5, 0x4a, 0xab, 0x62
-//!         ].as_ref()
+//!         ]
 //!     );
 //!
 //!     assert_eq!(
 //!         ed25519_keypair.private.as_ref(),
-//!         [
+//!         &[
 //!             0xb6, 0x6, 0xc2, 0x22, 0xd1, 0xc, 0x16, 0xda, 0xe1, 0x6c, 0x70, 0xa4, 0xd4, 0x51,
 //!             0x73, 0x47, 0x2e, 0xc6, 0x17, 0xe0, 0x5c, 0x65, 0x69, 0x20, 0xd2, 0x6e, 0x56, 0xc0,
 //!             0x8f, 0xb5, 0x91, 0xed
-//!         ].as_ref()
+//!         ]
 //!     )
 //! }
 //! # Ok(())
diff --git a/ssh-key/src/private/ed25519.rs b/ssh-key/src/private/ed25519.rs
index 29eb3d4..2de6fe1 100644
--- a/ssh-key/src/private/ed25519.rs
+++ b/ssh-key/src/private/ed25519.rs
@@ -237,7 +237,7 @@ impl Encode for Ed25519Keypair {
 
     fn encode(&self, writer: &mut impl Writer) -> encoding::Result<()> {
         self.public.encode(writer)?;
-        Zeroizing::new(self.to_bytes()).as_ref().encode(writer)?;
+        Zeroizing::new(self.to_bytes()).as_slice().encode(writer)?;
         Ok(())
     }
 }