From 4ffc0e24ddb42fe916c1cc5dc566365ae4cf69cf Mon Sep 17 00:00:00 2001
From: Wiktor Kwapisiewicz <wiktor@metacode.biz>
Date: Fri, 7 Mar 2025 11:58:05 +0100
Subject: [PATCH] fix(deps): upgrade rpgp

Signed-off-by: Wiktor Kwapisiewicz <wiktor@metacode.biz>
---
 Cargo.lock            | 713 ++++++++++++++++++++++++++----------------
 Cargo.toml            |   1 +
 nethsm/Cargo.toml     |   3 +-
 nethsm/src/lib.rs     |   8 +-
 nethsm/src/openpgp.rs | 375 +++++++++++-----------
 5 files changed, 631 insertions(+), 469 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index d8b36fb5..5e417e6a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -23,6 +23,7 @@ version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
 dependencies = [
+ "bytes",
  "crypto-common 0.1.6",
  "generic-array",
 ]
@@ -126,19 +127,20 @@ dependencies = [
 
 [[package]]
 name = "anstyle-wincon"
-version = "3.0.6"
+version = "3.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125"
+checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e"
 dependencies = [
  "anstyle",
+ "once_cell",
  "windows-sys 0.59.0",
 ]
 
 [[package]]
 name = "anyhow"
-version = "1.0.94"
+version = "1.0.97"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7"
+checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f"
 
 [[package]]
 name = "argon2"
@@ -167,9 +169,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
 
 [[package]]
 name = "aws-lc-rs"
-version = "1.12.4"
+version = "1.12.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cd755adf9707cf671e31d944a189be3deaaeee11c8bc1d669bb8022ac90fbd0"
+checksum = "5e4e8200b9a4a5801a769d50eeabc05670fec7e959a8cb7a63a93e4e519942ae"
 dependencies = [
  "aws-lc-sys",
  "paste",
@@ -253,16 +255,31 @@ dependencies = [
 ]
 
 [[package]]
-name = "bitfield"
-version = "0.17.0"
+name = "bitfields"
+version = "0.12.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f798d2d157e547aa99aab0967df39edd0b70307312b6f8bd2848e6abe40896e0"
+checksum = "a1d84268bbf9b487d31fe4b849edbefcd3911422d7a07de855a2da1f70ab3d1c"
+dependencies = [
+ "bitfields-impl",
+]
+
+[[package]]
+name = "bitfields-impl"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07c93edde7bb4416c35c85048e34f78999dcb47d199bde3b1d79286156f3e2fb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "thiserror 2.0.12",
+]
 
 [[package]]
 name = "bitflags"
-version = "2.6.0"
+version = "2.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
+checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
 
 [[package]]
 name = "blake2"
@@ -284,9 +301,9 @@ dependencies = [
 
 [[package]]
 name = "block-buffer"
-version = "0.11.0-rc.3"
+version = "0.11.0-rc.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fd016a0ddc7cb13661bf5576073ce07330a693f8608a1320b4e20561cc12cdc"
+checksum = "a229bfd78e4827c91b9b95784f69492c1b77c1ab75a45a8a037b139215086f94"
 dependencies = [
  "hybrid-array",
 ]
@@ -310,16 +327,6 @@ dependencies = [
  "cipher",
 ]
 
-[[package]]
-name = "bstr"
-version = "1.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8"
-dependencies = [
- "memchr",
- "serde",
-]
-
 [[package]]
 name = "buffer-redux"
 version = "1.0.2"
@@ -331,9 +338,9 @@ dependencies = [
 
 [[package]]
 name = "bumpalo"
-version = "3.16.0"
+version = "3.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
 
 [[package]]
 name = "byteorder"
@@ -343,9 +350,39 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
 
 [[package]]
 name = "bytes"
-version = "1.9.0"
+version = "1.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
+checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
+
+[[package]]
+name = "bytes-utils"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35"
+dependencies = [
+ "bytes",
+ "either",
+]
+
+[[package]]
+name = "bzip2"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47"
+dependencies = [
+ "bzip2-sys",
+ "libbz2-rs-sys",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.13+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
 
 [[package]]
 name = "camellia"
@@ -399,9 +436,9 @@ dependencies = [
 
 [[package]]
 name = "cc"
-version = "1.2.4"
+version = "1.2.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf"
+checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c"
 dependencies = [
  "jobserver",
  "libc",
@@ -440,16 +477,16 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
 
 [[package]]
 name = "chrono"
-version = "0.4.39"
+version = "0.4.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
+checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
 dependencies = [
  "android-tzdata",
  "iana-time-zone",
  "js-sys",
  "num-traits",
  "wasm-bindgen",
- "windows-targets 0.52.6",
+ "windows-link",
 ]
 
 [[package]]
@@ -475,9 +512,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "4.5.23"
+version = "4.5.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84"
+checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -485,9 +522,9 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.5.23"
+version = "4.5.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838"
+checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863"
 dependencies = [
  "anstream",
  "anstyle",
@@ -497,9 +534,9 @@ dependencies = [
 
 [[package]]
 name = "clap_derive"
-version = "4.5.18"
+version = "4.5.28"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab"
+checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed"
 dependencies = [
  "heck",
  "proc-macro2",
@@ -559,9 +596,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
 
 [[package]]
 name = "const-oid"
-version = "0.10.0-rc.3"
+version = "0.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68ff6be19477a1bd5441f382916a89bc2a0b2c35db6d41e0f6e8538bf6d6463f"
+checksum = "1cb3c4a0d3776f7535c32793be81d6d5fec0d48ac70955d9834e643aa249a52f"
 
 [[package]]
 name = "core-foundation"
@@ -591,9 +628,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.16"
+version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
 dependencies = [
  "libc",
 ]
@@ -615,9 +652,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-deque"
-version = "0.8.5"
+version = "0.8.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
 dependencies = [
  "crossbeam-epoch",
  "crossbeam-utils",
@@ -634,9 +671,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.20"
+version = "0.8.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
 
 [[package]]
 name = "crypto-bigint"
@@ -645,7 +682,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
 dependencies = [
  "generic-array",
- "rand_core",
+ "rand_core 0.6.4",
  "subtle",
  "zeroize",
 ]
@@ -657,19 +694,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
 dependencies = [
  "generic-array",
- "rand_core",
+ "rand_core 0.6.4",
  "typenum",
 ]
 
 [[package]]
 name = "crypto-common"
-version = "0.2.0-rc.1"
+version = "0.2.0-rc.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0b8ce8218c97789f16356e7896b3714f26c2ee1079b79c0b7ae7064bb9089fa"
+checksum = "170d71b5b14dec99db7739f6fc7d6ec2db80b78c3acb77db48392ccc3d8a9ea0"
 dependencies = [
- "getrandom 0.2.15",
  "hybrid-array",
- "rand_core",
 ]
 
 [[package]]
@@ -800,7 +835,16 @@ version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
 dependencies = [
- "derive_more-impl",
+ "derive_more-impl 1.0.0",
+]
+
+[[package]]
+name = "derive_more"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678"
+dependencies = [
+ "derive_more-impl 2.0.1",
 ]
 
 [[package]]
@@ -815,6 +859,18 @@ dependencies = [
  "unicode-xid",
 ]
 
+[[package]]
+name = "derive_more-impl"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "unicode-xid",
+]
+
 [[package]]
 name = "des"
 version = "0.8.1"
@@ -838,13 +894,13 @@ dependencies = [
 
 [[package]]
 name = "digest"
-version = "0.11.0-pre.9"
+version = "0.11.0-pre.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf2e3d6615d99707295a9673e889bf363a04b2a466bd320c65a72536f7577379"
+checksum = "6c478574b20020306f98d61c8ca3322d762e1ff08117422ac6106438605ea516"
 dependencies = [
- "block-buffer 0.11.0-rc.3",
- "const-oid 0.10.0-rc.3",
- "crypto-common 0.2.0-rc.1",
+ "block-buffer 0.11.0-rc.4",
+ "const-oid 0.10.0",
+ "crypto-common 0.2.0-rc.2",
 ]
 
 [[package]]
@@ -967,7 +1023,7 @@ checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871"
 dependencies = [
  "curve25519-dalek",
  "ed25519",
- "rand_core",
+ "rand_core 0.6.4",
  "serde",
  "sha2 0.10.8",
  "subtle",
@@ -976,9 +1032,9 @@ dependencies = [
 
 [[package]]
 name = "either"
-version = "1.13.0"
+version = "1.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
 
 [[package]]
 name = "elliptic-curve"
@@ -995,7 +1051,7 @@ dependencies = [
  "hkdf",
  "pem-rfc7468",
  "pkcs8",
- "rand_core",
+ "rand_core 0.6.4",
  "sec1",
  "subtle",
  "zeroize",
@@ -1021,9 +1077,9 @@ dependencies = [
 
 [[package]]
 name = "equivalent"
-version = "1.0.1"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
 
 [[package]]
 name = "errno"
@@ -1065,7 +1121,7 @@ version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
 dependencies = [
- "rand_core",
+ "rand_core 0.6.4",
  "subtle",
 ]
 
@@ -1077,9 +1133,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
 
 [[package]]
 name = "flate2"
-version = "1.0.35"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c"
+checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc"
 dependencies = [
  "crc32fast",
  "miniz_oxide",
@@ -1197,10 +1253,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
 dependencies = [
  "cfg-if",
- "js-sys",
  "libc",
  "wasi 0.11.0+wasi-snapshot-preview1",
- "wasm-bindgen",
 ]
 
 [[package]]
@@ -1233,9 +1287,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
 
 [[package]]
 name = "glob"
-version = "0.3.1"
+version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
 
 [[package]]
 name = "group"
@@ -1244,15 +1298,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
 dependencies = [
  "ff",
- "rand_core",
+ "rand_core 0.6.4",
  "subtle",
 ]
 
 [[package]]
 name = "h2"
-version = "0.4.7"
+version = "0.4.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e"
+checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2"
 dependencies = [
  "atomic-waker",
  "bytes",
@@ -1351,24 +1405,24 @@ dependencies = [
 
 [[package]]
 name = "httparse"
-version = "1.9.5"
+version = "1.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
 
 [[package]]
 name = "hybrid-array"
-version = "0.2.3"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2d35805454dc9f8662a98d6d61886ffe26bd465f5960e0e55345c70d5c0d2a9"
+checksum = "4dab50e193aebe510fe0e40230145820e02f48dae0cf339ea4204e6e708ff7bd"
 dependencies = [
  "typenum",
 ]
 
 [[package]]
 name = "hyper"
-version = "1.5.1"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f"
+checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
 dependencies = [
  "bytes",
  "futures-channel",
@@ -1386,9 +1440,9 @@ dependencies = [
 
 [[package]]
 name = "hyper-rustls"
-version = "0.27.3"
+version = "0.27.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333"
+checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2"
 dependencies = [
  "futures-util",
  "http",
@@ -1615,9 +1669,9 @@ dependencies = [
 
 [[package]]
 name = "indexmap"
-version = "2.7.0"
+version = "2.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
+checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652"
 dependencies = [
  "equivalent",
  "hashbrown",
@@ -1625,18 +1679,18 @@ dependencies = [
 
 [[package]]
 name = "inout"
-version = "0.1.3"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
 dependencies = [
  "generic-array",
 ]
 
 [[package]]
 name = "ipnet"
-version = "2.10.1"
+version = "2.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708"
+checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
 
 [[package]]
 name = "ipnetwork"
@@ -1653,12 +1707,6 @@ version = "1.70.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
 
-[[package]]
-name = "iter-read"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071ed4cc1afd86650602c7b11aa2e1ce30762a1c27193201cb5cee9c6ebb1294"
-
 [[package]]
 name = "itertools"
 version = "0.12.1"
@@ -1670,9 +1718,9 @@ dependencies = [
 
 [[package]]
 name = "itoa"
-version = "1.0.14"
+version = "1.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
 
 [[package]]
 name = "jobserver"
@@ -1685,9 +1733,9 @@ dependencies = [
 
 [[package]]
 name = "js-sys"
-version = "0.3.76"
+version = "0.3.77"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
 dependencies = [
  "once_cell",
  "wasm-bindgen",
@@ -1731,11 +1779,17 @@ version = "1.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
 
+[[package]]
+name = "libbz2-rs-sys"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0864a00c8d019e36216b69c2c4ce50b83b7bd966add3cf5ba554ec44f8bebcf5"
+
 [[package]]
 name = "libc"
-version = "0.2.168"
+version = "0.2.170"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d"
+checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828"
 
 [[package]]
 name = "libloading"
@@ -1765,21 +1819,27 @@ dependencies = [
 
 [[package]]
 name = "linux-raw-sys"
-version = "0.4.14"
+version = "0.4.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9"
 
 [[package]]
 name = "litemap"
-version = "0.7.4"
+version = "0.7.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104"
+checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856"
 
 [[package]]
 name = "log"
-version = "0.4.22"
+version = "0.4.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
 
 [[package]]
 name = "md-5"
@@ -1821,9 +1881,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
 
 [[package]]
 name = "miniz_oxide"
-version = "0.8.0"
+version = "0.8.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
+checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
 dependencies = [
  "adler2",
 ]
@@ -1848,15 +1908,15 @@ dependencies = [
  "log",
  "mime",
  "mime_guess",
- "rand",
+ "rand 0.8.5",
  "tempfile",
 ]
 
 [[package]]
 name = "native-tls"
-version = "0.2.12"
+version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466"
+checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
 dependencies = [
  "libc",
  "log",
@@ -1875,6 +1935,7 @@ version = "0.7.3"
 dependencies = [
  "base64ct",
  "chrono",
+ "digest 0.10.7",
  "ed25519-dalek",
  "email_address",
  "hex",
@@ -1890,7 +1951,7 @@ dependencies = [
  "pgp",
  "picky-asn1-der",
  "picky-asn1-x509",
- "rand",
+ "rand 0.8.5",
  "rsa",
  "rstest",
  "rustainers",
@@ -1900,11 +1961,11 @@ dependencies = [
  "serde",
  "serde_json",
  "sha1",
- "sha2 0.11.0-pre.4",
+ "sha2 0.11.0-pre.5",
  "strum",
  "testdir",
  "testresult",
- "thiserror 2.0.11",
+ "thiserror 2.0.12",
  "tokio",
  "ureq",
  "url",
@@ -1923,7 +1984,7 @@ dependencies = [
  "scrypt",
  "testdir",
  "testresult",
- "thiserror 2.0.11",
+ "thiserror 2.0.12",
  "tokio",
 ]
 
@@ -1937,13 +1998,13 @@ dependencies = [
  "nethsm",
  "nethsm-backup",
  "nethsm-config",
- "rand",
+ "rand 0.8.5",
  "rstest",
  "signstar-request-signature",
  "strum",
  "testdir",
  "testresult",
- "thiserror 2.0.11",
+ "thiserror 2.0.12",
 ]
 
 [[package]]
@@ -1961,7 +2022,7 @@ dependencies = [
  "strum",
  "testdir",
  "testresult",
- "thiserror 2.0.11",
+ "thiserror 2.0.12",
  "zeroize",
 ]
 
@@ -2038,7 +2099,7 @@ dependencies = [
  "num-integer",
  "num-iter",
  "num-traits",
- "rand",
+ "rand 0.8.5",
  "serde",
  "smallvec",
  "zeroize",
@@ -2097,9 +2158,9 @@ dependencies = [
 
 [[package]]
 name = "object"
-version = "0.36.5"
+version = "0.36.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e"
+checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
 dependencies = [
  "memchr",
 ]
@@ -2127,9 +2188,9 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.20.2"
+version = "1.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
+checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
 
 [[package]]
 name = "opaque-debug"
@@ -2139,9 +2200,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
 
 [[package]]
 name = "openssl"
-version = "0.10.70"
+version = "0.10.71"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6"
+checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd"
 dependencies = [
  "bitflags",
  "cfg-if",
@@ -2165,15 +2226,15 @@ dependencies = [
 
 [[package]]
 name = "openssl-probe"
-version = "0.1.5"
+version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
 
 [[package]]
 name = "openssl-sys"
-version = "0.9.105"
+version = "0.9.106"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc"
+checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd"
 dependencies = [
  "cc",
  "libc",
@@ -2213,9 +2274,9 @@ dependencies = [
 
 [[package]]
 name = "p384"
-version = "0.13.0"
+version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
+checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6"
 dependencies = [
  "ecdsa",
  "elliptic-curve",
@@ -2233,7 +2294,7 @@ dependencies = [
  "ecdsa",
  "elliptic-curve",
  "primeorder",
- "rand_core",
+ "rand_core 0.6.4",
  "sha2 0.10.8",
 ]
 
@@ -2244,7 +2305,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
 dependencies = [
  "base64ct",
- "rand_core",
+ "rand_core 0.6.4",
  "subtle",
 ]
 
@@ -2300,20 +2361,22 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
 [[package]]
 name = "pgp"
 version = "0.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30249ac8a98b356b473b04bc5358c75a260aa96a295d0743ce752fe7b173f235"
+source = "git+https://github.com/rpgp/rpgp?branch=readers#85b14b901f8b2f46594c961afe8a9e571c9e3799"
 dependencies = [
+ "aead",
  "aes",
  "aes-gcm",
  "aes-kw",
  "argon2",
  "base64 0.22.1",
- "bitfield",
+ "bitfields",
  "block-padding",
  "blowfish",
- "bstr",
  "buffer-redux",
  "byteorder",
+ "bytes",
+ "bytes-utils",
+ "bzip2",
  "camellia",
  "cast5",
  "cfb-mode",
@@ -2323,7 +2386,7 @@ dependencies = [
  "crc24",
  "curve25519-dalek",
  "derive_builder",
- "derive_more",
+ "derive_more 1.0.0",
  "des",
  "digest 0.10.7",
  "dsa",
@@ -2336,7 +2399,6 @@ dependencies = [
  "hex",
  "hkdf",
  "idea",
- "iter-read",
  "k256",
  "log",
  "md-5",
@@ -2348,7 +2410,8 @@ dependencies = [
  "p256",
  "p384",
  "p521",
- "rand",
+ "rand 0.8.5",
+ "regex",
  "ripemd",
  "rsa",
  "sha1",
@@ -2357,7 +2420,7 @@ dependencies = [
  "sha3",
  "signature",
  "smallvec",
- "thiserror 2.0.11",
+ "snafu",
  "twofish",
  "x25519-dalek",
  "zeroize",
@@ -2365,9 +2428,9 @@ dependencies = [
 
 [[package]]
 name = "picky-asn1"
-version = "0.10.0"
+version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d061c9f67e256511d8d69b86730a506bed100db520c8812e789cf91d9c6a16cc"
+checksum = "2ff038f9360b934342fb3c0a1d6e82c438a2624b51c3c6e3e6d7cf252b6f3ee3"
 dependencies = [
  "oid",
  "serde",
@@ -2376,9 +2439,9 @@ dependencies = [
 
 [[package]]
 name = "picky-asn1-der"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e15b90fb132c46ded79c39277afa93151691d9df6e7ff369c071890b36478392"
+checksum = "9dccb53c26f70c082e008818f524bd45d057069517b047bd0c0ee062d6d7d7f2"
 dependencies = [
  "picky-asn1",
  "serde",
@@ -2387,9 +2450,9 @@ dependencies = [
 
 [[package]]
 name = "picky-asn1-x509"
-version = "0.14.1"
+version = "0.14.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f702973074c654cef724d7430e2852acdb8b0e897ed9c4120727446a1bda1464"
+checksum = "511c46b93e7f08571a375882879d3a468dfe8793d73249907b2e3332950cb33e"
 dependencies = [
  "base64 0.22.1",
  "oid",
@@ -2400,9 +2463,9 @@ dependencies = [
 
 [[package]]
 name = "pin-project-lite"
-version = "0.2.15"
+version = "0.2.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
+checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
 
 [[package]]
 name = "pin-utils"
@@ -2433,9 +2496,9 @@ dependencies = [
 
 [[package]]
 name = "pkg-config"
-version = "0.3.31"
+version = "0.3.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
+checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
 
 [[package]]
 name = "polyval"
@@ -2455,14 +2518,14 @@ version = "0.2.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
 dependencies = [
- "zerocopy",
+ "zerocopy 0.7.35",
 ]
 
 [[package]]
 name = "prettyplease"
-version = "0.2.25"
+version = "0.2.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033"
+checksum = "f1ccf34da56fc294e7d4ccf69a85992b7dfb826b7cf57bac6a70bba3494cc08a"
 dependencies = [
  "proc-macro2",
  "syn",
@@ -2479,27 +2542,27 @@ dependencies = [
 
 [[package]]
 name = "proc-macro-crate"
-version = "3.2.0"
+version = "3.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b"
+checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
 dependencies = [
  "toml_edit",
 ]
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.92"
+version = "1.0.94"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
+checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.37"
+version = "1.0.39"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
+checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801"
 dependencies = [
  "proc-macro2",
 ]
@@ -2511,8 +2574,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
 dependencies = [
  "libc",
- "rand_chacha",
- "rand_core",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
+dependencies = [
+ "rand_chacha 0.9.0",
+ "rand_core 0.9.3",
+ "zerocopy 0.8.23",
 ]
 
 [[package]]
@@ -2522,7 +2596,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
 dependencies = [
  "ppv-lite86",
- "rand_core",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.9.3",
 ]
 
 [[package]]
@@ -2534,6 +2618,15 @@ dependencies = [
  "getrandom 0.2.15",
 ]
 
+[[package]]
+name = "rand_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
+dependencies = [
+ "getrandom 0.3.1",
+]
+
 [[package]]
 name = "rayon"
 version = "1.10.0"
@@ -2556,9 +2649,9 @@ dependencies = [
 
 [[package]]
 name = "redox_syscall"
-version = "0.5.8"
+version = "0.5.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
+checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
 dependencies = [
  "bitflags",
 ]
@@ -2582,7 +2675,7 @@ checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b"
 dependencies = [
  "getrandom 0.2.15",
  "libredox",
- "thiserror 2.0.11",
+ "thiserror 2.0.12",
 ]
 
 [[package]]
@@ -2622,9 +2715,9 @@ checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2"
 
 [[package]]
 name = "reqwest"
-version = "0.12.9"
+version = "0.12.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f"
+checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da"
 dependencies = [
  "base64 0.22.1",
  "bytes",
@@ -2655,6 +2748,7 @@ dependencies = [
  "system-configuration",
  "tokio",
  "tokio-native-tls",
+ "tower",
  "tower-service",
  "url",
  "wasm-bindgen",
@@ -2675,15 +2769,14 @@ dependencies = [
 
 [[package]]
 name = "ring"
-version = "0.17.8"
+version = "0.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
+checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee"
 dependencies = [
  "cc",
  "cfg-if",
  "getrandom 0.2.15",
  "libc",
- "spin",
  "untrusted",
  "windows-sys 0.52.0",
 ]
@@ -2731,7 +2824,7 @@ dependencies = [
  "num-traits",
  "pkcs1",
  "pkcs8",
- "rand_core",
+ "rand_core 0.6.4",
  "sha2 0.10.8",
  "signature",
  "spki",
@@ -2781,10 +2874,11 @@ dependencies = [
 
 [[package]]
 name = "rustainers"
-version = "0.15.0"
+version = "0.15.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c56586bcbf2e5fd618ff57c100f7ce8f470d7c70930fc9f58345c4a8754dbbe8"
+checksum = "206ca5b58c4047da64311f5af57eb9279a51e6477a5520422c98340fa06e2b57"
 dependencies = [
+ "derive_more 2.0.1",
  "hex",
  "indexmap",
  "ipnetwork",
@@ -2792,9 +2886,7 @@ dependencies = [
  "reqwest",
  "serde",
  "serde_json",
- "strum",
- "strum_macros",
- "thiserror 2.0.11",
+ "thiserror 2.0.12",
  "tokio",
  "tracing",
  "typed-builder",
@@ -2824,22 +2916,35 @@ dependencies = [
 
 [[package]]
 name = "rustix"
-version = "0.38.42"
+version = "0.38.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
+dependencies = [
+ "bitflags",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.15",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "rustix"
+version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85"
+checksum = "17f8dcd64f141950290e45c99f7710ede1b600297c91818bb30b3667c0f45dc0"
 dependencies = [
  "bitflags",
  "errno",
  "libc",
- "linux-raw-sys",
+ "linux-raw-sys 0.9.2",
  "windows-sys 0.59.0",
 ]
 
 [[package]]
 name = "rustls"
-version = "0.23.20"
+version = "0.23.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b"
+checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395"
 dependencies = [
  "aws-lc-rs",
  "log",
@@ -2860,7 +2965,7 @@ dependencies = [
  "openssl-probe",
  "rustls-pki-types",
  "schannel",
- "security-framework 3.0.1",
+ "security-framework 3.2.0",
 ]
 
 [[package]]
@@ -2874,9 +2979,9 @@ dependencies = [
 
 [[package]]
 name = "rustls-pki-types"
-version = "1.10.1"
+version = "1.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37"
+checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
 
 [[package]]
 name = "rustls-webpki"
@@ -2892,15 +2997,15 @@ dependencies = [
 
 [[package]]
 name = "rustversion"
-version = "1.0.18"
+version = "1.0.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248"
+checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
 
 [[package]]
 name = "ryu"
-version = "1.0.18"
+version = "1.0.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
 
 [[package]]
 name = "salsa20"
@@ -2971,9 +3076,9 @@ dependencies = [
 
 [[package]]
 name = "security-framework"
-version = "3.0.1"
+version = "3.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1415a607e92bec364ea2cf9264646dcce0f91e6d65281bd6f2819cca3bf39c8"
+checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316"
 dependencies = [
  "bitflags",
  "core-foundation 0.10.0",
@@ -2984,9 +3089,9 @@ dependencies = [
 
 [[package]]
 name = "security-framework-sys"
-version = "2.12.1"
+version = "2.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2"
+checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
 dependencies = [
  "core-foundation-sys",
  "libc",
@@ -2994,36 +3099,36 @@ dependencies = [
 
 [[package]]
 name = "semver"
-version = "1.0.24"
+version = "1.0.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba"
+checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "serde"
-version = "1.0.216"
+version = "1.0.218"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e"
+checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_bytes"
-version = "0.11.15"
+version = "0.11.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a"
+checksum = "364fec0df39c49a083c9a8a18a23a6bcfd9af130fe9fe321d18520a0d113e09e"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.216"
+version = "1.0.218"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e"
+checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3032,9 +3137,9 @@ dependencies = [
 
 [[package]]
 name = "serde_json"
-version = "1.0.133"
+version = "1.0.140"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
+checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
 dependencies = [
  "itoa",
  "memchr",
@@ -3098,13 +3203,13 @@ dependencies = [
 
 [[package]]
 name = "sha2"
-version = "0.11.0-pre.4"
+version = "0.11.0-pre.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "540c0893cce56cdbcfebcec191ec8e0f470dd1889b6e7a0b503e310a94a168f5"
+checksum = "19b4241d1a56954dce82cecda5c8e9c794eef6f53abe5e5216bac0a0ea71ffa7"
 dependencies = [
  "cfg-if",
  "cpufeatures",
- "digest 0.11.0-pre.9",
+ "digest 0.11.0-pre.10",
 ]
 
 [[package]]
@@ -3139,7 +3244,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
 dependencies = [
  "digest 0.10.7",
- "rand_core",
+ "rand_core 0.6.4",
 ]
 
 [[package]]
@@ -3150,8 +3255,8 @@ dependencies = [
  "nethsm-config",
  "nix",
  "strum",
- "sysinfo 0.33.0",
- "thiserror 2.0.11",
+ "sysinfo 0.33.1",
+ "thiserror 2.0.12",
 ]
 
 [[package]]
@@ -3159,14 +3264,14 @@ name = "signstar-request-signature"
 version = "0.1.0"
 dependencies = [
  "clap",
- "rand",
+ "rand 0.8.5",
  "rstest",
  "semver",
  "serde",
  "serde_json",
- "sha2 0.11.0-pre.4",
+ "sha2 0.11.0-pre.5",
  "testresult",
- "thiserror 2.0.11",
+ "thiserror 2.0.12",
 ]
 
 [[package]]
@@ -3180,9 +3285,30 @@ dependencies = [
 
 [[package]]
 name = "smallvec"
-version = "1.13.2"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
+
+[[package]]
+name = "snafu"
+version = "0.8.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019"
+dependencies = [
+ "snafu-derive",
+]
+
+[[package]]
+name = "snafu-derive"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
 
 [[package]]
 name = "socket2"
@@ -3240,7 +3366,7 @@ dependencies = [
  "p256",
  "p384",
  "p521",
- "rand_core",
+ "rand_core 0.6.4",
  "rsa",
  "sec1",
  "sha2 0.10.8",
@@ -3293,9 +3419,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
 
 [[package]]
 name = "syn"
-version = "2.0.90"
+version = "2.0.99"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31"
+checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3338,9 +3464,9 @@ dependencies = [
 
 [[package]]
 name = "sysinfo"
-version = "0.33.0"
+version = "0.33.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "948512566b1895f93b1592c7574baeb2de842f224f2aab158799ecadb8ebbb46"
+checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01"
 dependencies = [
  "core-foundation-sys",
  "libc",
@@ -3373,14 +3499,15 @@ dependencies = [
 
 [[package]]
 name = "tempfile"
-version = "3.14.0"
+version = "3.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c"
+checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567"
 dependencies = [
  "cfg-if",
  "fastrand",
+ "getrandom 0.3.1",
  "once_cell",
- "rustix",
+ "rustix 1.0.0",
  "windows-sys 0.59.0",
 ]
 
@@ -3416,11 +3543,11 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "2.0.11"
+version = "2.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
 dependencies = [
- "thiserror-impl 2.0.11",
+ "thiserror-impl 2.0.12",
 ]
 
 [[package]]
@@ -3436,9 +3563,9 @@ dependencies = [
 
 [[package]]
 name = "thiserror-impl"
-version = "2.0.11"
+version = "2.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3495,9 +3622,9 @@ dependencies = [
 
 [[package]]
 name = "tokio-rustls"
-version = "0.26.1"
+version = "0.26.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37"
+checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
 dependencies = [
  "rustls",
  "tokio",
@@ -3518,9 +3645,9 @@ dependencies = [
 
 [[package]]
 name = "toml"
-version = "0.8.19"
+version = "0.8.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
+checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148"
 dependencies = [
  "serde",
  "serde_spanned",
@@ -3539,9 +3666,9 @@ dependencies = [
 
 [[package]]
 name = "toml_edit"
-version = "0.22.22"
+version = "0.22.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
+checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474"
 dependencies = [
  "indexmap",
  "serde",
@@ -3550,6 +3677,27 @@ dependencies = [
  "winnow",
 ]
 
+[[package]]
+name = "tower"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
 [[package]]
 name = "tower-service"
 version = "0.3.3"
@@ -3624,32 +3772,31 @@ dependencies = [
 
 [[package]]
 name = "typenum"
-version = "1.17.0"
+version = "1.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
 
 [[package]]
 name = "ulid"
-version = "1.1.3"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04f903f293d11f31c0c29e4148f6dc0d033a7f80cebc0282bea147611667d289"
+checksum = "ab82fc73182c29b02e2926a6df32f2241dbadb5cfc111fd595515b3598f46bb3"
 dependencies = [
- "getrandom 0.2.15",
- "rand",
+ "rand 0.9.0",
  "web-time",
 ]
 
 [[package]]
 name = "unicase"
-version = "2.8.0"
+version = "2.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df"
+checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.14"
+version = "1.0.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
 
 [[package]]
 name = "unicode-xid"
@@ -3774,20 +3921,21 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.99"
+version = "0.2.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
 dependencies = [
  "cfg-if",
  "once_cell",
+ "rustversion",
  "wasm-bindgen-macro",
 ]
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.99"
+version = "0.2.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
 dependencies = [
  "bumpalo",
  "log",
@@ -3799,9 +3947,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.49"
+version = "0.4.50"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2"
+checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
 dependencies = [
  "cfg-if",
  "js-sys",
@@ -3812,9 +3960,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.99"
+version = "0.2.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -3822,9 +3970,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.99"
+version = "0.2.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3835,15 +3983,18 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.99"
+version = "0.2.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
 
 [[package]]
 name = "web-sys"
-version = "0.3.76"
+version = "0.3.77"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc"
+checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
@@ -3861,9 +4012,9 @@ dependencies = [
 
 [[package]]
 name = "webpki-roots"
-version = "0.26.7"
+version = "0.26.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e"
+checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9"
 dependencies = [
  "rustls-pki-types",
 ]
@@ -3877,7 +4028,7 @@ dependencies = [
  "either",
  "home",
  "once_cell",
- "rustix",
+ "rustix 0.38.44",
 ]
 
 [[package]]
@@ -3966,6 +4117,12 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "windows-link"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3"
+
 [[package]]
 name = "windows-registry"
 version = "0.2.0"
@@ -4155,9 +4312,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
 
 [[package]]
 name = "winnow"
-version = "0.6.20"
+version = "0.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b"
+checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1"
 dependencies = [
  "memchr",
 ]
@@ -4190,7 +4347,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277"
 dependencies = [
  "curve25519-dalek",
- "rand_core",
+ "rand_core 0.6.4",
  "serde",
  "zeroize",
 ]
@@ -4226,7 +4383,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
 dependencies = [
  "byteorder",
- "zerocopy-derive",
+ "zerocopy-derive 0.7.35",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6"
+dependencies = [
+ "zerocopy-derive 0.8.23",
 ]
 
 [[package]]
@@ -4240,20 +4406,31 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
 [[package]]
 name = "zerofrom"
-version = "0.1.5"
+version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e"
+checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
 dependencies = [
  "zerofrom-derive",
 ]
 
 [[package]]
 name = "zerofrom-derive"
-version = "0.1.5"
+version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808"
+checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
 dependencies = [
  "proc-macro2",
  "quote",
diff --git a/Cargo.toml b/Cargo.toml
index 1fd969e3..4d9944a9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,6 +14,7 @@ members = [
 chrono = "0.4.38"
 clap = { version = "4.5.23", features = ["derive", "env"] }
 confy = "0.6.1"
+digest = { version = "0.10.7", features = ["alloc"] }
 ed25519-dalek = "2.1.1"
 nethsm = { path = "nethsm", version = "0.7.3" }
 nethsm-backup = { path = "nethsm-backup", version = "0.1.0" }
diff --git a/nethsm/Cargo.toml b/nethsm/Cargo.toml
index 34db4c50..30d20fb1 100644
--- a/nethsm/Cargo.toml
+++ b/nethsm/Cargo.toml
@@ -15,6 +15,7 @@ ignored = ["md-5"]
 [dependencies]
 base64ct = { version = "1.6.0", features = ["alloc", "std"] }
 chrono = { workspace = true, features = ["alloc"] }
+digest = { workspace = true }
 ed25519-dalek = { workspace = true, features = ["pkcs8", "pem"] }
 email_address = "0.2.9"
 hex = { version = "0.4.3", features = ["serde"] }
@@ -26,7 +27,7 @@ p224 = { version = "0.13.2", features = ["pem", "pkcs8"] }
 p256 = { version = "0.13.2", features = ["pem", "pkcs8"] }
 p384 = { version = "0.13.0", features = ["pem", "pkcs8"] }
 p521 = { version = "0.13.3", features = ["pem", "pkcs8"] }
-pgp = "0.15"
+pgp = { version = "0.15", git = "https://github.com/rpgp/rpgp", branch = "readers" }
 picky-asn1-der = "0.5.1"
 picky-asn1-x509 = "0.14.1"
 rand.workspace = true
diff --git a/nethsm/src/lib.rs b/nethsm/src/lib.rs
index e423d292..62fb95ce 100644
--- a/nethsm/src/lib.rs
+++ b/nethsm/src/lib.rs
@@ -5922,7 +5922,7 @@ impl NetHsm {
         created_at: DateTime<Utc>,
         version: OpenPgpVersion,
     ) -> Result<Vec<u8>, Error> {
-        openpgp::add_certificate(self, flags, key_id, user_id, created_at, version)
+        Ok(openpgp::add_certificate(self, flags, key_id, user_id, created_at, version).unwrap())
     }
 
     /// Creates an [OpenPGP signature] for a message.
@@ -6027,7 +6027,7 @@ impl NetHsm {
     /// [role]: https://docs.nitrokey.com/nethsm/administration#roles
     /// [state]: https://docs.nitrokey.com/nethsm/administration#state
     pub fn openpgp_sign(&self, key_id: &KeyId, message: &[u8]) -> Result<Vec<u8>, Error> {
-        openpgp::sign(self, key_id, message)
+        Ok(openpgp::sign(self, key_id, message).unwrap())
     }
 
     /// Generates an OpenPGP signature based on provided hasher state.
@@ -6138,8 +6138,8 @@ impl NetHsm {
     pub fn openpgp_sign_state(
         &self,
         key_id: &KeyId,
-        state: impl sha2::Digest + Clone + std::io::Write,
+        state: impl digest::DynDigest + Clone + std::io::Write + 'static,
     ) -> Result<Vec<u8>, crate::Error> {
-        openpgp::sign_hasher_state(self, key_id, state)
+        Ok(openpgp::sign_hasher_state(self, key_id, state).unwrap())
     }
 }
diff --git a/nethsm/src/openpgp.rs b/nethsm/src/openpgp.rs
index 5bfeba97..4a8df7c0 100644
--- a/nethsm/src/openpgp.rs
+++ b/nethsm/src/openpgp.rs
@@ -9,16 +9,18 @@ use std::{
 
 use base64ct::{Base64, Encoding as _};
 use chrono::{DateTime, Utc};
+use ed25519_dalek::VerifyingKey;
 use email_address::{EmailAddress, Options};
 use pgp::{
     Deserializable,
-    KeyDetails,
     SignedPublicKey,
     SignedSecretKey,
-    crypto::{ecc_curve::ECCCurve, hash::HashAlgorithm, public_key::PublicKeyAlgorithm},
+    crypto::{hash::HashAlgorithm, public_key::PublicKeyAlgorithm},
     packet::{
         KeyFlags,
         Notation,
+        PacketTrait,
+        PubKeyInner,
         PublicKey,
         SignatureConfig,
         SignatureType,
@@ -30,18 +32,18 @@ use pgp::{
     types::{
         CompressionAlgorithm,
         EcdsaPublicParams,
-        EskType,
+        KeyDetails,
         KeyId,
         KeyVersion,
-        Mpi,
-        PkeskBytes,
+        MpiBytes,
+        Password,
         PlainSecretParams,
         PublicKeyTrait,
         PublicParams,
+        RsaPublicParams,
         SecretKeyTrait,
         SecretParams,
         SignatureBytes,
-        Version,
     },
 };
 use picky_asn1_x509::{
@@ -50,7 +52,8 @@ use picky_asn1_x509::{
     ShaVariant,
     signature::EcdsaSignatureValue,
 };
-use rand::prelude::{CryptoRng, Rng};
+use rsa::BigUint;
+use rsa::traits::{PrivateKeyParts, PublicKeyParts as _};
 
 use crate::{KeyMechanism, KeyType, NetHsm, PrivateKeyImport, key_type_matches_length};
 
@@ -433,15 +436,18 @@ impl Debug for HsmKey<'_, '_> {
 }
 
 /// Parse signature bytes into algorithm-specific vector of MPIs.
-fn parse_signature(sig_type: crate::SignatureType, sig: &[u8]) -> pgp::errors::Result<Vec<Mpi>> {
+fn parse_signature(
+    sig_type: crate::SignatureType,
+    sig: &[u8],
+) -> pgp::errors::Result<Vec<MpiBytes>> {
     use crate::SignatureType::*;
     Ok(match sig_type {
         EcdsaP256 | EcdsaP384 | EcdsaP521 => {
             let sig: EcdsaSignatureValue =
                 picky_asn1_der::from_bytes(sig).map_err(|_| pgp::errors::Error::InvalidInput)?;
             vec![
-                Mpi::from_slice(sig.r.as_unsigned_bytes_be()),
-                Mpi::from_slice(sig.s.as_unsigned_bytes_be()),
+                MpiBytes::from_slice(sig.r.as_unsigned_bytes_be()),
+                MpiBytes::from_slice(sig.s.as_unsigned_bytes_be()),
             ]
         }
         EdDsa => {
@@ -449,16 +455,17 @@ fn parse_signature(sig_type: crate::SignatureType, sig: &[u8]) -> pgp::errors::R
                 return Err(pgp::errors::Error::InvalidKeyLength);
             }
 
-            vec![Mpi::from_slice(&sig[..32]), Mpi::from_slice(&sig[32..])]
+            vec![
+                MpiBytes::from_slice(&sig[..32]),
+                MpiBytes::from_slice(&sig[32..]),
+            ]
         }
         Pkcs1 => {
             // RSA
-            vec![Mpi::from_slice(sig)]
+            vec![MpiBytes::from_slice(sig)]
         }
-        param => {
-            return Err(pgp::errors::Error::Unsupported(format!(
-                "Unsupoprted key type: {param:?}"
-            )));
+        _ => {
+            return Err(pgp::errors::Error::InvalidInput); //FIXME: more appropriate error here
         }
     })
 }
@@ -480,46 +487,20 @@ impl<'a, 'b> HsmKey<'a, 'b> {
                 EcdsaPublicParams::P256 { .. } => crate::SignatureType::EcdsaP256,
                 EcdsaPublicParams::P384 { .. } => crate::SignatureType::EcdsaP384,
                 EcdsaPublicParams::P521 { .. } => crate::SignatureType::EcdsaP521,
-                param => {
-                    return Err(pgp::errors::Error::Unsupported(format!(
-                        "Unsupported EC key type: {param:?}"
-                    )));
+                _ => {
+                    return Err(pgp::errors::Error::InvalidInput); // FIXME: more appropriate error here
                 }
             },
             PublicParams::EdDSALegacy { .. } => crate::SignatureType::EdDsa,
             PublicParams::RSA { .. } => crate::SignatureType::Pkcs1,
-            param => {
-                return Err(pgp::errors::Error::Unsupported(format!(
-                    "Unsupported key type: {param:?}"
-                )));
+            _ => {
+                return Err(pgp::errors::Error::InvalidInput); // FIXME: more appropriate error here
             }
         })
     }
 }
 
-impl PublicKeyTrait for HsmKey<'_, '_> {
-    fn verify_signature(
-        &self,
-        hash: pgp::crypto::hash::HashAlgorithm,
-        data: &[u8],
-        sig: &SignatureBytes,
-    ) -> pgp::errors::Result<()> {
-        self.public_key.verify_signature(hash, data, sig)
-    }
-
-    fn encrypt<R: CryptoRng + Rng>(
-        &self,
-        rng: R,
-        plain: &[u8],
-        esk_type: EskType,
-    ) -> pgp::errors::Result<PkeskBytes> {
-        self.public_key.encrypt(rng, plain, esk_type)
-    }
-
-    fn serialize_for_hashing(&self, writer: &mut impl std::io::Write) -> pgp::errors::Result<()> {
-        self.public_key.serialize_for_hashing(writer)
-    }
-
+impl KeyDetails for HsmKey<'_, '_> {
     fn version(&self) -> KeyVersion {
         self.public_key.version()
     }
@@ -535,6 +516,17 @@ impl PublicKeyTrait for HsmKey<'_, '_> {
     fn algorithm(&self) -> PublicKeyAlgorithm {
         self.public_key.algorithm()
     }
+}
+
+impl PublicKeyTrait for HsmKey<'_, '_> {
+    fn verify_signature(
+        &self,
+        hash: pgp::crypto::hash::HashAlgorithm,
+        data: &[u8],
+        sig: &SignatureBytes,
+    ) -> pgp::errors::Result<()> {
+        self.public_key.verify_signature(hash, data, sig)
+    }
 
     fn created_at(&self) -> &chrono::DateTime<chrono::Utc> {
         self.public_key.created_at()
@@ -588,27 +580,12 @@ fn prepare_digest_data(
 }
 
 impl SecretKeyTrait for HsmKey<'_, '_> {
-    type PublicKey = PublicKey;
-
-    type Unlocked = Self;
-
-    fn unlock<F, G, T>(&self, _pw: F, work: G) -> pgp::errors::Result<T>
-    where
-        F: FnOnce() -> String,
-        G: FnOnce(&Self::Unlocked) -> pgp::errors::Result<T>,
-    {
-        work(self)
-    }
-
-    fn create_signature<F>(
+    fn create_signature(
         &self,
-        _key_pw: F,
+        _key_pw: &Password,
         hash: HashAlgorithm,
         data: &[u8],
-    ) -> pgp::errors::Result<SignatureBytes>
-    where
-        F: FnOnce() -> String,
-    {
+    ) -> pgp::errors::Result<SignatureBytes> {
         let signature_type = self.sign_mode()?;
         let request_data = prepare_digest_data(signature_type, hash, data)?;
 
@@ -620,12 +597,8 @@ impl SecretKeyTrait for HsmKey<'_, '_> {
         Ok(parse_signature(signature_type, &sig)?.into())
     }
 
-    fn public_key(&self) -> Self::PublicKey {
-        self.public_key.clone()
-    }
-
     fn hash_alg(&self) -> HashAlgorithm {
-        HashAlgorithm::SHA2_512
+        HashAlgorithm::Sha512
     }
 }
 
@@ -637,23 +610,23 @@ pub fn add_certificate(
     user_id: OpenPgpUserId,
     created_at: DateTime<Utc>,
     version: OpenPgpVersion,
-) -> Result<Vec<u8>, crate::Error> {
+) -> Result<Vec<u8>, Error> {
     if version != OpenPgpVersion::V4 {
         unimplemented!(
             "Support for creating OpenPGP {version} certificates is not yet implemented!"
         );
     }
 
-    let public_key = nethsm.get_key(key_id)?;
+    let public_key = nethsm.get_key(key_id).unwrap();
     let signer = HsmKey::new(nethsm, hsm_pk_to_pgp_pk(public_key, created_at)?, key_id);
     let mut keyflags: KeyFlags = flags.into();
     // the primary key always need to be certifying
     keyflags.set_certify(true);
 
     let composed_pk = pgp::PublicKey::new(
-        signer.public_key(),
-        KeyDetails::new(
-            UserId::from_str(Default::default(), user_id.as_ref()),
+        signer.public_key.clone(),
+        pgp::KeyDetails::new(
+            UserId::from_str(Default::default(), user_id.as_ref())?,
             vec![],
             vec![],
             keyflags,
@@ -666,7 +639,12 @@ pub fn add_certificate(
         vec![],
     );
     let signed_pk = composed_pk
-        .sign(rand::thread_rng(), &signer, String::new)
+        .sign(
+            rand::thread_rng(),
+            &signer,
+            &signer.public_key,
+            &Password::empty(),
+        )
         .map_err(Error::Pgp)?;
     let mut buffer = vec![];
     signed_pk.to_writer(&mut buffer).map_err(Error::Pgp)?;
@@ -676,17 +654,15 @@ pub fn add_certificate(
 /// Converts OpenPGP hash algorithm into an OID form for PKCS#1 signing.
 fn hash_to_oid(hash: HashAlgorithm) -> pgp::errors::Result<AlgorithmIdentifier> {
     Ok(AlgorithmIdentifier::new_sha(match hash {
-        HashAlgorithm::SHA1 => ShaVariant::SHA1,
-        HashAlgorithm::SHA2_256 => ShaVariant::SHA2_256,
-        HashAlgorithm::SHA2_384 => ShaVariant::SHA2_384,
-        HashAlgorithm::SHA2_512 => ShaVariant::SHA2_512,
-        HashAlgorithm::SHA2_224 => ShaVariant::SHA2_224,
-        HashAlgorithm::SHA3_256 => ShaVariant::SHA3_256,
-        HashAlgorithm::SHA3_512 => ShaVariant::SHA3_512,
-        hash => {
-            return Err(pgp::errors::Error::Unsupported(format!(
-                "Unsupported hash: {hash:?}"
-            )));
+        HashAlgorithm::Sha1 => ShaVariant::SHA1,
+        HashAlgorithm::Sha256 => ShaVariant::SHA2_256,
+        HashAlgorithm::Sha384 => ShaVariant::SHA2_384,
+        HashAlgorithm::Sha512 => ShaVariant::SHA2_512,
+        HashAlgorithm::Sha224 => ShaVariant::SHA2_224,
+        HashAlgorithm::Sha3_256 => ShaVariant::SHA3_256,
+        HashAlgorithm::Sha3_512 => ShaVariant::SHA3_512,
+        _ => {
+            return Err(pgp::errors::Error::InvalidInput); // FIXME: use more appropriate error
         }
     }))
 }
@@ -712,45 +688,58 @@ pub fn tsk_to_private_key_import(
     let SecretParams::Plain(secret) = key.primary_key.secret_params() else {
         return Err(crate::Error::OpenPgp(Error::PrivateKeyPassphraseProtected));
     };
-    Ok(match (secret, key.public_params()) {
-        (PlainSecretParams::RSA { p, q, .. }, PublicParams::RSA { n, e }) => {
+    Ok(match (secret, key.public_key().public_params()) {
+        (PlainSecretParams::RSA(secret), PublicParams::RSA(public)) => {
             // ensure, that we have sufficient bit length
-            key_type_matches_length(KeyType::Rsa, Some(n.as_bytes().len() as u32 * 8))?;
+            key_type_matches_length(
+                KeyType::Rsa,
+                Some(public.key.n().to_bytes_be().len() as u32 * 8),
+            )?;
 
             (
                 PrivateKeyImport::from_rsa(
-                    p.as_bytes().to_vec(),
-                    q.as_bytes().to_vec(),
-                    e.as_bytes().to_vec(),
+                    secret.primes()[0].to_bytes_be().to_vec(),
+                    secret.primes()[1].to_bytes_be().to_vec(),
+                    public.key.e().to_bytes_be().to_vec(),
                 ),
                 KeyMechanism::RsaSignaturePkcs1,
             )
         }
         (PlainSecretParams::ECDSA(bytes), _) => {
-            let ec = if let PublicParams::ECDSA(pp) = key.primary_key.public_params() {
+            let ec = if let PublicParams::ECDSA(pp) = key.primary_key.public_key().public_params() {
                 match pp {
                     EcdsaPublicParams::P256 { .. } => crate::KeyType::EcP256,
                     EcdsaPublicParams::P384 { .. } => crate::KeyType::EcP384,
                     EcdsaPublicParams::P521 { .. } => crate::KeyType::EcP521,
                     _ => {
-                        return Err(crate::Error::OpenPgp(Error::UnsupportedKeyFormat {
-                            public_params: Box::new(key.public_params().clone()),
-                        }));
+                        return Err(crate::Error::OpenPgp(Error::PrivateKeyPassphraseProtected)); //FIXME: use correct error
                     }
                 }
             } else {
                 return Err(crate::Error::OpenPgp(Error::UnsupportedKeyFormat {
-                    public_params: Box::new(key.public_params().clone()),
+                    public_params: Box::new(key.public_key().public_params().clone()),
                 }));
             };
 
+            let b = match bytes {
+                pgp::crypto::ecdsa::SecretKey::P256(secret_key) => secret_key.to_bytes().to_vec(),
+                pgp::crypto::ecdsa::SecretKey::P384(secret_key) => secret_key.to_bytes().to_vec(),
+
+                pgp::crypto::ecdsa::SecretKey::P521(secret_key) => secret_key.to_bytes().to_vec(),
+
+                pgp::crypto::ecdsa::SecretKey::Secp256k1(secret_key) => {
+                    secret_key.to_bytes().to_vec()
+                }
+                _ => unreachable!(), // FIXME: check this
+            };
+
             (
-                PrivateKeyImport::from_raw_bytes(ec, bytes)?,
+                PrivateKeyImport::from_raw_bytes(ec, b)?,
                 KeyMechanism::EcdsaSignature,
             )
         }
         (PlainSecretParams::EdDSALegacy(bytes), _) => (
-            PrivateKeyImport::from_raw_bytes(crate::KeyType::Curve25519, bytes)?,
+            PrivateKeyImport::from_raw_bytes(crate::KeyType::Curve25519, bytes.secret.to_bytes())?,
             KeyMechanism::EdDsaSignature,
         ),
         (_, public_params) => {
@@ -762,12 +751,8 @@ pub fn tsk_to_private_key_import(
 }
 
 /// Generates an OpenPGP signature using a given NetHSM key for the message.
-pub fn sign(
-    nethsm: &NetHsm,
-    key_id: &crate::KeyId,
-    message: &[u8],
-) -> Result<Vec<u8>, crate::Error> {
-    let public_key = nethsm.get_key_certificate(key_id)?;
+pub fn sign(nethsm: &NetHsm, key_id: &crate::KeyId, message: &[u8]) -> Result<Vec<u8>, Error> {
+    let public_key = nethsm.get_key_certificate(key_id).unwrap();
 
     let signer = HsmKey::new(
         nethsm,
@@ -782,14 +767,14 @@ pub fn sign(
     sig_config.hashed_subpackets = vec![
         Subpacket::regular(SubpacketData::SignatureCreationTime(
             std::time::SystemTime::now().into(),
-        )),
-        Subpacket::regular(SubpacketData::Issuer(signer.key_id())),
-        Subpacket::regular(SubpacketData::IssuerFingerprint(signer.fingerprint())),
+        ))?,
+        Subpacket::regular(SubpacketData::Issuer(signer.key_id()))?,
+        Subpacket::regular(SubpacketData::IssuerFingerprint(signer.fingerprint()))?,
     ];
 
     let mut hasher = sig_config.hash_alg.new_hasher().map_err(Error::Pgp)?;
     sig_config
-        .hash_data_to_sign(&mut *hasher, message)
+        .hash_data_to_sign(&mut hasher, message)
         .map_err(Error::Pgp)?;
 
     let len = sig_config
@@ -798,17 +783,17 @@ pub fn sign(
 
     hasher.update(&sig_config.trailer(len).map_err(Error::Pgp)?);
 
-    let hash = &hasher.finish()[..];
+    let hash = &hasher.finalize()[..];
 
     let signed_hash_value = [hash[0], hash[1]];
     let raw_sig = signer
-        .create_signature(String::new, sig_config.hash_alg, hash)
+        .create_signature(&Password::empty(), sig_config.hash_alg, hash)
         .map_err(Error::Pgp)?;
 
-    let signature = pgp::Signature::from_config(sig_config, signed_hash_value, raw_sig);
+    let signature = pgp::Signature::from_config(sig_config, signed_hash_value, raw_sig)?;
 
     let mut out = vec![];
-    pgp::packet::write_packet(&mut out, &signature).map_err(Error::Pgp)?;
+    signature.to_writer_with_header(&mut out)?;
 
     Ok(out)
 }
@@ -850,9 +835,9 @@ pub fn sign(
 pub fn sign_hasher_state(
     nethsm: &NetHsm,
     key_id: &crate::KeyId,
-    state: impl sha2::Digest + Clone + std::io::Write,
-) -> Result<Vec<u8>, crate::Error> {
-    let public_key = nethsm.get_key_certificate(key_id)?;
+    state: impl digest::DynDigest + Clone + std::io::Write + 'static,
+) -> Result<Vec<u8>, Error> {
+    let public_key = nethsm.get_key_certificate(key_id).unwrap();
 
     let signer = HsmKey::new(
         nethsm,
@@ -863,7 +848,8 @@ pub fn sign_hasher_state(
     );
 
     let hasher = state.clone();
-    let file_hash = hasher.finalize();
+
+    let file_hash = Box::new(hasher).finalize().to_vec();
 
     let sig_config = {
         let mut sig_config =
@@ -871,23 +857,25 @@ pub fn sign_hasher_state(
         sig_config.hashed_subpackets = vec![
             Subpacket::regular(SubpacketData::SignatureCreationTime(
                 std::time::SystemTime::now().into(),
-            )),
-            Subpacket::regular(SubpacketData::Issuer(signer.key_id())),
-            Subpacket::regular(SubpacketData::IssuerFingerprint(signer.fingerprint())),
+            ))?,
+            Subpacket::regular(SubpacketData::Issuer(signer.key_id()))?,
+            Subpacket::regular(SubpacketData::IssuerFingerprint(signer.fingerprint()))?,
             Subpacket::regular(SubpacketData::Notation(Notation {
                 readable: false,
                 name: "data-digest@archlinux.org".into(),
-                value: file_hash[..].into(),
-            })),
+                value: file_hash.into(),
+            }))?,
         ];
         sig_config
     };
 
     let hasher = {
-        let mut hasher = state.clone();
-        let write: &mut dyn std::io::Write = &mut hasher;
+        let state = state.clone();
+        let mut hasher: Box<dyn md5::digest::DynDigest> = Box::new(state);
 
-        let len = sig_config.hash_signature_data(write).map_err(Error::Pgp)?;
+        let len = sig_config
+            .hash_signature_data(&mut hasher)
+            .map_err(Error::Pgp)?;
 
         hasher.update(&sig_config.trailer(len).map_err(Error::Pgp)?);
         hasher
@@ -898,14 +886,14 @@ pub fn sign_hasher_state(
     let signed_hash_value = [hash[0], hash[1]];
 
     let raw_sig = signer
-        .create_signature(String::new, sig_config.hash_alg, hash)
+        .create_signature(&Password::empty(), sig_config.hash_alg, hash)
         .map_err(Error::Pgp)?;
 
-    let signature = pgp::Signature::from_config(sig_config, signed_hash_value, raw_sig);
+    let signature = pgp::Signature::from_config(sig_config, signed_hash_value, raw_sig)?;
 
     let out = {
         let mut out = vec![];
-        pgp::packet::write_packet(&mut out, &signature).map_err(Error::Pgp)?;
+        signature.to_writer_with_header(&mut out)?;
         out
     };
 
@@ -926,45 +914,43 @@ fn hsm_pk_to_pgp_pk(
         .ok_or(Error::KeyData("missing public key data".into()))?;
     let key_type: KeyType = pk.r#type.into();
     Ok(match key_type {
-        KeyType::Rsa => PublicKey::new(
-            Version::New,
+        KeyType::Rsa => PublicKey::from_inner(PubKeyInner::new(
             KeyVersion::V4,
             PublicKeyAlgorithm::RSA,
             created_at,
             None,
-            PublicParams::RSA {
-                n: Mpi::from_raw(Base64::decode_vec(
-                    &public
-                        .modulus
-                        .ok_or(Error::KeyData("missing RSA modulus".into()))?,
-                )?),
-                e: Mpi::from_raw(Base64::decode_vec(
-                    &public
-                        .public_exponent
-                        .ok_or(Error::KeyData("missing RSA exponent".into()))?,
-                )?),
-            },
-        )?,
+            PublicParams::RSA(RsaPublicParams {
+                key: rsa::RsaPublicKey::new(
+                    BigUint::from_bytes_be(&Base64::decode_vec(
+                        &public
+                            .modulus
+                            .ok_or(Error::KeyData("missing RSA modulus".into()))?,
+                    )?),
+                    BigUint::from_bytes_be(&Base64::decode_vec(
+                        &public
+                            .public_exponent
+                            .ok_or(Error::KeyData("missing RSA exponent".into()))?,
+                    )?),
+                )
+                .unwrap(),
+            }),
+        )?)?,
         KeyType::Curve25519 => {
-            let pubkey = Base64::decode_vec(
+            let pubkey: &[u8] = &Base64::decode_vec(
                 &public
                     .data
                     .ok_or(Error::KeyData("missing ed25519 public key data".into()))?,
             )?;
-            let mut bytes = vec![0x40];
-            bytes.extend(pubkey);
 
-            PublicKey::new(
-                Version::New,
+            PublicKey::from_inner(PubKeyInner::new(
                 KeyVersion::V4,
                 PublicKeyAlgorithm::EdDSALegacy,
                 created_at,
                 None,
-                PublicParams::EdDSALegacy {
-                    curve: ECCCurve::Ed25519,
-                    q: Mpi::from_raw(bytes),
-                },
-            )?
+                PublicParams::EdDSALegacy(pgp::types::EddsaLegacyPublicParams::Ed25519 {
+                    key: VerifyingKey::from_bytes(pubkey.try_into().unwrap()).unwrap(),
+                }),
+            )?)?
         }
         curve @ (KeyType::EcP256 | KeyType::EcP384 | KeyType::EcP521) => {
             let pubkey = Base64::decode_vec(
@@ -975,33 +961,27 @@ fn hsm_pk_to_pgp_pk(
             let key = match curve {
                 KeyType::EcP256 => EcdsaPublicParams::P256 {
                     key: p256::PublicKey::from_sec1_bytes(&pubkey)?,
-                    p: Mpi::from_raw(pubkey),
                 },
                 KeyType::EcP384 => EcdsaPublicParams::P384 {
                     key: p384::PublicKey::from_sec1_bytes(&pubkey)?,
-                    p: Mpi::from_raw(pubkey),
                 },
                 KeyType::EcP521 => EcdsaPublicParams::P521 {
                     key: p521::PublicKey::from_sec1_bytes(&pubkey)?,
-                    p: Mpi::from_raw(pubkey),
                 },
                 _ => unreachable!(),
             };
 
-            PublicKey::new(
-                Version::New,
+            PublicKey::from_inner(PubKeyInner::new(
                 KeyVersion::V4,
                 PublicKeyAlgorithm::ECDSA,
                 created_at,
                 None,
                 PublicParams::ECDSA(key),
-            )?
+            )?)?
         }
 
         _ => {
-            return Err(pgp::errors::Error::Unsupported(
-                "unsupported key type".into(),
-            ))?;
+            return Err(pgp::errors::Error::InvalidInput)?; // FIXME: use better type
         }
     })
 }
@@ -1040,10 +1020,7 @@ impl From<KeyUsageFlags> for KeyFlags {
 #[cfg(test)]
 mod tests {
     use nethsm_sdk_rs::models::{KeyMechanism, KeyPublicData, KeyRestrictions, KeyType};
-    use pgp::{
-        crypto::ecc_curve::ECCCurve,
-        types::{EcdsaPublicParams, PublicParams},
-    };
+    use pgp::types::{EcdsaPublicParams, PublicParams};
     use rstest::rstest;
     use testresult::TestResult;
 
@@ -1066,15 +1043,16 @@ mod tests {
         };
 
         let pgp_key = hsm_pk_to_pgp_pk(hsm_key, DateTime::UNIX_EPOCH)?;
-        let PublicParams::EdDSALegacy { curve, q } = pgp_key.public_params() else {
+        let PublicParams::EdDSALegacy(pgp::types::EddsaLegacyPublicParams::Ed25519 { key }) =
+            pgp_key.public_params()
+        else {
             panic!("Wrong type of public params");
         };
-        assert_eq!(curve, &ECCCurve::Ed25519);
         assert_eq!(
-            q.to_vec(),
+            key.to_bytes(),
             [
-                64, 252, 224, 232, 104, 60, 215, 247, 16, 227, 167, 29, 139, 125, 29, 3, 8, 136,
-                29, 198, 163, 167, 117, 143, 109, 186, 65, 5, 45, 80, 142, 109, 10
+                252, 224, 232, 104, 60, 215, 247, 16, 227, 167, 29, 139, 125, 29, 3, 8, 136, 29,
+                198, 163, 167, 117, 143, 109, 186, 65, 5, 45, 80, 142, 109, 10
             ]
         );
 
@@ -1100,11 +1078,12 @@ mod tests {
             operations: 1,
         };
         let pgp_key = hsm_pk_to_pgp_pk(hsm_key, DateTime::UNIX_EPOCH)?;
-        let PublicParams::ECDSA(EcdsaPublicParams::P256 { p, .. }) = pgp_key.public_params() else {
+        let PublicParams::ECDSA(EcdsaPublicParams::P256 { key, .. }) = pgp_key.public_params()
+        else {
             panic!("Wrong type of public params");
         };
         assert_eq!(
-            p.to_vec(),
+            key.to_sec1_bytes().to_vec(),
             [
                 4, 222, 106, 236, 96, 145, 243, 13, 81, 181, 119, 76, 5, 29, 72, 112, 134, 130,
                 169, 182, 231, 247, 107, 204, 228, 178, 45, 77, 196, 91, 117, 122, 57, 69, 240,
@@ -1135,11 +1114,12 @@ mod tests {
             operations: 3,
         };
         let pgp_key = hsm_pk_to_pgp_pk(hsm_key, DateTime::UNIX_EPOCH)?;
-        let PublicParams::ECDSA(EcdsaPublicParams::P384 { p, .. }) = pgp_key.public_params() else {
+        let PublicParams::ECDSA(EcdsaPublicParams::P384 { key, .. }) = pgp_key.public_params()
+        else {
             panic!("Wrong type of public params");
         };
         assert_eq!(
-            p.to_vec(),
+            key.to_sec1_bytes().to_vec(),
             [
                 4, 127, 136, 147, 111, 187, 191, 131, 84, 166, 118, 67, 76, 107, 52, 142, 175, 72,
                 250, 64, 197, 76, 154, 162, 48, 211, 135, 63, 153, 60, 213, 168, 40, 41, 111, 8, 8,
@@ -1172,11 +1152,12 @@ mod tests {
             operations: 2,
         };
         let pgp_key = hsm_pk_to_pgp_pk(hsm_key, DateTime::UNIX_EPOCH)?;
-        let PublicParams::ECDSA(EcdsaPublicParams::P521 { p, .. }) = pgp_key.public_params() else {
+        let PublicParams::ECDSA(EcdsaPublicParams::P521 { key, .. }) = pgp_key.public_params()
+        else {
             panic!("Wrong type of public params");
         };
         assert_eq!(
-            p.to_vec(),
+            key.to_sec1_bytes().to_vec(),
             [
                 4, 1, 33, 39, 193, 238, 201, 51, 127, 12, 24, 192, 161, 112, 247, 31, 184, 211,
                 118, 95, 147, 192, 236, 9, 222, 214, 138, 194, 173, 170, 248, 123, 1, 138, 201, 96,
@@ -1205,12 +1186,12 @@ mod tests {
                     data: None })),
             operations: 2 };
         let pgp_key = hsm_pk_to_pgp_pk(hsm_key, DateTime::UNIX_EPOCH)?;
-        let PublicParams::RSA { e, n } = pgp_key.public_params() else {
+        let PublicParams::RSA(public) = pgp_key.public_params() else {
             panic!("Wrong type of public params");
         };
-        assert_eq!(e.to_vec(), [1, 0, 1]);
+        assert_eq!(public.key.e().to_bytes_be(), [1, 0, 1]);
         assert_eq!(
-            n.to_vec(),
+            public.key.n().to_bytes_be(),
             [
                 227, 127, 58, 151, 86, 130, 213, 238, 13, 247, 122, 241, 51, 227, 105, 143, 231,
                 114, 208, 33, 152, 209, 109, 207, 53, 179, 147, 4, 100, 99, 238, 212, 196, 126, 89,
@@ -1237,7 +1218,7 @@ mod tests {
     fn parse_rsa_signature_produces_valid_data() -> TestResult {
         let sig = parse_signature(crate::SignatureType::Pkcs1, &[0, 1, 2])?;
         assert_eq!(sig.len(), 1);
-        assert_eq!(&sig[0][..], &[1, 2]);
+        assert_eq!(&sig[0].as_ref(), &[1, 2]);
 
         Ok(())
     }
@@ -1253,8 +1234,8 @@ mod tests {
             ],
         )?;
         assert_eq!(sig.len(), 2);
-        assert_eq!(sig[0].as_bytes(), vec![2; 32]);
-        assert_eq!(sig[1].as_bytes(), vec![1; 32]);
+        assert_eq!(sig[0].as_ref(), vec![2; 32]);
+        assert_eq!(sig[1].as_ref(), vec![1; 32]);
 
         Ok(())
     }
@@ -1272,14 +1253,14 @@ mod tests {
         )?;
         assert_eq!(sig.len(), 2);
         assert_eq!(
-            sig[0].as_bytes(),
+            sig[0].as_ref(),
             [
                 193, 176, 219, 0, 133, 254, 212, 239, 236, 122, 85, 239, 73, 161, 179, 53, 100,
                 172, 103, 45, 123, 21, 169, 28, 59, 150, 72, 92, 242, 9, 53, 143
             ]
         );
         assert_eq!(
-            sig[1].as_bytes(),
+            sig[1].as_ref(),
             [
                 165, 1, 144, 97, 102, 109, 66, 50, 185, 234, 211, 150, 253, 228, 210, 126, 26, 0,
                 189, 184, 230, 163, 36, 203, 232, 161, 12, 75, 121, 171, 45, 107
@@ -1304,7 +1285,7 @@ mod tests {
         )?;
         assert_eq!(sig.len(), 2);
         assert_eq!(
-            sig[0].as_bytes(),
+            sig[0].as_ref(),
             [
                 134, 13, 108, 74, 135, 234, 174, 105, 208, 46, 109, 18, 77, 21, 177, 59, 73, 150,
                 228, 26, 244, 134, 187, 217, 172, 34, 2, 1, 229, 123, 105, 202, 132, 233, 72, 41,
@@ -1312,7 +1293,7 @@ mod tests {
             ]
         );
         assert_eq!(
-            sig[1].as_bytes(),
+            sig[1].as_ref(),
             [
                 44, 80, 117, 90, 18, 137, 36, 190, 8, 60, 201, 235, 242, 168, 164, 245, 119, 136,
                 207, 178, 237, 64, 117, 69, 218, 189, 209, 110, 2, 9, 191, 194, 70, 50, 227, 47, 6,
@@ -1340,7 +1321,7 @@ mod tests {
         )?;
         assert_eq!(sig.len(), 2);
         assert_eq!(
-            sig[0].as_bytes(),
+            sig[0].as_ref(),
             [
                 203, 246, 21, 57, 217, 6, 101, 73, 103, 113, 98, 39, 223, 246, 199, 136, 238, 213,
                 134, 163, 153, 151, 116, 237, 207, 181, 107, 183, 204, 110, 97, 160, 95, 160, 193,
@@ -1349,7 +1330,7 @@ mod tests {
             ]
         );
         assert_eq!(
-            sig[1].as_bytes(),
+            sig[1].as_ref(),
             [
                 1, 203, 115, 121, 219, 49, 18, 3, 101, 130, 153, 95, 80, 27, 148, 249, 221, 198,
                 251, 149, 118, 119, 32, 44, 160, 24, 125, 72, 161, 168, 71, 48, 138, 223, 200, 37,
@@ -1405,7 +1386,7 @@ mod tests {
 
     #[test]
     fn rsa_digest_info_is_wrapped() -> TestResult {
-        let data = prepare_digest_data(crate::SignatureType::Pkcs1, HashAlgorithm::SHA1, &[0; 20])?;
+        let data = prepare_digest_data(crate::SignatureType::Pkcs1, HashAlgorithm::Sha1, &[0; 20])?;
 
         assert_eq!(
             data,
@@ -1426,10 +1407,11 @@ mod tests {
     fn ecdsa_wrapped_up_to_max_len(
         #[case] sig_type: crate::SignatureType,
         #[case] max_len: usize,
-        #[values(HashAlgorithm::SHA1, HashAlgorithm::SHA2_256, HashAlgorithm::SHA2_512)] hash_algo: HashAlgorithm,
+        #[values(HashAlgorithm::Sha1, HashAlgorithm::Sha256, HashAlgorithm::Sha512)]
+        hash_algo: HashAlgorithm,
     ) -> TestResult {
         // the digest value is irrelevant - just the size of the digest
-        let digest = hash_algo.new_hasher()?.finish();
+        let digest = hash_algo.new_hasher()?.finalize();
         let data = prepare_digest_data(sig_type, hash_algo, &digest)?;
 
         // The data to be signed size needs to be truncated to the value specific the the curve
@@ -1448,12 +1430,13 @@ mod tests {
 
     #[rstest]
     fn eddsa_is_not_wrapped(
-        #[values(HashAlgorithm::SHA1, HashAlgorithm::SHA2_256, HashAlgorithm::SHA2_512)] hash_algo: HashAlgorithm,
+        #[values(HashAlgorithm::Sha1, HashAlgorithm::Sha256, HashAlgorithm::Sha512)]
+        hash_algo: HashAlgorithm,
     ) -> TestResult {
         // the digest value is irrelevant - just the size of the digest
-        let digest = hash_algo.new_hasher()?.finish();
+        let digest = &hash_algo.new_hasher()?.finalize()[..];
 
-        let data = prepare_digest_data(crate::SignatureType::EdDsa, hash_algo, &digest)?;
+        let data = prepare_digest_data(crate::SignatureType::EdDsa, hash_algo, digest)?;
 
         assert_eq!(data, digest);
 
-- 
GitLab