use sanctum::upgrade::{ run_upgrade, verify_minisign_signature, UpgradeOptions, SANCTUM_RELEASE_PUBKEY, }; #[test] fn test_minisign_signature_valid() { let payload = b"Hello Sanctum Release 0.7.0 Security Testing\n"; let sig_text = "\ untrusted comment: signature from minisign secret key\n\ RUSsVphPgr8155LCucDq8RzDmWMzWElzhBmHrS5p+qJlOCGU4AQpn2F28MVPFrnoGPYEHx7/6TlKg2b45DlYuBQ0+ASeLIzMLwc=\n\ trusted comment: timestamp:1789750897\tfile:test_payload.txt\thashed\n\ 0l7KsNJkDTo2uOKL8UAiaJOWuhwhGTVZ5fn0JFMdxXE9riYixQO9YnBpSVqz8iCDhWrz8hJBnmUrIWnaRaXVCA==\n"; let res = verify_minisign_signature(payload, sig_text, SANCTUM_RELEASE_PUBKEY); assert!( res.is_ok(), "Gültige Minisign-Signatur muss erfolgreich verifiziert werden: {:?}", res.err() ); } #[test] fn test_minisign_signature_tampered_payload() { let tampered_payload = b"Hello Sanctum Release 0.7.0 Tampered Payload!\n"; let sig_text = "\ untrusted comment: signature from minisign secret key\n\ RUSsVphPgr8155LCucDq8RzDmWMzWElzhBmHrS5p+qJlOCGU4AQpn2F28MVPFrnoGPYEHx7/6TlKg2b45DlYuBQ0+ASeLIzMLwc=\n\ trusted comment: timestamp:1789750897\tfile:test_payload.txt\thashed\n\ 0l7KsNJkDTo2uOKL8UAiaJOWuhwhGTVZ5fn0JFMdxXE9riYixQO9YnBpSVqz8iCDhWrz8hJBnmUrIWnaRaXVCA==\n"; let res = verify_minisign_signature(tampered_payload, sig_text, SANCTUM_RELEASE_PUBKEY); assert!( res.is_err(), "Manipulierte Binärdaten müssen die Minisign-Prüfung verfehlen" ); assert!(res.unwrap_err().to_string().contains("FEHLGESCHLAGEN")); } #[test] fn test_minisign_signature_wrong_key() { let payload = b"Hello Sanctum Release 0.7.0 Security Testing\n"; let sig_text = "\ untrusted comment: signature from minisign secret key\n\ RUSsVphPgr8155LCucDq8RzDmWMzWElzhBmHrS5p+qJlOCGU4AQpn2F28MVPFrnoGPYEHx7/6TlKg2b45DlYuBQ0+ASeLIzMLwc=\n\ trusted comment: timestamp:1789750897\tfile:test_payload.txt\thashed\n\ 0l7KsNJkDTo2uOKL8UAiaJOWuhwhGTVZ5fn0JFMdxXE9riYixQO9YnBpSVqz8iCDhWrz8hJBnmUrIWnaRaXVCA==\n"; // Ein anderer, unautorisierter Public Key let other_key = "RWSb0a70vF1X8qIjc7xi28Gmw+cIWbMipOy4L6ToJEUPkWDw3c0qIjc7"; let res = verify_minisign_signature(payload, sig_text, other_key); assert!( res.is_err(), "Signaturprüfung mit fremdem Schlüssel muss fehlschlagen" ); } #[test] fn test_upgrade_blocks_unofficial_url_without_insecure_flag() { let options = UpgradeOptions { check_only: true, yes: false, force: false, base_url: "https://evil-attacker.org/sanctum".into(), insecure_url: false, }; let res = run_upgrade(&options); assert!( res.is_err(), "Inoffizielle Server-URL ohne --insecure-url muss blockiert werden" ); let err_msg = res.unwrap_err().to_string(); assert!( err_msg.contains("Sicherheitsverstoß") || err_msg.contains("nicht vertrauenswürdig"), "Fehler muss Sicherheitsverstoß anzeigen: {err_msg}" ); }