Skip to content

The equivalence halo2 code is located here

plonkscript
# k: 7
# in1: 0

// mimc5_pallas_hash
const round_constants = [
    0x0000000000000000000000000000000000000000000000000000000000000000,
    0x0ef758973a8cabb7492f4d05f39a1b93979c7383ee6b0cc88421f605c70a98e5,
    0x02885e3a7813b2259da69bc36657e8bc0433608b11dafa377e83fbeb4281d349,
    0x2399e58dcea3077e6d1c08044780913fb10bc2e0277aa22c5a2f666f5edb4ad9,
    0x23d273ec3d199e351a406dac488fbc7e1fad914b4e54dc91eafe592c5cb6928d,
    0x3a14e37902fca6e97c891080d2e5da41ef472ea882cd6aeb380ab5c5d4798bd9,
    0x07398333d08c0d67b82b09f3bae043e1eb6d4969c10e08cbbce46092675a631a,
    0x09219c213265f3b58b4952f83d333b8db89577b8150d123fea70a1a022534be5,
    0x392c4e4b3997f23536d9a245812da66d0ed85e2922c2850272a07c6cfb5607fc,
    0x160ae58d7e5dbe13abc47d4410e2a18821c113b1f52cee1d16f888740a747512,
    0x1b605f2a033bbd5f4ae9034a44b14b0fe2b456a834defec61af9209f1b50f56f,
    0x2d013c59b0bb60afc36ff4919346f24b762473f40f5a1657255fcf59ac02c673,
    0x2bed8c2bdcd52f2cae73f1a1329f55a8e995d41f44863fcef06bf302a0666ba5,
    0x05d1e0ac576d1ec814b621516339ae1a291c7df36b5fd6cf0b4e3c9cd25e3072,
    0x3849e751322c2535825f4f50ecf9d117911ce8e29aa30bb282a5fbc4090bc510,
    0x196309f1d170d741ab1ce90c39772017fb7cdec78c37882b98a6b56956c13def,
    0x23a8fc6f690aa0b9a85e54650210244f3d07b5c2c3b704bd2e0a8828f1e9e4f6,
    0x3cc814ea4149bd8c15f067c1129cdc5aad84802fb75c2a660978cae7129826f6,
    0x38bd64ba20de36cd8b1acbbc153e92fd680bdd180ccb96213edf91a322c53e9c,
    0x1470b297263c701dbd3de0a18b97cd27ce965e1a4032b947de27e9d451cebba6,
    0x2bd4cdc962e3da62cb3c96f7c428a9b0d518bfa7ce26f8fce7a6af769afb6540,
    0x361abedd23809ec1edbd0a25cb6740b27c0b88818b632c87e91afe9eecabfe59,
    0x1e719f9e471c9c5c5525e61c5fd9122523e6a17242509d1dbbd0ffe70e3c7d16,
    0x18053e9f0d45f9eefbda135bfd39329e34837e633565c314fb9030b9db7381bb,
    0x275ce5dfe5a86c3b7a5239e30b7081c8e12d1234b556b5246906a1a30f9c5a9f,
    0x399472814762e714c63982b48395476c35c928bdecb9862d5355bea9542b715b,
    0x3aadfd9e9f435085887aaf5afc9d05b849a428c353da84c04ac6d69dce88a1b7,
    0x03279d5e9bd83cf67bb96f9f76283c6477cea34be800b51b07048d07437b733a,
    0x32836dead1465663cf48597615479fb5a2026d73cb730ade4639d4a95ce5dbca,
    0x369c71c71b05b227ce508f275fb711d148d50f6edd368d1b46ca0c507d24a867,
    0x353e118c3601dcdd51eb0121238d143588372789d80377b2079434b640449218,
    0x0d56329982f3df38a3f19fb814c3013f419ba0eb8403b27c0c0e75c6fe1cf468,
    0x2093294bfb03169c1d84583e4f42f7e7e8eaff39bca8f08a1a77f8e079692e8b,
    0x00c0a0cad932f2a819007bd28188b3b77fc02bb49245189b3845337b43c7e7be,
    0x24a3ed3fce960bb53aaa1ef6c51abed6b1a3b74907c5d58bc71e211a24c6307a,
    0x02c735abd4bf56f155751f28f4159a79df48497164dc8388ce60486a906ace32,
    0x0ee68c3e38c194033994c0d4d7bde35bfafa35b22a95f915f82c5a3b0422bd9a,
    0x0faddf61946f884c4391360b671ca84c7697742f315d18163ab760cde77e6902,
    0x0eb87ba4b3d521a2e65ad7f845e381ff35c68770b4509b168ece95a5a58656af,
    0x3c07ed74275c56d187b25f08f6b12641aeabc03ba7adef25528eea293c5ef633,
    0x2b5144d110de00a827fed745247960d149f114273a833a73d005b659dfcaf88c,
    0x1c8eebe1fef58743a240a03faf9f1ee76e7fc371b51e016dcaaaf3e3ce1a50b9,
    0x3cf3250a5bf2539c8bc39817165852a56d3b3e40374fbbc8a8f4314f02d68a13,
    0x1aee420145726e8dc9774a21e95a3e72f73253239de336b21aeec678363a8445,
    0x287dd94092802f5aa12987a330f12e218813e5d007a34617d3b99de93ca87869,
    0x2cf601ee0e4e12fab3b1e75235a0051300b9399d099585b32ffc7e6131f9be2c,
    0x29c177f908149788df74e085786f9fea170983c9c9a07b24ab19e1a7e43993fc,
    0x2ce861dd4efb6af7f2121e4cead434d725ebadfae9175ba9ade986e1d4efc5e6,
    0x287f07fe1d34c367abb74d2e118c6ccd22cf767ccad078da6d4e35e25b53f6b5,
    0x05991f171b6c36e341e0ba5381279de80c5c79937857894ad5a5a98b32096bd6,
    0x3b056e3b729fbd873d22ae369a44fc7b6e8b1a82a97172ac53609fbe0bdace92,
    0x296255b5e697e517c502ba49b18aaad89514a490a02e7a878b5d559841b93fbd,
    0x18d96f4b9ee595cc96032f2dbf6b2678c4f03c17c29cc0c3ab490a0213da79a8,
    0x1daf4d4a883a85c0e6d51d1caab084e1224ad4bd067cec4b4588b9c58369a597,
    0x0c72feda25fb2697df6d185100994f866ae8098940f530d41e91934482c79ba6,
    0x379d49d6f2b88854af9de8aa37d7ac0fec30f0a9101d168a14df72f855d34d46,
    0x04e674d88b90b1188353106ae25c0447acace9dc6d62cfe7fec2d7993dfd7a22,
    0x1f201eb644d4d4ec8dfa30bae199819d582973b14e2239384271c3da669d7e0a,
    0x1e64449e73b48c2f6a4a89fe1beff648ef99b264843f2883ef6ea5a509e4d4ee,
    0x395130bbdf4e81f728a6df6c4e8921ee145b5a64251326e8fef583dc6ee6694e,
    0x0ce35503786afaca4c97aab5782f3625fd5da2e2629ca5bd529b3ac78078f571,
    0x33d3f7c6ec7eaf05b586273db0c2924034ceb4ae5599a43b9136671e6fbbcb8a,
    0x23dd8b576fa286331864d63c77fd82fa61da717533821b9382617ebd54abeb46,
    0x27cc17e6f4f00d6bb6090ab547f5304d3429067455c723608e7e5da543aacbfc,
    0x2f98269e5b461f1e0a4edc75d574a2b4c106392104ee81dc4372d83515ceb0a1,
    0x0f5210b2efc2241ebeaa55aeca7fb11428765effaa5ccd22146f7310781de1c9,
    0x3df156c9f66b66b3f02b185ce503ea304bc876a019d20b0d26ce0a6c8308bb6e,
    0x389a0dccf9b67ee59d33dae6bdd67349b4104c4706993c06f12f892356977a45,
    0x2ab5fff302ec18001ad491b218c47bf0bcf53d59c8f855fa74e98ccb926f6b00,
    0x1bb7d0071f06646588a9ea2afcf4546e74f6eb9270ba3f878869059ede69701e,
    0x22a2d1cf4a4ca616d98c8dbfec806979e5a7a07020c2c7735f8e9a663bd52b3c,
    0x1baa026275eb4def033cf764cc8618f79cbd29722c9bc5f96c7537c059b89f24,
    0x375657d6ad46103ce00bbf79004bd37bf2344f54e98f494270702c6914059f21,
    0x0e61a6ea081de44f1e3b8db283b5cc633aa3a5798bcc909ef1c8d02d60aa4014,
    0x04dedebeae494420270dbb6942a8ed64060baf74b30cbf084a85de7a0edf3924,
    0x212aae4aab14ba9ad2137997aedc5260aced3d8e10e4adc29b822f5f416e1167,
    0x08d869cee1f54bb7f88ec9d7868d6c7c03c5e37d661411bbbd0ef8ac708499b9,
    0x2edb0a063b7dc1f03f8e93988defce652a66c0b4c027a82f9bf6e3e70c868d0c,
    0x1abe0556f1b6cdc01e64bece12030795fa6606acaf205c67dcae5adac826cde9,
    0x3b4020e0625af3c0a94f42cb68d2793c8ed844daeadb02bc62f51a1cbc35d9b2,
    0x29fe58498866232db2fea6c0a41cc03f101269f9ea53db3a8b195f36eff344b3,
    0x3069a5c1ab448edfc3a9cb07b2224957d9d513975a24b30b8bd425860c9b8078,
    0x2f13c2492208c1a3f33cc9f02f461279d60f3588f52afcc6fc6a616e6131f194,
    0x2542243d3d82547243f858bf2bfb2a2796bbc3afd5ade927143a89de8df7103a,
    0x3bfbc0cb7f9206e17f81022078150aae370623a118ca6691229b3ea955dad040,
    0x14f0568cb0a7bb6f6b20bcf4dec92b0a855417391d425ce4b011fe855b3cc34e,
    0x083a9a75f05ad6c5c2501ae048d483e1287bb93bde46515060b87f2dbb9254e7,
    0x0ae189fec307b78ba87c57dbb105ed6a5fa3127f7ad4be71ddc64a533ace63d8,
    0x10ca0fd2a95bc198763d375f566182463e0c92ea122df6485f1c4e5a9769b32c,
    0x0abed979216162a193fde6b6bb882963870065d2841bc38c2e7242dcd757db61,
    0x1fa3c38474b954d892b9d36f82c6258e576e0d3346912def4d0ef74ef66b9ef6,
    0x3fa18ae835720eb38fb649eeead5230af2c60c5538a017463d10736cdd9ffaca,
    0x20077c9fffcf91931a43427c1c476081d1c9b5d347e3359a5897847acf6a58ec,
    0x197cf613a52bd2c9115f92ad369a968f51fa44d238f766f1a84df0e053fd3026,
    0x086a0f313a1cf0bcfe765ea5a421abd799af6e65bf4ad6bc437927e1d2757271,
    0x095112e6392bfa527944333eb2c7ce1d392d234465d3f4b2c5aed73107967638,
    0x119f669d6bf57d682e5c19e4845d9069893f6775b3abb284e2d938bec0bc0c79,
    0x1c05fd9d60702bfe5c5488d2cf01be285ba8d02a72a86e4fc0634cc7274eb252,
    0x09070de75b4ee80c3fb94482867ef6ff4fb82b09a9833c153ae9891ad8d7124a,
    0x2283c093b1bc68e0c89bfad567036a8df06f1f862d453e0d4244d0d9a22d344e,
    0x11f93058586938f85d19667feec338315279fbd407b0a7650a3c46ecad1006e8,
    0x37420bc89109e9ff3325b1ac1d91ab1df195bfe0366e71aa4073d326568d2aba,
    0x07a4ff89d94dc7fc88cc271f20b8cbb4fcd2f735471e8bd5e3bd859efdccaae0,
    0x32368a4a4a78f30c3ae423955f9a86481efff1bd9cea4c0377ae9fbf96667686,
    0x1fdef874b34bad8a36c18fdfbc84173248fc9f7301d4c166d38a3493976759e4,
    0x2f4819c85aee94363e380b2cefaa78876b9c420729d4de59ec42f777f9ef251f,
    0x04620a995fe98293291528495896b29133428d8ad0556e1dfe08ca9157ba524b,
    0x1d308ca56d5efd538233125a7250df8ac501e9bd1baacf312e13ea6d08535ef8,
    0x192a71c92b13952c0f3d4dbd927a4cc840d126ee5986d74b3447dac50463371a,
    0x25cc5e57424f0a04f73374e760345ac956b3d1eb67b3fec1de3fc09ba0cce08b,
];

