Test
Last active
August 25, 2023 04:38
-
-
Save nplasterer/49d2961d92bc39a8c3a191c4dff67acb to your computer and use it in GitHub Desktop.
This is a test gist
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
it('generates known signature', async () => { | |
aliceKeys = new PrivateKeyBundleV1( | |
privateKey.PrivateKeyBundle.decode( | |
ethers.utils.arrayify( | |
'0x0a8a030ac20108c192a3f7923112220a2068d2eb2ef8c50c4916b42ce638c5610e44ff4eb3ecb098' + | |
'c9dacf032625c72f101a940108c192a3f7923112460a440a40fc9822283078c323c9319c45e60ab4' + | |
'2c65f6e1744ed8c23c52728d456d33422824c98d307e8b1c86a26826578523ba15fe6f04a17fca17' + | |
'6664ee8017ec8ba59310011a430a410498dc2315dd45d99f5e900a071e7b56142de344540f07fbc7' + | |
'3a0f9a5d5df6b52eb85db06a3825988ab5e04746bc221fcdf5310a44d9523009546d4bfbfbb89cfb' + | |
'12c20108eb92a3f7923112220a20788be9da8e1a1a08b05f7cbf22d86980bc056b130c482fa5bd26' + | |
'ccb8d29b30451a940108eb92a3f7923112460a440a40a7afa25cb6f3fbb98f9e5cd92a1df1898452' + | |
'e0dfa1d7e5affe9eaf9b72dd14bc546d86c399768badf983f07fa7dd16eee8d793357ce6fccd6768' + | |
'07d87bcc595510011a430a410422931e6295c3c93a5f6f5e729dc02e1754e916cb9be16d36dc163a' + | |
'300931f42a0cd5fde957d75c2068e1980c5f86843daf16aba8ae57e8160b8b9f0191def09e' | |
) | |
).v1! | |
) | |
aliceKeystore = await InMemoryKeystore.create(aliceKeys) | |
bobKeys = new PrivateKeyBundleV1( | |
privateKey.PrivateKeyBundle.decode( | |
ethers.utils.arrayify( | |
'0x0a88030ac001088cd68df7923112220a209057f8d813314a2aae74e6c4c30f909c1c496b6037ce32' + | |
'a12c613558a8e961681a9201088cd68df7923112440a420a40501ae9b4f75d5bb5bae3ca4ecfda4e' + | |
'de9edc5a9b7fc2d56dc7325b837957c23235cc3005b46bb9ef485f106404dcf71247097ed5096355' + | |
'90f4b7987b833d03661a430a4104e61a7ae511567f4a2b5551221024b6932d6cdb8ecf3876ec64cf' + | |
'29be4291dd5428fc0301963cdf6939978846e2c35fd38fcb70c64296a929f166ef6e4e91045712c2' + | |
'0108b8d68df7923112220a2027707399474d417bf6aae4baa3d73b285bf728353bc3e156b0e32461' + | |
'ebb48f8c1a940108b8d68df7923112460a440a40fb96fa38c3f013830abb61cf6b39776e0475eb13' + | |
'79c66013569c3d2daecdd48c7fbee945dcdbdc5717d1f4ffd342c4d3f1b7215912829751a94e3ae1' + | |
'1007e0a110011a430a4104952b7158cfe819d92743a4132e2e3ae867d72f6a08292aebf471d0a7a2' + | |
'907f3e9947719033e20edc9ca9665874bd88c64c6b62c01928065f6069c5c80c699924' | |
) | |
).v1! | |
) | |
expect(await aliceKeystore.getAccountAddress()).toEqual( | |
'0xF56d1F3b1290204441Cb3843C2Cac1C2f5AEd690' | |
) // alice | |
expect(bobKeys.getPublicKeyBundle().walletSignatureAddress()).toEqual( | |
'0x3De402A325323Bb97f00cE3ad5bFAc96A11F9A34' | |
) // bob | |
const response = await aliceKeystore.createInvite({ | |
recipient: SignedPublicKeyBundle.fromLegacyBundle( | |
bobKeys.getPublicKeyBundle() | |
), | |
createdNs: dateToNs(new Date()), | |
context: { | |
conversationId: 'test', | |
metadata: {}, | |
}, | |
}) | |
expect(response.conversation!.topic).toEqual( | |
'/xmtp/0/m-4b52be1e8567d72d0bc407debe2d3c7fca2ae93a47e58c3f9b5c5068aff80ec5/proto' | |
) | |
const topicData = Buffer.from(response.conversation!.topic, 'utf-8') | |
const signature = await aliceKeys.preKeys[0].sign( | |
hexToBytes(keccak256(topicData)) | |
) | |
expect(signature.ecdsaCompact).toEqual( | |
'/xmtp/0/m-4b52be1e8567d72d0bc407debe2d3c7fca2ae93a47e58c3f9b5c5068aff80ec5/proto' | |
) | |
console.log(signature.ecdsaCompact?.bytes) | |
expect(signature.ecdsaCompact?.bytes).toEqual([ | |
125, 209, 10, 15, 148, 211, 48, 84, 108, 249, 58, 228, 106, 85, 224, | |
233, 232, 113, 108, 226, 147, 128, 215, 230, 77, 183, 97, 50, 64, | |
237, 154, 114, 82, 125, 186, 10, 103, 45, 57, 249, 99, 80, 69, 117, | |
153, 178, 191, 109, 180, 49, 141, 94, 39, 236, 62, 4, 157, 123, 149, | |
151, 1, 248, 221, 195 | |
]) | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Test | |
fun testGeneratesKnownSignature() { | |
// address = 0xF56d1F3b1290204441Cb3843C2Cac1C2f5AEd690 | |
val aliceKeyData = | |
Numeric.hexStringToByteArray("0x0a8a030ac20108c192a3f7923112220a2068d2eb2ef8c50c4916b42ce638c5610e44ff4eb3ecb098c9dacf032625c72f101a940108c192a3f7923112460a440a40fc9822283078c323c9319c45e60ab42c65f6e1744ed8c23c52728d456d33422824c98d307e8b1c86a26826578523ba15fe6f04a17fca176664ee8017ec8ba59310011a430a410498dc2315dd45d99f5e900a071e7b56142de344540f07fbc73a0f9a5d5df6b52eb85db06a3825988ab5e04746bc221fcdf5310a44d9523009546d4bfbfbb89cfb12c20108eb92a3f7923112220a20788be9da8e1a1a08b05f7cbf22d86980bc056b130c482fa5bd26ccb8d29b30451a940108eb92a3f7923112460a440a40a7afa25cb6f3fbb98f9e5cd92a1df1898452e0dfa1d7e5affe9eaf9b72dd14bc546d86c399768badf983f07fa7dd16eee8d793357ce6fccd676807d87bcc595510011a430a410422931e6295c3c93a5f6f5e729dc02e1754e916cb9be16d36dc163a300931f42a0cd5fde957d75c2068e1980c5f86843daf16aba8ae57e8160b8b9f0191def09e") | |
val aliceKeys = PrivateKeyBundle.parseFrom(aliceKeyData).v1.toV2() | |
// address = 0x3De402A325323Bb97f00cE3ad5bFAc96A11F9A34 | |
val bobKeyData = | |
Numeric.hexStringToByteArray("0x0a88030ac001088cd68df7923112220a209057f8d813314a2aae74e6c4c30f909c1c496b6037ce32a12c613558a8e961681a9201088cd68df7923112440a420a40501ae9b4f75d5bb5bae3ca4ecfda4ede9edc5a9b7fc2d56dc7325b837957c23235cc3005b46bb9ef485f106404dcf71247097ed509635590f4b7987b833d03661a430a4104e61a7ae511567f4a2b5551221024b6932d6cdb8ecf3876ec64cf29be4291dd5428fc0301963cdf6939978846e2c35fd38fcb70c64296a929f166ef6e4e91045712c20108b8d68df7923112220a2027707399474d417bf6aae4baa3d73b285bf728353bc3e156b0e32461ebb48f8c1a940108b8d68df7923112460a440a40fb96fa38c3f013830abb61cf6b39776e0475eb1379c66013569c3d2daecdd48c7fbee945dcdbdc5717d1f4ffd342c4d3f1b7215912829751a94e3ae11007e0a110011a430a4104952b7158cfe819d92743a4132e2e3ae867d72f6a08292aebf471d0a7a2907f3e9947719033e20edc9ca9665874bd88c64c6b62c01928065f6069c5c80c699924") | |
val bobKeys = PrivateKeyBundle.parseFrom(bobKeyData).v1.toV2() | |
val invite = InvitationV1.newBuilder().build().createDeterministic( | |
sender = aliceKeys, | |
recipient = bobKeys.getPublicKeyBundle(), | |
context = InvitationV1ContextBuilder.buildFromConversation("test") | |
) | |
val topicBytes = invite.topic.toByteArray(Charsets.UTF_8) | |
val signature = aliceKeys.preKeysList.first().sign(Hash.sha3(topicBytes)) | |
assertEquals(signature.ecdsaCompact.bytes.toByteArray().contentToString(), "[125, -47, 10, 15, -108, -45, 48, 84, 108, -7, 58, -28, 106, 85, -32, -23, -24, 113, 108, -30, -109, -128, -41, -26, 77, -73, 97, 50, 64, -19, -102, 114, 82, 125, -70, 10, 103, 45, 57, -7, 99, 80, 69, 117, -103, -78, -65, 109, -76, 49, -115, 94, 39, -20, 62, 4, -99, 123, -107, -105, 1, -8, -35, -61]") | |
Log.d("Signature", signature.ecdsaCompact.bytes.toByteArray().contentToString()) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func testGeneratesKnownSignature() async throws { | |
// address = 0xF56d1F3b1290204441Cb3843C2Cac1C2f5AEd690 | |
let aliceKeyData = Data(("0x0a8a030ac20108c192a3f7923112220a2068d2eb2ef8c50c4916b42ce638c5610e44ff4eb3ecb098" + | |
"c9dacf032625c72f101a940108c192a3f7923112460a440a40fc9822283078c323c9319c45e60ab4" + | |
"2c65f6e1744ed8c23c52728d456d33422824c98d307e8b1c86a26826578523ba15fe6f04a17fca17" + | |
"6664ee8017ec8ba59310011a430a410498dc2315dd45d99f5e900a071e7b56142de344540f07fbc7" + | |
"3a0f9a5d5df6b52eb85db06a3825988ab5e04746bc221fcdf5310a44d9523009546d4bfbfbb89cfb" + | |
"12c20108eb92a3f7923112220a20788be9da8e1a1a08b05f7cbf22d86980bc056b130c482fa5bd26" + | |
"ccb8d29b30451a940108eb92a3f7923112460a440a40a7afa25cb6f3fbb98f9e5cd92a1df1898452" + | |
"e0dfa1d7e5affe9eaf9b72dd14bc546d86c399768badf983f07fa7dd16eee8d793357ce6fccd6768" + | |
"07d87bcc595510011a430a410422931e6295c3c93a5f6f5e729dc02e1754e916cb9be16d36dc163a" + | |
"300931f42a0cd5fde957d75c2068e1980c5f86843daf16aba8ae57e8160b8b9f0191def09e").web3.bytesFromHex!) | |
let aliceKeys = try PrivateKeyBundle(serializedData: aliceKeyData).v1.toV2() | |
// address = 0x3De402A325323Bb97f00cE3ad5bFAc96A11F9A34 | |
let bobKeyData = Data(("0x0a88030ac001088cd68df7923112220a209057f8d813314a2aae74e6c4c30f909c1c496b6037ce32" + | |
"a12c613558a8e961681a9201088cd68df7923112440a420a40501ae9b4f75d5bb5bae3ca4ecfda4e" + | |
"de9edc5a9b7fc2d56dc7325b837957c23235cc3005b46bb9ef485f106404dcf71247097ed5096355" + | |
"90f4b7987b833d03661a430a4104e61a7ae511567f4a2b5551221024b6932d6cdb8ecf3876ec64cf" + | |
"29be4291dd5428fc0301963cdf6939978846e2c35fd38fcb70c64296a929f166ef6e4e91045712c2" + | |
"0108b8d68df7923112220a2027707399474d417bf6aae4baa3d73b285bf728353bc3e156b0e32461" + | |
"ebb48f8c1a940108b8d68df7923112460a440a40fb96fa38c3f013830abb61cf6b39776e0475eb13" + | |
"79c66013569c3d2daecdd48c7fbee945dcdbdc5717d1f4ffd342c4d3f1b7215912829751a94e3ae1" + | |
"1007e0a110011a430a4104952b7158cfe819d92743a4132e2e3ae867d72f6a08292aebf471d0a7a2" + | |
"907f3e9947719033e20edc9ca9665874bd88c64c6b62c01928065f6069c5c80c699924").web3.bytesFromHex!) | |
let bobKeys = try PrivateKeyBundle(serializedData: bobKeyData) | |
let invite = try InvitationV1.createDeterministic(sender: aliceKeys, recipient: bobKeys.v1.toV2().getPublicKeyBundle(), context: InvitationV1.Context.with { $0.conversationID = "test" }) | |
let topicData = invite.topic.data(using: .utf8)! | |
let signature = try await aliceKeys.preKeys.first!.sign(Util.keccak256(topicData)) | |
XCTAssertEqual(signature.ecdsaCompact.bytes.bytes, [125, 209, 10, 15, 148, 211, 48, 84, 108, 249, 58, 228, 106, 85, 224, 233, 232, 113, 108, 226, 147, 128, 215, 230, 77, 183, 97, 50, 64, 237, 154, 114, 82, 125, 186, 10, 103, 45, 57, 249, 99, 80, 69, 117, 153, 178, 191, 109, 180, 49, 141, 94, 39, 236, 62, 4, 157, 123, 149, 151, 1, 248, 221, 195]) | |
print(signature.ecdsaCompact.bytes.bytes) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment