Skip to content

Commit b397486

Browse files
feat: Add Go KATs (#41)
* feat: Add Go KATs * More go vectors
1 parent 2e6c0ed commit b397486

File tree

10 files changed

+38
-130
lines changed

10 files changed

+38
-130
lines changed

tests/kat_amortized.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,18 @@ async fn read_kat_amortized_token() {
5656
.unwrap();
5757
evaluate_kat::<Ristretto255>(list).await;
5858

59-
// Check KAT vectors from the Go implementation
59+
// === Check KAT vectors from Go ===
6060

61-
// Ristretto255
61+
// P384
62+
let list: Vec<AmortizedTokenTestVector> =
63+
serde_json::from_str(include_str!("kat_vectors/amortized_p384_go.json").trim()).unwrap();
64+
evaluate_kat::<NistP384>(list).await;
6265

63-
// TODO: Uncomment when Go implementation is fixed
64-
/* let list: Vec<AmortizedTokenTestVector> = serde_json::from_str(
65-
include_str!("kat_vectors/amortized_ristretto255_go.json").trim(),
66-
)
67-
.unwrap();
68-
evaluate_kat::<Ristretto255>(list).await; */
66+
// Ristretto255
67+
let list: Vec<AmortizedTokenTestVector> =
68+
serde_json::from_str(include_str!("kat_vectors/amortized_ristretto255_go.json").trim())
69+
.unwrap();
70+
evaluate_kat::<Ristretto255>(list).await;
6971
}
7072

7173
async fn evaluate_kat<CS: PrivateCipherSuite>(list: Vec<AmortizedTokenTestVector>) {

tests/kat_generic.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,22 +103,17 @@ struct GenericTokenTestVector {
103103

104104
#[tokio::test]
105105
async fn read_kat_generic_token() {
106+
// === Check own KAT vectors ===
107+
106108
let list: Vec<GenericTokenTestVector> =
107109
serde_json::from_str(include_str!("kat_vectors/generic_rs.json").trim()).unwrap();
108-
109110
evaluate_kat(list).await;
110111

112+
// === Check KAT vectors from Go ===
113+
111114
let list: Vec<GenericTokenTestVector> =
112115
serde_json::from_str(include_str!("kat_vectors/generic_go.json").trim()).unwrap();
113-
114116
evaluate_kat(list).await;
115-
116-
// Waiting for TS implementation to catch up
117-
/* let list: Vec<GenericTokenTestVector> =
118-
serde_json::from_str(include_str!("kat_vectors/generic_ts.json").trim())
119-
.unwrap();
120-
121-
evaluate_kat(list).await; */
122117
}
123118

124119
async fn evaluate_kat(list: Vec<GenericTokenTestVector>) {

tests/kat_private.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,17 @@ async fn read_kat_private_token() {
5151
evaluate_kat::<Ristretto255>(list).await;
5252

5353
// === Check KAT vectors from Go ===
54-
// TODO: Add Go KAT vectors
54+
55+
// P384
56+
let list: Vec<PrivateTokenTestVector> =
57+
serde_json::from_str(include_str!("kat_vectors/private_p384_go.json").trim()).unwrap();
58+
evaluate_kat::<NistP384>(list).await;
59+
60+
// Ristretto255
61+
let list: Vec<PrivateTokenTestVector> =
62+
serde_json::from_str(include_str!("kat_vectors/private_ristretto255_go.json").trim())
63+
.unwrap();
64+
evaluate_kat::<Ristretto255>(list).await;
5565
}
5666

5767
async fn evaluate_kat<CS: PrivateCipherSuite>(list: Vec<PrivateTokenTestVector>) {
@@ -130,8 +140,10 @@ pub(crate) async fn evaluate_vector<CS: PrivateCipherSuite>(vector: PrivateToken
130140
#[tokio::test]
131141
async fn write_kat_private_token() {
132142
write_kat_private_token_type::<NistP384>("tests/kat_vectors/private_p384_rs-new.json").await;
133-
write_kat_private_token_type::<Ristretto255>("tests/kat_vectors/private_ristretto_rs-new.json")
134-
.await;
143+
write_kat_private_token_type::<Ristretto255>(
144+
"tests/kat_vectors/private_ristretto255_rs-new.json",
145+
)
146+
.await;
135147
}
136148

137149
async fn write_kat_private_token_type<CS: PrivateCipherSuite>(file: &str) {

tests/kat_public.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ async fn read_kat_public_token() {
5151

5252
// === Check KAT vectors from Go ===
5353

54-
// TODO: Add Go KAT vectors
54+
let list: Vec<PublicTokenTestVector> =
55+
serde_json::from_str(include_str!("kat_vectors/public_go.json").trim()).unwrap();
56+
evaluate_kat(list).await;
5557
}
5658

5759
async fn evaluate_kat(list: Vec<PublicTokenTestVector>) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"skS":"16e66b97d6e2595c7c7bae5de140249d614ee3445b51f7519a8fe2a7c313031fef8ed1e15a614234561a4e43595c6126","pkS":"0244b47e6ae241020bfa4ec2fbabbad14c4a3e3dc43a796297121734089b70020759358b0a093e1b1ba3f8c4587741eb33","token_challenge":"0001000e6973737565722e6578616d706c65205de58a52fcdaef25ca3f65448d04e040fb1924e8264acfccfc6c5ad451d582b3000e6f726967696e2e6578616d706c65","nonces":["17a45811bae8ef4a3760e797f28fdefc5c505037411f2267f162faf8d0cc41bd","b2b631f29cce6e572c304046d064499db541adc6c300084e8d9a0a7530bd701a","2663bff99c32a5ca5faa21ccf0c5dea29dd33748694846296d94648b41802db1"],"blinds":["a1280097a2487cf90c2bf005ff6e4a7f31375dfb9fee6239f73b721edccce748b80dc6fe86da39701f2e6d3319fba297","d9ee73a1a1e231898f8b9a2e388baf1b7c421f8813b7bcf2b8cae0fb4b18ae3e3a0722300c79bd2e90d7158954730be8","9fc032fbaff9369fd5be37165f52394c59f4844567f77cb8d535d9e22488e6728694b11e33ce14e7cffa57c737b3a60a"],"token_request":"0001b840930262d785d05fd837d024775c659020a4872ca6ee56c13cbe15dadeec12e77cd5a32904e470bb0ca51f6f5611aa2900fd300226b2ee166aa5e2ec175ed24d9671572ad330a6648b781326e5951807bf56da95f7f7d5d6a1cedf5b58c3bc340917de6103766cf2d6a1b53b83a33089badfea3df0c4951f488a60f014f2a5e2d0c8a678f6d56f6507e4b647f39a742f1981a393db","token_response":"409302b94eed3e49b41609bfdccd700894cf559dc642f4b3397afe4a5124b2196acaae8514f24db9dd40b3ca4a5ddbb51f741202f72ade5e5cbd3917e17ecd9dbdbb0aaab57a637daa4c01193a93c8a28731222a182090b5ff5183f893d57e1e9782b51803d0ec40dfac4e3f5c4855810026680a12a2cb008858b5682f5e879de543e31dfb12febf8a430a68f5a25599768ec94930e8bbf80b4ba300527ce450bdeb98f4634e9caf368a10373f3eabe01fcfd75102c85731902062826852531964f215fc55aa0e3be32b08d7baae7134be5d92b1047b277d8ff7cb4f146c71a8c1b025ebaba510b634cd9f3035421cd00eced42d2f","tokens":["000117a45811bae8ef4a3760e797f28fdefc5c505037411f2267f162faf8d0cc41bd501370b494089dc462802af545e63809581ee6ef57890a12105c28368169514bce724a0a821c7294180eed5785e946e9f854e4ca3de7e6cfbf2588e08cabedb8a302aadff0a21aa348087e5290a305ee8e04a451bf73aab8b27ac4ac3761da0149064a932562c06d4054cddd850eaa85","0001b2b631f29cce6e572c304046d064499db541adc6c300084e8d9a0a7530bd701a501370b494089dc462802af545e63809581ee6ef57890a12105c28368169514bce724a0a821c7294180eed5785e946e9f854e4ca3de7e6cfbf2588e08cabedb8535392a7b69b6834d0cd9ce3ba99cc0424a652cbc91248815377bb5c71c1786243879595e312364690beda0ad2f77080","00012663bff99c32a5ca5faa21ccf0c5dea29dd33748694846296d94648b41802db1501370b494089dc462802af545e63809581ee6ef57890a12105c28368169514bce724a0a821c7294180eed5785e946e9f854e4ca3de7e6cfbf2588e08cabedb8d25f38c6b1ca8007b7d08462b93ebbacc740a56800b9c762bc032e082931956165f190f88567b5ce710af993bf7d4ebc"]},{"skS":"afe6fea6d6c21f9fc6986d2f6e138cea6edf61d332784415500c4fdfc2b848d9250e547d78d1e3ad4bb30938f7fd8b4c","pkS":"030ca71e4322481a968cc6cf7ef9017df93dc01defba57bd9af3a86705e3a66759cffadaa58130b5a1eec3834ee923fb18","token_challenge":"0001000e6973737565722e6578616d706c6500000e6f726967696e2e6578616d706c65","nonces":["f86364dac08de021f8454d22f76cb2e397db469d1e04e0e0fce1956bb29a1281","f41cda22fc5503294c23e9008183397c42257299c418e1d2a91d44cad1d00aec","57dbea8d2f4b0eebdf65526d18f5b328ca3d84c432b55d428400efaf2180d7ee"],"blinds":["f8a263582248dfe7f5be7dd66a1bf3db822700f65a9b0d3f48ae5171085ab50ccc2a41b72466b39756f4dd8771975b67","e477da7ee3b5246c0e4326da9a1bac457bb128830681502343eb13ad20667dbe68ff1169900e66eb549780e258553767","52620b4bf7f405830d5b45fdca7bfce51cd0486e282bea392d3e748279524edc77820f0a7b1f702768cdf8a7b2d4e4a8"],"token_request":"0001434093024cf79aabe62a93e92a00c9e7206baab3b11c0611071788e2a2c3f7573696984f9046f55122b2fbf9302c2af2ed8aa50f0284d82d9c9fe3fcbe0c9de967bf668ddf09ee3cb9d9f0c86339fd4642b6034bdaf1d2767fa649cb495bd51b9482178d4a024e71cee46ffaf6ab26fddd23a8af18752910fb73aff9a4ccc912574950386f5b88d2ba98b150c83a9aa46b6d4ed966ae","token_response":"409303ea334e7bb900a1f91b0eced551946082179fd530949b8e2d9746b2e7301c50862bdd0234a1c88c665639e4c0a2a9bb24031dcc4b73952506d100151634376ccd958ca811459f5eb7ba05e401a1264c63c95fd3ff99b577d1ad6eabf2ef0509a7300374e9e2b4bf10c0b82bd6415c945e52343f544e879c25e345b6dddc760bfd0bbaa0361c24d7f98d73967db9597c1736462440f1e5261c0785f59e1166855b817ea30615f5fd2a4fd6bafc4ac813efa1846dec0f160392966797b8bb913374a32e83cb57a77d289c3edcc189d0523e307bfe4ecb6e09b0a74d8361859aec9202f9551be379c9bc32e1f696219d87f6195c","tokens":["0001f86364dac08de021f8454d22f76cb2e397db469d1e04e0e0fce1956bb29a1281c994f7d5cdc2fb970b13d4e8eb6e6d8f9dcdaa65851fb091025dfe134bd5a62a8700efdbdce3a004c24dab7b030094b79c5f153c6005de0e74d9b11d07d1b0433c083e4d30045e8b692aaaef9cd6cd478a2f360ff253a361a7cc7f85cc901624ba902ed2dc0e4493d78167d53cf75a64","0001f41cda22fc5503294c23e9008183397c42257299c418e1d2a91d44cad1d00aecc994f7d5cdc2fb970b13d4e8eb6e6d8f9dcdaa65851fb091025dfe134bd5a62a8700efdbdce3a004c24dab7b030094b79c5f153c6005de0e74d9b11d07d1b043d4fc47ca614f0c5db31c770de014fb42e3fec98bed5fdaa097b34c357076f6b7ffded0624e3632519c816a516c753181","000157dbea8d2f4b0eebdf65526d18f5b328ca3d84c432b55d428400efaf2180d7eec994f7d5cdc2fb970b13d4e8eb6e6d8f9dcdaa65851fb091025dfe134bd5a62a8700efdbdce3a004c24dab7b030094b79c5f153c6005de0e74d9b11d07d1b04330927c142237a85faf350ea61e176903f58d6c1912a36b33940f792f1ecb99084758ff4b703357f093fcec8d8e619b7e"]},{"skS":"e94b1dd394dddcc64944cc7319f6a2631175db43abf15fb1a6ae4f8fc6cf8c1cf6b3385df511601620a2a67c3ecb6f8b","pkS":"03d4543fe9c7bf8481a15be8c46f1e45be21e67be9c988ebc5e17e794a0e8bd6a3e9ad0af978cf045f873def1aa69bf651","token_challenge":"0001000e6973737565722e6578616d706c65000017666f6f2e6578616d706c652c6261722e6578616d706c65","nonces":["03bf556ce55e4bf9b228fd8849e0bdf274975b360654a2b1996c2be536853f22","09ec15b069bdceea683bb40a23c156a0e31e3d6cb2d9832dcee033374e8cca57","d5a7df0f9ceda715c8e961a013efe99ac88f12479043551e4e015aab1d32ebf7"],"blinds":["1cf2f0ffea2df2fbd375c819c8f3069f74424a7ef0a2db5b362f41a9b293097f356cb8009f3619f88b4c65182c83fd4c","2e4d20ebf54e595a72c427c4d06df24d6f68824220e4a6db3642613027daad82237648823dc23e5ad2a96006072bfea7","7bc11a6f8193ae37629c11e38565efd320ef516688a1fca32c6d48f9be7a077e570ab8a15b3d37b7ef396fd31e75064c"],"token_request":"000115409302fad381dd1d611cf7fabacefc59936cc722830ff6664754159ee236faa0ea2b9874a670eede1d2ef395557500e7064b6c02c6648d0f8ce0ef455b6d12325727ea5f92ed40a29153a4bcddf459cbf90ff9be31bfdd8e1471245e0d6fd1dbc09d0f9f033d81c708f8f0957dda5b7949266dff8c1267e8ef93a83e574a959ff6c33e152f1833355f90279561efc021f988c2bbec","token_response":"409302c7a1b7f405585bccb1949da89b607e0d4851d7b8a0bf1eb2244d778a1e6031b95d56595ebb247cf3e18d4e212fedf22b03daa80b5b1f56d29ad82ccec5de24d66ac7de8eca2bf80b145399386b838ac8bf0e9987ded7afad94c002c4695294dc4402b748b04ad6e0115c672e274161f19258877906556ca57d9669a879f4808cdc8bb6c9df1e97ba0e0ee39b31766588bf0ea1d61415847f959064fcd9f54abb269945ca42c3548ba94b7ce12fb2c7c26889d2b87f83003b43a2489a64c1981b673b49a464b226026b4bf04ffc91d19913536f324683f436307a0d12fe4b32afee2dc61b036325bb39d3b690f0694d78fa52","tokens":["000103bf556ce55e4bf9b228fd8849e0bdf274975b360654a2b1996c2be536853f221949fd455872478ba87e2e6c513c3261cddbe57220581245e4c9c911dd1c0bb83233a0ff77c5d21b63fb3b018ecc4b5416ce4f081b5115456c43f2bd59dde1157e630427c081738078ba67f791af80fbd21c6c8342dfc90e39825e7ee85130cc2e29a977ff830b080dcf64865a8fd867","000109ec15b069bdceea683bb40a23c156a0e31e3d6cb2d9832dcee033374e8cca571949fd455872478ba87e2e6c513c3261cddbe57220581245e4c9c911dd1c0bb83233a0ff77c5d21b63fb3b018ecc4b5416ce4f081b5115456c43f2bd59dde1152adc03e35079112c47a664658293e13912268b30e1afb89f12e01dffc0dc0050cfe60ef20b91d2c5af85e1354213f198","0001d5a7df0f9ceda715c8e961a013efe99ac88f12479043551e4e015aab1d32ebf71949fd455872478ba87e2e6c513c3261cddbe57220581245e4c9c911dd1c0bb83233a0ff77c5d21b63fb3b018ecc4b5416ce4f081b5115456c43f2bd59dde115ecd05168dadf2deb5156106c2f35a6b55d26f4ff20f756c94c5e5d958e6d54e44271785d44c7805ea101f94a36e83a46"]},{"skS":"2d7c99b16084ee5ddd739e7e0d68ef104e5c1ad7b01f7a221d3356990c0fff87b5b95c64cdcd30838ea5f2ff15090270","pkS":"03934b1ad9b27aa7e9a7c917941849750db8342922c87a60b8a081768220e74a0157ca36582bfcc11eb84f455809ed4a23","token_challenge":"0001000e6973737565722e6578616d706c65000000","nonces":["76d9571cf508a54ad6a6ea8c477d9ef54b8795456fb8c2737bfd0554406fe5e8","0ecd34d2b1944d408d34b4ad8edb45047b5e412aa254c9f3dcbfa4a4082b9cdb","c4b6fd80945b9615ca88ba33ad4bf39d6063857c2e70fa091a30f0e96e7ac983"],"blinds":["bdb000ff394d1d7c9076284f10203a3868974c1cb9cf08ea08818b7683a4ebd38d67197683205c540b8a8e9e3216351d","9bfcd6c889e9b0b54b3f8cbf78076fc5dc0eb3d294cc9a30613f4693dc37a523c05bd3daf3526a6cc65aa0acb6137d4f","11627c3d68b963f0a233838cffe9e5440f66ba77cd06e7db9e7e38a824fa4fe569c9e37cc8fe8b5a10cef8362f6d442a"],"token_request":"0001064093033f33414705307090457029db7f26f71c04cae725e872c05aea3f243e5506f516c79688f098657fe913c0fd68903b407e0392e55b5e08e9cc6ae9188ed1e93bbdbba71773aa72a3112f00551be440c11cf1984d607ffbf8e5b0bca3d4c3f9d3b473031c74bff5c2b0e508e1da6562f44e82e3fb74a4e23cae76721ce92626d64be4dfada25f4d7c39e870edcbdd23632123a2","token_response":"409303f982b51f6c99ea124bdc3b28fd4eae5e9d8659f45a97242c2cc4eee9dd580a2dfdf2b9adabb41b974e3bc266967ef19e02a5630b001fe004a3c267152432c3d636134bdf647d06fee05734a6394c6a593645e762f9f87cc099b4f20e64dc46568d02fe22e17a5a01807c8cb2b87ed22fdbb38feaeb0b37d0f87b5f92e69d2781dcdc2475c18322ae926c2bdc270bee2cb26916f1290eef68be1578c5061549fdd0fa273c44442cd06536d2350f70d3996608268215a83755162e1400a1bebb840c301662a6e3df1e74336b6bb8e08fb3dbf5a603cdecba4256cffc5295bb37db9769b40c8120dac7bfe37fb0c2ce9af53b85","tokens":["000176d9571cf508a54ad6a6ea8c477d9ef54b8795456fb8c2737bfd0554406fe5e8085cb06952044c7655b412ab7d484c97b97c48c79c568140b8d49a02ca47a9cf5bcae9c2bff21fcb91cc8bc0f1d5c31697946de8eb005be5e10f1da70fdfab069d2e03d3ffcacb7ac8bef87ef2f44cfaf4daeeea960a465f100a66dd9bdfd09e45ed97ef658960af7f39a52264beca7e","00010ecd34d2b1944d408d34b4ad8edb45047b5e412aa254c9f3dcbfa4a4082b9cdb085cb06952044c7655b412ab7d484c97b97c48c79c568140b8d49a02ca47a9cf5bcae9c2bff21fcb91cc8bc0f1d5c31697946de8eb005be5e10f1da70fdfab068b315b225423613928c321f409697ab52d9a457740c834b8aa3837ac86351633e96ede8dc655c86dbec920d6a8795201","0001c4b6fd80945b9615ca88ba33ad4bf39d6063857c2e70fa091a30f0e96e7ac983085cb06952044c7655b412ab7d484c97b97c48c79c568140b8d49a02ca47a9cf5bcae9c2bff21fcb91cc8bc0f1d5c31697946de8eb005be5e10f1da70fdfab06efaa503383aed6feeca1e51820d3deb38cf24c6d0586ca34f852e68ee8b7f31065eaa1de7a00ee43c03020c575f68fe4"]},{"skS":"f5c71d296e046ede287571dfd75114dbfe524e7257f4a005fc4d0ebcc33bc0069affef99bb2ae601874718ca59de179a","pkS":"03eab8190ec64355abf0696539c0b86f68e50fb5dc73f4199d5a7952bf1ca58186fa4b0dd56368856e21c58df744317d02","token_challenge":"0001000e6973737565722e6578616d706c65205de58a52fcdaef25ca3f65448d04e040fb1924e8264acfccfc6c5ad451d582b30000","nonces":["2a83f6f1d72773dadf94974ebca27d64f5a7f469f96104d82e755369ddc2f2e4","e76c335f6acb4691d2ba332ba7a40f3819039555779ea66de6f6c739358c2772","a66b3ce5aeb75777a5178ac561b276240ce58406d6290a26e98786ec0e2ba5b7"],"blinds":["4315e207308e508b5b9981f035e77e46c9d45b2f1c0bc45f0d892ef75e105b15df7c8813d4044cc61c8ec0463c2641c1","461636f21f7822dacf01631562f4d16df31f6acd0a670d2e3b6506a0e25e38dfd75d335db5d2868eaed9bd060c4036eb","7b8a01654e0f8ad818e3a4e510c8dd5b5a115a0f2f03f1089d90512ffec2ebdac9a285c26ac598f17783feacd0eab8d0"],"token_request":"000161409303ed7c83c83e9576e6b8ad80339466f05bfd0de909670841a16a3abce1bd382deb05ce0e41680c0ccafae9467902d2bad8028b4884dd62baea1659b53049236f64745d086521a53259619b66ac62b1e7e64e54ea803133023c66dc1f3103903cdb520221998caf5f95b9f1c87887672795b05278b2e9c4828c532ca31668c80e6835a4de3fa09431d3e076826172ab0a232888","token_response":"409302429ae37954a49247504c79a77c040f05fcb1825c2e5cb25419319211ce1832ee4341f06cc2d44b1580e1e98040ed225402dd2bc6166084134a140109edce72ef74f87b14e6a0bf14a81809bb9e7aa9754d254a224c3a3aed22b5c2ff234a2035dd03b9afc0b48adfdd8d9600995c95b5bd8c468d546a092c4ff6b3198a0b77b137b52a4655ddd1555a9f19ffe90a8c9fa152e617ca3fbc252157c274292026367de0cf81f2e9ec31a00e47d6e12503a2845eecc26196530ecdd9c6f22d873e83513deba2f131f0c2ee39cf1f19c390cbf3245ee5f96b8e9b6cc2ad704914fcb5775c2823c07c11df3467d0fe8791631a2ec9","tokens":["00012a83f6f1d72773dadf94974ebca27d64f5a7f469f96104d82e755369ddc2f2e4d4380df12a1727f4e2ca1ee0d7abea0d0fb1e9506507a4dd618f9b87e79f9f35ee87b759084d891eb599846514ff6b778f8360e8a1db74e2d05aa8c088f8036107c24ae81dc5b6228f81345601d20e83c48c12e35c429469430d4d5785f72e1a215438c2b380df6bf53c284a1f928d15","0001e76c335f6acb4691d2ba332ba7a40f3819039555779ea66de6f6c739358c2772d4380df12a1727f4e2ca1ee0d7abea0d0fb1e9506507a4dd618f9b87e79f9f35ee87b759084d891eb599846514ff6b778f8360e8a1db74e2d05aa8c088f803615c8326b73f2c12f07d98a97f4371905e74a3940b8eead7a2e6fc9ff3f90c7b24bf938910ca4fb1680b78178bc83845e9","0001a66b3ce5aeb75777a5178ac561b276240ce58406d6290a26e98786ec0e2ba5b7d4380df12a1727f4e2ca1ee0d7abea0d0fb1e9506507a4dd618f9b87e79f9f35ee87b759084d891eb599846514ff6b778f8360e8a1db74e2d05aa8c088f803618619eaaee20d918ecb4b35f879b0ba9791fcfda086e25366a0848bdc8940b2ded244b1be025afa8c5403299196cf883f"]}]

0 commit comments

Comments
 (0)