fn pow_5(x) {
    let x2 = x * x;
    let x4 = x2 * x2;
    x4 * x
}

gate hash_round(a, f, s) {
    s <| pow_5(a + f) - a[1];
}

public selector s_mimc_hash;

public input in1;
public output out;

private advice a;

public fixed f;

region permute_state(in1, a, f, s) {
    let rc = global::round_constants;
    let r = rc.len();
    a[0] <== in1;

    for i in 0..r {
        f[i] <-- rc[i];
        a[i + 1] <== pow_5(a[i] + rc[i]);
        s[i] <-- enable;
    }

    a[r]
}

let output = permute_state(in1, a, f, s_mimc_hash);

out <== output;

hash_round(a, f, s_mimc_hash);
# k: 7
# in1: 0

// mimc5_pallas_hash
const round_constants = [
    0x0000000000000000000000000000000000000000000000000000000000000000,
    0x0ef758973a8cabb7492f4d05f39a1b93979c7383ee6b0cc88421f605c70a98e5,
    0x02885e3a7813b2259da69bc36657e8bc0433608b11dafa377e83fbeb4281d349,
    0x2399e58dcea3077e6d1c08044780913fb10bc2e0277aa22c5a2f666f5edb4ad9,
    0x23d273ec3d199e351a406dac488fbc7e1fad914b4e54dc91eafe592c5cb6928d,
    0x3a14e37902fca6e97c891080d2e5da41ef472ea882cd6aeb380ab5c5d4798bd9,
    0x07398333d08c0d67b82b09f3bae043e1eb6d4969c10e08cbbce46092675a631a,
    0x09219c213265f3b58b4952f83d333b8db89577b8150d123fea70a1a022534be5,
    0x392c4e4b3997f23536d9a245812da66d0ed85e2922c2850272a07c6cfb5607fc,
    0x160ae58d7e5dbe13abc47d4410e2a18821c113b1f52cee1d16f888740a747512,
    0x1b605f2a033bbd5f4ae9034a44b14b0fe2b456a834defec61af9209f1b50f56f,
    0x2d013c59b0bb60afc36ff4919346f24b762473f40f5a1657255fcf59ac02c673,
    0x2bed8c2bdcd52f2cae73f1a1329f55a8e995d41f44863fcef06bf302a0666ba5,
    0x05d1e0ac576d1ec814b621516339ae1a291c7df36b5fd6cf0b4e3c9cd25e3072,
    0x3849e751322c2535825f4f50ecf9d117911ce8e29aa30bb282a5fbc4090bc510,
    0x196309f1d170d741ab1ce90c39772017fb7cdec78c37882b98a6b56956c13def,
    0x23a8fc6f690aa0b9a85e54650210244f3d07b5c2c3b704bd2e0a8828f1e9e4f6,
    0x3cc814ea4149bd8c15f067c1129cdc5aad84802fb75c2a660978cae7129826f6,
    0x38bd64ba20de36cd8b1acbbc153e92fd680bdd180ccb96213edf91a322c53e9c,
    0x1470b297263c701dbd3de0a18b97cd27ce965e1a4032b947de27e9d451cebba6,
    0x2bd4cdc962e3da62cb3c96f7c428a9b0d518bfa7ce26f8fce7a6af769afb6540,
    0x361abedd23809ec1edbd0a25cb6740b27c0b88818b632c87e91afe9eecabfe59,
    0x1e719f9e471c9c5c5525e61c5fd9122523e6a17242509d1dbbd0ffe70e3c7d16,
    0x18053e9f0d45f9eefbda135bfd39329e34837e633565c314fb9030b9db7381bb,
    0x275ce5dfe5a86c3b7a5239e30b7081c8e12d1234b556b5246906a1a30f9c5a9f,
    0x399472814762e714c63982b48395476c35c928bdecb9862d5355bea9542b715b,
    0x3aadfd9e9f435085887aaf5afc9d05b849a428c353da84c04ac6d69dce88a1b7,
    0x03279d5e9bd83cf67bb96f9f76283c6477cea34be800b51b07048d07437b733a,
    0x32836dead1465663cf48597615479fb5a2026d73cb730ade4639d4a95ce5dbca,
    0x369c71c71b05b227ce508f275fb711d148d50f6edd368d1b46ca0c507d24a867,
    0x353e118c3601dcdd51eb0121238d143588372789d80377b2079434b640449218,
    0x0d56329982f3df38a3f19fb814c3013f419ba0eb8403b27c0c0e75c6fe1cf468,
    0x2093294bfb03169c1d84583e4f42f7e7e8eaff39bca8f08a1a77f8e079692e8b,
    0x00c0a0cad932f2a819007bd28188b3b77fc02bb49245189b3845337b43c7e7be,
    0x24a3ed3fce960bb53aaa1ef6c51abed6b1a3b74907c5d58bc71e211a24c6307a,
    0x02c735abd4bf56f155751f28f4159a79df48497164dc8388ce60486a906ace32,
    0x0ee68c3e38c194033994c0d4d7bde35bfafa35b22a95f915f82c5a3b0422bd9a,
    0x0faddf61946f884c4391360b671ca84c7697742f315d18163ab760cde77e6902,
    0x0eb87ba4b3d521a2e65ad7f845e381ff35c68770b4509b168ece95a5a58656af,
    0x3c07ed74275c56d187b25f08f6b12641aeabc03ba7adef25528eea293c5ef633,
    0x2b5144d110de00a827fed745247960d149f114273a833a73d005b659dfcaf88c,
    0x1c8eebe1fef58743a240a03faf9f1ee76e7fc371b51e016dcaaaf3e3ce1a50b9,
    0x3cf3250a5bf2539c8bc39817165852a56d3b3e40374fbbc8a8f4314f02d68a13,
    0x1aee420145726e8dc9774a21e95a3e72f73253239de336b21aeec678363a8445,
    0x287dd94092802f5aa12987a330f12e218813e5d007a34617d3b99de93ca87869,
    0x2cf601ee0e4e12fab3b1e75235a0051300b9399d099585b32ffc7e6131f9be2c,
    0x29c177f908149788df74e085786f9fea170983c9c9a07b24ab19e1a7e43993fc,
    0x2ce861dd4efb6af7f2121e4cead434d725ebadfae9175ba9ade986e1d4efc5e6,
    0x287f07fe1d34c367abb74d2e118c6ccd22cf767ccad078da6d4e35e25b53f6b5,
    0x05991f171b6c36e341e0ba5381279de80c5c79937857894ad5a5a98b32096bd6,
    0x3b056e3b729fbd873d22ae369a44fc7b6e8b1a82a97172ac53609fbe0bdace92,
    0x296255b5e697e517c502ba49b18aaad89514a490a02e7a878b5d559841b93fbd,
    0x18d96f4b9ee595cc96032f2dbf6b2678c4f03c17c29cc0c3ab490a0213da79a8,
    0x1daf4d4a883a85c0e6d51d1caab084e1224ad4bd067cec4b4588b9c58369a597,
    0x0c72feda25fb2697df6d185100994f866ae8098940f530d41e91934482c79ba6,
    0x379d49d6f2b88854af9de8aa37d7ac0fec30f0a9101d168a14df72f855d34d46,
    0x04e674d88b90b1188353106ae25c0447acace9dc6d62cfe7fec2d7993dfd7a22,
    0x1f201eb644d4d4ec8dfa30bae199819d582973b14e2239384271c3da669d7e0a,
    0x1e64449e73b48c2f6a4a89fe1beff648ef99b264843f2883ef6ea5a509e4d4ee,
    0x395130bbdf4e81f728a6df6c4e8921ee145b5a64251326e8fef583dc6ee6694e,
    0x0ce35503786afaca4c97aab5782f3625fd5da2e2629ca5bd529b3ac78078f571,
    0x33d3f7c6ec7eaf05b586273db0c2924034ceb4ae5599a43b9136671e6fbbcb8a,
    0x23dd8b576fa286331864d63c77fd82fa61da717533821b9382617ebd54abeb46,
    0x27cc17e6f4f00d6bb6090ab547f5304d3429067455c723608e7e5da543aacbfc,
    0x2f98269e5b461f1e0a4edc75d574a2b4c106392104ee81dc4372d83515ceb0a1,
    0x0f5210b2efc2241ebeaa55aeca7fb11428765effaa5ccd22146f7310781de1c9,
    0x3df156c9f66b66b3f02b185ce503ea304bc876a019d20b0d26ce0a6c8308bb6e,
    0x389a0dccf9b67ee59d33dae6bdd67349b4104c4706993c06f12f892356977a45,
    0x2ab5fff302ec18001ad491b218c47bf0bcf53d59c8f855fa74e98ccb926f6b00,
    0x1bb7d0071f06646588a9ea2afcf4546e74f6eb9270ba3f878869059ede69701e,
    0x22a2d1cf4a4ca616d98c8dbfec806979e5a7a07020c2c7735f8e9a663bd52b3c,
    0x1baa026275eb4def033cf764cc8618f79cbd29722c9bc5f96c7537c059b89f24,
    0x375657d6ad46103ce00bbf79004bd37bf2344f54e98f494270702c6914059f21,
    0x0e61a6ea081de44f1e3b8db283b5cc633aa3a5798bcc909ef1c8d02d60aa4014,
    0x04dedebeae494420270dbb6942a8ed64060baf74b30cbf084a85de7a0edf3924,
    0x212aae4aab14ba9ad2137997aedc5260aced3d8e10e4adc29b822f5f416e1167,
    0x08d869cee1f54bb7f88ec9d7868d6c7c03c5e37d661411bbbd0ef8ac708499b9,
    0x2edb0a063b7dc1f03f8e93988defce652a66c0b4c027a82f9bf6e3e70c868d0c,
    0x1abe0556f1b6cdc01e64bece12030795fa6606acaf205c67dcae5adac826cde9,
    0x3b4020e0625af3c0a94f42cb68d2793c8ed844daeadb02bc62f51a1cbc35d9b2,
    0x29fe58498866232db2fea6c0a41cc03f101269f9ea53db3a8b195f36eff344b3,
    0x3069a5c1ab448edfc3a9cb07b2224957d9d513975a24b30b8bd425860c9b8078,
    0x2f13c2492208c1a3f33cc9f02f461279d60f3588f52afcc6fc6a616e6131f194,
    0x2542243d3d82547243f858bf2bfb2a2796bbc3afd5ade927143a89de8df7103a,
    0x3bfbc0cb7f9206e17f81022078150aae370623a118ca6691229b3ea955dad040,
    0x14f0568cb0a7bb6f6b20bcf4dec92b0a855417391d425ce4b011fe855b3cc34e,
    0x083a9a75f05ad6c5c2501ae048d483e1287bb93bde46515060b87f2dbb9254e7,
    0x0ae189fec307b78ba87c57dbb105ed6a5fa3127f7ad4be71ddc64a533ace63d8,
    0x10ca0fd2a95bc198763d375f566182463e0c92ea122df6485f1c4e5a9769b32c,
    0x0abed979216162a193fde6b6bb882963870065d2841bc38c2e7242dcd757db61,
    0x1fa3c38474b954d892b9d36f82c6258e576e0d3346912def4d0ef74ef66b9ef6,
    0x3fa18ae835720eb38fb649eeead5230af2c60c5538a017463d10736cdd9ffaca,
    0x20077c9fffcf91931a43427c1c476081d1c9b5d347e3359a5897847acf6a58ec,
    0x197cf613a52bd2c9115f92ad369a968f51fa44d238f766f1a84df0e053fd3026,
    0x086a0f313a1cf0bcfe765ea5a421abd799af6e65bf4ad6bc437927e1d2757271,
    0x095112e6392bfa527944333eb2c7ce1d392d234465d3f4b2c5aed73107967638,
    0x119f669d6bf57d682e5c19e4845d9069893f6775b3abb284e2d938bec0bc0c79,
    0x1c05fd9d60702bfe5c5488d2cf01be285ba8d02a72a86e4fc0634cc7274eb252,
    0x09070de75b4ee80c3fb94482867ef6ff4fb82b09a9833c153ae9891ad8d7124a,
    0x2283c093b1bc68e0c89bfad567036a8df06f1f862d453e0d4244d0d9a22d344e,
    0x11f93058586938f85d19667feec338315279fbd407b0a7650a3c46ecad1006e8,
    0x37420bc89109e9ff3325b1ac1d91ab1df195bfe0366e71aa4073d326568d2aba,
    0x07a4ff89d94dc7fc88cc271f20b8cbb4fcd2f735471e8bd5e3bd859efdccaae0,
    0x32368a4a4a78f30c3ae423955f9a86481efff1bd9cea4c0377ae9fbf96667686,
    0x1fdef874b34bad8a36c18fdfbc84173248fc9f7301d4c166d38a3493976759e4,
    0x2f4819c85aee94363e380b2cefaa78876b9c420729d4de59ec42f777f9ef251f,
    0x04620a995fe98293291528495896b29133428d8ad0556e1dfe08ca9157ba524b,
    0x1d308ca56d5efd538233125a7250df8ac501e9bd1baacf312e13ea6d08535ef8,
    0x192a71c92b13952c0f3d4dbd927a4cc840d126ee5986d74b3447dac50463371a,
    0x25cc5e57424f0a04f73374e760345ac956b3d1eb67b3fec1de3fc09ba0cce08b,
];

fn pow_5(x) {
    let x2 = x * x;
    let x4 = x2 * x2;
    x4 * x
}

gate hash_round(a, f, s) {
    s <| pow_5(a + f) - a[1];
}

public selector s_mimc_hash;

public input in1;
public output out;

private advice a;

public fixed f;

region permute_state(in1, a, f, s) {
    let rc = global::round_constants;
    let r = rc.len();
    a[0] <== in1;

    for i in 0..r {
        f[i] <-- rc[i];
        a[i + 1] <== pow_5(a[i] + rc[i]);
        s[i] <-- enable;
    }

    a[r]
}

let output = permute_state(in1, a, f, s_mimc_hash);

out <== output;

hash_round(a, f, s_mimc_hash);