590710c27c27

test: consume shared Vault V4 long-password vector (v2.15.3)

time
2026-09-05 13:01 UTC · 1 month ago
machine
koh2
agent
gpt-6
session
Vault V4 password and passphrase support
parent
82a4e7b3b85b
3 files VERSION+1 −1app/src/test/java/com/peachpasswords/vault/PeachScriptTest.kt+14 −0app/src/test/resources/fixtures/golden/peach-payload-v4.json+13 −0
VERSION+1 −1
@@ -1 +1 @@1-2.15.21+2.15.3

view file

app/src/test/java/com/peachpasswords/vault/PeachScriptTest.kt+14 −0
@@ -14,6 +14,20 @@1414 1515 class PeachScriptTest {1616 17+    @Test fun parses_shared_v4_long_password_vector() {18+        val vector = Json.parseToJsonElement(19+            checkNotNull(javaClass.classLoader?.getResource("fixtures/golden/peach-payload-v4.json")).readText(),20+        ).jsonObject21+        val passwords = vector.getValue("passwords").jsonObject22+        val envelope = Base64.getDecoder().decode(vector.getValue("envelopeBase64").jsonPrimitive.content)23+        val entries = PeachPayloadCodec.parsePayload(envelope, vector.getValue("passphrase").jsonPrimitive.content)24+25+        assertEquals(passwords.getValue("ascii").jsonPrimitive.content, entries[0].password)26+        assertEquals(passwords.getValue("unicode").jsonPrimitive.content, entries[1].password)27+        assertEquals(256, entries[0].password?.length)28+        assertEquals(256, entries[1].password?.length)29+    }30+1731     private fun login() = VaultEntry(1832         id = "11111111-2222-3333-4444-555555555555", type = "login", title = "GitHub",1933         url = "https://github.com", username = "june", email = "[email protected]",

view file

app/src/test/resources/fixtures/golden/peach-payload-v4.json+13 −0
@@ -0,0 +1,13 @@1+{2+  "format": 4,3+  "passphrase": "cross-platform-v4",4+  "passwords": {5+    "ascii": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",6+    "unicode": "界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界界"7+  },8+  "entryIds": [9+    "123e4567-e89b-42d3-a456-426614174001",10+    "123e4567-e89b-42d3-a456-426614174002"11+  ],12+  "envelopeBase64": "N5j5qjYXq/lg0PIE1Gy2rnYpqn42juHbqYb3u0zoYFIynUEHLSCW2VbIDD8CObJR8FfSGV1xHIfKn/Kdp7QQx5+YQKKSlOrQ0xN3iOrh8wDsWudtp/ucwxrW49wTDMIyzV+yaIs2bDJ8cQT3+i+pAnXMei8PSa8WKM4HfscuXuYYyN3aJCB8/QyPD0eEqhiFHr3e4NOLluhjQ5ssKf6OClpAp5dZ8uZihDSaUzK8zX4C7MTM9N3MJyQAayrlYtkWWIv9Ba9h/GuNzbJAJMuS14wurz/PUQbi7pywIQdAlpHQdbuGM3IOoXwq5ylrIwvh/jezKWEIjt2FGnOdb/H09BV1b2jwEbXsJKbAG6AK/Pt8nvq3f6fZsgTfSbMOLDmgVM2GpnCqXJ4kcgz4S+PdqEi8x1p3CkEcLa/R4CmYI4M7N70n5KWhvjiiFvRWFJ+9H7rMujtBHJmM4oT5plVNQqXm6/NkTqYGUXXbItTvGH5DFvVXkt9e21TZdxneyOr6RCmcst/a255FKrHKIRLlhAYxJNMxVyzMMyXBB8tJeKM+344EcNYH57kQPvsZt1iBShYib/z/QZ8l9hG1jCg0bMwQsPNVGtJ1eOW+kdpweZMnXNMhGLksaQvVhObVP0codlgO5yg0xDvHWBxSej5p3nxBCjaSboadgQC7SXe/qVGXFGkOVXwJHPwsnzHkIY8seUCdu52Pp95t3ALK2rRDQNIIswmxnBkDZ6K1lVsFg3EovmJrkgdgbdAxQWmhFVx+qlKBAWohbMsjJQO3yegdF/Oax2cF+oGH/NnxTdeOhezJuz1HDOl3I9UzQQuNV37lWCEEK4gucaTAdr9o8pBFIPzIgmoygaVjLQAI9tZv8HLmdhkkKBd4KG09Cm6hR8gLBtS9V2jb0VwcACPCiPktx587qz5w4mX3msLp6U73tve+4mQtTo/z+VfFpzZTspsV3CeKKVgxMronNrzqXqm9B7RG20wOGLHFPeQizEy6Sqs3COpf60haumQg51B9ZXAZDo4eVNDV9+QeSESMR3+s4h0T2uEocqXT61auTYZHB5vDvNGXKt1prcPPFXuvfp8BDkyItGKBdLanMFmvtqw3gmd0kGfI7KkwlX5mFMgtdwYvXTXPty4zaurSDZ29r9t5/T9ydwVXKaKleYad/7ErTChutBPdgaM4TrCDkbocNMUyp8I4j0YpDDl2H4Pq/urftcUSBHz1IdekPY+PpilRybqAeR9xRY0HfNk3XVcuUJC9B1EHortXBAWMdA98jvncJaIEB51Jy7BAXyHlNtpkwNxMry4u60UO1f8bWVgb5eqJIUMBf3bh/gMDKLbBB3o38MQBEOHIYSckHARXJbUv3Vrv0DMotKeSVYtztw/92KeVzaDOZiisS1/jXg/g8SBERzfL0W3c4B5iu7Ac"13+}

view file