diff --git a/Cargo.lock b/Cargo.lock index d55a921..10b5a8b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5388,7 +5388,7 @@ checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" [[package]] name = "ironstorage" -version = "1.0.0" +version = "1.0.1" dependencies = [ "apple-native-keyring-store", "arboard", @@ -5435,7 +5435,7 @@ dependencies = [ [[package]] name = "ironstorage-apple" -version = "1.0.0" +version = "1.0.1" dependencies = [ "ironstorage", "uniffi", @@ -5443,7 +5443,7 @@ dependencies = [ [[package]] name = "ironstorage-apple-release" -version = "1.0.0" +version = "1.0.1" dependencies = [ "serde", "serde_json", @@ -5453,7 +5453,7 @@ dependencies = [ [[package]] name = "ironstorage-cli" -version = "1.0.0" +version = "1.0.1" dependencies = [ "ctrlc", "ironstorage", @@ -5463,7 +5463,7 @@ dependencies = [ [[package]] name = "ironstorage-desktop" -version = "1.0.0" +version = "1.0.1" dependencies = [ "ashpd", "iced", @@ -5479,7 +5479,7 @@ dependencies = [ [[package]] name = "ironstorage-macos-packager" -version = "1.0.0" +version = "1.0.1" dependencies = [ "apple-bundles", "apple-codesign", @@ -5490,7 +5490,7 @@ dependencies = [ [[package]] name = "ironstorage-tui" -version = "1.0.0" +version = "1.0.1" dependencies = [ "crossterm", "ironstorage", @@ -5501,7 +5501,7 @@ dependencies = [ [[package]] name = "ironstorage-watch-apple" -version = "1.0.0" +version = "1.0.1" dependencies = [ "ironstorage", "uniffi", diff --git a/Cargo.toml b/Cargo.toml index 82d8e5c..e1f77ca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ members = [ resolver = "3" [workspace.package] -version = "1.0.0" +version = "1.0.1" edition = "2024" rust-version = "1.92" license = "MIT" diff --git a/apple/AppStore/metadata.toml b/apple/AppStore/metadata.toml index 3726313..bdc7020 100644 --- a/apple/AppStore/metadata.toml +++ b/apple/AppStore/metadata.toml @@ -15,11 +15,11 @@ copyright = "2026 rfc1437" review_notes = "IronStorage works entirely on-device without an account or remote service. On first launch, generate a local GPG key and choose a passphrase. You can then create folders without unlocking, and create encrypted password or TOTP entries after entering that passphrase. Git history is initialized locally; HTTPS synchronization is optional and is not needed for review. Entries appear on Apple Watch only after selecting them for Watch sharing on iPhone." [release] -version = "1.0" -build = "7" +version = "1.0.1" +build = "8" minimum_ios = "17.0" minimum_watchos = "26.0" -notes = "Initial iPhone and Apple Watch release with local GPG key generation, pass-compatible local Git history, optional HTTPS synchronization, password folders, and explicitly shared TOTP codes on Apple Watch." +notes = "Pull down on Home to pull remote changes and then push local commits. Pull failures stop synchronization and are shown immediately. Includes OTP QR import improvements and the Apple Watch companion." [[screenshots]] file = "apple/AppStore/screenshots/iphone-6.5/home.png" diff --git a/apple/Generated/ironstorage_apple.swift b/apple/Generated/ironstorage_apple.swift index 5faa2dd..2bb9894 100644 --- a/apple/Generated/ironstorage_apple.swift +++ b/apple/Generated/ironstorage_apple.swift @@ -1254,6 +1254,8 @@ public protocol MobileHomeOperationProtocol: AnyObject, Sendable { func refreshIfStale() throws -> MobileHomePage + func sync() throws -> MobileHomePage + } open class MobileHomeOperation: MobileHomeOperationProtocol, @unchecked Sendable { fileprivate let handle: UInt64 @@ -1380,6 +1382,15 @@ open func refreshIfStale()throws -> MobileHomePage { }) } +open func sync()throws -> MobileHomePage { + return try FfiConverterTypeMobileHomePage_lift(try rustCallWithError(FfiConverterTypeMobileHomeFfiError_lift) { + uniffiCallStatus in + uniffi_ironstorage_apple_fn_method_mobilehomeoperation_sync( + self.uniffiCloneHandle(),uniffiCallStatus + ) +}) +} + } @@ -8120,6 +8131,9 @@ private let initializationResult: InitializationResult = { if (uniffi_ironstorage_apple_checksum_method_mobilehomeoperation_refresh_if_stale() != 27818) { return InitializationResult.apiChecksumMismatch } + if (uniffi_ironstorage_apple_checksum_method_mobilehomeoperation_sync() != 48214) { + return InitializationResult.apiChecksumMismatch + } if (uniffi_ironstorage_apple_checksum_method_mobilekeytransfer_export() != 50467) { return InitializationResult.apiChecksumMismatch } diff --git a/apple/Generated/ironstorage_appleFFI.h b/apple/Generated/ironstorage_appleFFI.h index 2811093..0d7bfa5 100644 --- a/apple/Generated/ironstorage_appleFFI.h +++ b/apple/Generated/ironstorage_appleFFI.h @@ -518,6 +518,11 @@ RustBuffer uniffi_ironstorage_apple_fn_method_mobilehomeoperation_push(uint64_t RustBuffer uniffi_ironstorage_apple_fn_method_mobilehomeoperation_refresh_if_stale(uint64_t ptr, RustCallStatus *_Nonnull out_status ); #endif +#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEHOMEOPERATION_SYNC +#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_METHOD_MOBILEHOMEOPERATION_SYNC +RustBuffer uniffi_ironstorage_apple_fn_method_mobilehomeoperation_sync(uint64_t ptr, RustCallStatus *_Nonnull out_status +); +#endif #ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_CLONE_MOBILEKEYTRANSFER #define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_FN_CLONE_MOBILEKEYTRANSFER uint64_t uniffi_ironstorage_apple_fn_clone_mobilekeytransfer(uint64_t handle, RustCallStatus *_Nonnull out_status @@ -1363,6 +1368,12 @@ uint16_t uniffi_ironstorage_apple_checksum_method_mobilehomeoperation_push(void #define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEHOMEOPERATION_REFRESH_IF_STALE uint16_t uniffi_ironstorage_apple_checksum_method_mobilehomeoperation_refresh_if_stale(void +); +#endif +#ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEHOMEOPERATION_SYNC +#define UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEHOMEOPERATION_SYNC +uint16_t uniffi_ironstorage_apple_checksum_method_mobilehomeoperation_sync(void + ); #endif #ifndef UNIFFI_FFIDEF_UNIFFI_IRONSTORAGE_APPLE_CHECKSUM_METHOD_MOBILEKEYTRANSFER_EXPORT diff --git a/apple/Resources/App/ThirdPartyLicenses.txt b/apple/Resources/App/ThirdPartyLicenses.txt index 81177b4..fe3c7e0 100644 --- a/apple/Resources/App/ThirdPartyLicenses.txt +++ b/apple/Resources/App/ThirdPartyLicenses.txt @@ -14,10 +14,18 @@ aead 0.5.2 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/traits +aead 0.6.1 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/traits + aes-gcm 0.10.3 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/AEADs +aes-gcm 0.11.1 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/AEADs + aes-kw 0.2.1 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/key-wraps/tree/aes-kw @@ -78,6 +86,10 @@ argon2 0.5.3 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/password-hashes/tree/master/argon2 +argon2 0.6.0-rc.8 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/password-hashes + arrayref 0.3.9 License: BSD-2-Clause Source: https://github.com/droundy/arrayref @@ -126,6 +138,10 @@ base16ct 0.2.0 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/formats/tree/master/base16ct +base16ct 1.0.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/formats + base64 0.22.1 License: MIT OR Apache-2.0 Source: https://github.com/marshallpierce/rust-base64 @@ -142,6 +158,10 @@ basic-toml 0.1.10 License: MIT OR Apache-2.0 Source: https://github.com/dtolnay/basic-toml +bcrypt-pbkdf 0.11.0 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/password-hashes + bisync 0.3.0 License: MIT OR Apache-2.0 Source: https://github.com/JM4ier/bisync @@ -178,6 +198,10 @@ blake2 0.10.6 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/hashes +blake2 0.11.0-rc.6 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/hashes + blake2b_simd 1.0.4 License: MIT Source: https://github.com/oconnor663/blake2_simd @@ -204,6 +228,10 @@ block-padding 0.4.2 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/utils +blowfish 0.10.0 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/block-ciphers + blowfish 0.9.1 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/block-ciphers @@ -405,6 +433,10 @@ crypto-bigint 0.5.5 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/crypto-bigint +crypto-bigint 0.7.5 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/crypto-bigint + crypto-common 0.1.7 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/traits @@ -413,6 +445,14 @@ crypto-common 0.2.2 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/traits +crypto-primes 0.7.2 +License: Apache-2.0 OR MIT +Source: https://github.com/entropyxyz/crypto-primes + +ctr 0.10.1 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/block-modes + ctr 0.9.2 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/block-modes @@ -425,6 +465,10 @@ curve25519-dalek 4.1.3 License: BSD-3-Clause Source: https://github.com/dalek-cryptography/curve25519-dalek/tree/main/curve25519-dalek +curve25519-dalek 5.0.0 +License: BSD-3-Clause +Source: https://github.com/dalek-cryptography/curve25519-dalek/tree/main/curve25519-dalek + cx448 0.1.1 License: BSD-3-Clause Source: https://github.com/dignifiedquire/cx448 @@ -467,10 +511,19 @@ defmt 1.1.1 License: MIT OR Apache-2.0 Source: https://github.com/knurling-rs/defmt +delegate 0.13.5 +License: MIT OR Apache-2.0 +Source: https://github.com/kobzol/rust-delegate +Notice: the published crate contains SPDX metadata but no separate license file. + der 0.7.10 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/formats/tree/master/der +der 0.8.1 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/formats + derive_builder 0.20.2 License: MIT OR Apache-2.0 Source: https://github.com/colin-kiegel/rust-derive-builder @@ -495,6 +548,10 @@ des 0.8.1 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/block-ciphers +des 0.9.0 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/block-ciphers + digest 0.10.7 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/traits @@ -523,22 +580,42 @@ ecdsa 0.16.9 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/signatures/tree/master/ecdsa +ecdsa 0.17.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/signatures + ed25519-dalek 2.2.0 License: BSD-3-Clause Source: https://github.com/dalek-cryptography/curve25519-dalek/tree/main/ed25519-dalek +ed25519-dalek 3.0.0 +License: BSD-3-Clause +Source: https://github.com/dalek-cryptography/curve25519-dalek/tree/main/ed25519-dalek + ed25519 2.2.3 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/signatures/tree/master/ed25519 +ed25519 3.0.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/signatures + elliptic-curve 0.13.8 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/traits/tree/master/elliptic-curve +elliptic-curve 0.14.1 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/traits + encoding_rs 0.8.35 License: (Apache-2.0 OR MIT) AND BSD-3-Clause Source: https://github.com/hsivonen/encoding_rs +enum_dispatch 0.3.13 +License: MIT OR Apache-2.0 +Source: https://gitlab.com/antonok/enum_dispatch + equivalent 1.0.2 License: Apache-2.0 OR MIT Source: https://github.com/indexmap-rs/equivalent @@ -563,6 +640,10 @@ ff 0.13.1 License: MIT/Apache-2.0 Source: https://github.com/zkcrypto/ff +ff 0.14.0 +License: MIT/Apache-2.0 +Source: https://github.com/zkcrypto/ff + filetime 0.2.29 License: MIT/Apache-2.0 Source: https://github.com/alexcrichton/filetime @@ -611,6 +692,10 @@ futures-core 0.3.33 License: MIT OR Apache-2.0 Source: https://github.com/rust-lang/futures-rs +futures-executor 0.3.33 +License: MIT OR Apache-2.0 +Source: https://github.com/rust-lang/futures-rs + futures-io 0.3.33 License: MIT OR Apache-2.0 Source: https://github.com/rust-lang/futures-rs @@ -631,6 +716,10 @@ futures-util 0.3.33 License: MIT OR Apache-2.0 Source: https://github.com/rust-lang/futures-rs +futures 0.3.33 +License: MIT OR Apache-2.0 +Source: https://github.com/rust-lang/futures-rs + g2gen 1.2.2 License: MIT/Apache-2.0 Source: https://github.com/WanzenBug/g2p @@ -647,6 +736,10 @@ generic-array 0.14.7 License: MIT Source: https://github.com/fizyk20/generic-array.git +generic-array 1.4.5 +License: MIT +Source: https://github.com/fizyk20/generic-array.git + getrandom 0.2.17 License: MIT OR Apache-2.0 Source: https://github.com/rust-random/getrandom @@ -663,6 +756,10 @@ ghash 0.5.1 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/universal-hashes +ghash 0.6.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/universal-hashes + gif 0.14.2 License: MIT OR Apache-2.0 Source: https://github.com/image-rs/image-gif @@ -887,7 +984,11 @@ group 0.13.0 License: MIT/Apache-2.0 Source: https://github.com/zkcrypto/group -h2 0.4.15 +group 0.14.0 +License: MIT/Apache-2.0 +Source: https://github.com/zkcrypto/group + +h2 0.4.16 License: MIT Source: https://github.com/hyperium/h2 @@ -927,6 +1028,10 @@ hkdf 0.12.4 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/KDFs/ +hkdf 0.13.0 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/KDFs/ + hmac 0.12.1 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/MACs @@ -1031,6 +1136,10 @@ inout 0.2.2 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/utils +internal-russh-num-bigint 0.5.0 +License: MIT OR Apache-2.0 +Source: https://github.com/rust-num/num-bigint + io-extras 0.19.0 License: Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT Source: https://github.com/sunfishcode/io-extras @@ -1079,10 +1188,18 @@ keccak 0.1.6 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/sponges/tree/master/keccak +keccak 0.2.2 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/sponges + keepass 0.13.20 License: MIT Source: https://github.com/sseemayer/keepass-rs +kem 0.3.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/traits + keyring-core 1.0.0 License: MIT OR Apache-2.0 Source: https://github.com/open-source-cooperative/keyring-core.git @@ -1127,6 +1244,10 @@ md-5 0.10.6 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/hashes +md5 0.8.1 +License: Apache-2.0 OR MIT +Source: https://github.com/stainless-steel/md5 + memchr 2.8.3 License: Unlicense OR MIT Source: https://github.com/BurntSushi/memchr @@ -1151,6 +1272,14 @@ mio 1.2.2 License: MIT Source: https://github.com/tokio-rs/mio +ml-kem 0.3.2 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/KEMs + +module-lattice 0.2.3 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/KEMs + moxcms 0.8.1 License: BSD-3-Clause OR Apache-2.0 Source: https://github.com/awxkee/moxcms.git @@ -1175,6 +1304,10 @@ num-bigint-dig 0.8.6 License: MIT/Apache-2.0 Source: https://github.com/dignifiedquire/num-bigint +num-bigint 0.4.8 +License: MIT OR Apache-2.0 +Source: https://github.com/rust-num/num-bigint + num-integer 0.1.46 License: MIT OR Apache-2.0 Source: https://github.com/rust-num/num-integer @@ -1215,14 +1348,26 @@ p256 0.13.2 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/elliptic-curves/tree/master/p256 +p256 0.14.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/elliptic-curves + p384 0.13.1 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/elliptic-curves/tree/master/p384 +p384 0.14.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/elliptic-curves + p521 0.13.3 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/elliptic-curves/tree/master/p521 +p521 0.14.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/elliptic-curves + parking_lot 0.12.5 License: MIT OR Apache-2.0 Source: https://github.com/Amanieu/parking_lot @@ -1235,10 +1380,22 @@ password-hash 0.5.0 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/traits/tree/master/password-hash +password-hash 0.6.1 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/traits + +pbkdf2 0.13.0 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/password-hashes + pem-rfc7468 0.7.0 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/formats/tree/master/pem-rfc7468 +pem-rfc7468 1.0.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/formats + percent-encoding 2.3.2 License: MIT OR Apache-2.0 Source: https://github.com/servo/rust-url/ @@ -1247,6 +1404,10 @@ pgp 0.20.0 License: MIT OR Apache-2.0 Source: https://github.com/rpgp/rpgp +phc 0.6.1 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/formats + pin-project-lite 0.2.17 License: Apache-2.0 OR MIT Source: https://github.com/taiki-e/pin-project-lite @@ -1255,10 +1416,22 @@ pkcs1 0.7.5 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/formats/tree/master/pkcs1 +pkcs1 0.8.0-rc.4 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/formats + +pkcs5 0.8.1 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/formats + pkcs8 0.10.2 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/formats/tree/master/pkcs8 +pkcs8 0.11.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/formats + pkg-config 0.3.33 License: MIT OR Apache-2.0 Source: https://github.com/rust-lang/pkg-config-rs @@ -1271,10 +1444,18 @@ png 0.18.1 License: MIT OR Apache-2.0 Source: https://github.com/image-rs/image-png +poly1305 0.9.1 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/universal-hashes + polyval 0.6.2 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/universal-hashes +polyval 0.7.3 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/universal-hashes + potential_utf 0.1.5 License: Unicode-3.0 Source: https://github.com/unicode-org/icu4x @@ -1283,10 +1464,18 @@ ppv-lite86 0.2.21 License: MIT OR Apache-2.0 Source: https://github.com/cryptocorrosion/cryptocorrosion +primefield 0.14.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/elliptic-curves + primeorder 0.13.6 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/elliptic-curves/tree/master/primeorder +primeorder 0.14.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/elliptic-curves + proc-macro-crate 3.5.0 License: MIT OR Apache-2.0 Source: https://github.com/bkchr/proc-macro-crate @@ -1379,6 +1568,10 @@ rfc6979 0.4.0 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/signatures/tree/master/rfc6979 +rfc6979 0.6.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/signatures + ring 0.17.14 License: Apache-2.0 AND ISC Source: https://github.com/briansmith/ring @@ -1391,10 +1584,29 @@ rqrr 0.10.1 License: (MIT OR Apache-2.0) AND ISC Source: https://github.com/WanzenBug/rqrr +rsa 0.10.0-rc.18 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/RSA + rsa 0.9.10 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/RSA +russh-cryptovec 0.62.0 +License: Apache-2.0 +Source: https://github.com/warp-tech/russh +Notice: the published crate contains SPDX metadata but no separate license file. + +russh-util 0.52.0 +License: Apache-2.0 +Source: https://github.com/warp-tech/russh +Notice: the published crate contains SPDX metadata but no separate license file. + +russh 0.63.1 +License: Apache-2.0 +Source: https://github.com/warp-tech/russh +Notice: the published crate contains SPDX metadata but no separate license file. + rust-argon2 3.0.0 License: MIT/Apache-2.0 Source: https://github.com/sru-systems/rust-argon2 @@ -1455,10 +1667,18 @@ scroll_derive 0.12.1 License: MIT Source: https://github.com/m4b/scroll +scrypt 0.12.0 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/password-hashes + sec1 0.7.3 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/formats/tree/master/sec1 +sec1 0.8.1 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/formats + secrecy 0.10.3 License: Apache-2.0 OR MIT Source: https://github.com/iqlusioninc/crates/tree/main/secrecy @@ -1503,6 +1723,10 @@ serdect 0.3.0 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/formats +serdect 0.4.3 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/formats + sha1-checked 0.10.0 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/hashes @@ -1511,6 +1735,10 @@ sha1 0.10.7 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/hashes +sha1 0.11.0 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/hashes + sha2 0.10.9 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/hashes @@ -1523,6 +1751,14 @@ sha3 0.10.9 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/hashes +sha3 0.11.0 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/hashes + +sha3 0.12.0 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/hashes + shell-words 1.1.1 License: MIT/Apache-2.0 Source: https://github.com/tmiasko/shell-words @@ -1543,6 +1779,10 @@ signature 2.2.0 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/traits/tree/master/signature +signature 3.0.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/traits + simd-adler32 0.3.10 License: MIT Source: https://github.com/mcountryman/simd-adler32 @@ -1583,6 +1823,26 @@ spki 0.7.3 License: Apache-2.0 OR MIT Source: https://github.com/RustCrypto/formats/tree/master/spki +spki 0.8.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/formats + +sponge-cursor 0.1.0 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/utils + +ssh-cipher 0.3.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/SSH + +ssh-encoding 0.3.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/SSH + +ssh-key 0.7.0-rc.11 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/SSH + stable_deref_trait 1.2.1 License: MIT OR Apache-2.0 Source: https://github.com/storyyeller/stable_deref_trait @@ -1647,10 +1907,18 @@ tinyvec_macros 0.1.1 License: MIT OR Apache-2.0 OR Zlib Source: https://github.com/Soveu/tinyvec_macros +tokio-macros 2.7.2 +License: MIT +Source: https://github.com/tokio-rs/tokio + tokio-rustls 0.26.4 License: MIT OR Apache-2.0 Source: https://github.com/rustls/tokio-rustls +tokio-stream 0.1.19 +License: MIT +Source: https://github.com/tokio-rs/tokio + tokio-util 0.7.19 License: MIT Source: https://github.com/tokio-rs/tokio @@ -1795,6 +2063,10 @@ universal-hash 0.5.1 License: MIT OR Apache-2.0 Source: https://github.com/RustCrypto/traits +universal-hash 0.6.1 +License: MIT OR Apache-2.0 +Source: https://github.com/RustCrypto/traits + untrusted 0.9.0 License: ISC Source: https://github.com/briansmith/untrusted @@ -1847,6 +2119,10 @@ winnow 1.0.4 License: MIT Source: https://github.com/winnow-rs/winnow +wnaf 0.14.0 +License: Apache-2.0 OR MIT +Source: https://github.com/RustCrypto/elliptic-curves + writeable 0.6.3 License: Unicode-3.0 Source: https://github.com/unicode-org/icu4x @@ -2101,7 +2377,7 @@ Apache License END OF TERMS AND CONDITIONS -Used by: cmov 0.5.4 (LICENSE-APACHE), ctutils 0.4.2 (LICENSE-APACHE), encoding_rs 0.8.35 (LICENSE-APACHE), lru-slab 0.1.2 (LICENSE-APACHE), qrcode 0.14.1 (LICENSE-APACHE.txt), secrecy 0.10.3 (LICENSE-APACHE), serdect 0.2.0 (LICENSE-APACHE), serdect 0.3.0 (LICENSE-APACHE), static_assertions 1.1.0 (LICENSE-APACHE), tinyvec 1.12.0 (LICENSE-APACHE.md), utf8_iter 1.0.4 (LICENSE-APACHE), zeroize 1.9.0 (LICENSE-APACHE), zeroize_derive 1.5.0 (LICENSE-APACHE) +Used by: cmov 0.5.4 (LICENSE-APACHE), ctutils 0.4.2 (LICENSE-APACHE), encoding_rs 0.8.35 (LICENSE-APACHE), lru-slab 0.1.2 (LICENSE-APACHE), qrcode 0.14.1 (LICENSE-APACHE.txt), secrecy 0.10.3 (LICENSE-APACHE), serdect 0.2.0 (LICENSE-APACHE), serdect 0.3.0 (LICENSE-APACHE), serdect 0.4.3 (LICENSE-APACHE), static_assertions 1.1.0 (LICENSE-APACHE), tinyvec 1.12.0 (LICENSE-APACHE.md), utf8_iter 1.0.4 (LICENSE-APACHE), zeroize 1.9.0 (LICENSE-APACHE), zeroize_derive 1.5.0 (LICENSE-APACHE) Apache License Version 2.0, January 2004 @@ -3412,7 +3688,7 @@ Apache License See the License for the specific language governing permissions and limitations under the License. -Used by: quinn-proto 0.11.16 (LICENSE-APACHE), quinn-udp 0.5.15 (LICENSE-APACHE), quinn 0.11.11 (LICENSE-APACHE), rustls-platform-verifier 0.7.0 (LICENSE-APACHE), zune-core 0.5.3 (LICENSE-APACHE), zune-jpeg 0.5.15 (LICENSE-APACHE) +Used by: crypto-primes 0.7.2 (LICENSE-APACHE), quinn-proto 0.11.16 (LICENSE-APACHE), quinn-udp 0.5.15 (LICENSE-APACHE), quinn 0.11.11 (LICENSE-APACHE), rustls-platform-verifier 0.7.0 (LICENSE-APACHE), zune-core 0.5.3 (LICENSE-APACHE), zune-jpeg 0.5.15 (LICENSE-APACHE) Apache License Version 2.0, January 2004 @@ -4407,7 +4683,7 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS -Used by: futures-channel 0.3.33 (LICENSE-APACHE), futures-core 0.3.33 (LICENSE-APACHE), futures-io 0.3.33 (LICENSE-APACHE), futures-macro 0.3.33 (LICENSE-APACHE), futures-sink 0.3.33 (LICENSE-APACHE), futures-task 0.3.33 (LICENSE-APACHE), futures-util 0.3.33 (LICENSE-APACHE) +Used by: futures-channel 0.3.33 (LICENSE-APACHE), futures-core 0.3.33 (LICENSE-APACHE), futures-executor 0.3.33 (LICENSE-APACHE), futures-io 0.3.33 (LICENSE-APACHE), futures-macro 0.3.33 (LICENSE-APACHE), futures-sink 0.3.33 (LICENSE-APACHE), futures-task 0.3.33 (LICENSE-APACHE), futures-util 0.3.33 (LICENSE-APACHE), futures 0.3.33 (LICENSE-APACHE) Apache License Version 2.0, January 2004 @@ -5632,7 +5908,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -Used by: des 0.8.1 (LICENSE-APACHE) +Used by: des 0.8.1 (LICENSE-APACHE), des 0.9.0 (LICENSE-APACHE) Apache License Version 2.0, January 2004 @@ -6448,7 +6724,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -Used by: dsa 0.6.3 (LICENSE-APACHE), ecdsa 0.16.9 (LICENSE-APACHE), ed25519 2.2.3 (LICENSE-APACHE), rfc6979 0.4.0 (LICENSE-APACHE) +Used by: dsa 0.6.3 (LICENSE-APACHE), ecdsa 0.16.9 (LICENSE-APACHE), ecdsa 0.17.0 (LICENSE-APACHE), ed25519 2.2.3 (LICENSE-APACHE), ed25519 3.0.0 (LICENSE-APACHE), rfc6979 0.4.0 (LICENSE-APACHE), rfc6979 0.6.0 (LICENSE-APACHE) Apache License Version 2.0, January 2004 @@ -7876,7 +8152,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -Used by: ahash 0.8.12 (LICENSE-APACHE), ambient-authority 0.0.2 (LICENSE-APACHE), arc-swap 1.9.2 (LICENSE-APACHE), arrayvec 0.7.8 (LICENSE-APACHE), atomic-waker 1.1.2 (LICENSE-APACHE), atomic 0.6.1 (LICENSE-APACHE), autocfg 1.5.1 (LICENSE-APACHE), base64 0.22.1 (LICENSE-APACHE), base64 0.23.1 (LICENSE-APACHE), bitflags 1.3.2 (LICENSE-APACHE), bitflags 2.13.1 (LICENSE-APACHE), bstr 1.13.0 (LICENSE-APACHE), camino 1.2.5 (LICENSE-APACHE), cap-primitives 4.0.2 (LICENSE-APACHE), cap-std 4.0.2 (LICENSE-APACHE), cap-tempfile 4.0.2 (LICENSE-APACHE), cc 1.4.0 (LICENSE-APACHE), cfg-if 1.0.4 (LICENSE-APACHE), cmake 0.1.58 (LICENSE-APACHE), core-foundation-sys 0.8.7 (LICENSE-APACHE), core-foundation 0.10.1 (LICENSE-APACHE), crossbeam-channel 0.5.16 (LICENSE-APACHE), crossbeam-utils 0.8.22 (LICENSE-APACHE), displaydoc 0.2.7 (LICENSE-APACHE), equivalent 1.0.2 (LICENSE-APACHE), errno 0.3.14 (LICENSE-APACHE), fastrand 2.5.0 (LICENSE-APACHE), filetime 0.2.29 (LICENSE-APACHE), find-msvc-tools 0.1.9 (LICENSE-APACHE), flate2 1.1.9 (LICENSE-APACHE), fnv 1.0.7 (LICENSE-APACHE), form_urlencoded 1.2.2 (LICENSE-APACHE), fs-err 3.3.1 (LICENSE-APACHE), fs-set-times 0.20.3 (LICENSE-APACHE), gif 0.14.2 (LICENSE-APACHE), gix-imara-diff 0.2.4 (LICENSE), glob 0.3.4 (LICENSE-APACHE), group 0.13.0 (LICENSE-APACHE), hash32 0.3.1 (LICENSE-APACHE), hashbrown 0.14.5 (LICENSE-APACHE), hashbrown 0.16.1 (LICENSE-APACHE), hashbrown 0.17.1 (LICENSE-APACHE), heapless 0.8.0 (LICENSE-APACHE), heck 0.5.0 (LICENSE-APACHE), httparse 1.10.1 (LICENSE-APACHE), hyper-rustls 0.27.9 (LICENSE-APACHE), idna 1.1.0 (LICENSE-APACHE), idna_adapter 1.2.2 (LICENSE-APACHE), indexmap 2.14.0 (LICENSE-APACHE), io-extras 0.19.0 (LICENSE-APACHE), io-lifetimes 2.0.4 (LICENSE-APACHE), io-lifetimes 3.0.1 (LICENSE-APACHE), jobserver 0.1.35 (LICENSE-APACHE), lazy_static 1.5.0 (LICENSE-APACHE), lock_api 0.4.14 (LICENSE-APACHE), log 0.4.33 (LICENSE-APACHE), mime 0.3.17 (LICENSE-APACHE), num-bigint-dig 0.8.6 (LICENSE-APACHE), num-integer 0.1.46 (LICENSE-APACHE), num-iter 0.1.46 (LICENSE-APACHE), num-traits 0.2.19 (LICENSE-APACHE), once_cell 1.21.4 (LICENSE-APACHE), openssl-probe 0.2.1 (LICENSE-APACHE), parking_lot 0.12.5 (LICENSE-APACHE), parking_lot_core 0.9.12 (LICENSE-APACHE), percent-encoding 2.3.2 (LICENSE-APACHE), pgp 0.20.0 (LICENSE-APACHE), pkg-config 0.3.33 (LICENSE-APACHE), plain 0.2.3 (LICENSE-APACHE), png 0.18.1 (LICENSE-APACHE), regex-automata 0.4.16 (LICENSE-APACHE), regex-syntax 0.8.11 (LICENSE-APACHE), regex 1.13.1 (LICENSE-APACHE), rsa 0.9.10 (LICENSE-APACHE), rust-argon2 3.0.0 (LICENSE-APACHE), rustc_version 0.4.1 (LICENSE-APACHE), rustix 1.1.4 (LICENSE-APACHE), rustls-native-certs 0.8.4 (LICENSE-APACHE), rustls 0.23.43 (LICENSE-APACHE), scopeguard 1.2.0 (LICENSE-APACHE), security-framework-sys 2.17.0 (LICENSE-APACHE), security-framework 3.7.0 (LICENSE-APACHE), signal-hook-registry 1.4.8 (LICENSE-APACHE), smallvec 1.15.2 (LICENSE-APACHE), socket2 0.6.5 (LICENSE-APACHE), stable_deref_trait 1.2.1 (LICENSE-APACHE), tempfile 3.27.0 (LICENSE-APACHE), unicode-normalization 0.1.25 (LICENSE-APACHE), unicode-segmentation 1.13.3 (LICENSE-APACHE), unicode-xid 0.2.6 (LICENSE-APACHE), url 2.5.8 (LICENSE-APACHE), uuid 1.24.0 (LICENSE-APACHE), version_check 0.9.5 (LICENSE-APACHE), weezl 0.1.12 (LICENSE-APACHE) +Used by: ahash 0.8.12 (LICENSE-APACHE), ambient-authority 0.0.2 (LICENSE-APACHE), arc-swap 1.9.2 (LICENSE-APACHE), arrayvec 0.7.8 (LICENSE-APACHE), atomic-waker 1.1.2 (LICENSE-APACHE), atomic 0.6.1 (LICENSE-APACHE), autocfg 1.5.1 (LICENSE-APACHE), base64 0.22.1 (LICENSE-APACHE), base64 0.23.1 (LICENSE-APACHE), bitflags 1.3.2 (LICENSE-APACHE), bitflags 2.13.1 (LICENSE-APACHE), bstr 1.13.0 (LICENSE-APACHE), camino 1.2.5 (LICENSE-APACHE), cap-primitives 4.0.2 (LICENSE-APACHE), cap-std 4.0.2 (LICENSE-APACHE), cap-tempfile 4.0.2 (LICENSE-APACHE), cc 1.4.0 (LICENSE-APACHE), cfg-if 1.0.4 (LICENSE-APACHE), cmake 0.1.58 (LICENSE-APACHE), core-foundation-sys 0.8.7 (LICENSE-APACHE), core-foundation 0.10.1 (LICENSE-APACHE), crossbeam-channel 0.5.16 (LICENSE-APACHE), crossbeam-utils 0.8.22 (LICENSE-APACHE), displaydoc 0.2.7 (LICENSE-APACHE), equivalent 1.0.2 (LICENSE-APACHE), errno 0.3.14 (LICENSE-APACHE), fastrand 2.5.0 (LICENSE-APACHE), filetime 0.2.29 (LICENSE-APACHE), find-msvc-tools 0.1.9 (LICENSE-APACHE), flate2 1.1.9 (LICENSE-APACHE), fnv 1.0.7 (LICENSE-APACHE), form_urlencoded 1.2.2 (LICENSE-APACHE), fs-err 3.3.1 (LICENSE-APACHE), fs-set-times 0.20.3 (LICENSE-APACHE), gif 0.14.2 (LICENSE-APACHE), gix-imara-diff 0.2.4 (LICENSE), glob 0.3.4 (LICENSE-APACHE), group 0.13.0 (LICENSE-APACHE), group 0.14.0 (LICENSE-APACHE), hash32 0.3.1 (LICENSE-APACHE), hashbrown 0.14.5 (LICENSE-APACHE), hashbrown 0.16.1 (LICENSE-APACHE), hashbrown 0.17.1 (LICENSE-APACHE), heapless 0.8.0 (LICENSE-APACHE), heck 0.5.0 (LICENSE-APACHE), httparse 1.10.1 (LICENSE-APACHE), hyper-rustls 0.27.9 (LICENSE-APACHE), idna 1.1.0 (LICENSE-APACHE), idna_adapter 1.2.2 (LICENSE-APACHE), indexmap 2.14.0 (LICENSE-APACHE), internal-russh-num-bigint 0.5.0 (LICENSE-APACHE), io-extras 0.19.0 (LICENSE-APACHE), io-lifetimes 2.0.4 (LICENSE-APACHE), io-lifetimes 3.0.1 (LICENSE-APACHE), jobserver 0.1.35 (LICENSE-APACHE), lazy_static 1.5.0 (LICENSE-APACHE), lock_api 0.4.14 (LICENSE-APACHE), log 0.4.33 (LICENSE-APACHE), mime 0.3.17 (LICENSE-APACHE), num-bigint-dig 0.8.6 (LICENSE-APACHE), num-bigint 0.4.8 (LICENSE-APACHE), num-integer 0.1.46 (LICENSE-APACHE), num-iter 0.1.46 (LICENSE-APACHE), num-traits 0.2.19 (LICENSE-APACHE), once_cell 1.21.4 (LICENSE-APACHE), openssl-probe 0.2.1 (LICENSE-APACHE), parking_lot 0.12.5 (LICENSE-APACHE), parking_lot_core 0.9.12 (LICENSE-APACHE), percent-encoding 2.3.2 (LICENSE-APACHE), pgp 0.20.0 (LICENSE-APACHE), pkg-config 0.3.33 (LICENSE-APACHE), plain 0.2.3 (LICENSE-APACHE), png 0.18.1 (LICENSE-APACHE), regex-automata 0.4.16 (LICENSE-APACHE), regex-syntax 0.8.11 (LICENSE-APACHE), regex 1.13.1 (LICENSE-APACHE), rsa 0.10.0-rc.18 (LICENSE-APACHE), rsa 0.9.10 (LICENSE-APACHE), rust-argon2 3.0.0 (LICENSE-APACHE), rustc_version 0.4.1 (LICENSE-APACHE), rustix 1.1.4 (LICENSE-APACHE), rustls-native-certs 0.8.4 (LICENSE-APACHE), rustls 0.23.43 (LICENSE-APACHE), scopeguard 1.2.0 (LICENSE-APACHE), security-framework-sys 2.17.0 (LICENSE-APACHE), security-framework 3.7.0 (LICENSE-APACHE), signal-hook-registry 1.4.8 (LICENSE-APACHE), smallvec 1.15.2 (LICENSE-APACHE), socket2 0.6.5 (LICENSE-APACHE), stable_deref_trait 1.2.1 (LICENSE-APACHE), tempfile 3.27.0 (LICENSE-APACHE), unicode-normalization 0.1.25 (LICENSE-APACHE), unicode-segmentation 1.13.3 (LICENSE-APACHE), unicode-xid 0.2.6 (LICENSE-APACHE), url 2.5.8 (LICENSE-APACHE), uuid 1.24.0 (LICENSE-APACHE), version_check 0.9.5 (LICENSE-APACHE), weezl 0.1.12 (LICENSE-APACHE) Apache License Version 2.0, January 2004 @@ -8080,7 +8356,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -Used by: ff 0.13.1 (LICENSE-APACHE) +Used by: bcrypt-pbkdf 0.11.0 (LICENSE-APACHE), ff 0.13.1 (LICENSE-APACHE), ff 0.14.0 (LICENSE-APACHE) Apache License Version 2.0, January 2004 @@ -8488,7 +8764,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -Used by: aes-gcm 0.10.3 (LICENSE-APACHE), aes-kw 0.2.1 (LICENSE-APACHE), aes 0.8.4 (LICENSE-APACHE), aes 0.9.2 (LICENSE-APACHE), argon2 0.5.3 (LICENSE-APACHE), base16ct 0.2.0 (LICENSE-APACHE), base64ct 1.8.3 (LICENSE-APACHE), blake2 0.10.6 (LICENSE-APACHE), block-buffer 0.10.4 (LICENSE-APACHE), block-buffer 0.12.1 (LICENSE-APACHE), block-padding 0.3.3 (LICENSE-APACHE), block-padding 0.4.2 (LICENSE-APACHE), blowfish 0.9.1 (LICENSE-APACHE), camellia 0.1.0 (LICENSE-APACHE), cast5 0.11.1 (LICENSE-APACHE), cbc 0.2.1 (LICENSE-APACHE), cfb-mode 0.8.2 (LICENSE-APACHE), chacha20 0.10.1 (LICENSE-APACHE), cipher 0.4.4 (LICENSE-APACHE), cipher 0.5.2 (LICENSE-APACHE), cmac 0.7.2 (LICENSE-APACHE), const-oid 0.10.2 (LICENSE-APACHE), const-oid 0.9.6 (LICENSE-APACHE), cpubits 0.1.1 (LICENSE-APACHE), cpufeatures 0.2.17 (LICENSE-APACHE), cpufeatures 0.3.0 (LICENSE-APACHE), crypto-bigint 0.5.5 (LICENSE-APACHE), crypto-common 0.1.7 (LICENSE-APACHE), crypto-common 0.2.2 (LICENSE-APACHE), ctr 0.9.2 (LICENSE-APACHE), dbl 0.3.2 (LICENSE-APACHE), der 0.7.10 (LICENSE-APACHE), digest 0.10.7 (LICENSE-APACHE), digest 0.11.3 (LICENSE-APACHE), eax 0.5.0 (LICENSE-APACHE), elliptic-curve 0.13.8 (LICENSE-APACHE), ghash 0.5.1 (LICENSE-APACHE), hex-literal 1.1.0 (LICENSE-APACHE), hkdf 0.12.4 (LICENSE-APACHE), hmac 0.12.1 (LICENSE-APACHE), hmac 0.13.0 (LICENSE-APACHE), hybrid-array 0.4.14 (LICENSE-APACHE), idea 0.5.1 (LICENSE-APACHE), inout 0.1.4 (LICENSE-APACHE), inout 0.2.2 (LICENSE-APACHE), k256 0.13.4 (LICENSE-APACHE), keccak 0.1.6 (LICENSE-APACHE), md-5 0.10.6 (LICENSE-APACHE), ocb3 0.1.0 (LICENSE-APACHE), opaque-debug 0.3.1 (LICENSE-APACHE), p256 0.13.2 (LICENSE-APACHE), p384 0.13.1 (LICENSE-APACHE), p521 0.13.3 (LICENSE-APACHE), password-hash 0.5.0 (LICENSE-APACHE), pem-rfc7468 0.7.0 (LICENSE-APACHE), pkcs1 0.7.5 (LICENSE-APACHE), pkcs8 0.10.2 (LICENSE-APACHE), polyval 0.6.2 (LICENSE-APACHE), primeorder 0.13.6 (LICENSE-APACHE), ripemd 0.1.3 (LICENSE-APACHE), salsa20 0.11.0 (LICENSE-APACHE), sec1 0.7.3 (LICENSE-APACHE), sha1-checked 0.10.0 (LICENSE-APACHE), sha1 0.10.7 (LICENSE-APACHE), sha2 0.10.9 (LICENSE-APACHE), sha2 0.11.0 (LICENSE-APACHE), sha3 0.10.9 (LICENSE-APACHE), signature 2.2.0 (LICENSE-APACHE), spki 0.7.3 (LICENSE-APACHE), twofish 0.7.1 (LICENSE-APACHE), twofish 0.8.0 (LICENSE-APACHE), universal-hash 0.5.1 (LICENSE-APACHE) +Used by: aes-gcm 0.10.3 (LICENSE-APACHE), aes-gcm 0.11.1 (LICENSE-APACHE), aes-kw 0.2.1 (LICENSE-APACHE), aes 0.8.4 (LICENSE-APACHE), aes 0.9.2 (LICENSE-APACHE), argon2 0.5.3 (LICENSE-APACHE), argon2 0.6.0-rc.8 (LICENSE-APACHE), base16ct 0.2.0 (LICENSE-APACHE), base16ct 1.0.0 (LICENSE-APACHE), base64ct 1.8.3 (LICENSE-APACHE), blake2 0.10.6 (LICENSE-APACHE), blake2 0.11.0-rc.6 (LICENSE-APACHE), block-buffer 0.10.4 (LICENSE-APACHE), block-buffer 0.12.1 (LICENSE-APACHE), block-padding 0.3.3 (LICENSE-APACHE), block-padding 0.4.2 (LICENSE-APACHE), blowfish 0.10.0 (LICENSE-APACHE), blowfish 0.9.1 (LICENSE-APACHE), camellia 0.1.0 (LICENSE-APACHE), cast5 0.11.1 (LICENSE-APACHE), cbc 0.2.1 (LICENSE-APACHE), cfb-mode 0.8.2 (LICENSE-APACHE), chacha20 0.10.1 (LICENSE-APACHE), cipher 0.4.4 (LICENSE-APACHE), cipher 0.5.2 (LICENSE-APACHE), cmac 0.7.2 (LICENSE-APACHE), const-oid 0.10.2 (LICENSE-APACHE), const-oid 0.9.6 (LICENSE-APACHE), cpubits 0.1.1 (LICENSE-APACHE), cpufeatures 0.2.17 (LICENSE-APACHE), cpufeatures 0.3.0 (LICENSE-APACHE), crypto-bigint 0.5.5 (LICENSE-APACHE), crypto-bigint 0.7.5 (LICENSE-APACHE), crypto-common 0.1.7 (LICENSE-APACHE), crypto-common 0.2.2 (LICENSE-APACHE), ctr 0.10.1 (LICENSE-APACHE), ctr 0.9.2 (LICENSE-APACHE), dbl 0.3.2 (LICENSE-APACHE), der 0.7.10 (LICENSE-APACHE), der 0.8.1 (LICENSE-APACHE), digest 0.10.7 (LICENSE-APACHE), digest 0.11.3 (LICENSE-APACHE), eax 0.5.0 (LICENSE-APACHE), elliptic-curve 0.13.8 (LICENSE-APACHE), elliptic-curve 0.14.1 (LICENSE-APACHE), ghash 0.5.1 (LICENSE-APACHE), ghash 0.6.0 (LICENSE-APACHE), hex-literal 1.1.0 (LICENSE-APACHE), hkdf 0.12.4 (LICENSE-APACHE), hkdf 0.13.0 (LICENSE-APACHE), hmac 0.12.1 (LICENSE-APACHE), hmac 0.13.0 (LICENSE-APACHE), hybrid-array 0.4.14 (LICENSE-APACHE), idea 0.5.1 (LICENSE-APACHE), inout 0.1.4 (LICENSE-APACHE), inout 0.2.2 (LICENSE-APACHE), k256 0.13.4 (LICENSE-APACHE), keccak 0.1.6 (LICENSE-APACHE), keccak 0.2.2 (LICENSE-APACHE), md-5 0.10.6 (LICENSE-APACHE), ml-kem 0.3.2 (LICENSE-APACHE), module-lattice 0.2.3 (LICENSE-APACHE), ocb3 0.1.0 (LICENSE-APACHE), opaque-debug 0.3.1 (LICENSE-APACHE), p256 0.13.2 (LICENSE-APACHE), p256 0.14.0 (LICENSE-APACHE), p384 0.13.1 (LICENSE-APACHE), p384 0.14.0 (LICENSE-APACHE), p521 0.13.3 (LICENSE-APACHE), p521 0.14.0 (LICENSE-APACHE), password-hash 0.5.0 (LICENSE-APACHE), password-hash 0.6.1 (LICENSE-APACHE), pbkdf2 0.13.0 (LICENSE-APACHE), pem-rfc7468 0.7.0 (LICENSE-APACHE), pem-rfc7468 1.0.0 (LICENSE-APACHE), phc 0.6.1 (LICENSE-APACHE), pkcs1 0.7.5 (LICENSE-APACHE), pkcs1 0.8.0-rc.4 (LICENSE-APACHE), pkcs5 0.8.1 (LICENSE-APACHE), pkcs8 0.10.2 (LICENSE-APACHE), pkcs8 0.11.0 (LICENSE-APACHE), poly1305 0.9.1 (LICENSE-APACHE), polyval 0.6.2 (LICENSE-APACHE), polyval 0.7.3 (LICENSE-APACHE), primefield 0.14.0 (LICENSE-APACHE), primeorder 0.13.6 (LICENSE-APACHE), primeorder 0.14.0 (LICENSE-APACHE), ripemd 0.1.3 (LICENSE-APACHE), salsa20 0.11.0 (LICENSE-APACHE), scrypt 0.12.0 (LICENSE-APACHE), sec1 0.7.3 (LICENSE-APACHE), sec1 0.8.1 (LICENSE-APACHE), sha1-checked 0.10.0 (LICENSE-APACHE), sha1 0.10.7 (LICENSE-APACHE), sha1 0.11.0 (LICENSE-APACHE), sha2 0.10.9 (LICENSE-APACHE), sha2 0.11.0 (LICENSE-APACHE), sha3 0.10.9 (LICENSE-APACHE), sha3 0.11.0 (LICENSE-APACHE), sha3 0.12.0 (LICENSE-APACHE), signature 2.2.0 (LICENSE-APACHE), signature 3.0.0 (LICENSE-APACHE), spki 0.7.3 (LICENSE-APACHE), spki 0.8.0 (LICENSE-APACHE), sponge-cursor 0.1.0 (LICENSE-APACHE), ssh-cipher 0.3.0 (LICENSE-APACHE), ssh-encoding 0.3.0 (LICENSE-APACHE), ssh-key 0.7.0-rc.11 (LICENSE-APACHE), twofish 0.7.1 (LICENSE-APACHE), twofish 0.8.0 (LICENSE-APACHE), universal-hash 0.5.1 (LICENSE-APACHE), universal-hash 0.6.1 (LICENSE-APACHE), wnaf 0.14.0 (LICENSE-APACHE) Apache License Version 2.0, January 2004 @@ -8692,7 +8968,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -Used by: aead 0.5.2 (LICENSE-APACHE) +Used by: aead 0.5.2 (LICENSE-APACHE), aead 0.6.1 (LICENSE-APACHE) Apache License Version 2.0, January 2004 @@ -9766,6 +10042,58 @@ agreement. of Data, including for example machine learning models and models' insights. +Used by: md5 0.8.1 (LICENSE.md) + +# License + +The project is dual licensed under the terms of the Apache License, Version 2.0, +and the MIT License. You may obtain copies of the two licenses at + +* https://www.apache.org/licenses/LICENSE-2.0 and +* https://opensource.org/licenses/MIT, respectively. + +The following two notices apply to every file of the project. + +## The Apache License + +``` +Copyright 2015–2026 The md5 Developers + +Licensed under the Apache License, Version 2.0 (the “License”); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. +``` + +## The MIT License + +``` +Copyright 2015–2026 The md5 Developers + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the “Software”), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` + Used by: zlib-rs 0.6.7 (LICENSE) (C) 2024 Trifecta Tech Foundation @@ -11655,7 +11983,36 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: bitflags 1.3.2 (LICENSE-MIT), bitflags 2.13.1 (LICENSE-MIT), glob 0.3.4 (LICENSE-MIT), log 0.4.33 (LICENSE-MIT), num-bigint-dig 0.8.6 (LICENSE-MIT), num-integer 0.1.46 (LICENSE-MIT), num-iter 0.1.46 (LICENSE-MIT), num-traits 0.2.19 (LICENSE-MIT), regex-automata 0.4.16 (LICENSE-MIT), regex-syntax 0.8.11 (LICENSE-MIT), regex 1.13.1 (LICENSE-MIT) +Used by: base16ct 1.0.0 (LICENSE-MIT) + +Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com) +Copyright (c) 2022-2025 The RustCrypto Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +Used by: bitflags 1.3.2 (LICENSE-MIT), bitflags 2.13.1 (LICENSE-MIT), glob 0.3.4 (LICENSE-MIT), internal-russh-num-bigint 0.5.0 (LICENSE-MIT), log 0.4.33 (LICENSE-MIT), num-bigint-dig 0.8.6 (LICENSE-MIT), num-bigint 0.4.8 (LICENSE-MIT), num-integer 0.1.46 (LICENSE-MIT), num-iter 0.1.46 (LICENSE-MIT), num-traits 0.2.19 (LICENSE-MIT), regex-automata 0.4.16 (LICENSE-MIT), regex-syntax 0.8.11 (LICENSE-MIT), regex 1.13.1 (LICENSE-MIT) Copyright (c) 2014 The Rust Project Developers @@ -11956,7 +12313,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: hkdf 0.12.4 (LICENSE-MIT) +Used by: hkdf 0.12.4 (LICENSE-MIT), hkdf 0.13.0 (LICENSE-MIT) Copyright (c) 2015-2018 Vlad Filippov Copyright (c) 2018-2021 RustCrypto Developers @@ -12007,7 +12364,35 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: futures-channel 0.3.33 (LICENSE-MIT), futures-core 0.3.33 (LICENSE-MIT), futures-io 0.3.33 (LICENSE-MIT), futures-macro 0.3.33 (LICENSE-MIT), futures-sink 0.3.33 (LICENSE-MIT), futures-task 0.3.33 (LICENSE-MIT), futures-util 0.3.33 (LICENSE-MIT) +Used by: poly1305 0.9.1 (LICENSE-MIT) + +Copyright (c) 2015-2026 The RustCrypto Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +Used by: futures-channel 0.3.33 (LICENSE-MIT), futures-core 0.3.33 (LICENSE-MIT), futures-executor 0.3.33 (LICENSE-MIT), futures-io 0.3.33 (LICENSE-MIT), futures-macro 0.3.33 (LICENSE-MIT), futures-sink 0.3.33 (LICENSE-MIT), futures-task 0.3.33 (LICENSE-MIT), futures-util 0.3.33 (LICENSE-MIT), futures 0.3.33 (LICENSE-MIT) Copyright (c) 2016 Alex Crichton Copyright (c) 2017 The Tokio Authors @@ -12397,6 +12782,38 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: curve25519-dalek 5.0.0 (LICENSE) + +Copyright (c) 2016-2021 isis agora lovecruft. All rights reserved. +Copyright (c) 2016-2021 Henry de Valence. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Used by: curve25519-dalek 4.1.3 (LICENSE) Copyright (c) 2016-2021 isis agora lovecruft. All rights reserved. @@ -12465,6 +12882,34 @@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Used by: blowfish 0.10.0 (LICENSE-MIT) + +Copyright (c) 2016-2024 The RustCrypto Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: cipher 0.5.2 (LICENSE-MIT) Copyright (c) 2016-2025 RustCrypto Developers @@ -12515,7 +12960,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: sha2 0.11.0 (LICENSE-MIT) +Used by: sha1 0.11.0 (LICENSE-MIT), sha2 0.11.0 (LICENSE-MIT) Copyright (c) 2016-2026 The RustCrypto Project Developers Copyright (c) 2016 Artyom Pavlov @@ -12602,6 +13047,35 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: pbkdf2 0.13.0 (LICENSE-MIT) + +Copyright (c) 2017 Artyom Pavlov +Copyright (c) 2018-2023 The RustCrypto Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: fnv 1.0.7 (LICENSE-MIT) Copyright (c) 2017 Contributors @@ -12798,7 +13272,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: h2 0.4.15 (LICENSE) +Used by: h2 0.4.16 (LICENSE) Copyright (c) 2017 h2 authors @@ -12910,7 +13384,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: ed25519-dalek 2.2.0 (LICENSE) +Used by: ed25519-dalek 2.2.0 (LICENSE), ed25519-dalek 3.0.0 (LICENSE) Copyright (c) 2017-2019 isis agora lovecruft. All rights reserved. @@ -13030,6 +13504,35 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: des 0.9.0 (LICENSE-MIT) + +Copyright (c) 2017-2024 The RustCrypto Project Developers +Copyright (c) 2017 Gulshan Singh, Antoni Boucher, Artyom Pavlov + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: digest 0.11.3 (LICENSE-MIT) Copyright (c) 2017-2025 RustCrypto Developers @@ -13059,6 +13562,36 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: blake2 0.11.0-rc.6 (LICENSE-MIT) + +Copyright (c) 2017-2026 The RustCrypto Project Developers +Copyright (c) 2017 Artyom Pavlov +Copyright (c) 2015-2016 The blake2-rfc Developers, Cesar Barros + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: aes 0.8.4 (LICENSE-MIT) Copyright (c) 2018 Artyom Pavlov @@ -13374,7 +13907,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: cbc 0.2.1 (LICENSE-MIT), cfb-mode 0.8.2 (LICENSE-MIT), ctr 0.9.2 (LICENSE-MIT) +Used by: cbc 0.2.1 (LICENSE-MIT), cfb-mode 0.8.2 (LICENSE-MIT), ctr 0.10.1 (LICENSE-MIT), ctr 0.9.2 (LICENSE-MIT) Copyright (c) 2018-2022 RustCrypto Developers Copyright (c) 2018 Artyom Pavlov @@ -13626,6 +14159,34 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: ecdsa 0.17.0 (LICENSE-MIT), ed25519 3.0.0 (LICENSE-MIT), rfc6979 0.6.0 (LICENSE-MIT), signature 3.0.0 (LICENSE-MIT) + +Copyright (c) 2018-2026 RustCrypto Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: rand_core 0.10.1 (LICENSE-MIT) Copyright (c) 2018-2026 The Rand Project Developers @@ -13654,7 +14215,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: zeroize 1.9.0 (LICENSE-MIT) +Used by: keccak 0.2.2 (LICENSE-MIT), zeroize 1.9.0 (LICENSE-MIT) Copyright (c) 2018-2026 The RustCrypto Project Developers @@ -13775,6 +14336,35 @@ Permission is granted to anyone to use this software for any purpose, including 3. This notice may not be removed or altered from any source distribution. +Used by: bcrypt-pbkdf 0.11.0 (LICENSE-MIT) + +Copyright (c) 2019 Jack Grigg +Copyright (c) 2019-2026 The RustCrypto Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: ghash 0.5.1 (LICENSE-MIT) Copyright (c) 2019 RustCrypto Developers @@ -14056,6 +14646,34 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: universal-hash 0.6.1 (LICENSE-MIT) + +Copyright (c) 2019-2025 RustCrypto Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: http-body-util 0.1.4 (LICENSE), http-body 1.1.0 (LICENSE) Copyright (c) 2019-2026 Sean McArthur & Hyper Contributors @@ -14084,7 +14702,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: chacha20 0.10.1 (LICENSE-MIT), zeroize_derive 1.5.0 (LICENSE-MIT) +Used by: aes-gcm 0.11.1 (LICENSE-MIT), chacha20 0.10.1 (LICENSE-MIT), ghash 0.6.0 (LICENSE-MIT), polyval 0.7.3 (LICENSE-MIT), zeroize_derive 1.5.0 (LICENSE-MIT) Copyright (c) 2019-2026 The RustCrypto Project Developers @@ -14141,6 +14759,35 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: aead 0.6.1 (LICENSE-MIT) + +Copyright (c) 2019-2026 The RustCrypto Project Developers +Copyright (c) 2019 MobileCoin, LLC + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: iana-time-zone 0.1.65 (LICENSE-MIT) Copyright (c) 2020 Andrew D. Straw @@ -14248,7 +14895,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: p384 0.13.1 (LICENSE-MIT) +Used by: p384 0.13.1 (LICENSE-MIT), p384 0.14.0 (LICENSE-MIT) Copyright (c) 2020-2021 RustCrypto Developers @@ -14332,7 +14979,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: p256 0.13.2 (LICENSE-MIT), password-hash 0.5.0 (LICENSE-MIT), primeorder 0.13.6 (LICENSE-MIT) +Used by: p256 0.13.2 (LICENSE-MIT), password-hash 0.5.0 (LICENSE-MIT), primeorder 0.13.6 (LICENSE-MIT), primeorder 0.14.0 (LICENSE-MIT) Copyright (c) 2020-2023 RustCrypto Developers @@ -14444,7 +15091,35 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: const-oid 0.10.2 (LICENSE-MIT) +Used by: elliptic-curve 0.14.1 (LICENSE-MIT), p256 0.14.0 (LICENSE-MIT), p521 0.14.0 (LICENSE-MIT), password-hash 0.6.1 (LICENSE-MIT) + +Copyright (c) 2020-2026 RustCrypto Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +Used by: const-oid 0.10.2 (LICENSE-MIT), der 0.8.1 (LICENSE-MIT), pkcs8 0.11.0 (LICENSE-MIT) Copyright (c) 2020-2026 The RustCrypto Project Developers @@ -14472,6 +15147,38 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: sha3 0.11.0 (LICENSE-MIT), sha3 0.12.0 (LICENSE-MIT) + +Copyright (c) 2020-2026 The RustCrypto Project Developers +Copyright (c) 2016-2023 Artyom Pavlov, Marek Kotewicz +Copyright (c) 2014 Sébastien Martini +Copyright (c) 2009-2013 Mozilla Foundation +Copyright (c) 2006-2009 Graydon Hoare + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: crypto-common 0.1.7 (LICENSE-MIT), ripemd 0.1.3 (LICENSE-MIT) Copyright (c) 2021 RustCrypto Developers @@ -14640,7 +15347,7 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: argon2 0.5.3 (LICENSE-MIT) +Used by: argon2 0.5.3 (LICENSE-MIT), argon2 0.6.0-rc.8 (LICENSE-MIT) Copyright (c) 2021-2024 The RustCrypto Project Developers @@ -14668,7 +15375,35 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: crypto-common 0.2.2 (LICENSE-MIT) +Used by: pem-rfc7468 1.0.0 (LICENSE-MIT), pkcs1 0.8.0-rc.4 (LICENSE-MIT) + +Copyright (c) 2021-2025 The RustCrypto Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +Used by: crypto-common 0.2.2 (LICENSE-MIT), kem 0.3.0 (LICENSE-MIT) Copyright (c) 2021-2026 RustCrypto Developers @@ -14696,6 +15431,34 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: crypto-bigint 0.7.5 (LICENSE-MIT), phc 0.6.1 (LICENSE-MIT), pkcs5 0.8.1 (LICENSE-MIT), scrypt 0.12.0 (LICENSE-MIT), sec1 0.8.1 (LICENSE-MIT), spki 0.8.0 (LICENSE-MIT), ssh-encoding 0.3.0 (LICENSE-MIT), ssh-key 0.7.0-rc.11 (LICENSE-MIT) + +Copyright (c) 2021-2026 The RustCrypto Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: inout 0.1.4 (LICENSE-MIT) Copyright (c) 2022 The RustCrypto Project Developers @@ -14860,7 +15623,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: cpubits 0.1.1 (LICENSE-MIT) +Used by: cpubits 0.1.1 (LICENSE-MIT), ssh-cipher 0.3.0 (LICENSE-MIT) Copyright (c) 2023-2026 The RustCrypto Project Developers @@ -14970,6 +15733,56 @@ the following restrictions: 3. This notice may not be removed or altered from any source distribution. +Used by: primefield 0.14.0 (LICENSE-MIT) + +Copyright (c) 2024-2026 RustCrypto Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +Used by: ml-kem 0.3.2 (LICENSE-MIT), module-lattice 0.2.3 (LICENSE-MIT) + +Copyright (c) 2024-2026 RustCrypto Developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + Used by: ctutils 0.4.2 (LICENSE-MIT) Copyright (c) 2025-2026 The RustCrypto Project Developers @@ -14998,6 +15811,63 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: wnaf 0.14.0 (LICENSE-MIT) + +Copyright (c) 2026 RustCrypto Developers +Copyright (c) 2018-2025 `group` crate developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +Used by: sponge-cursor 0.1.0 (LICENSE-MIT) + +Copyright (c) 2026 The RustCrypto Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + Used by: defmt-macros 1.1.1 (LICENSE-MIT), defmt 1.1.1 (LICENSE-MIT) Copyright (c) Ferrous Systems @@ -15338,6 +16208,32 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Used by: kem 0.3.0 (LICENSE-APACHE) + +Copyright 2021 RustCrypto Developers + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Used by: crypto-primes 0.7.2 (LICENSE-MIT) + +Copyright 2022-* Bogdan Opanchuk + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Used by: zerocopy-derive 0.8.55 (LICENSE-MIT), zerocopy 0.8.55 (LICENSE-MIT) Copyright 2023 The Fuchsia Authors @@ -15875,6 +16771,30 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: enum_dispatch 0.3.13 (LICENSE) + +MIT License + +Copyright (c) 2019 Anton Lazarev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + Used by: bytemuck 1.25.2 (LICENSE-MIT), bytemuck_derive 1.11.0 (LICENSE-MIT) MIT License @@ -15911,6 +16831,31 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: tokio-macros 2.7.2 (LICENSE) + +MIT License + +Copyright (c) 2019 Yoshua Wuyts +Copyright (c) Tokio Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + Used by: radium 0.7.0 (LICENSE.txt) MIT License @@ -16067,6 +17012,30 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Used by: serdect 0.4.3 (LICENSE-MIT) + +MIT License + +Copyright (c) 2022-2025 The RustCrypto Project Developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + Used by: convert_case 0.10.0 (LICENSE) MIT License @@ -16091,7 +17060,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: tokio-util 0.7.19 (LICENSE), tokio 1.53.1 (LICENSE) +Used by: tokio-stream 0.1.19 (LICENSE), tokio-util 0.7.19 (LICENSE), tokio 1.53.1 (LICENSE) MIT License @@ -16312,7 +17281,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -Used by: adler2 2.0.1 (LICENSE-MIT), allocator-api2 0.2.21 (LICENSE-MIT), ambient-authority 0.0.2 (LICENSE-MIT), anyhow 1.0.104 (LICENSE-MIT), atomic-waker 1.1.2 (LICENSE-MIT), basic-toml 0.1.10 (LICENSE-MIT), camino 1.2.5 (LICENSE-MIT), cap-primitives 4.0.2 (LICENSE-MIT), cap-std 4.0.2 (LICENSE-MIT), cap-tempfile 4.0.2 (LICENSE-MIT), cargo-platform 0.3.3 (LICENSE-MIT), cargo_metadata 0.23.1 (LICENSE-MIT), displaydoc 0.2.7 (LICENSE-MIT), fastrand 2.5.0 (LICENSE-MIT), fs-err 3.3.1 (LICENSE-MIT), fs-set-times 0.20.3 (LICENSE-MIT), group 0.13.0 (LICENSE-MIT), io-extras 0.19.0 (LICENSE-MIT), io-lifetimes 2.0.4 (LICENSE-MIT), io-lifetimes 3.0.1 (LICENSE-MIT), itoa 1.0.18 (LICENSE-MIT), minimal-lexical 0.2.1 (LICENSE-MIT), num_enum 0.7.6 (LICENSE-MIT), num_enum_derive 0.7.6 (LICENSE-MIT), once_cell 1.21.4 (LICENSE-MIT), pgp 0.20.0 (LICENSE-MIT), pin-project-lite 0.2.17 (LICENSE-MIT), proc-macro-crate 3.5.0 (LICENSE-MIT), proc-macro2 1.0.107 (LICENSE-MIT), quote 1.0.47 (LICENSE-MIT), replace_with 0.1.8 (LICENSE-MIT.txt), rsa 0.9.10 (LICENSE-MIT), rustc-hash 2.1.3 (LICENSE-MIT), rustix 1.1.4 (LICENSE-MIT), rustversion 1.0.23 (LICENSE-MIT), semver 1.0.28 (LICENSE-MIT), serde 1.0.229 (LICENSE-MIT), serde_core 1.0.229 (LICENSE-MIT), serde_derive 1.0.229 (LICENSE-MIT), serde_json 1.0.151 (LICENSE-MIT), syn 2.0.119 (LICENSE-MIT), syn 3.0.3 (LICENSE-MIT), thiserror-impl 2.0.19 (LICENSE-MIT), thiserror 2.0.19 (LICENSE-MIT), unicode-ident 1.0.24 (LICENSE-MIT), zmij 1.0.23 (LICENSE-MIT) +Used by: adler2 2.0.1 (LICENSE-MIT), allocator-api2 0.2.21 (LICENSE-MIT), ambient-authority 0.0.2 (LICENSE-MIT), anyhow 1.0.104 (LICENSE-MIT), atomic-waker 1.1.2 (LICENSE-MIT), basic-toml 0.1.10 (LICENSE-MIT), camino 1.2.5 (LICENSE-MIT), cap-primitives 4.0.2 (LICENSE-MIT), cap-std 4.0.2 (LICENSE-MIT), cap-tempfile 4.0.2 (LICENSE-MIT), cargo-platform 0.3.3 (LICENSE-MIT), cargo_metadata 0.23.1 (LICENSE-MIT), displaydoc 0.2.7 (LICENSE-MIT), fastrand 2.5.0 (LICENSE-MIT), fs-err 3.3.1 (LICENSE-MIT), fs-set-times 0.20.3 (LICENSE-MIT), group 0.13.0 (LICENSE-MIT), group 0.14.0 (LICENSE-MIT), io-extras 0.19.0 (LICENSE-MIT), io-lifetimes 2.0.4 (LICENSE-MIT), io-lifetimes 3.0.1 (LICENSE-MIT), itoa 1.0.18 (LICENSE-MIT), minimal-lexical 0.2.1 (LICENSE-MIT), num_enum 0.7.6 (LICENSE-MIT), num_enum_derive 0.7.6 (LICENSE-MIT), once_cell 1.21.4 (LICENSE-MIT), pgp 0.20.0 (LICENSE-MIT), pin-project-lite 0.2.17 (LICENSE-MIT), proc-macro-crate 3.5.0 (LICENSE-MIT), proc-macro2 1.0.107 (LICENSE-MIT), quote 1.0.47 (LICENSE-MIT), replace_with 0.1.8 (LICENSE-MIT.txt), rsa 0.10.0-rc.18 (LICENSE-MIT), rsa 0.9.10 (LICENSE-MIT), rustc-hash 2.1.3 (LICENSE-MIT), rustix 1.1.4 (LICENSE-MIT), rustversion 1.0.23 (LICENSE-MIT), semver 1.0.28 (LICENSE-MIT), serde 1.0.229 (LICENSE-MIT), serde_core 1.0.229 (LICENSE-MIT), serde_derive 1.0.229 (LICENSE-MIT), serde_json 1.0.151 (LICENSE-MIT), syn 2.0.119 (LICENSE-MIT), syn 3.0.3 (LICENSE-MIT), thiserror-impl 2.0.19 (LICENSE-MIT), thiserror 2.0.19 (LICENSE-MIT), unicode-ident 1.0.24 (LICENSE-MIT), zmij 1.0.23 (LICENSE-MIT) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -16959,7 +17928,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: generic-array 0.14.7 (LICENSE) +Used by: generic-array 0.14.7 (LICENSE), generic-array 1.4.5 (LICENSE) The MIT License (MIT) @@ -17251,7 +18220,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Used by: ff 0.13.1 (LICENSE-MIT) +Used by: ff 0.13.1 (LICENSE-MIT), ff 0.14.0 (LICENSE-MIT) The MIT License (MIT) diff --git a/apple/Sources/App/IronStorageApp.swift b/apple/Sources/App/IronStorageApp.swift index 64b11b0..bf72ff0 100644 --- a/apple/Sources/App/IronStorageApp.swift +++ b/apple/Sources/App/IronStorageApp.swift @@ -388,9 +388,11 @@ private final class ShellViewController: UITableViewController, MobileTabRoot { case fetch case pull case push + case sync var changesLocalStore: Bool { if case .pull = self { return true } + if case .sync = self { return true } return false } } @@ -577,7 +579,7 @@ private final class ShellViewController: UITableViewController, MobileTabRoot { refreshControl?.endRefreshing() return } - runHome(.pull) + runHome(.sync) } else { reloadShell() } @@ -750,7 +752,7 @@ private final class ShellViewController: UITableViewController, MobileTabRoot { let refreshed = page.refreshedAt.map(formattedDate) switch page.freshness { case .neverRefreshed: - return "Not refreshed. Pull down to update the local clone or tap Refresh Status." + return "Not refreshed. Pull down to pull, then push your changes, or tap Refresh Status." case .cached: return "Cached · Last refreshed \(refreshed ?? "at an unknown time"). This is not live status." case .current: @@ -822,6 +824,7 @@ private final class ShellViewController: UITableViewController, MobileTabRoot { case .fetch: try operation.fetch() case .pull: try operation.pull() case .push: try operation.push() + case .sync: try operation.sync() } return Result.success(page) } catch let error as MobileHomeFfiError { @@ -865,11 +868,16 @@ private final class ShellViewController: UITableViewController, MobileTabRoot { UIAccessibility.post(notification: .announcement, argument: notice.title) } case let .failure(failure): + if request == .sync { + // Pull may have updated entries before a later push failed. + NotificationCenter.default.post(name: .ironStorageLocalStoreDidChange, object: nil) + NotificationCenter.default.post(name: .ironStorageWatchSnapshotDidChange, object: nil) + } tableView.reloadData() if homePage == nil { showHomeFailure(failure) presentHomeFailure(failure, retry: request ?? .fetch) - } else if failure.kind == .interrupted { + } else if failure.kind == .interrupted, request != .sync { UIAccessibility.post(notification: .announcement, argument: failure.title) } else { presentHomeFailure(failure, retry: request ?? .fetch) diff --git a/apple/TESTING.md b/apple/TESTING.md index d91e1a6..50401bd 100644 --- a/apple/TESTING.md +++ b/apple/TESTING.md @@ -9,7 +9,7 @@ actually exercised. | Area | Implemented boundary | Automated evidence | Manual release evidence | | --- | --- | --- | --- | -| Home tab, local history, and optional remote activity | UIKit renders Rust `MobileHomePage` and typed Commit/Fetch/Pull/Push actions | `mobile_home` unit tests, `git_embedded`, and `crates/apple` bridge tests | Verify a clean local store first, then attach a disposable HTTPS remote and exercise refresh and all four actions, including expired application-token recovery | +| Home tab, local history, and optional remote activity | UIKit renders Rust `MobileHomePage`; pulling down calls Rust sync (pull, then push only on success). Explicit Commit/Fetch/Pull/Push actions remain available. | `mobile_home` unit tests, `git_embedded` move/back and failed-pull regressions, and `crates/apple` bridge tests | Verify refresh and all four actions, including expired application-token recovery. Pull failures must show an error and prevent push. | | Passwords tab, navigation, view, and edit | Rust supplies typed paths, fields, drafts, revisions, and mutations; UIKit presents them | `mobile_passwords`, `entry_documents`, `mobile_mutation`, and `mobile_authentication` tests | Open nested entries, edit/save/cancel, and confirm stale-edit recovery | | Swipe move/copy/delete | Rust plans destinations, collisions, dirty-editor handling, and commits; UIKit also exposes accessibility actions | `plans_destinations_collisions_hidden_paths_and_stale_revisions` and authentication serialization tests | Exercise swipe and VoiceOver alternatives; confirm destructive prompts | | TOTP tab and sharing | Rust discovers, caches, parses, selects, and generates OTP data | `mobile_totp`, `otp`, and `mobile_watch` integration tests | Discover entries, read a code, change Watch selection, and verify countdown | @@ -88,6 +88,12 @@ the tester is ready to enter the passphrase again. ## Manual evidence still required +Issue #124 / version 1.0.1 build 8: iPhone and Watch simulator builds passed; +the existing iPhone simulator installation was updated in place and Home opened. +Automated Git tests cover move-and-move-back commits, network/authentication +failures, and merge conflicts without a subsequent push. Live account sync is +deferred to the user's TestFlight validation; no physical iPhone was updated. + Issue #120 was exercised on 2026-09-12 using the existing iPhone 17 Pro / iOS 26.5 simulator (`FB5C6929-C10D-40C8-9A94-5CC592037FDB`) and its simulated store. TOTP Add imported a synthetic QR into `otp/Simulator Panel OTP`; the normal diff --git a/apple/project.yml b/apple/project.yml index 334c890..cd701f3 100644 --- a/apple/project.yml +++ b/apple/project.yml @@ -6,8 +6,8 @@ settings: SWIFT_VERSION: "5.0" CODE_SIGN_STYLE: Automatic DEVELOPMENT_TEAM: MU22FMRGK8 - MARKETING_VERSION: "1.0" - CURRENT_PROJECT_VERSION: "7" + MARKETING_VERSION: "1.0.1" + CURRENT_PROJECT_VERSION: "8" targets: IronStorage: type: application diff --git a/crates/apple/src/lib.rs b/crates/apple/src/lib.rs index 2385155..9875dcd 100644 --- a/crates/apple/src/lib.rs +++ b/crates/apple/src/lib.rs @@ -482,6 +482,10 @@ impl MobileHomeOperation { self.operation.push().map(Into::into).map_err(Into::into) } + pub fn sync(&self) -> Result { + self.operation.sync().map(Into::into).map_err(Into::into) + } + pub fn cancel(&self) { self.operation.cancel(); } diff --git a/crates/storage/src/mobile_home.rs b/crates/storage/src/mobile_home.rs index 9b1ddc7..252fc43 100644 --- a/crates/storage/src/mobile_home.rs +++ b/crates/storage/src/mobile_home.rs @@ -1,4 +1,4 @@ -//! Storage-owned remote activity and pull-to-refresh models for iPhone Home. +//! Storage-owned remote activity and pull-then-push refresh for iPhone Home. use std::{ collections::BTreeSet, @@ -412,6 +412,13 @@ impl MobileHomeOperation { }) } + pub fn sync(&self) -> Result { + // Hold the pull reservation across both steps: sync can replace local entries. + self.run(MobileHomeActionKind::Pull, || { + MobileHomeStorage::load()?.sync(unix_seconds()?, &self.control) + }) + } + fn run( &self, action: MobileHomeActionKind, @@ -555,6 +562,27 @@ impl MobileHomeStorage { .map_err(MobileHomeError::after_push) } + fn sync( + &self, + now: i64, + control: &GitOperationControl, + ) -> Result { + let remote = self.remote()?; + let store = self.credentials()?; + let synced = self.git.sync_controlled(remote, &store, control); + let locked = store.lock(); + let (_, pushed) = synced.map_err(MobileHomeError::from_git)?; + locked.map_err(MobileHomeError::partial_secret)?; + control + .report(GitProgressPhase::Refreshing) + .map_err(MobileHomeError::from_git)?; + let mut notice = push_notice(&pushed); + notice.title = "Sync Completed".to_owned(); + notice.detail = format!("Pull completed successfully. {}", notice.detail); + self.current_page(now, Some(notice)) + .map_err(MobileHomeError::after_push) + } + fn credentials(&self) -> Result { let store = NativeSecretStore::system( SecretCachePolicy::Disabled, diff --git a/crates/storage/tests/git_embedded.rs b/crates/storage/tests/git_embedded.rs index 3997029..9548348 100644 --- a/crates/storage/tests/git_embedded.rs +++ b/crates/storage/tests/git_embedded.rs @@ -265,6 +265,7 @@ impl SecretProvider for SigningSecret { #[derive(Default)] struct RecordingTransport { request: Mutex>, + remote_tip: Option, } struct CloningFetch; @@ -391,7 +392,13 @@ impl GitSmartHttpTransport for RecordingTransport { assert_eq!(credential.username(), "alice"); let mut output = packet(b"# service=git-receive-pack\n"); output.extend_from_slice(b"0000"); - output.extend_from_slice(&packet(b"0000000000000000000000000000000000000000 capabilities^{}\0report-status delete-refs\n")); + let reference = self.remote_tip.as_ref().map_or_else( + || "0000000000000000000000000000000000000000 capabilities^{}".to_owned(), + |tip| format!("{tip} refs/heads/main"), + ); + output.extend_from_slice(&packet( + format!("{reference}\0report-status delete-refs\n").as_bytes(), + )); output.extend_from_slice(b"0000"); Ok(output) } @@ -444,6 +451,61 @@ fn injected_smart_http_push_sends_a_complete_pack_and_credentials() -> TestResul Ok(()) } +#[test] +fn sync_pushes_move_and_move_back_even_when_the_final_tree_is_unchanged() -> TestResult { + let temporary = tempfile::tempdir()?; + let config = remote_config(&temporary)?; + let remote = &config.git_remotes()[0]; + let store = Repository::open(config.vault())?; + let mut git = GitRepository::init(&store, identity())?; + git.add_remote("origin", remote.url())?; + fs::write(config.vault().join("secret.gpg"), b"ciphertext")?; + let base = git.commit_all("Add secret")?; + set_remote_tracking(config.vault(), &base)?; + fs::rename( + config.vault().join("secret.gpg"), + config.vault().join("moved.gpg"), + )?; + git.commit_all("Move secret")?; + fs::rename( + config.vault().join("moved.gpg"), + config.vault().join("secret.gpg"), + )?; + let head = git.commit_all("Move secret back")?; + assert!(git.status()?.is_clean()); + assert_eq!(git.divergence(remote, 10)?.remote().ahead(), 2); + let transport = RecordingTransport { + remote_tip: Some(base.clone()), + ..Default::default() + }; + let (pulled, pushed) = git.sync_with_transports_controlled( + remote, + &Credentials, + &NoopFetch, + &transport, + &GitOperationControl::default(), + )?; + assert_eq!(pulled, PullOutcome::UpToDate); + assert_eq!(pushed.new_id(), head); + let request = transport.request.lock().expect("request lock"); + assert!( + request + .windows(base.len()) + .any(|bytes| bytes == base.as_bytes()) + ); + let offset = request + .windows(4) + .position(|bytes| bytes == b"PACK") + .expect("pack"); + // Two commits and the intermediate tree; the remote already has the final tree and blob. + assert_eq!( + u32::from_be_bytes(request[offset + 8..offset + 12].try_into()?), + 3 + ); + assert_eq!(git.divergence(remote, 10)?.remote().ahead(), 0); + Ok(()) +} + #[test] fn controlled_sync_pulls_then_pushes_with_one_progress_and_cancellation_contract() -> TestResult { let temporary = tempfile::tempdir()?; @@ -469,6 +531,20 @@ fn controlled_sync_pulls_then_pushes_with_one_progress_and_cancellation_contract assert!(phases.contains(&GitProgressPhase::Integrating)); assert!(phases.contains(&GitProgressPhase::Sending)); assert!(!push.request.lock().expect("push request").is_empty()); + for error in [GitError::NetworkUnavailable, GitError::AuthenticationFailed] { + let push = RecordingTransport::default(); + assert_eq!( + git.sync_with_transports_controlled( + remote, + &Credentials, + &FailedFetch(error.clone()), + &push, + &GitOperationControl::default(), + ), + Err(error), + ); + assert!(push.request.lock().expect("push request").is_empty()); + } Ok(()) } @@ -524,9 +600,17 @@ fn fetched_branches_fast_forward_and_report_typed_conflicts() -> TestResult { fs::write(config.vault().join("secret.gpg"), b"local")?; git.stage(&["secret.gpg".into()])?; git.commit("Local change")?; + let push = RecordingTransport::default(); let error = git - .pull_with_transport(remote, Some("main"), &Credentials, &NoopFetch) + .sync_with_transports_controlled( + remote, + &Credentials, + &NoopFetch, + &push, + &GitOperationControl::default(), + ) .expect_err("conflicting histories"); + assert!(push.request.lock().expect("push request").is_empty()); let GitError::MergeConflicts { conflicts } = error else { panic!("expected typed merge conflicts"); };