@aztec/accounts 0.68.2 → 0.69.0-devnet
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/EcdsaKAccount.json +640 -640
- package/artifacts/EcdsaRAccount.json +515 -515
- package/artifacts/SchnorrAccount.json +543 -543
- package/artifacts/SchnorrSingleKeyAccount.json +298 -298
- package/package.json +9 -14
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"transpiled": true,
|
|
3
|
-
"noir_version": "1.0.0-beta.
|
|
3
|
+
"noir_version": "1.0.0-beta.1+74f0a50ed44e5712",
|
|
4
4
|
"name": "EcdsaKAccount",
|
|
5
5
|
"functions": [
|
|
6
6
|
{
|
|
7
|
-
"name": "
|
|
7
|
+
"name": "entrypoint",
|
|
8
8
|
"is_unconstrained": false,
|
|
9
9
|
"custom_attributes": [
|
|
10
|
-
"private"
|
|
11
|
-
"initializer"
|
|
10
|
+
"private"
|
|
12
11
|
],
|
|
13
12
|
"abi": {
|
|
14
13
|
"error_types": {
|
|
14
|
+
"11091894166229312484": {
|
|
15
|
+
"error_kind": "fmtstring",
|
|
16
|
+
"item_types": [],
|
|
17
|
+
"length": 20
|
|
18
|
+
},
|
|
15
19
|
"14514982005979867414": {
|
|
16
20
|
"error_kind": "string",
|
|
17
21
|
"string": "attempt to bit-shift with overflow"
|
|
@@ -20,52 +24,33 @@
|
|
|
20
24
|
"error_kind": "string",
|
|
21
25
|
"string": "Array index out of bounds"
|
|
22
26
|
},
|
|
23
|
-
"
|
|
27
|
+
"1705275289401561847": {
|
|
24
28
|
"error_kind": "string",
|
|
25
|
-
"string": "
|
|
29
|
+
"string": "Mismatch note header storage slot."
|
|
26
30
|
},
|
|
27
31
|
"17843811134343075018": {
|
|
28
32
|
"error_kind": "string",
|
|
29
33
|
"string": "Stack too deep"
|
|
30
34
|
},
|
|
31
|
-
"2233873454491509486": {
|
|
32
|
-
"error_kind": "string",
|
|
33
|
-
"string": "Initializer address is not the contract deployer"
|
|
34
|
-
},
|
|
35
|
-
"2709101749560550278": {
|
|
36
|
-
"error_kind": "string",
|
|
37
|
-
"string": "Cannot serialize point at infinity as bytes."
|
|
38
|
-
},
|
|
39
35
|
"2920182694213909827": {
|
|
40
36
|
"error_kind": "string",
|
|
41
37
|
"string": "attempt to subtract with overflow"
|
|
42
38
|
},
|
|
43
|
-
"3151558035338938026": {
|
|
44
|
-
"error_kind": "fmtstring",
|
|
45
|
-
"item_types": [
|
|
46
|
-
{
|
|
47
|
-
"kind": "integer",
|
|
48
|
-
"sign": "unsigned",
|
|
49
|
-
"width": 32
|
|
50
|
-
}
|
|
51
|
-
],
|
|
52
|
-
"length": 75
|
|
53
|
-
},
|
|
54
39
|
"5019202896831570965": {
|
|
55
40
|
"error_kind": "string",
|
|
56
41
|
"string": "attempt to add with overflow"
|
|
57
42
|
},
|
|
58
|
-
"
|
|
43
|
+
"5727012404371710682": {
|
|
59
44
|
"error_kind": "string",
|
|
60
|
-
"string": "
|
|
45
|
+
"string": "push out of bounds"
|
|
61
46
|
},
|
|
62
|
-
"
|
|
47
|
+
"6869395374906889440": {
|
|
63
48
|
"error_kind": "string",
|
|
64
|
-
"string": "
|
|
49
|
+
"string": "Mismatch note header contract address."
|
|
65
50
|
},
|
|
66
|
-
"
|
|
51
|
+
"7233212735005103307": {
|
|
67
52
|
"error_kind": "string",
|
|
68
|
-
"string": "
|
|
53
|
+
"string": "attempt to multiply with overflow"
|
|
69
54
|
}
|
|
70
55
|
},
|
|
71
56
|
"parameters": [
|
|
@@ -551,28 +536,173 @@
|
|
|
551
536
|
"visibility": "private"
|
|
552
537
|
},
|
|
553
538
|
{
|
|
554
|
-
"name": "
|
|
539
|
+
"name": "app_payload",
|
|
555
540
|
"type": {
|
|
556
|
-
"
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
541
|
+
"fields": [
|
|
542
|
+
{
|
|
543
|
+
"name": "function_calls",
|
|
544
|
+
"type": {
|
|
545
|
+
"kind": "array",
|
|
546
|
+
"length": 4,
|
|
547
|
+
"type": {
|
|
548
|
+
"fields": [
|
|
549
|
+
{
|
|
550
|
+
"name": "args_hash",
|
|
551
|
+
"type": {
|
|
552
|
+
"kind": "field"
|
|
553
|
+
}
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
"name": "function_selector",
|
|
557
|
+
"type": {
|
|
558
|
+
"fields": [
|
|
559
|
+
{
|
|
560
|
+
"name": "inner",
|
|
561
|
+
"type": {
|
|
562
|
+
"kind": "integer",
|
|
563
|
+
"sign": "unsigned",
|
|
564
|
+
"width": 32
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
],
|
|
568
|
+
"kind": "struct",
|
|
569
|
+
"path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
"name": "target_address",
|
|
574
|
+
"type": {
|
|
575
|
+
"fields": [
|
|
576
|
+
{
|
|
577
|
+
"name": "inner",
|
|
578
|
+
"type": {
|
|
579
|
+
"kind": "field"
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
],
|
|
583
|
+
"kind": "struct",
|
|
584
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
585
|
+
}
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
"name": "is_public",
|
|
589
|
+
"type": {
|
|
590
|
+
"kind": "boolean"
|
|
591
|
+
}
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
"name": "is_static",
|
|
595
|
+
"type": {
|
|
596
|
+
"kind": "boolean"
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
],
|
|
600
|
+
"kind": "struct",
|
|
601
|
+
"path": "authwit::entrypoint::function_call::FunctionCall"
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
},
|
|
605
|
+
{
|
|
606
|
+
"name": "nonce",
|
|
607
|
+
"type": {
|
|
608
|
+
"kind": "field"
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
],
|
|
612
|
+
"kind": "struct",
|
|
613
|
+
"path": "authwit::entrypoint::app::AppPayload"
|
|
563
614
|
},
|
|
564
615
|
"visibility": "private"
|
|
565
616
|
},
|
|
566
617
|
{
|
|
567
|
-
"name": "
|
|
618
|
+
"name": "fee_payload",
|
|
568
619
|
"type": {
|
|
569
|
-
"
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
620
|
+
"fields": [
|
|
621
|
+
{
|
|
622
|
+
"name": "function_calls",
|
|
623
|
+
"type": {
|
|
624
|
+
"kind": "array",
|
|
625
|
+
"length": 2,
|
|
626
|
+
"type": {
|
|
627
|
+
"fields": [
|
|
628
|
+
{
|
|
629
|
+
"name": "args_hash",
|
|
630
|
+
"type": {
|
|
631
|
+
"kind": "field"
|
|
632
|
+
}
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
"name": "function_selector",
|
|
636
|
+
"type": {
|
|
637
|
+
"fields": [
|
|
638
|
+
{
|
|
639
|
+
"name": "inner",
|
|
640
|
+
"type": {
|
|
641
|
+
"kind": "integer",
|
|
642
|
+
"sign": "unsigned",
|
|
643
|
+
"width": 32
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
],
|
|
647
|
+
"kind": "struct",
|
|
648
|
+
"path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
|
|
649
|
+
}
|
|
650
|
+
},
|
|
651
|
+
{
|
|
652
|
+
"name": "target_address",
|
|
653
|
+
"type": {
|
|
654
|
+
"fields": [
|
|
655
|
+
{
|
|
656
|
+
"name": "inner",
|
|
657
|
+
"type": {
|
|
658
|
+
"kind": "field"
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
],
|
|
662
|
+
"kind": "struct",
|
|
663
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
664
|
+
}
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"name": "is_public",
|
|
668
|
+
"type": {
|
|
669
|
+
"kind": "boolean"
|
|
670
|
+
}
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
"name": "is_static",
|
|
674
|
+
"type": {
|
|
675
|
+
"kind": "boolean"
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
],
|
|
679
|
+
"kind": "struct",
|
|
680
|
+
"path": "authwit::entrypoint::function_call::FunctionCall"
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
"name": "nonce",
|
|
686
|
+
"type": {
|
|
687
|
+
"kind": "field"
|
|
688
|
+
}
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
"name": "is_fee_payer",
|
|
692
|
+
"type": {
|
|
693
|
+
"kind": "boolean"
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
],
|
|
697
|
+
"kind": "struct",
|
|
698
|
+
"path": "authwit::entrypoint::fee::FeePayload"
|
|
699
|
+
},
|
|
700
|
+
"visibility": "private"
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
"name": "cancellable",
|
|
704
|
+
"type": {
|
|
705
|
+
"kind": "boolean"
|
|
576
706
|
},
|
|
577
707
|
"visibility": "private"
|
|
578
708
|
}
|
|
@@ -1682,42 +1812,33 @@
|
|
|
1682
1812
|
"visibility": "databus"
|
|
1683
1813
|
}
|
|
1684
1814
|
},
|
|
1685
|
-
"bytecode": "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NRADqoEdgKTfsRVPcdFdH4l5J+HTZ++waaDVQG9gDpGNd2fh9SC+7Mwwhe3MPH0i+LIzgxoATt1qZyAPdxGuBgjrLgw83JVJDewaxmpzMvaY/l3e3VoxBrwbw2TcX/hkTLj7M0zGplgRjYFibQHOAbDhQOttc8O6TBt2QCvGgAcwbNjdhW9Ywr17hDbs7sI3LLrehQutvBTwftsewPzZbFJ7tOJpUnu2Ygx4T4YmtZfwJkW497LUpJzyrn+ayV4MMn8XYI2Q9d5buMynRrc3g7zaR7isJMz7MODel0lW7mu4XYvOCXfNEHt8b4ZbM8gBZ29g7xgYgT00kGEPDWLaQ4MMD2rRORkIVqRVhljp19vD3+yn/779tR2gLa0toy2rLactry3QdqC2g7QdrO0QbYdqO0zb4doGaxui7QhtR2o7StvR2o7Rdqy247QN1TZM2/HaTtB2oraTtA3XdrK2U7SN0DZS26naTtN2urZR2kZrG6PtDG1jtY3Tdqa2s7Sdre0cbedqG6/tPG0TtE3Udr62C7RdqO0ibRdru0TbpdomaZus7TJtl2u7QtuV2q7SdrW2a7Rdq+06bddru0Hbjdpu0naztlu03aptirbbtN2u7Q5td2q7S9vd2u7Rdq+2qdqmabtP2/3aHtD2oLaHtD2s7RFt07XN0Paotse0Pa7tCW1PantK29PaZmp7Rtuz2p7T9ry2F7S9qO0lbS9re0Xbq9pe0/a6tje0vantLW1va3tH27va3tP2vrYPtH2o7SNtH2v7RNun2j7TNkvb59q+0Paltq+0fa3tG23favtO22xt32v7QduP2n7S9rO2X7T9qm2OtrnaftP2u7Z52uZr+0Pbn9r+0rZA29/aKlprXmproa2ltkptVdqqtdVoq9VWp62Vttba2mhrq62dtnptDdraa+ugbXltHbWtoG1FbStpW1nbKtpW1baattW1raFtTW1raeukbW1tnbWto21dbetp66JtfW0baNtQ20baNta2ibZNtW2mras2R5vS5mrztMW0xbUltPnaktpS2jbXtoW2LbVtpa2btu7attbWQ1tPbdto21bbdtp6aeutrY+27bX11dZP2w7adtS2k7adte2ibVdtu2nrr22Att217aFtT217adtb2z7a9tU2UNsgbftp21/bAdrS2jLastpy2vLaAm0HajtI28HaDtF2qLbDtB2ubbC2IdqO0HaktqO0Ha3tGG3HajtO21Btw7Qdr+0EbSdqO0nbcG0naztF2whtI7Wdqu00badrG6VttLYx2s7QNlbbOG1najtL29naztF2rrbx2s7TNkHbRG3na7tA24XaLtJ2sbZLtF2qbZK2ydou03a5tiu0XantKm1Xa7tG27XartN2vbYbtN2o7SZtN2u7Rdut2qZou03b7dru0Hantru03a3tHm33apuqbZq2+7Tdr+0BbQ9qe0jbw9oe0TZd2wxtj2p7TNvj2p7Q9qS2p7Q9rW2mtme0PavtOW3Pa3tB24vaXtL2srZXtL2q7TVtr2t7Q9ub2t7S9ra2d7S9q+09be9r+0Dbh9o+0vaxtk+0fartM22ztH2u7QttX2r7StvX2r7R9q2277TN1va9th+0/ajtJ20/a/tF26/a5mibq+03bb9rm6dtvrY/tP2p7S9tC7T9rY1ezFhOWwttLbVVaqvSVq2tRluttjptrbS11tamTcWi7yPQQVZb4tvf4DvA4EsbfBmDL2vw5Qy+vMEXGHwHGnwHGXwHG3yHGHyHGnyHGXyHG3yDDb4hBt8RBt+RBt9RBt/RBt8xBt+xBt9xBt9Qg2+YwXe8wXeCwXeiwXeSwTfc4DvZ4DvF4Bth8I00+E41+E4z+E43+EYZfKMNvjEG3xkG31iDb5zBd6bBd5bBd7bBd47Bd67BN97gO8/gm2DwTTT4zjf4LjD4LjT4LjL4Ljb4LjH4LjX4Jhl8kw2+ywy+yw2+Kwy+Kw2+qwy+qw2+awy+aw2+6wy+6w2+Gwy+Gw2+mwy+mw2+Wwy+Ww2+KQbfbQbf7QbfHQbfnQbfXQbf3QbfPQbfvQbfVINvmsF3n8F3v8H3gMH3oMH3kMH3sMH3iME33eCbYfA9avA9ZvA9bvA9YfA9afA9ZfA9bfDNNPieMfieNfieM/ieN/heMPheNPheMvheNvheMfheNfheM/heN/jeMPjeNPjeMvjeNvjeMfjeNfjeM/jeN/g+MPg+NPg+Mvg+Nvg+Mfg+Nfg+M/hmGXyfG3xfGHxfGnxfGXxfG3zfGHzfGnzfGXyzDb7vDb4fDL4fDb6fDL6fDb5fDL5fDb45Bt9cg+83g+93g2+ewTff4PvD4PvT4PvL4Ftg8P1t8NGNjlLfcgZfC4OvpcFXafBVGXzVBl+NwVdr8NUZfK0MvtYGXxuDr63B187gqzf4Ggy+9gZfB4NveYOvo8G3gsG3osG3ksG3ssG3isG3qsG3msG3usG3hsG3psG3lsHXyeBb2+DrbPCtY/Cta/CtZ/B1MfjWN/g2MPg2NPg2Mvg2Nvg2Mfg2Nfg2M/i6GnyOwacMPtfg8wy+mMEXN/gSBp9v8CUNvpTBt7nBt4XBt6XBt5XB183g627wbW3w9TD4ehp82xh82xp82xl8vQy+3gZfH4Nve4Ovr8HXz+DbweDb0eDbyeDb2eDbxeDb1eDbzeDrb/ANMPh2N/j2MPj2NPj2Mvj2Nvj2Mfj2NfgGGnyDDL79DL79Db4DDL60wZcx+LIGX87gyxt8gcF3oMF3kMF3sMF3iMF3qMF3mMF3uME32OAbYvAdYfAdafAdZfAdbfAdY/Ada/AdZ/ANNfiGGXzHG3wnGHwnGnwnGXzDDb6TDb5TDL4RBt9Ig+9Ug+80g+90g2+UwTfa4Btj8J1h8I01+MYZfGcafGcZfGcbfOcYfOcafOMNvvMMvgkG30SD73yD7wKD70KD7yKD72KD7xKD71KDb5LBN9ngu8zgu9zgu8Lgu9Lgu8rgu9rgu8bgu9bgu87gu97gu8Hgu9Hgu8ngu9ngu8Xgu9Xgm2Lw3Wbw3W7w3WHw3Wnw3WXw3W3w3WPw3WvwTTX4phl89xl89xt8Dxh8Dxp8Dxl8Dxt8jxh80w2+GQbfowbfYwbf4wbfEwbfkwbfUwbf0wbfTIPvGYPvWYPvOYPveYPvBYPvRYPvJYPvZYPvFYPvVYPvNYPvdYPvDYPvTYPvLYPvbYPvHYPvXYPvPYPvfYPvA4PvQ4PvI4PvY4PvE4PvU4PvM4NvlsH3ucH3hcH3pcH3lcH3tcH3jcH3rcH3ncE32+D73uD7weD70eD7yeD72eD7xeD71eCbY/DNNfh+M/h+N/jmGXzzDb4/DL4/Db6/DL4FBt/fBh+96FDqW87ga2HwtTT4Kg2+KoOv2uCrMfhqDb46g6+Vwdfa4GsT+uhlxOqKhddyRZ/btgn/wHIl/6H0D28d/uqUdyn6C0FrLfINGu3a/PtrfZsSAC0ZAZT7mmi7pq+VbWQtVd8G++ptbVHukPlbsPT13GygvHjejzuJdCyeS3huzvWdXCweKJ0INxXTaQiysWQu6XqB67vZBdj4/sHeooj8VKMF4ef68HOD/rW9tg5t/t08tr7apkMb7GvlpRdobbc4F8uHG7Jj6Wtj9B/+KgkAvVk7ADbrv19jEwTLAzd+R6ZCon+AFIl5haK1VNJzXd+jP5fMOSqW0+3NdXOZmJN10lk3n4qpVBBzY142l83oNdMqcIJ0NhUk/43L5g9TrgBurIVrxTaMAdPi6HVXApKBC/dKRcc/aF2WH4jqGMaKXndlMFkLzZrWLT4VkXUrjJ7oXKzShpcDTnnXP7hXYeDAqrhDjwU3xbcqA+7VhNebMK/GgHt14bgpvtUZcK8hHDfFtwYD7jWF46b41mTAvZZw3BTfWgy4OwnHTfF1YsC9tnDcFN/aDLg7R+Ac68yAex3huCm+dRhwrxuBeq/LgHs94bgpvvUYcHcRjpvi68KAe33huCm+9RlwbxCB/b0BA+4NheOm+DZkwL2RcNwU30YMuDcWjpvi25gB9ybCcVN8mzDg3jQCfW1TBtybCcdN8W3GgLurcNwUX1cG3I5w3BSfw4BbRWB/KwbcrnDcFJ/LgNuLQL09Btwx4bgpvhgD7ngE6h1nwJ0QjpviSzDg9oXjpvh8BtxJ4bgpviQD7lQE9neKAffmwnFTfJsz4N4iAvXeggH3lsJxU3xbMuDeKgL13ooBdzfhuCm+bgy4uwvHTfF1Z8C9tXDc/8THgLtHBPZ3DwbcPYXjpvh6MuDeRjhuim8bBtzbRoDn2zLg3k44bopvOwbcvSJQ714MuHsLx03x9WbA3ScC9e7DgHt74bgpvu0ZcPcVjpvi68uAu59w3BRfPwbcOwjHTfHtwIB7R+G4Kb4dGXDvFIF+vhMD7p2F46b4dmbAvYtw3BTfLgy4dxWOm+LblQH3bhHY37sx4O4vHDfF158B94AI1HsAA+7dheOm+HZnwL2HcNwU3x4MuPcUjpvi25MB917CcVN8ezHg3jsCfW1vBtz7CMdN8e3DgHvfCNR7XwbcA4XjpvgGMuAeJBw3xTeIAfd+EeD5fgy49xeOm+LbnwH3AcJxU3wHMOBOC8dN8aUZcGeE46b4Mgy4s8JxU3xZBtw54bgpvhwD7rxw3BRfngF3IBw3xRcw4D4wAnPLgQy4DxKOm+I7iAH3wcJxU3wHM+A+JAI8P4QB96HCcVN8hzLgPkw4borvMAbchwvHTfEdzoB7cAT292AG3EOE46b4hjDgPiIC9T6CAfeRwnFTfEcy4D5KOG6K7ygG3EdHgOdHM+A+Rjhuiu8YBtzHRqDexzLgPk44borvOAbcQyNQ76EMuIcJx03xDWPAfbxw3BTf8Qy4TxCOm+I7gQH3icJxU3wnMuA+SThuiu8kBtzDI9DPhzPgPlk4borvZAbcpwjHTfGdwoB7RAR4PoIB90jhuCm+kQy4TxWOm+I7lQH3acJxU3ynMeA+XThuiu90BtyjhOOm+EYx4B4tHDfFN5oB95gInGNjGHCfIRw3xXcGA+6xwnFTfGMZcI8TjpviG8eA+0zhuCm+MxlwnxWBvnYWA+6zheOm+M5mwH2OcNwU3zkMuM+NAM/PZcA9Xjhuim88A+7zIlDv8xhwTxCOm+KbwIB7onDcFN9EBtznR4Dn5zPgvkA4borvAgbcF0ag3hcy4L5IOG6K7yIG3BcLx03xXcyA+5II8PwSBtyXCsdN8V3KgHtSBOo9iQH3ZOG4Kb7JDLgvE46b4ruMAfflEeD55Qy4rxCOm+K7ggH3lcJxU3xXMuC+Sjhuiu8qBtxXC8dN8V3NgPsa4bgpvmsYcF8rHDfFdy0D7uuE46b4rmPAfX0Ezu/rGXDfIBw3xXcDA+4bI1DvGxlw3yQcN8V3EwPum4XjpvhuZsB9i3DcFN8tDLhvFY6b4ruVAfcU4bgpvikMuG8Tjpviu40B9+3CcVN8tzPgviMC5/cdDLjvFI6b4ruTAfddwnFTfHcx4L47Ajy/mwH3PcJxU3z3MOC+Vzhuiu9eBtxTI8DzqQy4pwnHTfFNY8B9XwTqfR8D7vuF46b47mfA/YBw3BTfAwy4HxSOm+J7kAH3Q8JxU3wPMeB+WDhuiu9hBtyPRKCfP8KAe7pw3BTfdAbcM4TjpvhmMOB+NAI8f5QB92PCcVN8jzHgfjwC9X6cAfcTwnFTfE8w4H4yAvV+kgH3U8JxU3xPMeB+Wjhuiu9pBtwzI8DzmQy4nxGOm+J7hgH3s8JxU3zPMuB+Tjhuiu85BtzPR2B/P8+A+wXhuCm+FxhwvygcN8X3IgPulyLA85cYcL8sHDfF9zID7leE46b4XmHA/apw3BTfqwy4XxOOm+J7jQH368JxU3yvM+B+Qzhuiu8NBtxvRuAce5MB91vCcVN8bzHgfjsC9X6bAfc7wnFTfO8w4H5XOG6K710G3O8Jx03xvceA+/0I7O/3GXB/IBw3xfcBA+4PI1DvDxlwfyQcN8X3EQPujyNQ748ZcH8iHDfF9wkD7k8jUO9PGXB/Jhw3xfcZA+5ZEaj3LAbcnwvHTfF9zoD7C+G4Kb4vGHB/GQGef8mA+yvhuCm+rxhwfy0cN8X3NQPub4Tjpvi+YcD9rXDcFN+3DLi/E46b4vuOAffsCPTz2Qy4vxeOm+L7ngH3D8JxU3w/MOD+UThuiu9HBtw/RWB//8SA+2fhuCm+nxlw/yIcN8X3CwPuX4Xjpvh+ZcA9Rzhuim8OA+65wnFTfHMZcP8WgX7+GwPu34Xjpvh+Z8A9LwL1nseAe75w3BTffAbcf0Sg3n8w4P5TOG6K708G3H9FoN5/MeBeIBw3xbeAAfffwnFTfH8z4K5oKxs3xUeGxr2ccNy0v5djwN1COG6KrwUD7pYRqHdLBtyVwnFTfJUMuKuE46b4qhhwV0eA59UMuGuE46b4ahhw10ag3rUMuOuE46b46hhwt4pAvVsx4G4tHDfF15oBdxvhuCm+Ngy42wrHTfG1ZcDdLgL7ux0D7nrhuCm+egbcDcJxU3wNDLjbR4Dn7RlwdxCOm+LrwIB7+QjUe3kG3B2F46b4OjLgXiEC9V6BAfeKwnFTfCsy4F5JOG6KbyUG3CsLx03xrcyAexXhuCm+VRhwryq9r+n4VmXAvVoE+vlqDLhXF46b4ludAfcawnFTfGsw4F5TOG6Kb00G3GtFYH+vxYC7k3DcFF8nBtxrC8dN8a3NgLuzcNwUX2cG3OsIx03xrcOAe90I9LV1GXCvJxw3xbceA+4uwnFTfF0YcK8fAZ6vz4B7A+G4Kb4NGHBvKBw3xbchA+6NhOOm+DZiwL2xcNwU38YMuDcRjpvi24QB96YR6OebMuDeTDhuim8zBtxdI1Dvrgy4HeG4KT6HAbeKQL0VA25XOG6Kz2XA7UWg3h4D7phw3BRfjAF3PAL1jjPgTgjHTfElGHD7wnFTfD4D7qRw3BRfkgF3Sjhuii/FgHtz4bgpvs0ZcG8RgX6+BQPuLYXjpvi2ZMC9VQTqvRUD7m7CcVN83Rhwd49Avbsz4N5aOO5/4mPA3SMC9e7BgLuncNwUX08G3NtEoN7bMODeVjhuim9bBtzbCcdN8W3HgLtXBHjeiwF3b+G4Kb7eDLj7CMdN8fVhwL19BHi+PQPuvsJxU3x9GXD3i0C9+zHg3kE4bopvBwbcOwrHTfHtyIB7J+G4Kb6dGHDvHIH9vTMD7l2E46b4dmHAvatw3BTfrgy4dxOOm+LbjQF3/wjs7/4MuAcIx03xDWDAvXsE6r07A+49hOOm+PZgwL1nBOq9JwPuvYTjpvj2YsC9dwTqvTcD7n2E46b49mHAvW8E6r0vA+6BwnFTfAMZcA+KQL0HMeDeTzhuim8/Btz7C8dN8e3PgPsA4bgpvgMYcKeF46b40gy4M8JxU3wZBtxZ4bgpviwD7pxw3BRfjgF3Xjhuii/PgDsQjpviCxhwHygcN8V3IAPug4TjpvgOYsB9sHDcFN/BDLgPEY6b4juEAfehwnFTfIcy4D5MOG6K7zAG3IcLx03xHc6Ae7Bw3BTfYAbcQ4TjpviGMOA+Qjhuiu8IBtxHCsdN8R3JgPso4bgpvqMYcB8tHDfFdzQD7mOE46b4jmHAfaxw3BTfsQy4jxOOm+I7jgH3UGbciPiGMuAehsOtKiv++ac+/yfG4gvNA2DcTnG8x7dlDPj4tvh1T2iLIwMX7hPaLkwwaF22h5IcD2NPBDeXwtWiFH/CTcZiSdfLpH1XpWMZPxGkctl04CYzbi7t5JNOIue7aS+ZTsZUJptOOplc2o37uXQsn1AukksnFa2l/8askwqcdDyZ9vN6ISfv6A+ZZD5IuOlMNua4OaVUPqb/n5vPxVKZXEJlEvpvj2eU/t+Zau1msqmE7+v/ZTaXicVUPOWmcxnlKwIfC5K+l1EZT4fq+fHAzQcxJ6WToWEGOgVeJr9fyMvFchhLpfN62YyX8PIZHWzgxhPplP5fZRN5LxHLUH7jnhskYp7Om+t4sXSQjcWTTspNZmOx/YA5HC78MKb4hjPsl5OF46b4TmbAfYpw3BTfKQy4RwjHTfGNYMA9Ujhuim8kA+5TheOm+E5lwH2acNwU32kMuE8XjpviO50B9yjhuCm+UQy4RwvHTfGNZsA9Rjhuim8MA+4zhOOm+M5gwD1WOG6KbywD7nHCcVN84xhwnykcN8V3JgPus4TjpvjOYsB9tnDcFN/ZDLjPEY6b4juHAfe5wnFTfOcy4B4vHDfFN54B93nCcVN85zHgniAcN8U3gQH3ROG4Kb6JDLjPF46b4jufAfcFwh/qUnwXMOC+MKIPdYFxL/JQ96K2jAFfxPBQ92LhD3UJ98VtFyYYtC5LrPTw9SSGTXaJpYe65T7oRHLp0ra4B6WmWqsgyAZ+zs8HnutmfT/je9l4PJPN6gfWmYzSrlwypROgvY6v/xbXTyS9pJfNOhmVyAX/PDC92PBQVzkJP55IpQP9F+icuI5SXj4INH69Xi6WTjjxTNzNJLxcIhloWCqrM5CL+24Qy6dc5Q4H5nCS8MOY4pvEsF8mC8dN8U1mwH2ZcNwU32UMuC8Xjpviu5wB9xXCcVN8VzDgvlI4borvSgbcVwnHTfFdxYD7auG4Kb6rGXBfIxw3xXcNA+5rheOm+K5lwH2dcNwU33UMuK8Xjpviu54B9w3CcVN8NzDgvlE4borvRgbcNwnHTfHdxID7ZuG4Kb6bGXDfIhw3xXcLA+5bheOm+G5lwD1FOG6KbwoD7tuE46b4bmPAfbtw3BTf7Qy47xCOm+K7gwH3ncJxU3x3MuC+S/jDTYrvLgbcd0f04SYw7kUebt7TljHgexgebt4r/OEm4b637cIEg9ZliZUeQl7KsMmmWnq4We4DPySXprXFPTA01joeOEGQ8dP5bD6e99IqkYnH3HgsnUzkY5lkMp1zcp7+E/lM4Kbyrhv3lf6L4nHPT/rZbD45KeTlYg+I074Xy2cynpvwYiofpFUq43gJlUspz8nmYn7GTWT8WDKpH8zm3EQ+n9XOQD+zTfo6Iyo9CZjD+4QfxhTffQz75X7huCm++xlwPyAcN8X3AAPuB4XjpvgeZMD9kHDcFN9DDLgfFo6b4nuYAfcjwnFTfI8w4J4uHDfFN50B9wzhuCm+GQy4HxWOm+J7lAH3Y8JxU3yPMeB+XDhuiu9xBtxPCMdN8T3BgPtJ4bgpvicZcD8lHDfF9xQD7qeF46b4nmbAPVM4bopvJgPuZ4TjpvieYcD9rHDcFN+zDLifE46b4nuOAffzwnFTfM8z4H5BOG6K7wUG3C8Kf8hH8b3IgPuliD7kA8a9yEO+l9syBvwyw0O+V4Q/5CPcr7RdmGDQuiyx0sO4aQyb7FVLD/nKffCF5NJrbXEPzky11k8qY2k3nYnrPxoL4r6nn2sq/Vc4gX6cScF4uXgunXJiGS8RSwUZ189kHS/j0N8XZNL+fSEvF8thNhWkM1k/GYvn4o6GGXfzbtrxfJXVCVGBisXzTi6TdPNJDSeVUFk3Hqi8px+ZZihB9wFz+Lrww5jie51hv7whHDfF9wYD7jeF46b43mTA/ZZw3BTfWwy43xaOm+J7mwH3O8JxU3zvMOB+Vzhuiu9dBtzvCcdN8b3HgPt94bgpvvcZcH8gHDfF9wED7g+F46b4PmTA/ZFw3BTfRwy4PxaOm+L7mAH3J8JxU3yfMOD+VDhuiu9TBtyfCcdN8X3GgHuWcNwU3ywG3J8Lx03xfc6A+wvhuCm+LxhwfykcN8X3JQPur4Tjpvi+YsD9tfCHXRTf1wy4v4nowy5g3Is87Pq2LWPA3zI87PpO+MMuwv1d24UJBq3LEis9lHqNYZPNtvSwq9wHQEgufd8W9wDJVGs3H/fijhMkE342p5+SxeihWSIWz8bjuYzvejmln625TjKeyGVyvq+S+VQs4yR1YvzA00/4Xg95udjDLlc5QT7hxdOZWNaP5fRTuEw28J1M1tVPD71UPJF0dNSO6+ZyqZQK9OPEXCzuJNIZ7Y+ncq8Dc/iD8MOY4vuBYb/8KBw3xfcjA+6fhOOm+H5iwP2zcNwU388MuH8Rjpvi+4UB96/CcVN8vzLgniMcN8U3hwH3XOG4Kb65DLh/E46b4vuNAffvwnFTfL8z4J4nHDfFN48B93zhuCm++Qy4/xCOm+L7gwH3n8JxU3x/MuD+Szhuiu8vBtwLhOOm+BYw4P5bOG6K728G3BXtZOOm+MjQuJcTjpviW44BdwvhuCm+Fgy4WzLjRsTXkgF3JQ631Yc+wLgXeehT1Y4x4Kp2+HWr28l+6EO4q9stTDBoXZZY6eHM9wyHaA24uRSuxR76lPkgBMml2na4BymmWusgMipws27gJbM6qnw6HfiJIAjiaSeXiPleVqWyqZinHyqlk7FcPKX/YuV7uVgun8hkkjF6WEF4S3Oo0rmUG8QSevFkLpXWiUw72bzGnck7SVfF81mVVoGjE53K5zMZ/agskcvl44m0q1I6j/kfgA996oQfxhRfHcOh1Eo4boqvFQPu1sJxU3ytGXC3EY6b4mvDgLutcNwUX1sG3O2E46b42jHgrheOm+KrZ8DdIBw3xdfAgLu9cNwUX3sG3B2E46b4OjDgXl44bopveQbcHYXjpvg6MuBeQThuim8FBtwrCsdN8a3IgHsl4bgpvpUYcK8sHDfFtzID7lWE46b4VmHAvapw3BTfqgy4VxOOm+JbjQH36sIfflB8qzPgXiOiDz+AcS/y8GPNdowBr8nw8GMt4Q8/CPda7RYmGLQuS6z0kKKWYZN1svTwo9wHAkgurd0O90DBVGvl+olsLHA9z4lnPUfjdPOek/aDTD4Zz+ScbODl827OSQfxQHk6AKVSfs7JBZ6OJJ0L6kJeLpbDXD6XTCWddN7N5HIqHXNdHaGjF00lg2wyG08GcSfu+9l0PB3P5r2Mm036yWQ8yOacTNz16oA57Cz8MKb4OjPsl3WE46b41mHAva5w3BTfugy41xOOm+JbjwF3F+G4Kb4uDLjXF46b4lufAfcGwnFTfBsw4N5QOG6Kb0MG3BsJx03xbcSAe2PhuCm+jRlwbyIcN8W3CQPuTYXjpvg2ZcC9mXDcFN9mDLi7CsdN8XVlwO0Ix03xOQy4lXDcFJ9iwO0Kx03xuQy4PeG4KT6PAXdM+EMAii/GgDse0YcAwLgXeQiQaMcYcILhIYAv/CEA4fbbLUwwaF2WWOlm/doMmyxp6yFAmTfGkVxKtcPdWDfWOh3Xzw1yKue7bjbIJlL0r9ukg6xPDz7i8ZSf0SHqvyWVy2a9TKD/bEr/x3w6lc3qxdOZziEvS3PoJpQbz6WVk3byOSfhuX7cSaYzaSeRUzqZXjqbUAntzmXyOS+WCuKeRpNLp+Ke5/nJuN8ZmMPNhR/GFN/mDPtlC+G4Kb4tGHBvKRw3xbclA+6thOOm+LZiwN1NOG6KrxsD7u7CcVN83Rlwby0c9z/xMeDuIRw3xdeDAXdP4bgpvp4MuLcRjpvi24YB97bCcVN82zLg3k44bopvOwbcvYTjpvh6MeDuLRw3xdebAXcf4bgpvj4MuLcXjpvi254Bd1/huCm+vgy4+wm/GU7x9WPAvUNEb4YD417kZviO7RgD3pHhZvhOwm+GE+6d2i1MMGhdlljppnWKYZPtbOlmeLk3iJFc2qUd7gazsdZ5x0v4sby+eR7PxXN+IpHNZVx99z8d6McAMT/w8yrlOIkgkXDdVDyR97OxVFbFkvmsk/Ji8c1DXi52M9xNOBp2LBmLZfTNeTeukm7Ki3upRDIfS6m4fs7gxpMxlfTifsz39M17ldOZDRLKCxLZTG5zYA53FX4YU3y7MuyX3YTjpvh2Y8DdXzhuiq8/A+4BwnFTfAMYcO8uHDfFtzsD7j2E46b49mDAvadw3BTfngy49xKOm+LbiwH33sJxU3x7M+DeRzhuim8fBtz7CsdN8e3LgHugcNwU30AG3IOE46b4BjHg3k84bopvPwbc+wvHTfHtz4D7AOG4Kb4DGHCnhd8UpvjSDLgzEb0pDIx7kZvC2XaMAWcZbgrnhN8UJty5dgsTDFqXJVa6ebsLwybL27opXOaNUiSXgna4G62mWqtEMpFSWS+dSMfieqF4NpbP5jPpbCbrB2knSLhZLx7EUgn9H1L6XrO+B57x4nkdhud6gevuGvKyNIcqlcvpIAMvnczFElkVzzrKTwSZTDyTiudjuWzcd5LJINChxXIqk0vGsolMkI77uWwuqwuwKzCHBwo/jCm+Axn2y0HCcVN8BzHgPlg4borvYAbchwjHTfEdwoD7UOG4Kb5DGXAfJhw3xXcYA+7DheOm+A5nwD1YOG6KbzAD7iHCcVN8QxhwHyEcN8V3BAPuI4XjpviOZMB9lHDcFN9RDLiPFo6b4juaAfcxwnFTfMcw4D5WOG6K71gG3McJvzlK8R3HgHtoRG+OAuNe5ObosHaMAQ9juDl6vPCbo4T7+IjcHKWbmAHDJjvB0s3Rcm8YIrl0YjvcDUdTrZVeyHWSvpeK6z/oJvT/Msgk80Eq7bv65m9aQ3KCTCpwPY0jSHoqq/+ohuwq30n7KndgyMvFcpgJkm5OJ83P+bGUozOmY8tm9Y1kJ59Q+iZzXLn5bFrfWo7HXeXkXT+R1/lIZvPJIJ7Mxw8E5vAk4YcxxXcSw34ZLhw3xTecAffJwnFTfCcz4D5FOG6K7xQG3COE46b4RjDgHikcN8U3kgH3qcJxU3ynMuA+TThuiu80BtynC8dN8Z3OgHuUcNwU3ygG3KOF46b4RjPgHiMcN8U3hgH3GcJxU3xnMOAeKxw3xTeWAfc44TcJKb5xDLjPjOhNQmDci9wkPKsdY8BnMdwkPFv4TULCfXZEbhLSzbwTGTbZObZuEpZ54wzJpXPb4W68mWrtBn48pVdM+ukg4+ZjcS8TTyaCpL4XGviZeF6pRCaZdPWiyVjgKs93/SCRCpSK6z+ZjWVOCnnZYjEO5fMZN5uJp5Iqn4vFE7FUOpPP5PJOUuWy+kZmIptMOCqXj3kxP+/ncirhJjNpN5dOZ2Nexj8JmMPxwg9jim88w345Tzhuiu88BtwThOOm+CYw4J4oHDfFN5EB9/nCcVN85zPgvkA4borvAgbcFwrHTfFdyID7IuG4Kb6LGHBfLBw3xXcxA+5LhOOm+C5hwH2pcNwU36UMuCcJx03xTWLAPVk4bopvMgPuy4TfLKP4LmPAfXlEb5YB417kZtkV7RgDvoLhZtmVwm+WEe4rI3KzjG5qncuwya6ydLOs3BtISC5d3Q53A8pYay+WTCcdL+nng6yXSmYSOXpHMKv8VNzNJnNuwkll8irjJdNeTt9ATKXTuVQ2lUirXEp5jj8+5OViOcypTDqR0FBiOraUcpSv/y9IJ1L5rJvJOY7rpvX/5WI6a2nHSaXp57STQS6WdxP5bJAZD8zhNcIPY4rvGob9cq1w3BTftQy4rxOOm+K7jgH39cJxU3zXM+C+QThuiu8GBtw3CsdN8d3IgPsm4bgpvpsYcN8sHDfFdzMD7luE46b4bmHAfatw3BTfrQy4pwjHTfFNYcB9m3DcFN9tDLhvF37TiOK7nQH3HRG9aQSMe5GbRne2Ywz4ToabRncJv2lEuO+KyE0jurlzNcMmu9vSTaNyb6QguXRPO9yNGGOt3WwuSLpKeXE/k0knUylHBV6Q9710TN8yi/kaZDqV8B19pyobp4+eH3g5lcwnvZTyc9eEvFz8plEqEU/EVTaXS+VjSaWCWD6uMkknl8umdXYzMR1dPq/8mOuk0/lEWt/ZclTWTSg/m8gn49cAc3iv8MOY4ruXYb9MFY6b4pvKgHuacNwU3zQG3PcJx03x3ceA+37huCm++xlwPyAcN8X3AAPuB4XjpvgeZMD9kHDcFN9DDLgfFo6b4nuYAfcjwnFTfI8w4J4uHDfFN50B9wzhN08ovhkMuB+N6M0TYNyL3Dx5rB1jwI8x3Dx5XPjNE8L9eERuntBNjnsYNtkTtm6elHlDAcmlJ9vhbkiYau0GQSztuSk3mfUDlfUzSc+Np/N5J5nNByqv4nHlB7FEPJ/Rv2gIQcrL6TsziXgsRv8krntvyMvFcugkgnQmpvEmUjoUl/4NjXw6m/STGTeR8DM5T2UCL+8m856+3eMnYuk0/eFcKpPJ6f+2yA2PcnP4lPDDmOJ7imG/PC0cN8X3NAPumcJxU3wzGXA/Ixw3xfcMA+5nheOm+J5lwP2ccNwU33MMuJ8Xjpvie54B9wvCcVN8LzDgflE4borvRQbcLwnHTfG9xID7ZeE3ESi+lxlwvxLRmwjAuBe5ifBqO8aAX2W4ifCa8JsIhPu1iNxEILH/JMMme93STYRyhTWSS2+0wwlzU61d33P9ZC7rePp2Q6DSmYTv+vGYm4y5CY3cy6iY6+eTykln4rlYLun6qXTScVU+yOTcTDb5VMjLxW4ipDz6JwoTubwb5JQT6FBzOcf3Ap2plJNO+YlAJVJZ/Yvj6fhSKhvz/bivMcXcXMxLPwXM4ZvCD2OK702G/fKWcNwU31sMuN8Wjpvie5sB9zvCcVN87zDgflc4borvXQbc7wnHTfG9x4D7feG4Kb73GXB/IBw3xfcBA+4PheOm+D5kwP2RcDFN8X3EgPvjiIppYNyLiOlP2jEG/AmDmP5UuJgm3J9GREyT6H2DYZN9ZktMlykwkVya1Q4nUE21drUcV8l8PuYnsqlMkHdi9K9T5fK5bCwTpPOZROBrSFqJx92YH2QTvpfzU9lU2k8l4jnl/iNUPzWJaddPe/FkLJXKasBuJhPTniDnp+NePJ7zVSaZVW5W+X4sFQucbDrnOOl4MtAYUmk3n3ffBObwc+GHMcX3OcN++UI4borvCwbcXwrHTfF9yYD7K+G4Kb6vGHB/LRw3xfc1A+5vhOOm+L5hwP2tcNwU37cMuL8Tjpvi+44B92zhopLim82A+/uIikpg3IuIyh/aMQb8A4Oo/FG4qCTcP0ZEVJL4m8WwyX6yJSrLFFpILv3cDifUTLV2Uzr8WEb5SqWCLP2jJimVTCX1/zZI5RN+Kp/XqPJJP+fkE6lkPuGpfDIeZFzPy6m0Vq+fh7xcTFQmtO5N6WAc5adjrpPPZPKZrI7ZSfq+ynsefXNlKuukkzn9MDmdUSpIpeJ5pf9MPp5S7ufAHP4i/DCm+H5h2C+/CsdN8f3KgHuOcNwU3xwG3HOF46b45jLg/k04borvNwbcvwvHTfH9zoB7nnDcFN88BtzzhYsrim8+A+4/IiqugHEvIq7+bMcY8J8M4uov4eKKcP8VEXFFIuhnhk22wJa4KlNwILn0dzucYDHV2lWxRELFvXw6lvadbC6TTDlK68S0l0/EVd6POY6XyTsJPxfTsalMJp3WTwEDN50M8umkF/sl5OVi4ipQWo3qh5gJDT6IZwKdSDfr5HO5VEavFs8nPcdNx1SQ9ZM62Hgy5aX9IK1iGlzcz+Z/Qe7Hetn7heIjQ++X5YTjpviWY8DdQjhuiq8FA+6WwnFTfC0ZcFcKx03xVTLgrhKOm+KrYsBdzYwbEV81A+6aeiAnK+yJDGDci4iM2nrGgGvr8evW1csWGYS7rn5hgkHrssRKYuBvBpHRCtxcCtdiIqPMwRvJpdb1uMHdVGs3mfGSKaW8jMqprBvL+tm0G09k8m5MP/1JZ7MJjS4exJSbSPr5hONnYvkUPTnKxNP0T9RXhLxcTGT4GScbT2jRpWLJmKOfKCUTrhNLpwIvEQQ6XOWnYm48psN2AtdzsjrYhEopX/+1ftpPVABz2Eb4YUzxtWE4lNoKx03xtWXA3U44boqvHQPueuG4Kb56BtwNwnFTfA0MuNsLH7YpvvYMuDtEdNjuwDRsL1/PGPDyDMN2R+HDNuHuGJFhm4bi1gybbAVbw3aZAyiSSyvWAwdYQ61Vys8px497WkGkEvo3Sb1YTKVSKTepp/Sck04kU27ey7pZ343pJwmJnJfWTzO8eMLN+8E/g2JHw7CttCDwckEuTd+kkUqpXBDP5vXjCP3sI6UxOiqXzcTjiVgmEVCCUyn9eESLgmwmncrp1Kg2wByuJPwwpvhWYtgvKwvHTfGtzIB7FeG4Kb5VGHCvKhw3xbcqA+7VhA+dFN9qDLhXj+jQuTrT0LlGPWPAazAMnWsKHzoJ95oRGTppOFyRYZOtZWnoLHcQQ3KpUz1ukDPVWmVjWU+P1Hp8TaWcuL577HiJdMzxfO1OJ9J5lcypnBuLuzm9cE6P2bFskE7mc3nfCXLZ5EohLxfLYUz/jbFYLp5xkk6QTdPsnsv4iVgqo+PX8SXSiWzGjbmJvOfGMvlcJhXTc3NcqWTguF56JWAO1xZ+GFN8azPsl87CcVN8nRlwryMcN8W3DgPudYUPXxTfugy414vo8LUe0/DVpZ4x4C4Mw9f6wocvwr1+RIYvGpI6MWyyDWwNX2UOJEgubViPG2hMtXYTqUBl0ll9LzGhbyf6rsol3Xg65dG7wHF95zOrMspzs0HC1XczfbrPqG8xxpxMLJbO5zx37ZCXiz1eT2Xj+n+W0PgzKS9Hr0UnXcfJxfysk3HTqVRWJ5H+ER8vmc/rO6tePp+L6f+Jl8nElZtbZGAqN4cbCT+MKb6NGPbLxsJxU3wbM+DeRPgQQvFtwoB704gOIZsyDSGb1TMGvBnDENJV+BBCuLtGZAihYWFDhk3m2HrsWObBjOSSqscd7MZa67tIGp+TTSfieUePLRn99yd8J5/VU5e+2ZXMZ+P5bMJPuIm0Hwv0na9sNp/J6v9BoCMO/I1CXi6WQ+UkXf20VumxKBPE8iqbyOs06VtVuVzcSWZTqUQu0H+XfiaaDzKpZEapuManxyedsIST2QiYQ1f4YUzxuQz7xRN+GFN8HgPuWEQP4xjTYRyvZww4znAYJ4QfxoQ7EZHDmA5NxbDJfEuHcbkHFJJLyXrcAWesddxzcvrvVUlf3zpwaOVY2k8m8umcSqTcRC6eo+V0tGk3kUgm0kE8FkvG9NOomJtWSdcNebnYYZzxPD+nQ9STSyxw3XxWA8y7QUqvkNdPt+JuwvW9RCJIKt9JO3qWSeq7GrG0nnNy8XxykQO03BymhB9KFF+KYb9sHtFDaXOmQ2mLesaAt2A4lLYUfigR7i0jcijR4ZFk2GRb2TqUymzUSC51q8c1elOtS+NzYslMIq90ALlkTOlQs/m0GwsSQU6vnMlnXU+5Tsx3koGv79178VTIyxaNcCjjZWM5P5WLqXRK+fFkNhNLZb248rP6uIyl464+0QPlegm9cjaVzaSAOewe0ebcnak5b13PGTBDc+4hvDkT7h4Rac7URLsxNOeetppzydXMxpJFcmmbelgjTXDUmmqyDUOtty1+dpr0XH3q0J9L5rR4zmVdLVVymZijb6dm3XwqplJBzI152Vw2o9dMq8AJ0tlUkPw3RpsNdVumhrpdPWPA2zE01F7CGyrh7sXQUIlsNRULm4rpKvxdZRKbJS+FDY3OSzGZexfxDd45egFHMYqtZRhjIejK8PfFgKJShGJS9gnX355wcRShN0NX6S385k8Bd2MjRTOvRXCXG2Nf4U+ziJh9GUaKfuCjudAYaN0R4broXGzPlIsdmHKxA2MuuEbNHYX3FK79kF3pfxV3tpH42LifW0l2/yPMOzKcIcB6K2QOaaBqUdG0ibmxtRrjVPGaHOcWKifFw+VOS5uWnfIu1ZfpICgOupkxq8b+Hop5J4bGEIAbQ+GqbGbNmjPAlYt553qZDQZZi2Je7lw0oCxrfRrLObI+uxTfB/M8vTdyvgpygRf3U25GJehZTCzwE8lYTj8iSuf8vIqlPTdFP85A/1CUH/fon/JN5bL6tmBRTlXO82K5VCar9COddMZJ5ry0E8R8z3XSOf0IKOclE4m05+USySCZ0ncl0oGXdOK+n3ISrpdyueqzi6E+zT0IG7ttgqzPrkz9c1dAHhq7vYTMw25MedgtzMPShgTJB7khXBiPi4eE/lEcEvozDwn9GYaEAy0NCY2pJ5tNbgBwLeSQcCDTITSgCUNCY3lQNBApJ3BS+kR1/GzCz6Rybiapz9Eg7uU8ZH12r8cd7Mghgas+u5dxl6mxfVO4g9sSux+b8zys0bWQd4P3qMceSIUa7VFGjRobXJaxRo3uyeY8s2xsLWSN9qzH5a64RnsWDVelj7QqlrF2jYWHvNtaPAzuFT7O2tv0OMsp71JLeqyDfFZZ7lrAR2PGr/pxyrvUsm7a/60clrvWPsLrQRtmH4YBeV8msbAv46OlvZlyMZApFwOXkotyY+bixcHCHzdxceAQ4Y+bdgxxox83AeutDvnvcVPp9U//RuWkePAbxHknaR+mhjiI8U4SxTyIoTEcGpHHTfsAh6L96mU2mEOZ7lTsZ+FxE7I++wMfNx0CvJPEVZ/9m/B4oaKZ9WrKW7uFKyqHwgFRPBQOYD4UDmA4FA4TcigskcR+8M+FbDppoYfCYUxNJw04FBq7zYesT0boocBVn0wTnr0jXzot+5FacX3K/JESmz8rlWU6rHL1jAHnGH6qIQ8kAxfufP3CBIPWZfsJDI7bGciGGjC/ce6Ud/3Dx4DhVn2eKYdlv9MBvlVfuCQfGgfVy97HS+KgU961SK91yrsUkoMHg+uB7n/EPWCMivbcQRy328FDRW3FQg4WnpEvCH+lv2sBNs///J0tiv6+dm0W/n314edD9d97mLbD6/8VDm0q7LwYebiQFyMbudziXAwO55Yh9WFCClM+/Ye/SgJAN5vDAQ0i/6/gDgYDm80QpkKimw4S8xE4lWT1GyWOYFJJR9YzBnwkg0o6SrhKItxHRUQlDQljRa97NNOt3KPrFz/h0PVDNkVqEO0qFh4onHEfGolT2eVbWy1sbPRrp/DzMTovx2o7TttQbcO0Ha/tBG0najtJ23BtJ2s7hW75aRup7VRtp2k7XdsobaO1jdF2hrax2sZpO1PbWdrO1naOtnO1jdd2nrYJ2iaWThsUTG2J71iD7ziDb6jBN8zgO97gO8HgO9HgO8ngG27wnWzwnWLwjTD4Rhp8pxp8pxl8pxt8owy+0QbfGIPvDINvrME3zuA70+A7y+A72+A7x+A71+Abb/CdZ/BNMPgmhr7ia+3w163DX53yrkWaTrmHxjGwKdlRx4LWIozHQdb6N19Dy1/LLbxVNKzctWIL31A6vry1nOK3nU4oZy130TenTlz2tZzSt7BOWsa19COrxd7oGr5sayVNb4edvCxrJc1vmp3S/LX8Jb21NqK5a/lLfgNuZPPWcpf2Nt2pzVnLX/qbeac1fa1G3xw9valr+Y32QjWqaWs5TeiranRT1nKa1KPVmMbXijex36szGlsr1uSzQ41d6lr0ffpNX2vc0tbym3WmqTOXvFaymeejOmsJa6WCZp+16mzzWs4ynNvqHNNazjLNAOrcxddSyzhPqPGla+WWeTZR5y26llfGnKMmFK3lBmXNTGoiUPTR3EjqrFO43sRQxJwXippzQ5Fzdih6zgxF0NhQFI0JRdKoUDSdFoqokaGoOiUUWcND0XViKMKOD0XZ0FCk0exGs2DphX6MNhE4u54Pq4Nn9d0LXNyL3lW8oJ4xYFocve6FQDJw4b6waFOA1nVsPjfCNasc612k4lxcFOb84tI7ORfVL3wQWPBdbFDc6GdJiK5VUMkXAUl/Mbi4HBv8onr8re6LgB20mDfo024CsNaXwDAnYjZPu0uYTrtL6xkDvpThtJsk/LQj3JMiftpNgJEtlTWEy3LaTQ5zflnpaTfZcNpdZuG0mwA87SYDSX8ZU3HRXR+J+XJc9zR+k0G58V0YNg302ydIaXAFeFpANy2q8RUMU5J03BeGuNH7D8mdK5n3n1PepSh/VzJw5yrw1FY4v66qX3zqRNf/PGD9r4blIZa3OXVfDa5f4bqmnjHgaxim7muFT92E+9qIT93nwciWcQ3hskzd14U5v7506r7OMHVfb2HqRnStwtR9HZD01zMVF931kZhvEH7qXxk2DfQPiV0JzCGy8d4ovB7ElxsZpjAgbpZXma8McaN7IXLqvhHIw5uEKyrCehMDD29mUgM3W1AD44H1vwWWB9+1qQZuAdevcN1azxjwrQxqYIpwNUC4p0RcDYyHkS2ZN4TLogZuC3N+e6kauM2gBm63oAYQXaugBm4Dkv52puKiuz4S8x3Cp8+bwqaBVgM3AXOIbLx3Cq8H8eVOhinsTubpE8GXOxnUAHDqVncCeXiXcDVAWO9i4OHdTGrgbgtq4Fxg/e+B5SFv9afa7wHXr3DdW88Y8L0MamCqcDVAuKdGXA2cCyObCgzhsqiBaWHO7ytVA9MMauA+C2oA0bUKamAakPT3MRUX3fWRmO8XPn3eFTYNtBq4C5hDZON9QHg9iC8PMExhDzBPnwi+PMCgBoBTt3oAyMMHhasBwvogAw8fYlIDD1lQA+cA6/8wLA+eVTXwMLh+heuResaAH2FQA9OFqwHCPT3iauAcGNmy1tTAjDDnj5aqgRkGNfCoBTWA6FoFNTADSPpHmYqL7vpIzI8Jnz4fDJsGWg08CMwhsvE+LrwexJfHGaawx5mnTwRfHmdQA8CpWz0O5OETwtUAYX2CgYdPMqmBJy2ogbOB9X8Kloe01e+meApcv8L1dD1jwE8zqIGZwtUA4Z4ZcTVwNoxsCWvfTfFMmPNnS9XAMwY18KwFNYDoWgU18AyQ9M8yFRfd9ZGYnxM+fT4RNg20GngCmENk431eeD2IL88zTGFA3Cxq4IkQN7oXAqdu9TyQhy8IVwOE9QUGHr7IpAZetKAGzgLW/yVYHtyUTTXwErh+hevlesaAX2ZQA68IVwOE+5WIq4GzYGTL+YZwWdTAq2HOXytVA68a1MBrFtQAomsV1MCrQNK/xlRcdNdHYn5d+PT5Qtg00GrgBWAOkY33DeH1IL68wTCFvcE8fSL48gaDGgBO3eoNIA/fFK4GCOubDDx8i0kNvGVBDZwJrP/bsDxkkjbVwNvg+hWud+oZA36HQQ28K1wNEO53I64GzoSRLZY0hMuiBt4Lc/5+qRp4z6AG3regBhBdq6AG3gOS/n2m4qK7PhLzB8KnzzfDpoFWA28Cc4hsvB8Krwfx5UOGKexD5ukTwZcPGdQAcOpWHwJ5+JFwNUBYP2Lg4cdMauBjC2pgHLD+n8DyELf6ptAn4PoVrk/rGQP+lEENfCZcDRDuzyKuBsbhJLO1N4VmhTn/vFQNzDKogc8tqAFE1yqogVlA0n/OVFx010di/kL49PlR2DTQauAjYA6RjfdL4fUgvnzJMIUBcbOogY9C3OheCJy61ZdAHn4lXA0Q1q8YePg1kxr42oIaGAus/ze4O2Nxm2rgG3D9Cte39YwBf8ugBr4TrgYI93cRVwNjcQNjxhAuixqYHeb8+1I1MNugBr63oAYQXaugBmYDSf89U3HRXR+J+Qfh0+dXYdNAq4GvgDlENt4fhdeD+PIjwxT2I/P0ieDLjwxqADh1qx+BPPxJuBogrD8x8PBnJjXwswU1cAaw/r/gzsKETTXwC7h+hevXesaAf2VQA3OEqwHCPSfiauAMnGROG8JlUQNzw5z/VqoG5hrUwG8W1ACiaxXUwFwg6X9jKi666yMx/y58+vwpbBpoNfATMIfIxjtPeD2IL/MYprB5zNMngi/zGNQAcOpW84A8nC9cDRDW+Qw8/INJDfxhQQ2MAdb/T1gekla/YfRPcP0K11/1jAH/xaAGFghXA4R7QcTVwBgY2Xxr3zD6dyHnDRWLTv5/G9QA/SFuNYDoWgU18DeS9A08xUV3fSTm5Rpwda2owG+4+WHTQKuB+cAcIhtvC+H1IL5QjOgpDIibRQ0QXyhGdC8ETt2qOIfl4m3JXA+nvOsfrC0ZeFjZgJ0mC+dqZQO/GhgN7ENVsDzYVQNV4PoVruoGxoCrG/Dr1gCbARfumoaFCQata1UNjI6gGqgNc15XqgZqGxZXA3UW1MBooBqoBZK+LiJqAIm5lfDps2XYNNBqoCUwh8jG21p4PYgvrRmmsNbM0yeCL60Z1ABw6latgTxsI1wNENY2DDxsy6QG2lpQA6OAaqAdLA9xq98p1A5cv8JV38AYcD2DGmgQrgYId0PE1cAomBpIW/tOofZhzjuUqoH2BjXQwYIaGAVUA+2BpO/QwFNcdNdHYl5e+PTZJmwaaDXQBphDZOPtKLwexJeODFNYR+bpE8GXjgxqADh1q45AHq4gXA0Q1hUYeLgikxpY0YIaOB2oBlbCqYGcTTWwErh+hWvlBsaAV2ZQA6sIVwOEe5WIq4HTcWrAM4TLogZWDXO+WqkaWNWgBlazoAZOB6qBVYGkX62Bp7joro/EvLrw6XOFsGmg1cAKwBwiG+8awutBfFmDYQpbg3n6RPBlDQY1AJy61RpAHq4pXA0Q1jUZeLgWkxpYy4IaOA2oBjrB8uBafTbQCVy/wrV2A2PAazOogc7C1QDh7hxxNXAaTA3krD0bWCfM+bqlamAdgxpY14IaOA2oBtYBkn7dBp7iors+EvN6wqfPNcOmgVYDawJziGy8XYTXg/jShWEK68I8fSL40oVBDQCnbtUFyMP1hasBwro+Aw83YFIDG1hQA6cC1cCGsDx4nk01sCG4foVrowbGgDdiUAMbC1cDhHvjiKuBU2FqIJszhMuiBjYJc75pqRrYxKAGNrWgBk4FqoFNgKTftIGnuOiuj8S8mfDpc/2waaDVwPrAHCIbb1fh9SC+dGWYwroyT58IvnRlUAPAqVt1BfLQEa4GCKvDwEPFpAaUBTUwEqgGXFge8lafDbjg+hUur4ExYI9BDcSEqwHCHYu4GhgJUwPK2rOBeJjzRKkaiBvUQMKCGhgJVANxIOkTDTzFRXd9JGZf+PTphE0DrQYcYA6RjTcpvB7ElyTDFJZknj4RfEkyqAHg1K2SQB6mhKsBwppi4OHmTGpgcwtqYARQDWwBy0PMqhrYAly/wrVlA2PAWzKoga2EqwHCvVXE1cAI3D/KYU0NdAtz3r1UDXQzqIHuFtTACKAa6AYkffcGnuKiuz4S89bCp89U2DTQaiAFzCGy8fYQXg/iSw+GKawH8/SJ4EsPBjUAnLpVDyAPewpXA4S1JwMPt2FSA9tYUAOnANXAtrA8+CmbamBbcP0K13YNjAFvx6AGeglXA4S7V8TVwCm4f5TDN4TLogZ6hznvU6oGehvUQB8LauAUoBroDSR9nwae4qK7PhLz9sKnz55h00CrgZ7AHCIbb1/h9SC+9GWYwvoyT58IvvRlUAPAqVv1BfKwn3A1QFj7MfBwByY1sIMFNXAyUA3siLszZlUN7AiuX+HaqYEx4J0Y1MDOwtUA4d454mrgZNw/V2tNDewS5nzXUjWwi0EN7GpBDZwMVAO7AEm/awNPcdFdH4l5N+HTZ7+waaDVQD9gDpGNt7/wehBf+jNMYf2Zp08EX/ozqAHg1K36A3k4QLgaIKwDGHi4O5Ma2N2CGhgOVAN74J4NODbVwB7g+hWuPRsYA96TQQ3sJVwNEO69Iq4GhsPUQMoxhMuiBvYOc75PqRrY26AG9rGgBoYD1cDeQNLv08BTXHTXR2LeV/j0OSBsGmg1MACYQ2TjHSi8HsSXgQxTGBA3ixoYEOJG90Lg1K0GAnk4SLgaIKyDGHi4H5Ma2M+CGjgJqAb2x52FVv8t4v3B9StcBzQwBnwAgxpIC1cDhDsdcTVwEkwNJKz9W8SZMOfZUjWQMaiBrAU1cBJQDWSApM828BQX3fWRmHPCp89BYdNAq4FBwBwiG29eeD2IL3mGKSzPPH0i+JJnUAPAqVvlgTwMhKsBwhow8PBAJjVwoAU1cCJQDRyEe05u9RtGDwLXr3Ad3MAY8MEMauAQ4WqAcB8ScTVwIu6niK19w+ihYc4PK1UDhxrUwGEW1MCJQDVwKJD0hzXwFBfd9ZGYDxc+fQZh00CrgQCYQ2TjHSy8HsSXwQxT2GDm6RPBl8EMagA4davBQB4OEa4GCOsQBh4ewaQGjrCgBk4AqoEjYXnIW302cCS4foXrqAbGgI9iUANHC1cDhPvoiKuBE3DfMGrt2cAxYc6PLVUDxxjUwLEW1MAJQDVwDJD0xzbwFBfd9ZGYjxM+fQ4JmwZaDQwB5hDZeIcKrwfxZSjDFDaUefpE8GUogxoATt1qKJCHw4SrAcI6jIGHxzOpgeMtqIHjgWrgBFgegrhNNXACuH6F68QGxoBPZFADJwlXA4T7pIirgeNhasDJGMJlUQPDw5yfXKoGhhvUwMkW1MDxQDUwHEj6kxt4iovu+kjMpwifPoeFTQOtBoYBc4hsvCOE14P4MoJhChvBPH0i+DKCQQ0Ap241AsjDkcLVAGEdycDDU5nUwKkW1MAwoBo4DZaHlNU3hU4D169wnd7AGPDpDGpglHA1QLhHRVwNDMP93IC1N4VGhzkfU6oGRhvUwBgLamAYUA2MBpJ+TANPcdFdH4n5DOHT58iwaaDVwEhgDpGNd6zwehBfxjJMYWOZp08EX8YyqAHg1K3GAnk4TrgaIKzjGHh4JpMaONOCGhgKVANn4Z4NWP1OobPA9StcZzcwBnw2gxo4R7gaINznRFwNDMW9KeQYwmVRA+eGOR9fqgbONaiB8RbUwFCgGjgXSPrxDTzFRXd9JObzhE+f48KmgVYD44A5RDbeCcLrQXyZwDCFAXGzqIFxIW50LwRO3WoCkIcThasBwjqRgYfnM6mB88NYbU7Gx9VjsRSuCxoYA76AYTK+UPhkTLgvZJiMTbEiGgPF2gKcA2DDgdbb5oY9lmnDXtTAGPBFDBv2YuEblnBfHKENe7HwDYuud+FCK69jgPfbLgHmz2aTuqSBp0ld2sAY8KUMTWqS8CZFuCdZalJOedc/zWQSg8yfCKwRst6Thct8anSTGeTVZcJlJWG+jAH35Uyy8nLD7Vp0TrhrhtjjkxluzSAHnMnA3nFFBPbQFQx76EqmPXRlw+KDEzonV0RkwD0MOOBeVYRZJT3X9T36c8mco2K5rJt03Vwm5mSddNbNp2IqFcTcmJfNZTN6zbQKnCCdTQXJf9eyOeBexTTgXt3AGPDVDAPuNcIHXMJ9DcOAS2SrqbDzQPmwemwzL70Ka5e7AYuJfG1xw0R3+WuAp25xly8OupkxZxtJzj8b5dpluMXSWNKvBW7A65hOT1p3xDJyQencZZUTOCnXSTt+NuFnUjk3k0wHXhD3ct6y5rUxsiPzej1TXq8P81pZsfAljdJLcjMqbp43hE36RtqDHA3jWobT71rhsmdZN4fTDNzlxniTcKlCxLyJQarczNQUbl5Ks3XKu9SNTLm4hSkXt5Rx8DQWMxcvTlnpf7WnZBuJj40DI1aS3Qfo4LuJoZcC662QOaShokWFWeFUNDMHjXGqeE2O/o3KSfGAdevSFI5T3qVuYmqIty5F4TSyjGrs76GYb2VoDCPBjaFwVTazZs0ZZMrFPKVBZoNB1qKYl1OKDuplrU9jOUfW57bi+5aep/dGzldBLvDifsrNqISXSASxwE8kY7kgHkvn/LyKpT03lfedQCXzeT/uZf1EkMplE0Fx01Y5z4vlUpmsiruJdMZJ5ry0E8R8T4vfnOfncl4ykUh7Xi6RDJIpLVi1DE46cd9POQnXS7lc9bmtSGmiDoXG7mwUrxmVQ+H2KB4KtzMfCrczHAqnCjkUlkhi/58fPgmQTecOoYfCqUxN5w7AodDYbT5kfe4Ueihw1efO/49uP94V3n6823T70SnvWuK9f+RzkHLXAt7KZHnbqJBD9NtfXDksd617hNeDNsw9DAf7vUxDzr2Mt0XvZsrFVKZcTGW8LcrFi9OF3xbl4sCoCNwWvYfhtiiw3mrUf7dFS69/+jcqJ8WD3zROBXwPU0OcxqiAKeZpDI1hdERui94DHIrua5DZYEYzKaz7LNwWRdbnfqACHgVUwFz1ud9Qn+YehI3dBkXW5wGm/vkAIA+N3alB5uFBpjw82ITb5JIPckO4MB4XDwkPRXFIeIh5SHiIYUgYY2lIKPPtWGiTexi4FnJIGMN0CD3chCGh3LdskfV5pAF3sCOHBK76PAI4HBu51ETgz+RMh/XPJMsdh2sazHcckHdcy11rhvC7t1TjGQznzaNMZy+t29jPsJYb+2PA2ImbpmkKtf6ScuCUd6nHGuTH+Dg6RnQzLmwuFDFprccZbrE+DozxiehsHvV/efM8gY4xKifTk2DgaNyE+UkG3E8xnchPFZ3IHD+2xPFMCTnhPS2cT6QInmbg08wI7KOZDLifYdpHzyxlHznlXWw9ZZzwZ9JcHDiT6W4a+p2mZ4HqE1hrdSbTHZZnwz30n+rii/E57sERoZIoyOY+H3WaAbzcGJ//P7Ax/1NvfJvweYYYWTbjC0CiR7WrvxABQr0YFUK9hAvUjSqhXooAoV6OCqFewQXqRZVQr0SAUK9GhVCv4QKNRZVQr0WAUK9HhVBv4AKNR5VQb0SAUG9GhVBv4QJNRJVQb0WAUG9HhVDv4AL1o0qodyJAqHejQqj3cIEmo0qo9yJAqPejQqgPcIGmokqoDyJAqA+jQqiPcIGmo0qojyJAqI+jQqhPcIFmokqoTyJAqE+jQqjPcIFmo0qozyJAqFnIGKNaqFyl/Bg/j8rO/wIXaD6qhPoiAjv/y/92vqO6RWDnfxWVnf81LFAV2R9d+joCO/+bqBDqWxyhIvv+zrcRINR3USHUbByhIvv+zuwIEOr7qBDqBxyhIvv+zg8RINSPUSHUTzhCRfb9nZ8iQKifo0KoX3CEiuz7O79EgFC/RoVQc3CEiuz7O3MiQKi5USHUbzhCRfb9nd8iQKjfo0KoeThCRfb9nXkRINT8qBDqDxyhIvv+zh8RINSfUSHUXzhCRfb9nb8iQKgF/z0jc1S7CDwj+zsqO7+iPWznR/a9GFwO+GJcrn1ECNUCR6hcVAnVIgKEahkVQlXiCBXZ93cqI0CoqqgQqhpHqCCqhKqOAKFqkDHS9x/Rl2G1LAp27ZKitQADAH65ppoZAXXyYgRifDkCMb4agRhfj0CMb0YgxrcjEOO7EYjx/QjE+GEEYvw4AjF+GoEYZ0Ugxs8jEOOXEYjxqwjE+E0EYvwuAjF+H4EYf4xAjD9HIMZfIxDj3AjE+HsEYpwfgRj/jECMCyIQ498RiHG5/6OPEKJwV1r0jc6SC7Ou51cYLszaruJb+9/vXS/UrCH8XKvzXaetlbbW2tpoa6utnbZ6bQ3a2mvroG15bR21raBtRW0rtf93jZXbh4sW/rUFWrRTia/O4Gtl8LU2+NoYfG0NvnYGX73Bt3LoK76g/yiAAv5rUgr6L+oscmO63KdHqwA3a3F9VjHUB/pAQi0ae7l5WJUpD6sa8tASmQfsQwC1KjCnqzHldDUL3FoNmIfVmfKwugVuAR/eqNWBOV2DKadrcHNL56FWaB7YeKT3E/AB2yIPwsrN35pMPFrTQo9aE8ijtZjysJaFHgV86KjWAua0E1NOO1ngVidgHtZmysPaFrgFfFis1gbmtDNTTjtbOP/qhOaBjUd6PwEf6C/y4L3c/K3DxKN1LPSodYA8WpcpD+ta6FHAlxzUusCcrseU0/UscGs9YB66MOWhiwVuAV9OUV2AOV2fKafrWzj/WgnNAxuP9H4CvkC0yIs+5eZvAyYebWChR20A5NGGTHnY0EKPAr5UpTYE5nQjppxuZIFbGwHzsDFTHja2wC3gy3BqY2BON2HK6SYWzr/WQvPAxiO9n4AvLC7yYmG5+duUiUebWuhRmwJ5tBlTHjaz0KOAL3GqzYA57cqU064WuNUVmAeHKQ+OBW4BX75VDjCniimnysL510ZoHth4pPcT8AXpRV5kLjd/LhOPXAs9ygXyyGPKg2ehRwFfGlceMKcxppzGLHArBsxDnCkPcQvcAr7sr+LAnCaYcpqwcP61FZoHNh7p/QT8gYxFfnCi3Pz5TDzyLfQoH8ijJFMekhZ6FPCHVFQSmNMUU05TFriVAuZhc6Y8bG6BW8AfLlKbA3O6BVNOt7Bw/rUTmgc2Hun9BPwBsEV+UKvc/G3JxKMtLfSoLYF52IopD1tZ6FHAH4pTWwFz2o0pp90scKsbMA/dmfLQ3QK3gD/MqLoDc7o1U063tnD+1QvNQzHm5cCYGwCYM6l/1+KMs31E8tkhInEuH5E4O0YkzhUiEueKEYlzJWCc9PPXdRWLfilpQ8WiFzr+WoY8o2Osi0CMrSIQY+sIxNgmAjG2jUCM7SIQYz1Tj0fE6PlJlnW54v1v3f+/1sWt7bqMa6tCTyieVXrofd1T2zbattW2nbZe2npr66Nte219tfXTtoO2HbXtpG1nbbu0r1j0i2p6tF/8y2t6GnzbGHzbGnzbGXy9DL7eBl8fg29ng2+X0EcDXZuKhTcAii90M92+vXgyKvp/xbnYtf2/v+5WWnT6D6WTL/rO1PaAOwr5IKAbKWpX4B2Z3SKifKISZ9+IxNkvInHuEJE4d4xInDtFJE5Ev8wk/5mqVXGcpXfHy+2fwDsaqgdTbdCYgXdIVM+IYAbecVHbRAQz8A6O2jYimIF3hNR2EcEMvMOkekUEM/COleodEczAO2CqjyXMzrJdqvBhZ6BW6s/0FL94XXAeCpfaBVj7/iAtG+SDVDHm5cB83x2A2XRnFh3nHoA4E2knlU8kfM449wTEmckk/HQ+GeeMcy9E3bOJfOD5LmecewPiTMdjQRD30pxx7gOIM66cfNz1A8449wXEmco48UQymeWMcyAgThUkvVwqneGMcxCi7pm8k82pFMW2fMXi31Zf/C31xd9OX/yt9MXfRl/8LfTF3z5f/K3zuxd9fqxh2T8X32zfpejzHkWf9yz6vFfR572LPu9T9Hnfos8Diz4PCj/vp3/dX9sB2tLaMtqy2nLa8u3/vcnfrmLh/eml1d8p71L7yb/JT1eMbW3175xWyG3hXywIdF4O1HaQtoNLHybQf6wt8R1o8B1k8B0c+oqvKmyyFilquQ0iQA2CgaMOBD4gOQiy1r/5Ohj8ypWtzbv/f5vXuHkP0Xk5VNth2g4v3byHGDbloQbfYQbf4RY27/7AzXsIcPMeCty8hwE37+ER3bwH/Ld5jZt3sM7LEG1HaDuydPMONmzKIQbfEQbfkRY27wHAzTsYuHmHADfvEcDNe2REN2/6v81r3LxH6bwcre0YbceWbt6jDJvyaIPvGIPvWAubNw3cvEcBN+/RwM17DHDzHhvRzZv5b/MaN+9xOi9DtQ3Tdnzp5j3OsCmHGnzDDL7jLWzeDHDzHgfcvEOBm3cYcPMeH9HNm/1v8xo37wk6LydqO0nb8NLNe4JhU55o8J1k8A23sHmzwM17AnDzngjcvCcBN+/wiG7e3H+b17h5T9Z5OUXbCG0jSzfvyYZNeYrBN8LgG2lh8+aAm/dk4OY9Bbh5RwA378iIbt78f5vXuHlP1Xk5Tdvp2kaVbt5TDZvyNIPvdINvlIXNmwdu3lOBm/c04OY9Hbh5RwE3QYFMnYpItUvdQh7sXPR5p6LPOxZ93qHoc7+iz32LPm9f9LlP0efeRZ97FX3erujztkWftyn63LPoc4+iz1sXfe5e9Llb0eetij5vWfR5i6LPmxd9ThV9ThZ99os+J4o+x4s+x4o+e0Wf3aLPqujz8UX7sFjKFkvdYik8vOhz8fRcPF0XT98jiz4XH9jFB3rxgT+q6HNxjyjuIcU95uCiz8WPn4sfTxc/vj686HPxE6/iJ2LFT8yOLPpcfJO9+CZ88U36Y4s+F9/XK77vV7gvWDgVRuvfj9F2hrax2sZpO1PbWdrO1naOtnO1jdd2nrYJ2iZqO1/bBdou1HaRtou1XaLtUm2TtE3Wdpm2y7Vdoe1KbVdpu1rbNdqu1Xadtuu13aDtRm03abtZ2y3abtU2Rdtt2m7Xdoe2O7Xdpe1ubfdou7f9vwdDTYX5hzQL19bhryrpua7vUa9J5hwVy2XdpOvmMjEn66Szbj4VU6kg5sa8bC6b0X0prQInSGdTwb+vLPL+vFM9vtfRNbX9wlgXC7rcQ6gXLmhVfBgXgq4Mf18MKAoFKCbjtPb//nofYeIoQHGFUcmYCh4/uXC3YMRdboz3M+fQKe9SRMz72+Nr8wB4ais0BVp3RLguOhf3MeXiQaZcPLiUXJQbMxcvLlrpf7WnZBuJj40DF68kuw/QwXc/Qy8F1lshc0hDRYuKpk2Mja3VGKeK1+To36icFA9YDy1tYnTKu9T9TA2xOOhmxqwa+3so5ocYGsMl4MZQuCqbWbPmDDLlYn64vcwGg6xFMS8fLjqol7U+jeUcWZ9HitZSnqf3Rs5XQS7w4n7KzaiEl0gEscBPJGO5IB5L5/y8iqU9N5X3nUAl83k/7mX9RJDKZRNBcdNWOc+L5VKZrIq7iXTGSea8tBPEfM910jnPz+W8ZCKR9rxcIhkkU1qVpwMv6cR9P+UkXC/lctXnEUN9mnsQNnbbAFmf6Uz9czogD43dXkHmYQZTHmaEeVjakCD5IDeEC+Nx8ZDwaBSHhEeZh4RHGYaESy0NCY2pJ5tN7jHgWsgh4VKmQ+ixJgwJjeVB0Zs9ygmclD5RHT+b8DOpnJtJ6nM0iHs5D1mfx9vjDnbkkMBVn8fLuPPU2L4p3Mlsid2PqvjWfLlrIe+KPtEeeyAVavREGTVqbHBZxho1uiebUaNG10LW6Mn2uNwV1+jJouEq6o91ngof6zxteqzjlHepJT3eQD6vK3ct4CMixVH4Zd20/1s5LHetmcLrQRtmJsOA/AyTWHiG8XHT00y5eJYpF88yPm7i4sVk4Y+buDhwWQQeN81keNwErLe67L/HTaXXP/0blZPiwe85zjtJM5ka4nOMd5Io5ucYGsPlEXncNBM4FD3fXmaDuZzpTsXzFh43IevzAvBx02XAO0lc9XmhCY8XKppZr//Nt1a5DoUXo3govMh8KLzIcChcIeRQWCKJ/X9+RiVANp2XhB4KVzA1nZcAh0Jjt/mQ9XlZ6KHAVZ+XGdV1Lya1haz3K8JflM7rHL7CcCcxX8+Tw3LXepX5TiIib6Z6OOVdKg/8aRZkPV4D7w90L6A7OsAY1UF6vVcZZp3XwXMf/Rhd8T/2TLYg/JX+rgXYPP/zd7Yo+vvatVn499WHn9/Qf++b2t5qb/ffL3xLyDtMjVxucS7eDh/hvdM+TEjhQKb/8FdJAOhm8xagQfz789tB8Daw2bzDVEh000Fifrd44CzvZ0QVbbq2FXaebb/LpL7fa88Y8Hvt8eu+DyQDF+732y9MMGhdlh+tfCeMFb3uB0x3XT5ov/gJh64fsina/BaZNyJxKrt8a5d8i0yn8POHOi8faftY2yfaPtX2mbZZ2j7X9oW2L7V9pe1rbd9o+1bbd9pma/te2w/aftT2k7aftf2i7Vdtc7TN1fabtt+1zdM2X9sf2v6kwaJ02qBgSr+N5iOD72OD7xOD71OD7zODb5bB97nB94XB96XB95XB97XB943B963B953BN9vg+97g+8Hg+9Hg+8ng+9ng+8Xg+9Xgm2PwzTX4fjP4fjf45hl88w2+Pwy+Pw2+v9ov/i1Ha4e/bh3+6pR3LdJ0yj00PoRNyY76CLQWYfwYsta/+fqk/LXcwgsAn5a7VmzhywSflbeWU/xiwqxy1nIXfcnh82Vfyyl9YeKLZVxL311e7OWLL5dtraTpRY6vlmWtpPmlkK+bv5a/pBdMvmnuWv6SX1b5tnlruUt78eW75qzlL/0lmtlNX6vRl7y+b+pafqO9UP3QtLWcJvRV9WNT1nKa1KPVT42vFW9iv1c/N7ZWrMlnh/plqWvFgmacQ+rXpa3lN+tMU3OWvFaymeejmruEtVJBs89a9Zt5LWcZzm31u2ktZ5lmADVv8bXUMs4Tan7pWrllnk3UH4uu5ZUx56g/i9Zyg7JmJvUXUPTR3NitYqFw+isUMX+EomZeKHJ+C0XPnFAE/RKKop9CkfRDKJpmhyLq21BUfR2KrC9D0fV5KMI+C0XZJ6FIo9mNZsHSq/SuYrnz5l/A2XUBrA6eY/OuIi7uRe8q/t2eMWBaHL1uRQfZdxUJN8VYgV3XsfncCNescqx3kYpzsVyY8xYdKhZV1/Qflivx0R8qVdzoZ0mIrlVQycsBSd+iA7a4HBu8ULPidcvFvVwH3GYs5g36tPsTeNq1hGFOxGyedi078Jx2lR0YA67sgF+3SvhpR7irIn7a/Qk77VJZQ7gsp111mPOa0tOu2nDa1Vg47f4EnnbVQNLXdOApLrrrIzHXdgCexhX4k7gibBrot0+Q0qAOPC2gmxbVuI5hSpKOuyLEjd5/SO60Yt5/TnmXovy1YuBOa/DUVji/WndYfOpE1/8P4NTdBpaHWN7m1N0GXL/C1bYDY8BtGabudsKnbsLdLuJT9x+wqTvjGsJlmbrrw5w3lE7d9Yapu8HC1P0HcOquB5K+oQNPcdFdH4m5vfBTv1XYNNA/MNUKmENk4+0gvB7Elw4MUxgQN8urzK1C3OheiJy6OwB5uLxwRUVYl2fgYUcmNdDRghqYD1QDK8Dy4Ls21cAK4PoVrhU7MAa8IoMaWEm4GiDcK0VcDcyHqYFk3hAuixpYOcz5KqVqYGWDGljFghqYD1QDKwNJv0oHnuKiuz4S86rCp8/lw6aBVgPLA3OIbLyrCa8H8WU1hilsNebpE8GX1RjUAHDqVqsBebi6cDVAWFdn4OEaTGpgDQtqYB5QDawJy0Pe6k+1rwmuX+FaqwNjwGsxqIFOwtUA4e4UcTUwD6YGVGAIl0UNrB3mvHOpGljboAY6W1AD84BqYG0g6Tt34CkuuusjMa8jfPpcPWwaaDWwOjCHyMa7rvB6EF/WZZjC1mWePhF8WZdBDQCnbrUukIfrCVcDhHU9Bh52YVIDXSyogd+BamB9WB48q2pgfXD9CtcGHRgD3oBBDWwoXA0Q7g0jrgZ+h6mBrDU1sFGY841L1cBGBjWwsQU18DtQDWwEJP3GHXiKi+76SMybCJ8+1wubBloNrAfMIbLxbiq8HsSXTRmmsE2Zp08EXzZlUAPAqVttCuThZsLVAGHdjIGHXZnUQFcLauA3oBpwYHlIW/1uCgdcv8KlOjAGrBjUgCtcDRBuN+Jq4DeYGkhY+24KL8x5rFQNeAY1ELOgBn4DqgEPSPpYB57iors+EnNc+PS5Wdg00GpgM2AOkY03IbwexJcEwxSWYJ4+EXxJMKgB4NStEkAe+sLVAGH1GXiYZFIDSQtqYC5QDaRgeXBTNtVACly/wrV5B8aAN2dQA1sIVwOEe4uIq4G5uG+q8w3hsqiBLcOcb1WqBrY0qIGtLKiBuUA1sCWQ9Ft14CkuuusjMXcTPn36YdNAqwEfmENk4+0uvB7El+4MU1h35ukTwZfuDGoAOHWr7kAebi1cDfyDlYGHPZjUQA8LamAOUA30hOUhk7SpBnqC61e4tunAGPA2DGpgW+FqgHBvG3E1MAemBmJJQ7gsamC7MOe9StXAdgY10MuCGpgDVAPbAUnfqwNPcdFdH4m5t/Dpc+uwaaDVwNbAHCIbbx/h9SC+9GGYwvowT58IvvRhUAPAqVv1AfJwe+FqgLBuz8DDvkxqoK8FNfArUA30g+UhbvVNoX7g+hWuHTowBrwDgxrYUbgaINw7RlwN/Ir7hlFrbwrtFOZ851I1sJNBDexsQQ38ClQDOwFJ///auw4wKYqmvZfI6aIZc047txeNqCBiRgUE40VECYJgQuDIOWfFhIpiAEURRDGLigEVMyqCgAoCIphF/2qc4eqa3r47rmqc+v6d53m5Zrq35+3q6p63ZnpmLkjh6VzqWZ+yzRcGXH22cicN6migFaENKSfe1gHvD+UvrRlUWGtm9UnhL60ZogFC1e20JvTDiwIeDai2XsTghxczRQMX+xANbCWMBi6huzKW7Wc0cAlx/3lbmxRGwm0YooG2AY8GVLvbCo8GttJFA4UGuizRQDvX5pfq0UA7QzRwqQ/RwFbCaKAdodNfmsLTudSzPmWb2wdcfV7kThrU0cBFhDaknHg7BLw/lL90YFBhHZjVJ4W/dGCIBghVt9OB0A8vC3g0oNp6GYMfXs4UDVzuQzTwE2E0cAXduTDHz2jgCuL+87YrUxgJX8kQDVwV8GhAtfsq4dHAT3QrhQoMdFmigatdmxfo0cDVhmigwIdo4CfCaOBqQqcvSOHpXOpZn7LNhQFXn5e5kwZ1NHAZoQ0pJ96ilGD3h/KXIgYVVsSsPin8pYghGiBU3U4RoR8WBzwaUG0tZvDDEqZooMSHaGALYTRQSmaHPF/fMFpK3H/e1jGFkXBHhmjgmoBHA6rd1wiPBraQRQO5vr1htJNr82v1aKCTIRq41odoYAthNNCJ0OmvTeHpXOpZn7LN1wVcfRa7kwZ1NFBMaEPKibdzwPtD+UtnBhXWmVl9UvhLZ4ZogFB1O50J/bBLwKMB1dYuDH7YlSka6OpDNPAjYTTQTWg00I24/7zt+hRGwtczRAPdAx4NqHZ3Fx4N/CgwGujh2vwGPRroYYgGbvAhGviRMBroQej0NwiJBijb3DPg6rOLO2lQRwNdCG1IOfH2Cnh/KH/pxaDCejGrTwp/6cUQDRCqbqcXoR/eGPBoQLX1RgY/vIkpGrjJh2hgM2E0cDOZHbJ9fafQzcT95223pDASvoUhGrg14NGAavetwqOBzWTRQIFv7xTq7dr8Nj0a6G2IBm7zIRrYTBgN9CZ0+ttSeDqXetanbHOfgKvPG91JgzoauJHQhpQTb9+A94fyl74MKqwvs/qk8Je+DNEAoep2+hL6Yb+ARwOqrf0Y/LCMKRoo8yEa2EQYDfSniwaK/YwG+hP3n7cNSGEkPIAhGhgY8GhAtXug8GhgE100EDHQZYkGBrk2H6xHA4MM0cBgH6KBTYTRwCBCpx+cwtO51LM+ZZuHBFx99nMnDepooB+hDSkn3qEB7w/lL0MZVNhQZvVJ4S9DGaIBQtXtDCX0w2EBjwZUW4cx+OFwpmhguA/RwEbCaGAEmR0yfb03MIK4/7xtZAoj4ZEM0cCogEcDqt2jhEcDG+m+PubbvYHRrs3H6NHAaEM0MMaHaGAjYTQwmtDpx6TwdC71rE/Z5rEBV5/D3EmDOhoYRmhDyol3XMD7Q/nLOAYVNo5ZfVL4yziGaIBQdTvjCP1wfMCjAdXW8Qx+OIEpGpjgQzTwA2E0MJHMDpGIn9HAROL+87ZJKYyEJzFEA5MDHg2odk8WHg38QBYNFBUb6LJEA1Ncm0/Vo4Ephmhgqg/RwA+E0cAUQqefmsLTudSzPmWbpwVcfY53Jw3qaGA8oQ0pJ97pAe8P5S/TGVTYdGb1SeEv0xmiAULV7Uwn9MPbAx4NqLbezuCHdzBFA3f4EA1sIIwGZpDZocTXewMziPvP2+5MYSR8J0M0cFfAowHV7ruERwMbyKIBx7d7A3e7Nr9HjwbuNkQD9/gQDWwgjAbuJnT6e1J4Opd61qds870BV5+3u5MGdTRwO6ENKSfemQHvD+UvMxlU2Exm9UnhLzMZogFC1e3MJPTD+wIeDai23sfgh/czRQP3+xANrCeMBh4gs0OWr9HAA8T9522zUhgJz2KIBh4MeDSg2v2g8GhgPd3Xx3yLBh5ybT5bjwYeMkQDs32IBtYTRgMPETr97BSezqWe9Snb/HDA1ed97qRBHQ3cR2hDyon3kYD3h/KXRxhU2CPM6pPCXx5hiAYIVbfzCKEfPhrwaEC19VEGP3yMKRp4zIdo4HvCaGAOmR1y8/2MBuYQ95+3zU1hJDyXIRp4PODRgGr348Kjge/JooG8XANdlmjgCdfm8/Ro4AlDNDDPh2jge8Jo4AlCp5+XwtO51LM+ZZufDLj6fNSdNKijgUcJbUg58T4V8P5Q/vIUgwp7ill9UvjLUwzRAKHqdp4i9MP5AY8GVFvnM/jh00zRwNM+RAPfEUYDC+iujPkaDSwg7j9vW5jCSHghQzTwTMCjAdXuZ4RHA9/RfYvYt2hgkWvzZ/VoYJEhGnjWh2jgO8JoYBGh0z+bwtO51LM+ZZufC7j6nO9OGtTRwHxCG1JOvIsD3h/KXxYzqLDFzOqTwl8WM0QDhKrbWUzoh88HPBpQbX2ewQ9fYIoGXvAhGviWMBp4ke7eQNjPaOBF4v7ztpdSGAm/xBANvBzwaEC1+2Xh0cC3ZNFAfthAlyUaeMW1+at6NPCKIRp41Ydo4FvCaOAVQqd/NYWnc6lnfco2vxZw9fm8O2lQRwPPE9qQcuJdEvD+UP6yhEGFLWFWnxT+soQhGiBU3c4SQj98PeDRgGrr6wx++AZTNPCGD9HAOsJo4E26c6Gv3yJ+k7j/vG1pCiPhpQzRwFsBjwZUu98SHg2sI4sGcnz7FvHbrs3f0aOBtw3RwDs+RAPrCKOBtwmd/p0Uns6lnvUp2/xuwNXn6+6kQR0NvE5oQ8qJd1nA+0P5yzIGFbaMWX1S+MsyhmiAUHU7ywj98L2ARwOqre8x+OH7TNHA+z5EA2sJo4EP6O6T+/qG0Q+I+8/blqcwEl7OEA18GPBoQLX7Q+HRwFq6p4h9e8PoR67NP9ajgY8M0cDHPkQDawmjgY8Inf7jFJ7OpZ71Kdv8ScDV53vupEEdDbxHaEPKiffTgPeH8pdPGVTYp8zqk8JfPmWIBghVt/MpoR9+FvBoQLX1MwY//JwpGvjch2hgDWE0sILMDiW+3htYQdx/3vZFCiPhLxiigS8DHg2odn8pPBpYQ/eGUd/uDXzl2nylHg18ZYgGVvoQDawhjAa+InT6lSk8nUs961O2+euAq8/P3EmDOhr4jNCGlBPvqoD3h/KXVQwqbBWz+qTwl1UM0QCh6nZWEfrh6oBHA6qtqxn88BumaOAbH6KBbwijgTVkdijN9jMaWEPcf962NoWR8FqGaGBdwKMB1e51wqOBb8iigXChgS5LNPCta/Pv9GjgW0M08J0P0cA3hNHAt4RO/10KT+dSz/qUbf4+4OpztTtpUEcDqwltSDnxrg94fyh/Wc+gwtYzq08Kf1nPEA0Qqm5nPaEfbgh4NKDauoHBD39gigZ+8CEaWE0YDWwks0O+ryuFNhL3n7dtSmEkvIkhGtgc8GhAtXuz8GhgNd1zA76tFPrRtfkWPRr40RANbPEhGlhNGA38SOj0W1J4Opd61qds808BV58b3EmDOhrYQGhDyol3a8D7Q/nLVgYVtpVZfVL4y1aGaIBQdTtbCf1wW8CjAdXWbQx++DNTNPCzD9HAKsJo4Be6ewO+vlPoF+L+87ZfUxgJ/8oQDfwW8GhAtfs34dHAKrqVQr69U+h31+Z/6NHA74Zo4A8fooFVhNHA74RO/0cKT+dSz/qUbf4z4OpzmztpUEcD2whtSDnx/hXw/lD+8heDCvuLWX1S+MtfDNEAoep2/iL0w+0BjwZUW7cz+OHfTNHA3y5XP5Xx18m0bfG2f1IYCf/DoIxDqcFWxqrdimOItl6WiVANOsU1ntgG21OC2d9+DtiVTAM2LpWRsKqcut74gA9Y1e54QQM2PuADlrq/vY068vqK8HpbQiqd/fycpAh5V5ikElMZCScyTFJJAZ+kVLuTfJqkwjXbdkwmiit1mL+dMCSi7O9ahIOfoz/URFcrlf5kVDs12H6o2lybod11iCdNL6xU9eqXa6ltwt1nFGO8Vir9pRlKgVOLcO6oK2AM1WUYQ/WYxlC91F2FE7VN6goRuB8TCtz6qM1OXiQzMzeiyuUVh52s4qLMvMzM4sKscFG4oCizJD/LyS/NysyKFBUXFUKdBU5puLSgKL8079+6/BS49ZkEboNURsINGARuw4ALXNXuhgwCVzlb7ZA/N5Q/TqadzPXNq7umAxA7ciM8YVLP8g0JlTGe5THpanIuqsQ4OwZKo924xFKZ0RsRDsDGTGdPVW/ZbvqCA7YrcsKl4fzMcEE4tygntzC/OLMwr6A0UpodKY7srl0rc3ZKuzZhsmsT166JofJFGvoW5MkIT57J7iSdosYgx4TRiOHs1yjgYc/uDo5wNdpdU46pAQ9VlGOmMoQqaUyTQpplsg3XbHNSmGyRzmSL9BqceCrjzOUX8/b4T+eUokr4sfnAk3sEex5QJ75UhrmUsL8dShsqUREfMkc4oWraoDKfwnVyzN9UNsECK8MW4YRrtjmpTBNihiXCqaQap7LjKM4ZDBPDU8QTg7clVrPPqiNkatrmPVKDOcFQ9gX2yz3QiXp3+6cym1P2z574umUkAmOjONcpLS6NZOfmZxY6OZGcnNKs0tycvKzi0uysguLcEierIJKZX5IbLnXySkpysyNFuTml+cVFOaV40naKI5Gs4vzCIic7M6egMJxXHCkIl2blRiD4LY7kFhdH8nJyCiKR4py80rx8CFghDM4LZ+fm5odzMiP5mVz9syeKNKlOCpVd2cB1Sjkp7CXxpLAX80lhL4aTwvyAnBSiOnHujodPSiknnb0DelKYzzTp7E1wUqjsMh9l/+wT0JMCV//s8z90+XFf9/LjfqbLj+GabVGv/VPeB6lpXYSXMllWG3k2pF79xWXDmtbVNOD9oQZMU4YT+/5MImd/xsui+zHZ4gAmWxzAeFmUyy8WBPyyKJcPLBRwWbQpw2VRwv52FsYui+rbjvmbyiZY+B3IGQE3ZZoQD2SMgBXnAxkmhmeEXBZtSiiKDkoN5gTzDFOEdZAPl0Up++dgwgh4IWEEzNU/Bxv6p7onwsoug1L2zyFM8+chBHao7EoNpR0OZbLDoVW4TB7kE7mBLpkfY5FwmESRcBizSDiMQSQs8kkk1HB1LOkkdzhhXZQiYRHTSejwKoiEmq6ypeyfI1LpTuyUIoGrf44gODlWsjnbCZ/JOZJs/sxjueLQMNV8xYHyimtN6zoq4FdvVR8fxXC+OZrp3KvqreOOm1NCu25Ux/Tqo7b3y02Cz/EYaiFJPcl5TkvlrKquYxguXR5DyPFYwk5hHjzO/+fBcyz14JEy4x8X8Mc3VJuPY2j38UxnuuNTy9/WwPE4EMe9GkrlFA64PymlHWbwJ0fAOHIY2p3JNI4yLeMoXLONbU5ZHPB7vVw+8DzTVSrqtUIRwqiOsK+d55muXERiURc7xyxu4UgRJSmS1b3vGK5Gw2vKMfv/wcCMRW98gzCbchBKnS3fEdBRObGOCjvLBHRUbqyjws77AjoqL9ZRYWe5gI7Kj3VU2PlIQEedEOuosPOJgI46MdZRYeczAR11Uqyjws4KAR11cqyjws6XAjrqlFhHhZ2VAjrq1FhHhZ1VAjqqWayjws43AjrqtFhHhZ3ixOBzPD3WUWFnnYARdUaso0BRCRhRzWMdFXa+FzCiWsQ6KuxsENBRZ8Y6KuxsFNBRLWMdFXY2C+ios2IdFXa2COioVrGOCjtbBXTU2bGOCjs/C+ioc2IdFXZ+FdBR58Y6Kuz8LqCjzot1VNj5U0BHnR/rqLCzXUBHXRDrqLDTSMC1vgtjHRV2QsnB59g61lFhJ15AR10U66iwkyigoy6OdVTYqSWgoy6h7Cj1fJp6WDEBkT1Q67R44gYQvvzAoX4AnKPDcgRwzBXAMU8Ax3wBHE8QwPFEARxPEsDxZAEcTxHA8VQBHJsJ4HiaAI6nC+B4hgCOzQVwbCGA45kCOLYUwPEsARxbCeB4tgCO5wjgeK4AjucJ4Hi+AI4XCOB4oQCOrQVwvEgAx4sFcLyEgWOIlGMkN2TYaOrOdPjqLv+Kq+qzJm66Ddi7LaAd4FJAe0AHwGWAywFXAK4EXAW4GlAAKAQUAYpT/62jJNWt1Hsbnqr0AG1fW8O+doZ9lxr2tTfs62DYd5lh3+WGfSXuPryRvrTNIXzbr0P6xtMKF6Zr+jK5UqY3kpYa+of0hoRTkXtN7dCRyQ4dDXZIoLQD7U0ApyOhTa9hsuk1PvjWNYR26MRkh04++BbhzRunE6FNr2Wy6bXcvgV2aBNQO7D5EYwnwhtsFW6E1dR+1zH50XU+zFHXEdqhM5MdOvswRxHedHQ6E9q0C5NNu/jgW10I7dCVyQ5dffAtwpvFTldCm3Zjsmk3H85/bQNqBzY/gvFEeEO/wo33mtrveiY/ut6HOep6Qjt0Z7JDdx/mKMJFDk53Qpv2YLJpDx98qwehHW5gssMNPvgW4eIU5wZCm/ZksmlPH85/7QJqBzY/gvFEuICowkKfmtqvF5Mf9fJhjupFaIcbmexwow9zFOGiKudGQpvexGTTm3zwrZsI7XAzkx1u9sG3CBfDOTcT2vQWJpve4sP579KA2oHNj2A8ES5YrLCwsKb2u5XJj271YY66ldAOvZns0NuHOYpwEafTm9CmtzHZ9DYffOs2Qjv0YbJDHx98i3DxrdOH0KZ9mWza14fzX/uA2oHNj2A8ES6QrrCQuab268fkR/18mKP6EdqhjMkOZT7MUYSLxp0yQpv2Z7Jpfx98qz+hHQYw2WGAD75FuNjfGUBo04FMNh3ow/mvQ0DtwOZHMJ4IH8io8OBETe03iMmPBvkwRw0itMNgJjsM9mGOInxIxRlMaNMhTDYd4oNvDSG0w1AmOwz1wbcIHy5yhhLadBiTTYf5cP67LKB2YPMjGE+ED4BVeFCrpvYbzuRHw32Yo4YT2mEEkx1G+DBHET4U54wgtOlIJpuO9MG3RhLaYRSTHUb54FuEDzM6owhtOprJpqN9OP9dHlA74DbHEbf5CoI2F+b/WxcnzyuF2PMqITyvFsKzQAjPQiE8i4TwLCbkqZ6/rhuq+FLSJqGKGzX/Ngx2pubYVgDHdgI4XiqAY3sBHDsI4HiZAI6XM83xFBwjuXks9XLxjdX7v1UvXd2ZmYx1O96cgLXKGBjXYwHjAOMBEwATAZMAkwFTAFMB0wDTAbcD7gDMANyZGqr4opoxqbu+vGasYd84w77xhn0TDPsmGvZNMuybbNg3w7DvTnefEnQNQuUXAPBGPZlOSQ28MzrqH2yLu1L//Xu33ukqQ1e+1FemphBcUSgpLVUXUpy7CK/I3C0k8pHCc6oQntOE8JwuhOftQnjeIYQnxXxZmLdDVVe4AqtfHa/p/El4RcMZw9Q31G0mvELijBXSZsIrLs44IW0mvILjjBfSZsIrQs4EIW0mvMLkTBTSZsIrVs4kIW0mvALmTPapzeHd2xwvMYMwVrqH6S4+rpfYDt7m3EnY9/cQxbKlJaX5qv1ePI7fYozfXozfWozfVozfUozfTozfSozfRtwmuTz9cpPdT+OLMHdizqj+dih9KUq3R+kOKH0ZSl+O0le46ZlwnPsA9wMeAMwCPAh4CDA79d+LP41C5dct8EatzWcG/+KP2rLY6nb+Hb+ebb03WT8MdnkE8CjgMf0ik8qso+17xLDvUcO+x9x9eEuiNVaFTq3pRPkw1QRRGnYeIbxw9ihJXf/a6zHiW/F+Dd77YoPXOHjngF3mAh4HPKEP3jmGQTnXsO9xw74nfBi89xEO3jmEg3cu4eB9nHDwPiF08N4fG7zGwTsP7PIk4CnAfH3wzjMMyicN+54y7Jvvw+C9n3DwziMcvE8SDt6nCAfvfKGD94HY4DUO3qfBLgsACwHP6IP3acOgXGDYt9Cw7xkfBu8DhIP3acLBu4Bw8C4kHLzPCB28s2KD1zh4F4FdngU8B1isD95FhkH5rGHfc4Z9i30YvLMIB+8iwsH7LOHgfY5w8C4WOngfjA1e4+B9HuzyAuBFwEv64H3eMChfMOx70bDvJR8G74OEg/d5wsH7AuHgfZFw8L4kdPA+FBu8xsH7MtjlFcCrgNf0wfuyYVC+Ytj3qmHfaz4M3ocIB+/LhIP3FcLB+yrh4H1N6OCdHRu8xsG7BOzyOuANwJv64F1iGJSvG/a9Ydj3pg+Ddzbh4F1COHhfJxy8bxAO3jcJB4HnTHPjiB0Vtjqk9ZUQ1xeO1RerL1ZfrL5YfbH6YvXF6ovVF+z6nJj9YvXF6ovVF6svVl+svlh9/8/ry6Ktr4hYX2UR11cQ9q5Nz0gsv059B0rfjtLTUXoaSk9F6SkoPRmlJ6H0RJSegNLjUXocSo9F6TEoPRqlR6H0SJQegdLDUXoYSg9F6SEoPRilB6H0QJQegNL9UboMpfuhdF+U7oPSbyaVp99A6ddReglKv4bSr6L0Kyj9Mkq/hNIvovQLKP08Si9G6edQ+lmUXoTSz6D0QpRegNJPo/R8lH4KpZ9E6Xko/QRKP47Sc1F6Dko/htKPovQjKP0wSv9Sqzz9M0pvQ+mtKP0TSm9B6R9RejNKb0LpjSj9A0pvQOn1KP09Sn+H0t+i9DqUXovSa1D6G5RejdKrUPprlF6J0l+h9Jco/QVKr0Dpz1H6M5T+FKU/QemD65SnD0LpA1H6AJTeH6WbovR+KL0vSu+D0nuj9F4ovSdK74HSGSidjtJpKJ2K0ikonYzSTVC6MUo3QumGKN0ApeujdD2UrovSdVC6NkrXQukklE5E6QvrlqcvQOnzUfo8lD4Xpc9B6bNRuhVKn4XSLVH6TJRugdLNUfoMlD4dpU9D6WYofSpKn4LSJ6P0SSh9IkqfgNL5KJ2H0rkonYPS2SidhdIRlM5EaQfzr4/ahdKno/QZKN0cpVug9Jko3RKlz0LpVih9Nkqfg9LnovR5KH0+Sl+A0heidGuUvgilL0bpS1C6DUq3Rel2KH0pSrdH6Q4ofRlKX47SV6D0lSh9FUpfjdIFKF2I0kUoXYzSJShditIdUfoalO6E0tei9HUo3Rmlu6B0V5TuhtLXo3R3lO6B0jegdE+U7oXSN6L0TSh9M0rfgtK3onRvlL4NpfugdF+U7ofSZSjdH6UHoPRAlB6E0oNReghKD0XpYSg9HKVHoPRIlB6F0qNRegxKj0XpcSg9HqUnoPRElJ6E0pNRegpKT0XpaSg9HaVvR+k7UHoGSt+J0neh9N0ofQ9K34vSM1H6PpS+H6UfQOlZKP0gSj+E0rNR+mGUfgSlH0Xpx1B6DkrPRenHUfoJlJ6H0k+i9FMoPR+ln0bpBSi9EKWfQelFKP0sSj+H0otR+nmUfgGlX0Tpl1D6ZZR+BaVfRenXUHoJSr+O0m+g9JsovRSl30Lpt1H6HZR+F6WXofR7KP0+Sn+A0stR+kOU/gilP0bpT1D6U5T+DKU/R+kVKP0FSn+J0l+h9EqU/hqlV6H0apT+BqXXoPRalF6H0t+i9Hco/T1Kr0fpDSj9A0pvROlNKL0ZpX9E6S0o/RNKb0XpbSj9M0r/gtK/ovRvKP07Sv+B0n+i9F8ovR2l/0bpf1BavRXVS8ehdDxKJ6B0IkonoXQtlK6N0nVQui5K10Pp+ijdAKUXozV8+DEY/JgMfozmJZTGK+/xyny8cv81lMaLffFiYLxY+E2UxusL8fpDvD7xMZTGr67Ar7bAr754AqXx0/L4aXr8tP18lMYP6OIHePEDvs+gNH4mED8z6D1T+PgO54B5Cv7/FuBtwDuAdwHLAO8B3gd8AFgO+BDwEeBjwCeATwGfAT4HrAB8AfgS8BVgJeBrwCrAasA3gDWAtYB1gG8B3wG+B6wHbAD8ANgI2ATYDPgRsAXwE2ArYBvgZ8AvgF8BvwF+B/wB+BPwF2A74G/AP2pRaRq0FxAPSAAkApIAtQC1AXUAdQH1APUBDQANAY0AjQFNAMmAFEAqIA2QDsgA7AHYE7AXYG/APoB9AfsBmgL2BxwAOBBwEOBgwCGAQwGHAQ4HHAE4EnAU4GjAMYBjAccBjgeEAQ4gExABZAGyATmAXEAeIB9wAuBEwEmAkwGnAE4FNAOcBjgdcAagOaAF4ExAS8BZgFaAswHnAM4FnAc4H3AB4EJAa8BFgIsBlwDaANoC2gEuBbQHdABcBrgccAXgSsBVgKsBBYBCQBGgGFACKAV0BFwD6AS4FnAdoDOgC6AroBvgekB3QA/ADYCegF6AGwE3AW4G3AK4FdAbcBugD6AvoB+gDNAfMAAwEDAIMBgwBDAUMAwwHDACMBIwCjAaMAYwFjAOMB4wATARMAkwGTAFMBUwDTAdcDvgDsAMwJ2AuwB3A+4B3AuYCbgPcD/gAcAswIOAhwCzAQ8DHgE8CngMMAcwF/A44AnAPMCTgKcA8wFPAxYAFgKeASwCPAt4DrAY8DzgBcCLgJcALwNeAbwKeA2wBPA64A3Am4ClgLcAbwPeAbwLWAZ4D/A+4APAcsCHgI8AHwM+AXwK+AzwOWAF4AvAl4CvACsBXwNWAVYDvgGsAawFrAN8C/gO8D1gPWAD4AfARsAmwGbAj4AtgJ8AWwHbAD8DfgH8CvgN8DvgD8CfgL8A2wF/A/4BhNJh/APiAQmAREASoBagNqAOoC6gHqA+oAGgIaARoDGgCSAZkAJIBaQB0gEZgD0AewL2AuwN2AewL2A/QFPA/oADAAcCDgIcDDgEcCjgMMDhgCMARwKOAhwNOAZwLOA4wPGAMMABZAIigCxANiAHkAvIA+QDTgCcCDgJcDLgFMCpgGaA0wCnA84ANAe0AJwJaAk4C9AKcDbgHMC5gPMA5wMuAFwIaA24CHAx4BJAG0BbQDvApYD2gA6AywCXA64AXAm4CnA1oABQCCgCFANKAKWAjoBrAJ0A1wKuA3QGdAF0BXQDXA/oDugBuAHQE9ALcCPgJsDNgFvSQxU295RGtoYnrYHMB0+aEPI20CWqO5Ovbu3BkwPc9K3gL70BtwH6APoC+gHKAP0BAwADAYMAgwFDAEMBwwDDASMAIwGjAKMBYwBjAeMA4wETABMBkwCTAVMAUwHTANPTXTLewyqKTB1tX2/DvtsM+/oY9vU17Otn2Fdm2NffsG+AYd9Aw75Bhn2DDfuGGPYNNewbZtg33LBvhGHfSMO+UYZ9ow37xhj2jTXsG2fYN96wb4Jh30TDvkmGfZMN+6YY9k017Jtm2Dfd3Ye3A92/zdy/4ZptFSadmj4YpcZGTevyHozqTVSXauNtJHX9a68+Na8r07WX07emdWXttL3Tr2Z1hVE/OmU1qSuzgk84/Xe/rrDmX86A3awrp3QXX3UG7l5deQa/dwbtTl15xjHkDK5+XblRxqMzpLp15UYd287Q6tWVaZknnGHVqSvXOuc4w6teV1El85czoqp15VY6Fzojq1ZXuArzqjOqKnWFqzRHO6Mrryu7ivO9M6ayurKqfO5wxlrryiqtxnnIGWerK7da5zRnfPS68qp5fnQmRKkrv7Ta51pnormu8G6ct51JprrCu6UBnMm71uXspp5wpuh1Fe+2NnGmVqwrUgOd40xDdWWW1kgzOdPT6YI+pRvPCZUHTtPdIGaqG9RMdoOciW7QM94Ngsa6QdFoN0ga6QZNw90gaqgbVA12g6yBbtDV3w3C+rlBWR83SFPa7VYtyFdbvPu3WVXm2CrozenpdHXdTtYPkR0XDRqGyi8Q4I36ogEd7/LgW213pDMSVpVT1zuD0Bm42j0DDQqiesN+fkKRbrIqZr2KhG1xp2vzu/QrOXe6Toj33WWIuKk/q0gxa3lR8p2ETn8XcedyDPA7DRNHTdt9J+EMiv2G+mw3jbCv7yZrc06Wn2e7u5nOdvekMxK+h+Fsd2/Az3aq3fcKP9tNI3O2/CIDXZaz3UzX5vfpZ7uZhrPdfT6c7aYRnu1mEjr9fUydSz3rU7b5frrZc8cHSqnPxDPcSSOe2AcpQ4MHiNUC9aSl+vgBBpUU9HbPcNtNPf4ofWcW8/gL12xzlP1mMfjOg8SqzTt/PZi+q+qk7v+phP3/EJkdskr8VN0PEfeft81OZyQ8m0F1Pxxw1a3a/bBw1T2VzNkKMw10WVT3I67NH9VV9yMG1f2oD6qbYtba+TVDQqd/lKlzqWd9yjY/FvCz/ix30kggtuEsQhtSTrxzAt4fyl/mMKgwwnYbT14U/jInnX4upFTdcwj9cG7AIyrV1rkMfvg4UzTwuA/RwBTC/n+CzA65mX5GA08Q95+3zUtnJDyPIRp4MuDRgGr3k8KjgSlkzpZXYqDLEg085dp8vh4NPGWIBub7EA1QzFpeNPAUodPPZ+pc6lmfss1PB1x9znUnDepoYC6hDSkn3gUB7w/lLwsYVNgCZvVJ4S8LGKIBQtXtLCD0w4UBjwZUWxcy+OEzTNHAMz5EA5MJ+38RmR1KHD+jgUXE/edtz6YzEn6WIRp4LuDRgGr3c8KjgclkzuaUGuiyRAOLXZs/r0cDiw3RwPM+RAMUs5YXDSwmdPrnmTqXetanbPMLAVefC91JgzoaWEhoQ8qJ98WA94fylxcZVNiLzOqTwl9eZIgGCFW38yKhH74U8GhAtfUlBj98mSkaeNmHaGASYf+/QmaHiK/RwCvE/edtr6YzEn6VIRp4LeDRgGr3a8KjgUlkzlbkWzSwxLX563o0sMQQDbzuQzRAMWt50cASQqd/nalzqWd9yja/EXD1+ZI7aVBHAy8R2pBy4n0z4P2h/OVNBhX2JrP6pPCXNxmiAULV7bxJ6IdLAx4NqLYuZfDDt5iigbd8iAYmEvb/22R2KPD13RRvE/eft72Tzkj4HYZo4N2ARwOq3e8KjwYmkjlbjm/vpljm2vw9PRpYZogG3vMhGqCYtbxoYBmh07/H1LnUsz5lm98PuPpc6k4a1NHAUkIbUk68HwS8P5S/fMCgwgjbzRINLHXbTT0XEqpu5wNCP1we8GhAtXU5gx9+yBQNfOhDNDCBsP8/IrNDZr6f0cBHxP3nbR+nMxL+mCEa+CTg0YBq9yfCo4EJZM5WnGugyxINfOra/DM9GvjUEA185kM0QDFredHAp4RO/xlT51LP+pRt/jzg6nO5O2lQRwPLCW1IOfGuCHh/KH9ZwaDCVjCrTwp/WcEQDRCqbmcFoR9+EfBoQLX1CwY//JIpGvjSh2hgPGH/f0Vmh8I8P6OBr4j7z9tWpjMSXskQDXwd8GhAtftr4dHAeDJny8oz0GWJBla5Nl+tRwOrDNHAah+iAYpZy4sGVhE6/WqmzqWe9Snb/E3A1ecX7qRBHQ18QWhDyol3TcD7Q/nLGgYVtoZZfVL4yxqGaIBQdTtrCP1wbcCjAdXWtQx+uI4pGljnQzQwjrD/vyWzQ7avK4W+Je4/b/sunZHwdwzRwPcBjwZUu78XHg2MowuZfVsptN61+QY9GlhviAY2+BANUMxaXjSwntDpNzB1LvWsT9nmHwKuPte6kwZ1NLCW0IaUE+/GgPeH8peNDCqMsN0s0cBat93UcyGh6nY2EvrhpoBHA6qtmxj8cDNTNLDZh2hgLGH//0h3ZSzbz2jgR+L+87Yt6YyEtzBEAz8FPBpQ7f5JeDQwlk4wFhroskQDW12bb9Ojga2GaGCbD9EAxazlRQNbCZ1+G1PnUs/6lG3+OeDqc5M7aVBHA5sIbUg58f4S8P5Q/vILgwr7hVl9UvjLLwzRAKHqdn4h9MNfAx4NqLb+yuCHvzFFA7/5EA2MIez/3+nOhTl+RgO/E/eft/2Rzkj4D4Zo4M+ARwOq3X8KjwbG0IXMBQa6LNHAX67Nt+vRwF+GaGC7D9EAxazlRQN/ETr9dqbOpZ71Kdv8d8DV56/upEEdDfxKaEPKifefgPeH8pd/GFTYP8zqk8Jf/mGIBghVt/MPpQDICHY0oNqqOFL3c1wGrZr0zqtxGfzRwGjC/o8ns0Oer28YjSfuP29LyGAknJBBX29iRrCjAdXuxIxyAxPV62s0MJps8s717Q2jSa7Na2WEKir/pIxdowFViDsaGE0YDSQROn2tDJ7OpZ71Kdtcm272ZFGfIXfSoI4GQoQ2pJx46wS8P5S/1GFQYXWY1SeFv9TJoJ8LCVW3U4fQD+sGPBpQba3L4If1mKKBej5EA6MIo4H6QqOB+sT9520NMhgJN2CIBhoGPBpQ7W4oPBoYJTAaaOTavLEeDTQyRAONfYgGRhFGA40Inb6xkGiAss1NAq4+67qTBnU0UJfQhpQTb3LA+0P5SzKDCktmVp8U/pLMEA0Qqm4nmdAPUwIeDai2pjD4YSpTNJDqQzQwkjAaSCOzQ7av7xRKI+4/b0vPYCSczhANZAQ8GlDtzhAeDYwkiwYKfHun0B6uzffUo4E9DNHAnj5EAyMJo4E9CJ1+zwyezqWe9SnbvFfA1WeKO2lQRwMphDaknHj3Dnh/KH/Zm0GF7c2sPin8ZW+GaIBQdTt7E/rhPgGPBlRb92Hww32ZooF9fYgGRhBGA/vRRQPFfkYD+xH3n7c1zWAk3JQhGtg/4NGAavf+wqOBEXTRQMRAlyUaOMC1+YF6NHCAIRo40IdoYARhNHAAodMfmMHTudSzPmWbDwq4+tzHnTSoo4F9CG1IOfEeHPD+UP5yMIMKO5hZfVL4y8EM0QCh6nYOJvTDQwIeDai2HsLgh4cyRQOH+hANDCeMBg4js0Omr/cGDiPuP287PIOR8OEM0cARAY8GVLuPEB4NDCeLBop9uzdwpGvzo/Ro4EhDNHCUD9HAcMJo4EhCpz8qg6dzqWd9yjYfHXD1eYg7aVBHA4cQ2pBy4j0m4P2h/OUYBhV2DLP6pPCXYxiiAULV7RxD6IfHBjwaUG09lsEPj2OKBo7zIRoYRhgNHE9mh0jEz2jgeOL+87ZwBiPhMEM04AQ8GlDtdoRHA8PIooGiYgNdlmgg07V5RI8GMg3RQMSHaGAYYTSQSej0kQyezqWe9SnbnBVw9XmsO2lQRwPHEtqQcuLNDnh/KH/JZlBh2czqk8JfshmiAULV7WQT+mFOwKMB1dYcBj/MZYoGcn2IBoYSRgN5ZHYo8fXeQB5x/3lbfgYj4XyGaOCEgEcDqt0nCI8GhpJFA45v9wZOdG1+kh4NnGiIBk7yIRoYShgNnEjo9Cdl8HQu9axP2eaTA64+c9xJgzoayCG0IeXEe0rA+0P5yykMKuwUZvVJ4S+nMEQDhKrbOYXQD08NeDSg2noqgx82Y4oGmvkQDQwhjAZOI7NDlq/RwGnE/edtp2cwEj6dIRo4I+DRgGr3GcKjgSF0H+XwLRpo7tq8hR4NNDdEAy18iAaGEEYDzQmdvkUGT+dSz/qUbT4z4OrzVHfSoI4GTiW0IeXE2zLg/aH8pSWDCmvJrD4p/KUlQzRAqLqdloR+eFbAowHV1rMY/LAVUzTQyodoYDBhNHA2mR1y8/2MBs4m7j9vOyeDkfA5DNHAuQGPBlS7zxUeDQwmiwbycg10WaKB81ybn69HA+cZooHzfYgGBhNGA+cROv35GTydSz3rU7b5goCrz7PcSYM6GjiL0IaUE++FAe8P5S8XMqiwC5nVJ4W/XMgQDRCqbudCQj9sHfBoQLW1NYMfXsQUDVzkQzQwiDAauJjuypiv0cDFxP3nbZdkMBK+hCEaaBPwaEC1u43waGAQ3edqfYsG2ro2b6dHA20N0UA7H6KBQYTRQFtCp2+XwdO51LM+ZZsvDbj6bO1OGtTRQGtCG1JOvO0D3h/KX9ozqLD2zOqTwl/aM0QDhKrbaU/ohx0CHg2otnZg8MPLmKKBy3yIBgYSRgOX090bCPsZDVxO3H/edkUGI+ErGKKBKwMeDah2Xyk8GhhIFg3khw10WaKBq1ybX61HA1cZooGrfYgGBhJGA1cROv3VGTydSz3rU7a5IODqs4M7aVBHAx0IbUg58RYGvD+UvxQyqLBCZvVJ4S+FDNEAoep2Cgn9sCjg0YBqaxGDHxYzRQPFPkQDAwijgRK6c6Gv3yIuIe4/byvNYCRcyhANdAx4NKDa3VF4NDCALBrI8e1bxNe4Nu+kRwPXGKKBTj5EAwMIo4FrCJ2+UwZP51LP+pRtvjbg6rPInTSoo4EiQhtSTrzXBbw/lL9cx6DCrmNWnxT+ch1DNECoup3rCP2wc8CjAdXWzgx+2IUpGujiQzTQnzAa6Ep3n9zXN4x2Je4/b+uWwUi4G0M0cH3AowHV7uuFRwP96Z4i9u0No91dm/fQo4Huhmighw/RQH/CaKA7odP3yODpXOpZn7LNNwRcfXZ2Jw3qaKAzoQ0pJ96eAe8P5S89GVRYT2b1SeEvPRmiAULV7fQk9MNeAY8GVFt7MfjhjUzRwI0+RANlhNHATWR2KPH13sBNxP3nbTdnMBK+mSEauCXg0YBq9y3Co4EyujeM+nZv4FbX5r31aOBWQzTQ24dooIwwGriV0Ol7Z/B0LvWsT9nm2wKuPnu5kwZ1NNCL0IaUE2+fgPeH8pc+DCqsD7P6pPCXPgzRAKHqdvoQ+mHfgEcDqq19GfywH1M00M+HaKAfYTRQRmaH0mw/o4Ey4v7ztv4ZjIT7M0QDAwIeDah2DxAeDfQjiwbChQa6LNHAQNfmg/RoYKAhGhjkQzTQjzAaGEjo9IMyeDqXetanbPPggKvPvu6kQR0N9CW0IeXEOyTg/aH8ZQiDChvCrD4p/GUIQzRAqLqdIYR+ODTg0YBq61AGPxzGFA0M8yEa6EsYDQwns0O+ryuFhhP3n7eNyGAkPIIhGhgZ8GhAtXuk8GigL91zA76tFBrl2ny0Hg2MMkQDo32IBvoSRgOjCJ1+dAZP51LP+pRtHhNw9TnUnTSoo4GhhDaknHjHBrw/lL+MZVBhY5nVJ4W/jGWIBghVtzOW0A/HBTwaUG0dx+CH45migfE+RAN9CKOBCXT3Bnx9p9AE4v7ztokZjIQnMkQDkwIeDah2TxIeDfShWynk2zuFJrs2n6JHA5MN0cAUH6KBPoTRwGRCp5+SwdO51LM+ZZunBlx9jnMnDepoYByhDSkn3mkB7w/lL9MYVNg0ZvVJ4S/TGKIBQtXtTCP0w+kBjwZUW6cz+OHtTNHA7S5XP5Xxbem0bfG2OzIYCd/BoIxnBFwZq3bPYFDGJq4UE4PiGk9sA8IJh7S//RywvZkG7J0ZjITvZBiwdwV8wKp23yVowN4V8AFL3d/eFk9sy1sJr7fdTWg/PyepuzN4Jql7MhgJ38MwSd0b8ElKtftenyapcM22HZPJvQxh/nTCPqLs75kBD/PVRDeTIby6L+BhpWrzfQztvp8prLzfcLmW2ibcfUYxxmcyXJqhFDgzCeeOBwSMoQcYxtAspjE0y3CjltomDwgRuMkN6Op6ELXZyYtkZuZGVLm84rCTVVyUmZeZWVyYFS4KFxRlluRnOfmlWZlZkaLiokKos8ApDZcWFOWX5v1bl58C90EmgftQBiPhhxgE7uyAC1zV7tlMN5Rrh/y5oYwHXLiGm4Eu2QDEjvwwnjCpZ/nZhGddPMtj0tXkXFSJcXYMlId34xJLZUZ/mHAAPsJ09lT1lu2mLzjqNbpOuDScnxkuCOcW5eQW5hdnFuYVlEZKsyPFkd21a2XOTmnXR5ns+qhr18RQ+SINfQvyZIQnz8fcSXqOGoMcE8bDDGe/hwMe9uzu4AhXo9015Tg34KGKcsy5DKHK40yTwuOWyTZcs82Zw2SLJ5hs8UQNTjyVcebyi8/2+E/nlKJK+LH5wOd7BHseUCe+uQxzKWF/O5Q2VKIiPmSOcELVtEFlPoXr5Ji/qWyCBdY8W4QTrtnmzGWaEOdZIpxKqnEqO47iPI9hYlhBPDF4W2I1+6w6QqambX4yI5gTDGVfYL98Ep2od7d/KrM5Zf88ha9bRiIwNopzndLi0kh2bn5moZMTyckpzSrNzcnLKi7Nzioozi1xsgoimfklueFSJ6+kJDc7UpSbU5pfXJRTiidtpzgSySrOLyxysjNzCgrDecWRgnBpVm4Egt/iSG5xcSQvJ6cgEinOySvNy4eAFcLgvHB2bm5+OCczkp/J1T9PoUiT6qRQ2ZUNXKeUk8J8iSeF+cwnhfkMJ4UvAnJSiOrEuTsePimlnHSeDuhJ4QumSedpgpNCZZf5KPtnQUBPClz9s+B/6PLjQvfy4zOmy4/hmm1Rr/1T3gepaV2ElzJZVht5NqRe/cVlw5rWtSjg/aEGzCKGE/uzTCLnWcbLos8w2eI5Jls8x3hZlMsvvgr4ZVEuH1gp4LLoIobLooT97ayMXRbVtx3zN5VNsPBbzBkBL2KaEBczRsCK82KGieFrIZdFFxGKouczgjnBfM0UYT3vw2VRyv55gTACXkkYAXP1zwuG/qnuibCyy6CU/fMi0/z5IoEdKrtSQ2mHl5js8FIVLpMH+URuoEvmx1gkvCxRJLzMLBJeZhAJq3wSCTVcHUs6yb1CWBelSFjFdBJ6pQoioaarbCn759UMuhM7pUjg6p9XCU6OlWzOdMKHzl8jmz/zWK44zM4wX3GgvOJa07qWBPzqrerjJQznm9eZzr2q3jruuDkntOtGdUyvPmp7v9wk+BzfoBaS1JOc57RUzqrqeoPh0uUbhBzfJOwU5sHj/H8ePG9SDx4pM/7SgD++odq8lKHdbzGd6d7KKH9bA8fjQBz3aiiV09sB9yeltN9m8Kd3BIyjdxja/S7TOHrXMo7CNdvY5pQ1Ab/Xy+UDa5muUlGvFVpGGNUR9rWzlunKxbJY1MXO8T1u4UgRJSmS1b3vGK5Gw2vK8f3/BwMzFr3xDcL3KQeh1NnyHQEd9UGso8LOMgEdtTzWUTCtCOioD2MdBd4qoKM+inUUGEFAR30c66iw84mAjvok1lFh5zMBHfVprKPCzgoBHfVZrKPCzpcCOurzWEeFnZUCOmpFrKPCzioBHfVFrKPCzjcCOurLWEeFneLE4HP8KtZRYWedgBG1MtZRYecUASPq61hHhZ3vBYyoVbGOCjsbBHTU6lhHhZ2NAjrqm1hHhZ3NAjpqTayjws4WAR21NtZRYWergI5aF+uosPOzgI76NtZRYedXAR31Xayjws7vAjrq+1hHhZ0/BXTU+lhHhZ3tAjpqQ6yjwk4jAdf6foh1VNgJJQu4ehLrqLATL6CjNsU6KuwkCuiozbGOCju1BHTUj5QdpZ5Pqxfy5517cSF64wadJ35/3xbouB0Grx8zuC88d27xxIRvQ1K2pk9h/pRBa0jvMWRV7wHMdviJ8GnUrUx22FoFO9SUO6VNrwnxDAbqNhMOWqeTkDbHE7b5WiFtTiBs83U+tTlcs83pTGi/VQkyTsJdQjJ4dhXCs5sQntcL4dldCM8eQnjeIIRnTyE8ewnheaMQnjcJ4XmzEJ63COF5qxCevYXwvE0Izz5CePYVwrOfEJ5lQnj2F8JzgBCeA4XwHCSE52AhPIcI4TlUCM9hQngOF8JzhBCeI4XwHCWE52ghPMcI4TlWCM9xQniOF8JzghCeE4XwnCSE52QhPKcI4TlVCM9pQnhOF8LzdiE87xDCc4YQnncK4XmXEJ53C+F5jxCe9wrhOVMIz/uE8LxfCM8HhPCcJYTng0J4PiSE52whPB8WwvMRITwfFcLzMSE85wjhOVcIz8eF8HxCCM95Qng+KYTnU0J4zhfC82khPBcI4blQCM9nhPBcJITns0J4PieE52IhPJ8XwvMFITxfFMLzJSE8XxbC8xUhPF8VwvM1ITyXCOH5uhCebwjh+aYQnkuF8HxLCM+3hfB8RwjPd4XwXCaE53tCeL4vhOcHQnguF8LzQyE8PxLC82MhPD8RwvNTITw/E8LzcyE8Vwjh+YUQnl8K4fmVEJ4rhfD8WgjPVUJ4rhbC8xshPNcI4blWCM91Qnh+K4Tnd0J4fi+E53ohPDcI4fmDEJ4bhfDcJITnZiE8fxTCc4sQnj8J4blVCM9tQnj+LITnL0J4/iqE529CeP4uhOcfQnj+KYTnX0J4bhfC828hPP8RwlNVKIFnHBPPeGKe8YhnTb9dcUuijDYnELa5a6IMf0wUMm6ShPCsJYRnbSE86wjhWVcIz3pCeNYXwrOBEJ4NhfBsJIRnYyE8mwjhmSyEZ4oQnqlCeKYJ4ZkuhGeGEJ57COG5pxCeewnhubcQnvsI4bmvEJ77CeHZVAjP/YXwPEAIzwOF8DwI8XTyCyNZOUUlpfmRnKzs7Fz4f1FOcVGeU1icU1BUGMktLC7My8srKSwsLikqzMzJLMmDGjIjBVkFJbmFhdmYJ/W11IMJr6WuFfLt40N8urYfpG+uHyrkfsZhhP74U4YMfzxcyJx2hBCeRwrheZQQnkcL4XmMEJ7HCuF5nBCexwvhGRbC0xHCM1MIz4gQnllCeGYL4ZkjhGeuEJ55QnjmC+F5ghCeJwrheZIQnicL4XmKEJ6nCuHZTAjP04TwPF0IzzOE8GwuhGcLITzPFMKzpRCeZwnh2UoIz7OF8DxHCM9zhfA8TwjP84XwvEAIzwuF8GwthOdFQnheLITnJUJ4thHCs60Qnu2E8LxUCM/2Qnh2EMLzMiE8LxfC8wohPK8UwvMqITyvFsKzQAjPQiE8i4TwLBbCs0QIz1IhPDsK4XmNEJ6dhPC8VgjP64Tw7CyEZxchPLsK4dlNCM/rhfDsLoRnDyE8bxDCs6cQnr2E8LxRCM+bhPC8WQjPW4TwvFUIz95CeN4mhGcfITz7CuHZTwjPMiE8+wvhOUAIz4FCeA4SwnOwEJ5DhPAcKoTnMCE8hwvhOUIIz5FCeI4SwnO0EJ5jhPAcK4TnOCE8xwvhOUEIz4lCeE4SwnOyEJ5ThPCcKoTnNCE8pwvhebsQnncI4TlDCM87hfC8SwjPu4XwvEcIz3uF8JwphOd9QnjeL4TnA0J4zhLC80EhPB8SwnO2EJ4PC+H5iBCejwrh+ZgQnnOE8JwrhOfjQng+IYTnPCE8nxTC8ykhPOcL4fm0EJ4LhPBcKITnM0J4LhLC81khPJ8TwnOxEJ7PC+H5ghCeLwrh+ZIQni8L4fmKEJ6vCuH5mhCeS4TwfF0IzzeE8HxTCM+lQni+JYTn20J4viOE57tCeC4TwvM9ITzfF8LzAyE8lwvh+aEQnh8J4fmxEJ6fCOH5qRCenwnh+bkQniuE8PxCCM8vhfD8SgjPlUJ4fi2E5yohPFcL4fmNEJ5rmHjGE/Nci3jW9BvtW5i+0X4gcZvXVWxzpAZtdpZm0NX1TobWF8W7X9cHGbv0q7O7dS3PMPhIePfq+jDD6G/h3anrI3NdTn5p9ev6OCPqOMirbl2fZFjGVG716vrUVldeVml16voso5KxnlX1uj7PqHTeyK5qXSsqrysnL1y1ur6oSl1OXrgqdX1Ztbqc7NzK6/qqqnXlZRdVVtfKqtdVnJlrr+vr6tSVF8m01bWqenVFSnKj17W6unXlZeVGq+ub6teVl5tnrmvN7tQFOaa61u5eXfk5pbvWtW436wJeYb2ub3e/Licrs2Jd39WkrkhJGNf1fc3qckqzyutaX9O6svMzvbo21LyuSMm/lTk/kNRVqmpzNhLVBbU5mwjq8nTiZiadeID7l6hu59s4Oj02JJlOjw1NptNjw5Lp9NjwZDo9NiKZTo+NTKbTY6OS6fTY6GQ6PTYmOUSmx8Ymh8j02LjkEJkeG1+1uqqkxyZUta4q6LGJVa+rUj02qTp1VaLHJlevLqsem1Lduix6bGr164qqx6btTl1R9Nj0ZDo9dvtu1mXSY3fsfl276LEZNalL02N31qyuCnrsrprWhfTY3cl0euyeZBoNpeq6N5lOj80kqMvTY/cl013D+pFJ26W6f4nqdr4jvAZ4fzKdTnyAUCfOItSJDxLqxIcIdeJsQp34MKFOfIRQJz5KqBMfI9SJcwh14lxCnfg4oU58glAnziPUiU8S6sSnCHXi/GSe+b+p+5eobuf7OLp5dmkq3Tz7VirdPPt2Kt08+04q3Tz7birdPLsslW6efS+Vbp59P5Vunv0glW6eXZ4aIptnP0wNkc2zH1W1rirMsx9Xva5K59lPqlNXJfPsp9WryzrPflbduizx+OfVrytqPL5id+qKEo9/sXt1GePxL3ezLlM8/tXu17VLPL6yJnVp8fjXNaurQjy+qqZ1oXh8dc3r2hmPf0NS17/x+BqiulQ8vpagLi8eX5cq4/7IesIY+ttUuhj6u1Q6bfc9obZbT6jtNhBqux8Itd1GQm23iVDbbSbUdj8SarsthNruJ0Jtt5VQ220j1HY/E2q7Xwi13a+E2u43Qm33O6G2+4NQ2/1JqO3+ItR22wm13d+E2u4fQm0XSqPTdnFpFBrq37ri02j0mKorIY1O2yUS1OVpu6Q0GdpuA6G2q5VGp+1qp9FpuzppdNqubhqdtquXRqft6qfRabsGaXTarmEanbZrlEan7Rqn0Wm7Jml02i45jU7bpaTRabvUNDptl5ZGp+3S0+i0XUYanbbbI41O2+2ZRqft9kqj03Z7p9Fpu33S6LTdvml02m6/NDpt1zSNTtvtT6jtDiDUdgcSaruDCLXdwYTa7hAh2u4HQm13KKG2O4xQ2x1OqO2OINR2RxJqu6MItd3RhNruGEJtdyyhtjuOUNsdT6jtwoTaziHUdpmE2i5CqO2yCLVdNqG2yyHUdrmE2i6PUNvlE2q7Ewi13YmE2u4kQm13MqG2O4VQ251KqO2aEWq70wi13emE2u4MIdpuI6G2a06o7VoQarszCbVdS0JtdxahtmtFqO3OJtR25xBqu3MJtd15hNrufEJtdwGhtruQUNu1JtR2FxFqu4sJtd0lhNquDaG2a0uo7doRartLCbVde0Jt14FQ211GqO0uJ9R2VxBquysJtd1VhNruakJtV0Co7QqFaLtNhNquiFDbFRNquxJCbVdKqO06Emq7awi1XSdCbXctoba7jlDbdSbUdl0ItV1XQm3XjVDbXU+o7boTarsehNruBkJt15NQ2/Ui1HY3Emq7mwi13c2E2u4WQm13K6G2602o7W4j1HZ9CLVdX0Jt149Q25URarv+QrTdZkJtN4BQ2w0k1HaDCLXdYEJtN4RQ2w0l1HbDCLXdcEJtN4JQ240k1HajCLXdaEJtN4ZQ240l1HbjCLXdeEJtN4FQ200k1HaTCLXdZEJtN4VQ200l1HbTCLXddEJtdzuhtruDUNvNINR2dxJqu7sItd3dhNruHiHa7kdCbXcvobabSajt7iPUdvcTarsHCLXdLEJt9yChtnuIUNvNJtR2DxNqu0cItd2jhNruMUJtN4dQ280l1HaPE2q7Jwi13TxCbfckobZ7ilDbzSfUdk8TarsFhNpuIaG2e4ZQ2y0i1HbPEmq75wi13WJCbfc8obZ7QYi220Ko7V4k1HYvEWq7lwm13SuE2u5VQm33GqG2W0Ko7V4n1HZvEGq7Nwm13VJCbfcWobZ7m1DbvUOo7d4l1HbLCLXde4Ta7n1CbfcBobZbTqjtPiTUdh8RaruPCbXdJ4Ta7lNCbfcZobb7nFDbrSDUdl8QarsvCbXdV0K03U+E2m4lobb7mlDbrSLUdqsJtd03hNpuDaG2W0uo7dYRartvCbXdd4Ta7ntCbbeeUNttINR2PxBqu42E2m4TobbbTKjtfiTUdlsItd1PhNpuK6G220ao7X4m1Ha/EGq7Xwm13W+E2u53Qm33B6G2+5NQ2/1FqO22C9F2Wwm13d+E2u4fQm0XSqfTdnHpdNouPp1O2yWk02m7xHQ6bZeUTqftaqXTabva6SEybVcnPUSm7epWpa4qart6VaurStquflXrqoK2a1D1uirVdg2rU1cl2q5R9eqyarvG1a3Lou2aVL+uqNoueXfqiqLtUtLptF3qbtZl0nZpu1/XLtouvSZ1adouo2Z1VdB2e9S0LqTt9kyn0FD/1rVXOo0eU3XtnU6n7fYhqMvTdvumy9B22wi13X7pdNquaTqdttufUNsdQKjtDiTUdgcRaruDCbXdIYTa7lBCbXcYobY7nFDbHUGo7Y4k1HZHEWq7owm13TGE2u5YQm13HKG2O55Q24UJtZ1DqO0yCbVdhFDbZRFqu2xCbZdDqO1yCbVdHqG2yyfUdicQarsThWi7nwm13UmE2u5kQm13CqG2O5VQ2zUj1HanEWq70wm13RmE2q45obZrQajtziTUdi0Jtd1ZhNquFaG2O5tQ251DqO3OJdR25xFqu/MJtd0FhNruQkJt15pQ211EqO0uJtR2lxBquzaE2q4tobZrR6jtLiXUdu0JtV0HIdruF0JtdxmhtrucUNtdQajtriTUdlcRarurCbVdAaG2KyTUdkWE2q6YUNuVEGq7UkJt15FQ211DqO06EWq7awm13XWE2q4zobbrQqjtuhJqu26E2u56Qm3XnVDb9SDUdjcQaruehNquF6G2u5FQ291EqO1uJtR2tzBpu3j3LxXPhDg6nfhrnD9tDtdsc36Lo7PfbYk8bY4jbvPvcTJ4/iGE559CeP4lhOd2ITz/FsLzHyE81eQugWecEJ7xQngmCOGZKIRnkhCetYTwrC2EZx0hPOsK4VlPCM/6Qng2EMKzoRCejYTwbCyEZxMhPJOF8EwRwjNVCM80ITzThfDMEMJzDyE89xTCcy8hPPcWwnMfITz3FcJzPyE8mwrhub8QngcI4XmgEJ4HCeF5sBCehwjheagQnocJ4Xm4EJ5HCOF5pBCeRwnhebQQnscI4XmsEJ7HCeF5vBCeYSE8HSE8M4XwjAjhmSWEZ7YQnjlCeOYK4ZknhGe+EJ4nCOF5ohCeJwnhebIQnqcI4XmqEJ7NhPA8TQjP04XwPEMIz+ZCeLYQwvNMITxbCuF5lhCerYTwPFsIz3OE8DxXCM/zhPA8XwjPC4TwvFAIz9ZCeF4khOfFQnheIoRnGyE82wrh2U4Iz0uF8GwvhGcHITwvE8LzciE8rxDC80ohPK8SwvNqITwLhPAsFMKzSAjPYiE8S4TwLBXCs6MQntcI4dlJCM9rhfC8TgjPzkJ4dhHCs6sQnt2E8LxeCM/uQnj2EMLzBiE8ewrh2UsIzxuF8LxJCM+bhfC8RQjPW4Xw7C2E521CePYRwrOvEJ79hPAsE8KzvxCeA4TwHCiE5yAhPAcL4TlECM+hQngOE8JzuBCeI4TwHCmE5yghPEcL4TlGCM+xQniOE8JzvBCeE4TwnCiE5yQhPCcL4TlFCM+pQnhOE8JzuhCetwvheYcQnjOE8LxTCM+7hPC8WwjPe4TwvFcIz5lCeN4nhOf9Qng+IITnLCE8HxTC8yEhPGcL4fmwEJ6PCOH5qBCejwnhOUcIz7lCeD4uhOcTQnjOE8LzSSE8nxLCc74Qnk8L4blACM+FQng+I4TnIiE8nxXC8zkhPBcL4fm8EJ4vCOH5ohCeLwnh+bIQnq8I4fmqEJ6vCeG5RAjP14XwfEMIzzeF8FwqhOdbQni+LYTnO0J4viuE5zIhPN8TwvN9ITw/EMJzuRCeHwrh+ZEQnh8L4fmJEJ6fCuH5mRCenwvhuUIIzy+E8PxSCM+vhPBcKYTn10J4rhLCc7UQnt8I4blGCM+1QniuE8LzWyE8vxPC83shPNcL4blBCM8fhPDcKITnJiE8Nwvh+aMQnluE8PxJCM+tQnhuE8LzZyE8fxHC81chPH8TwvN3ITz/EMLzTyE8/xLCc7sQnn8L4fmPEJ6hBBk844TwjBfCM0EIz0QhPJOE8KwlhGdtITzrCOFZVwjPekJ41hfCs4EQng2F8GwkhGdjITybCOGZLIRnihCeqUJ4pgnhmS6EZ4YQnnsI4bmnEJ57CeG5txCe+wjhua8QnvsJ4dlUCM/9hfA8QAjPA4XwPEgIz4OF8DxECM9DhfA8TAjPw5l4xms8I+GcrKyS3MwSJ+IUhDPzC/Oyw1nZhTl5Tp6TnZddnJkXiZTkZeXl5hfm54bznaxIiVOanR8pdes+nLDNR/jU5nDNNufIBDr7bc2Q0c+JhPY7SohvJxG2+Wghba5F2OZjhLS5NmGbjxXS5jqEbT5OSJvrErb5eCFtrkfY5rCQNtcnbLMjpM0NCNucKaTNDQnbHBHS5kaEbc4S0ubGhG3OFtLmJoRtzhHS5mTCNucKaXMKYZvzhLQ5lbDN+ULanEbY5hOEtDmdsM0nCmlzBmGbTxLS5j0I23yykDbvSdjmU4S0eS/CNp8qpM17E7a5mZA270PY5tOEtHlfwjafLqTN+xG2+QwhbW5K2ObmQtq8P2GbWwhp8wGEbT5TSJsPJGxzSyFtPoiwzWcJafPBhG1uJaTNhxC2+WwhbT6UsM3nCGnzYYRtPpewzVCVelQ6tNZt8DWAToBrAdcBOgO6ALoCugGuB3QH9ADcAOgJ6AW4EXAT4GbALYBbAb0BtwH6APoC+gHKAP0BAwADAYMAgwFDAEMBwwDDASMAIwGjAKMBYwBjAeMA4wETABMBkwCTAVMAUwHTANMBtwPuAMwA3Am4C3A34B7AvYCZgPsA9wMeAMwCPAh4CDAb8DDgEcCjgMcAcwBzAY8DngDMAzwJeAowH/A0YAFgIeAZwCLAs4DnAIsBzwNeALwIeAnwMuAVwKuA1wBLAK8D3gC8CVgKeAvwNuAdwLuAZYD3AO8DPgAsB3wI+AjwMeATwKeAzwCfA1YAvgB8CfgKsBLwNWAVYDXgG8AawFrAOsC3gO8A3wPWAzYAfgBsBGwCbAb8CNgC+AmwFbAN8DPgF8CvgN8AvwP+APwJ+AuwHfA34B+AWlAWB4gHJAASAUmAWoDagDqAuoB6gPqABoCGgEaAxoAmgGRACiAVkAZIB2QA9gDsCdgLsDdgH8C+gP0ATQH7Aw4AHAg4CHAw4BDAoYDDAIcDjgAcCTgKcDTgGMCxgOMAxwPCAAeQCYgAsgDZgBxALiAPkA84AXAi4CTAyYBTAKcCmgFOA5wOOAPQHNACcCagJeAsQCvA2YBzAOcCzgOcD7gAcCGgNeAiwMWASwBtAG0B7QCXAtoDOgAuA1wOuAJwJeAqwNWAAkAhoAhQDCgBlAI6Aq4BdAJcC7gO0BnQBdAV0A1wPaA7oAfgBkBPQC/AjYCbADcDbgHcCugNuA3QB9AX0A9QBugPGAAYCBgEGAwYAhgKGAYYDhgBGAkYBRgNGAMYCxgHGA+YAJgImASYDJgCmAqYBpgOuB1wB2AG4E7AXYC7AfcA7gXMBNwHuB/wAGAW4EHAQ4DZgIcBjwAeBTwGmAOYC3gc8ARgHuBJwFOA+YCnAQsACwHPABYBngU8B1gMeB7wAuBFwEuAlwGvAF4FvAZYAngd8AbgTcBSwFuAtwHvAN4FLAO8B3gf8AFgOeBDwEeAjwGfAD4FfAb4HLAC8AXgS8BXgJWArwGrAKsB3wDWANYC1gG+BXwH+B6wHrAB8ANgI2ATYDPgR8AWwE+ArYBtgJ8BvwB+BfwG+B3wB+BPwF+A7YC/Af8A1Ik1DhAPSAAkApIAtQC1AXUAdQH1APUBDQANAY0AjQFNAMmAFEAqIA2QDsgA7AHYE7AXYG/APoB9AfsBmgL2BxwAOBBwEOBgwCGAQwGHAQ4HHAE4EnAU4GjAMYBjAccBjgeEAQ4gExABZAGyATmAXEAeIB9wAuBEwEmAkwGnAE4FNAOcBjgdcAagOaAF4ExAS8BZgFaAswHnAM4FnAc4H3AB4EJAa8BFgIsBlwDaANoC2gEuBbQHdABcBrgccAXgSsBVgKsBBYBCQBGgGFACKAV0BFwD6AS4FnAdoDOgC6AroBvgekB3QA/ADYCegF6AGwE3AW4G3AK4FdAbcBugD6AvoB+gDNAfMAAwEDAIMBgwBDAUMAwwHDACMBIwCjAaMAYwFjAOMB4wATARMAkwGTAFMBUwDTAdcDvgDsAMwJ2AuwB3A+4B3AuYCbgPcD/gAcAswIOAhwCzAep79epb8Oo76+ob5ur74Orb2+q71uqb0ep7zOpbx+o7wuobver7t+rbsuq7reqbqOp7o+pbnuo7meoblOr7jurbiS8C1Df/1Pf01Lfq1Hfg1DfW1PfL1LfB1He31Det1Pei1LeY1HeO1DeE1Pd51Ldv1Hdl1Ddb1PdQ1LdG1Hc81Dcy1Pcn1Lcd1HcT1DcJ1Pv+1bv01Xvq1Tvg1fvV1bvLvwaod26r91mrd0Wr9zAr7afeH6zezavee6veKave16rehareM6re4anej6nePane66jemajeR6je9afeo6feUafe/6berabeW6beCabet6XeZaXeE6XewaTeb6TeHaTEpnrnjXqfjHpXi3oPinrHiHp/h3o3hnrvhHqng3pfgnoXgXrOXz1Dr55PV89+q+eq1TPL6nlg9ayteo5VPSOqnr9Uzzaq5wbVM3nqeTf1LJl6Tks9A6WeL1LP7qjnYtQzJ+p5DvWshHoOQa3xV+vn1dp0tVZbrYNWa3nV2la11lOtfVRrAdXaOCWY1doptZZIra1Ra03U2gu1FkHdm1f3qtW9W3UvU93bU/e61L0fdS9kx70BgLp2rK6lqmuL6lqbuvakrsWoaxMqVlexq4rlVGyjtH78v7IppNYqq+2aUPnmTqk7NLzKV2t71VpXtfZTrYVUawPVWjm1dkytpVJri9RaG7X2RK3FUGsT1L16de9a3ctV9zbVvT5170vdC1L3RtS9AnXtXF1LVtdW1bVGde3tAMCBgIMABwNULKtiOxXrqPXzRwCOBBwFOBpwDOBYwHGA4wEq4HIAmYAIIAuQDcgB5ALyAPmAEwAnAk4CnAw4BXBq6N8Y6DTA6YAzAM0BLQBnAloCzgK0ApwNOAdwLuA8wPmACwAXAloDLgJcDLgE0AbQFtAOcCmgPaAD4DLA5YArAFcCrgJcDSgAFAKKAMWAEkApoGNo101pCW+73/2bvua0vbovfbAFLve9+/fu2U3n77MmvgPOW2/J22zJ22LJS3Z5nX748vaz4sq24by93LxNBx3SLOXCHd2+c9snLnobjrTkFVnyulvy+lnyRlvy7rDkzbbkLbDkvWbJW27JW2XJ22zJ227JUzopWt5elrzDLXnZlrwzLHmtLXlXWfK6WPJ6W/KGW/KmWvIesOQ9acl7yZK3zJL3pSVvo5v31qRlSx4aVlCM87ZYfqfOT9Hy8i15LS15bSx5RZa87pa8fpa80Za8Oyx5sy15Cyx5r1nyllvyVlnyNlvytlvy6idGz9vLkne4JS/bkneGJa+1Je8qS14XS15vS95wS95US94Dlrz5bp5pHD1j+d1WS15cUvS8xpa8/Sx5R1vy8i15LS15bSx5RZa87pa8fpa80Za8Oyx5sy15Cyx5r1nyllvyVlnyNlvytlvy6teKnreXJe9wS162Je8MS15rS95Vlrwulrw+bp5pHPW3/O5ZS96blrxPLHlrLXlbLXlxtaPnNbbk7WfJO9qSl2/Ja2nJa2PJK7Lkdbfk9bPkjbbk3WHJm23JW2DJe82St9ySt8qSt9mSt92SV79O9Ly9LHmHW/KyLXkt3DzTOGpl+d1AS954S97dlrzHLHnPWvLetOR9Yslba8nbasmLqxs9r7Elbz9L3tGWvHxLXktLXhtLXpElr7slr58lb7Ql7w5L3mxL3gJL3muWvOWWvFWWvM2WvO2WvIb1/v1rGkfJ9aL/bv/G//41XfM40JJ3lCXvGEvecZa8sCUv25KXa8nLt+SdaMk71ZJ3miWvlSXvHEvehZa8iyx5pW7ekIN/Snl89rRDcd49bp6p3+dY8p6z5C215H1qyVtnydtmyYtvEj2viSWvqSXvGEveCZa8syx5bS15xZa8Hpa8MkveGEveDEvew5a8hZa8JZa8Dy15qy15P1ry/rbkNUiOnre3Je8oN880Rx5n+V2um2ecXyx5J1vyTrXktbTktbLknW/Ju9CSd4klr60l70pL3tWWvEJLXrElr5Ml7zpLXjdL395o8YlbLXl9LXW+Yclbaqnzbcvv3rX87j3L75Zb8j6y1PmJ5XefWX63wvK7ryx5X1vqXG353RrL79ZZfve9JW+Dpc6Nlt9ttvxui+V32yx5v1jq/M3yuz8sv/vL8rt/LHlxKdHrTEiJ/rsky+9qW35Xz5LXwFJnI8vvmlh+l2L5Xbolbw9LnXtZfreP5Xf7WX7XwvK7oW6eaR4cbskbb8mbaMmbbMmbasmbYcm7y5J3jyVvpiVvliXvIUve45a8eZa8BZa8Zyx5b7h5Jj0fn/rvX6NfW/KaWvKOseSdYMk7y5LX1pJXbMnrYckrs+SNseTNsOQ9bMlbaMlbYsn70JK32pL3oyXvb0teg7ToeXtb8o6w5OVY8ppb8i6y5F1tyetqybvNkjfKzTPNg+Msv5vu5pnG3x2WvLstefda8mZb8h6x5D1uyZtnyXvakrfQkveiJe9lS96rlrwllry3LHnvWPLet/TtJxafWGHJW2mps2F69LzG6dHrTLb8LtXyu3TL7/a05O1tqXNfy++aWn53gOV3B1vyDrXUebjld0dafne05XfHWfLCljozLb/Lsvwux/K7fEveiZY6T7b87lTL706z/K65Je9MS51nWX53tuV351p+d4Elr7Wlzostv2tj+V07y+86WPIut9R5peV3V1t+V2j53QjL755380x68DdLnbUyouelWfIOsuSFLXmnWPLOteR1sORdY8m70ZI3yJI3wZJ3jyVvjiXvOUveUkvep5a8dZa8bZa8+D2i5zWx5DW15B1jyTvBkneWJa+tJa/YktfDkjfAzTONoyGW341184xxsSVvsiVvqiXvbkvevZa8WZa8hyx5j1ry5ljynrbkLbTkLbLkPWfJe8mS94ol73VL375j8Yn3LXkfWer805K3PUqee4trx/p+tbm3cnc+Q62WLqtlkM3c/4drtjl1Ub3U9eeFs7PqhipuxPwjdUPlz21w2cerk6H+sLvEJnRGWXn9elvU1tD9P3rsYedv1BKQFPQbXEfIrUP/rZfP2b68cFaWV38iQ/3qddMNvTaW7Wo/Ly+xrOKxcV4SyvM4Knvuo9mHw7+wfXj8y9nxHs1oPqXaeRiyh+43cZoNmDg6cdrxQtqxdN71GPtEEYrTjufx0e3jpdWzYO6lt1DHkp5ndOvas0dBUc9WXW/oWdC1qAQ3AVfbxNBEbAJTGb2cXr6hId+jWR/tr10WqtC0HX/RPm9YeMOkDi6v5dVFeYllFXnVc/+fiI6D6/J4JGnlvfjFOx3WQr/xft/EcPxa2vEr8Dbswy6k15Vg2OeVV6tlm7ppZVfvNJdYVl4flUvm5oXDHj/P9kmhiu4Z0o6fpJU/2v1/Pa293rTXbDd5luYWOKWRgtKC7ILi4qyighStfmwzZacD3bRsWZOVE5M19o1K1jRE5dTWHNUXp+W1MBxLtrwJZ6Ya+JtkSoKhnD7G9VOYfooLRanDdC6pG9q135rtXpsdfYfeTlvbvLwkra2mduPfJ4V2bXeSVr/epyHDMRKi/NZUb7ylHZX9Vpe1ej96fCSciw5w//9fn4uOctOxc5F1izCfKzKZ51Djucg0n9rORabwqLmbZzpP4XORHkYxhZLZzP3kVBZKHhAq37Bdk0LRzyNJWlnvfKb0dbJmtySeduV4fVsrtOvm5dVGx47T8uoY2hVnqMt0rvXapIfiejmdDx4rtbU8k2/jeEU/d3t/m7l/wzXbHBOPOAMPU6zq/UbCecyLUf/r85hp7HntqBWKPvYqs7/3Dk/h58civ86PtXjqz/fqr81Tv/H8iNvi5Xu+cU5ZuS3PKavIaXfPocxxWjazDbNN5xD9vF+H59g5+jweCpkvn3rHrxdi9dedl0/raHx0++iX6fElfP0yfWLZru0wXcL3+hfHxqbzUS0tzztPqu3ssop5OFb0/B2fr03nU+r5i0s3qi01FP0c4e2LXS/+d6O6Xqz85yhUlz429GsWuC51u8HTxl279exUessZPUoKepYUn9+tZwmeBPQJD29JWjn9d/FRyOm/S9T+n2QoF7IcK1pZr/EShODx7v//ayE40E3LFmx5ebIvaJSLjf/6gkaCVk7/Df5dc1SmeZQyLVCZFlHKnInKnBmlTEtUpmWUMmehMmdFKdMKlWkVpczZqMzZUcpEE7S4zLmozLlRypyHypwXpcz5qMz5UcpcgMpcEKXMhajMhVHKtEZlWkcpcxEqc1GUMhejMhdHKXMJKnNJlDJtUJk2Ucq0RWXaRinTDpVpF6XMpajMpVHKtEdl2kcp0wGV6RClzGWozGVRylyOylwepcwVqMwVUcpcicpcGaXMVajMVVHKXI3KXB2lTAEqUxClTCEqUxilTBEqUxSlTDEqUxylTAkqUxKlTCkqUxqlTEdUpmOUMtegMtdEKdMJlekUpcy1qMy1Ucpch8pcF6VMZ1Smc5QyXVCZLlHKdEVlukYp0w2V6RalzPWozPVRynRHZbpHKdMDlekRpcwNqMwNUcr0RGV6RinTC5XpFaXMjajMjVHK3ITK3KSVYQ4GI7zaIpKtB8sh1BbeC/GRKl/I2Bn8hUKMOq78QkaSxke3j+1CRpyWl1i2azsqW4vYDpUz+ZbaeG8u5eb5sY7zv/G7qq8/lOR3tjWwu+t30W78Fbpp3rkvLy92Iay8fLQLYQXu/4N8Icx7KMO7ENbHKx9iHedh/TyeECofV3is6YucmG4aRDw+pgt/2Ab6DV79mpvpr1eXnucdq16Icz4vn8NMbUs02LqJVl63QbS6alWzrv+yT0037eO0/+Py8Ya2meb62lpeIsqrpeXhuR4vPmin2Ydnji0fg6ZzW5yhvd5+080kkx81Du1q3zpa2+qytC2caet7fPPPO34DtL+4pLBXx3O7dQxpW4JmB89u2agM7q/40K6+XztKXSHt/3qdCag+vEm4Jj/A/f9/fU1+npsWfU3eKc3065p8HE/9YW7taLomb9KRarwnhyqWwfO8bS5kXiTBe23BKSjlelZvgGYfpgWWvPeNwD6VLbAcbWlnXIjOl6sSi/P4SGE4TjteKGTWsd7x/YrFEzU+un30McoSw4CP2PST6SEIfWGS3ndYHySFdtXVuN740K7aCuvWJG3fge5fkx6Ptr4gFLJre7XPW9jTOGT2RVyvqd9s8Qf+vW7D3Y27TMcxcbaNu+oeR/dDtTVz/4ZrtGWGTbZK0tpgWwjHE3tlVvk6nnd8vxbCmWI7k2/zLhTM3Bl7mWKpOgb7eH1Z15Dn1eXpazx34PJ1UBtxeZz2fo/35bt/mxjq1OeOuob24H147oi46caGumpp9Zp0mSkmt81vtufqd3fuMHHWFyGrrZn7N1yzzWG+ZuKw+j2cM1njfqc8tqjHY5+w6b6PdyzV32ei/dHGJP5tHZSPy5+D6mzlphsbfo8fNmwcpe0h9P/6UY6HzxtJWtkLEJciN11XK0Ns5yLPzg1Cu25xhn0JhjIeN2XjiW66Kg/0YJvsvD+g8fF+14ymvTv9qr6BW12Ny391rvaOXy/E2vc7z9UNNT66ffRzdSMe+4TVNQJvvse+UddgG52H5y+msYntp5+DEwz79HMP/n09LS/ecByTVvTOUXhsm7gmann42Pr1XjxGErT2YDvp5bx+bKztb+b+P1yjrVxzeffckqLwaozycfnr3L9qPpmCyuPf4LaafFXngMvjdnt8PJtin9p5zzDEOC+g+LaxwV6meSFJK9/DYC/Tdad6qD1qSyzjaE9hWPGYjnjofZSEjlud+cfmAw21MmprEtq1vxtp5UxzAba5rv2949SKUh7rEFzeu9+rbDNX44fjYv28pP8fj+VaWj0Jht9VR0epLej3+ke5/w/yvf7BblrCPaMJ7v+D8ECvd61X+bg3TjuW9LyooGtxty5ndirpXIx/rXu1bavP0MKSvPzicH5pSYHjOJnF4ZLKWmjyWDw7q83zejwqcHmvviSt/J1eWcDdblq/g4CPp8rNsZSLi/J3Rx2GfYllFfeZRgueRbzyO5Vu2a4cvbz6KA+fOdTWwP0/theuy+ORpJV/xP2/1yd45Hu/b2I4fh3t+BV4G/bps0h9Q/n6hvKqf+736nP/4rZTRwE7jqnVj/fp3Dzf4RhXWdkFuUUFuY6Tn+WUZDnZlY0r9+ME0h/Z9+2tsXE89QfqbjNWP9F+I/rOaRVeTeOdQXnOpkHXNd67Sf9rXeO+8jr2wi37FnvhVij2wq1wFWa15HLTVFQqoehnBOkvXXI/afGfz2XHuhmy57LcXL/mMp65JjPC+8yAeS7Dbdnpn1o5/Td4nDVHZZpHKdMClWkRpcyZqMyZUcq0RGVaRikTe9a+YlovE3vWvmJaLxN71r5iWi8j5Vn7BFSmBJUp0cr49Ywzz5ye6djW8+nraIiPnRmnHS8UChnvewf1Oa3qPuNc1eePzkDldN/S4wUcExSXVczDWtLzW1X/+aGKfHE5/d5VKLTrfX4O++eFc3K4n3ms7sv1ErW8qvSX2vC7Evx5XqHcdkzPpDu2l+97vhL0e4Tnuf8P8j1C776rd+/rO698iHNslK9/8n+tshNbq2ynI2qt8pXuX9NaZf0Z5uqsVb7UTZueadXXKpv6rbahXtNaZd2G+HdxUf56x9H36ccxcebVWFlW30kw8NH7plaU8vq6Wa98J/evyt8UpU7sc/FVqLMr4tLZTeu6FbdB/e2tHbtOJcdO0I7tlb8J1dk9Sp1xldRZVZvGR2l/L/evOt4Wrf243+qg+m+xlEuylKvMnsx387LitGMnhHbV4Pj4DUO7+ndNx2kdgw2Y17XvbHf9StqNj6/QALUhQavDVF5f96/X30Ar7/0efzzINKczv0/A0c8zY9y/qn+GReEcCu163tY5YnvVilJeX7vnlffWnOG5zuRDeF2dx9u0xld/N0MdjWcz9//hGm6mZwcI63cqm3MmasdtgOxbFft75aejOqdodsVjXz+n47kLP7/h5eN1pzWdS/D6U/25wAaGPNWWu9B+Be8uPbYP/q1+3vDKz0d13uumTWvEa2t5eC2s/vwFz9pwx7o2HPtCtLXhD7p/1ZjZ5qZN8X4D1B61JZaxtMdRPH5FPHS/SkLHxe0KhcrbjctXd/26vgYYfzxVX+vcwFCXbb70fh9tvsTjGZf33v9hmi+xNsb3s6PVbZpHvPbHR+Glx2v43ROUsbTeR/jcmWzgo/vyYq1d3poVrAkaG+rxyqcYjpuKytTSjpuiHXfHmoK4inVW5m+6bvDaWStK+SYaB6/8S4iDHj+YnoPAfq1/ZMsrvwRxedVNe76FxwLWz8ujHBu3P8HQHlv7cfnGUdq/NLRr+3n9NdPR/QbbF/dZssbZK/8u4rwtih2w3eLQvmi+i8snG+zmnauw3b3fmvrWK4f7trGhjfr5jsfmTmZDQ3tDGv9UQ7u9vDSUh3WcviVo/8dtUv3VJK68Xr2czgfbGs9Jug315wD18wb+XRNDG21jyHQe08fQKtQ+/TwT7TnBaPzwvKafB3deR45SXufnlV9n4NfQ8nusCYO+Jmmj+///ek3Sf736nPr4mXl5OfmZheGs3OKi0uKsiN/HD9JTLX96ZQHb3XRlT7U0iIteLi7K3x11GPYlllXcF/SnWuq6FQT5qZZ490dBfKrF8x2OcZWTlePk5RXkFeUUleZnFRVW5Xk4/Z4g19pl7zzn+ROOJ/T2h0Ll5zmv/GFx5TZMj4vOOY6Oc57OOR4dw3T92HRvk5DPThvWQjaMMxxTjwW98k3jKvLyzv+4H5IM9Xh5dQzHxTpG77s62nFNsaB3jHohsz/o14TjQhy2LX+fgOnjyvq9xmh8QiG6uUX/gPMhyIZHofMPnnOwPVWfH2Epl2gph9u0c64N0c9XRfk5pfmRSKETyS8uyXdyKpuvuqFxj/Oo53XeteE52bLXhjuZUtaGJ6AyzVGZ5lHKtEBlWkQpE21tOC7TEpVpGaVMtLXhuEy0teG4TLS14biM7cPCXploa8NxmWhrw3GZaGvDcZloa8NxmWhrw3GZaGvDcZloa8NxmWhrw3GZaGvDVb7sdbvl34jxf91u1ddr/X9bt+ugcrpv2dbtev5rWrfr+a2q/6RQRb64Dtu1Vd61p9nM3/g0r9vV+zKxrOKxcR7uL/yubEezD8+zkdnMz0Y6YduzkZ4/eNdOQiHzNQrPRv/V2twT3f8HeW1ulpve+dHquHLOuv/HaenqvnvZNndwvXs5TjtOEuFxTDEq77ri8jVVdRDPhNCuY0WP/XGskqDVYSqvn2f1+uv6095d1nri6zWmNa7Ma7ay9GsKA9y/issFmg0r6yP93ks9g81xGX09a2VrvPDaVFz+Evev4ufdHDGtn6Kczz3OpnVR2A/1d8l65S9FnCNxZjuEQnbNoHPA5XG7PT7eHGhaq2G6N6avSzTVrb+f0lSPvoaNeW3bzuuLDZG94izcTeumCPns9BXvXiG+zmdan6Gvyemo8fLuoWLfiPbOUIUmhuMmG/pHX+PiHVf5T04UH60fMo9V/R49y/s34ZaXvo4Ab15eY0NbTffL9fcW4y1B+z9uk7JPflx5vXo5nY9prZzp3ckc8xV+D6lpvtJ90CvfE7U1orXVFKP5sXbv4riKdrW9p9Q2R6pNn1MbGsrjvvFsZlqzoK/rM70jNC6067xuOqfqczBe728q79Wn36Moc/8q3p3iKvIzXYdXv/O0gOnbA/pv8LXDqugrpmvMJbzXVcrXTccZbGFa547fF59g+K1+T8krv0dceZ0jNdsxXR/eed7Ez5UlRDkm5sP0jvOdc5bp+Yb6Bj768weTQhX7Yud8FTLPfQla+QaG45rWiuvazjsuPm8mGI6Bn4dh7dso33wIhej6yvaMD7Of5Mdpx/Psjffh49cLmfu+GQ0fR9dIHh/dPnqMzXPuD+fhd/NjuyQZbKPzqKdx5Lk+FuZ+L1Kmyf/jQrznBS+GV3P4fdpxTd8wM51T9G+UPYTqnOWmK/vmiX7M+CjH1M/RTP4Y1scHnl9Nazn1eP/xUEVbetofz+u1DfXo5wF8XH2dKT5uQ+24eF43fetBv15n0p4mzabzi6bxomn0+Yifp/F4v/tRrhlM6/5xH0RbZ/sM4qxfBzGt9TXNnzoHXB63W3+GCp/L9djfdGzb8+ymdcZVaf+LofL2632GY1OOPsPPCpjsFe35j1cRZ73PTM+g2PrM9OyBaf246TkA/bu0lfWZHrPg5w2q0mde+bdC5e3X+4zpeaWdfWZ6/qORwSb68x/LEGe9z0x9YOuzyp7/0PvM9PxHVftM1+Sm5w1sfeaV/zhU3n4pffY54ux3n2Gbpmi/Mz176tkuaM/kNNLy8DM5eiwU0myEN9ym6l7vwzbSn8nBttSf27Wd12zPyJjGiOlcp4+RDah9/ugHZ6duxv6s2y/FwN3U19Xtz0aovbvbn7axoZ+/d7c/TecpW3965X9D7fOpP8P6dfWQwX6mZwVNff1f9Kd+b8WkH/X+NL3LyNafJq3Y0HAcXSsmxZW3z6/+1DlHe79BNH1bF3G23Tfw4qf/4r6B7Zl/kz6xPfNfWQzi2cz0fbPaWh6OIxtqxzH5XBwqU5V763GGY+uxdrrB56p6rcPTElh3e20yXY/h8Ft8b9PU7mjvjdm3in6Ln6NQW2IZS3uMfov1nu63pvfr2PSh6Vqlfq1MbabvauprbZIMddl8E797pyrXwrzyhxt80zR2vHZX9d5N0J/fPd6t4H/t+V1pz88G4TnDozQdENTnDC9wC6lxdoqFc1yIPv7+X3nOsGVcRV5+PWfYEs2z+jqg2HOGxm2X5wzPQzbsrJ3H8TUuvJa5taVcoqUcbpP3G+7n/duh8d0e8dlR1nA8Ve4aS7m4KH931GHYl1hWcV/Qn/cvcSsI8vP+V2o6A7ed+n75jmNq9eN9OjfPd/4X3yNS3ed3M9H5FOdR91NdQzup6o99p67yLfaduprXH67Cd+pe0+xoe36Tab1KpCrnPXx8v57fNMX2pmek1HWu/d10x5KerboWl9xcUnxJQceOnbp2vLikqEdJz9NuuLgEdvfQJWGSVpWeHzIcDruzXi4uSjm8cT5qrDZd+odCdvN55W2fN8B8TZfa9EeIuD/FUKeabTN9WsD0Wm/TLcm6lt/pl+l1LjrXhqFdba0Pc6algllVHebe8etFaWMzGj7WvjR9nsGznemzFJSflzDVVRV/qmpd+mVpPE80c/+Ga7j9h6eTKvtZUE8n+iVv/FvT69yjXfrAxzFdDverLtutEZttkizHMb3Kxa/j1DX8rpn7N1y9LaLvqMrScqbHY7OrOm684/u1tNx27lSbPm7qGbg2MeTpvm66jVTPcBxJdeljA9etj414w3HiLcexff5E16imv95x9H36cUycTa84qKO1p7qvOKhjOA73Kw7023VcrziI045Th+A4pvlIbc3cv+EabqZ+0ZftM33+JmK6DO21T2n1q7T9plvv+LfRbr33QXUWuunGht/rvo1vq4QM5fXHCbzyHTX7cb36Qb+Mh4/FfMkjX9fpeDOdI/S5y/R4g+l12ElaHl62gvtL3/Tb39gW6ndvoXr1ct5m8hFdb9UytMMUX+ra0nSpyDR36Y/+2uJx/fpGM/dvuGabUxUNi+2tX1cIGcqbzhumecB2TjXdnsKXsfV5oJ/7V/F6IVTRdkyPJkU8fqbH5HF7oz2CM9D9q2yfEVfRPqbHgEwxtc4Bl9fbrTbTI0gNtTzTGDU9BqPPqfiVFSFDeX1O9cqPcv+aXq3BPafqj/KYHvcyPeKo9+WD7l/lf2M1m5k+7WSypz7H4KWAej9g3vpnxpgeUdjp77v7iMJU9y/2d9MyOX8+6RTOUjz2QjxUEi9FTkLHxe0Khcrbjcvv7mMUTbTy+vjE/8d1YZvr13nxZ5VM5aO9amim+1fZxls6ZjqvNdG4m8a86bxWX8vDcwhe6uzTHF5sWtbrbfrrYrANTK+L0c9deEm/rnWwH1RX63i2qK7WoZiH6mjHC8q4xUup9XFr+9RVKFT9xww92zYJ7dqXun/juhtreVUdM7pOxP6CPynzgsbRNGckGOq1zRkJhrbpc8Yr7l88ZzS0/B7Hf0FfPrvU/f9/vXwW32pmvkcXZo5tHeb7ZBH9WhC2lfr7PtqP87Cewb+tg/Jx+e9RnR+6adM19Dgtz/QJw8ZRbI7zTNfXuF/5qMf7IdQe5le1VPl6uv6qFqZrWtZXtZjiYWbtsvN1qKbYz3R9W52nGoV27TPMD8c/3j7Pt0z+G+2VY5XZxnStXT/P4T62XWOpp+VhH7E9JuWNp/pR2qZfs8Dxq2mewPMILr/R/avyvc/zmY6nzxOm+9emz0zbYnt9ntAfwW7m/j9cs22nLzaqxEYNNRt55X92/5quhZj823SvXueAy5texWXSxY00ezG9CmVnLN24EntFe1TyL4u9TO23Xa+r7DFE2zUg/Fv92NHmFr98sTLb6r7olU907VnZdQp8L2XH78pY2pNtinfw9cEkdNxo4wWXr0r/m8aL6TFU/RpGHMrT53N8XP3RVtO9HtsrMfFcajv3mK6p6/N5rVD15vM05B96vFOZ5vxf/ozjfnHl7d1fGzdJhuOpcsdZysVF+bujDsO+xLKK+4L+WMfRSAuoLYiPdXifPAviYx2e7wThsY50Ny38sQrfPovGdO/6f+KxCv1V85x9rZ+XKW2VauDvHUu105v3VHsPc9Oduhb1KOlS0rXnaddfX+EBgB0PBXhPAYS0TV8tFaf9v7IV/fVDwb8S6b2MKghXIkOhiqsYqe0Vdkeyd0yG+sP4bnpIaws+rm6DRMPv4qL83+R30crq+/E+090pr07vpVaYL34RL/6bjurlOCul8dRv7Kt0lE7T2smxIt+rzxuzSaFdN10Z41VJmF8cPT9H52JSyN7m+Uwa2ufZM1njyvSUQRhHXwz17/RJprsYEZNP4n26D+jnJMxJH6fEXAt2RnaIQ4J2TJ0jLmOa8/RzaaK2P6EKZU2+6eXt/Dic5Xf6ynZ9n/6hx5ChvFcXvstjqgu/9AqXr62V5erDVAMnj/v/ATuLLSXiahcA",
|
|
1686
|
-
"debug_symbols": "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",
|
|
1815
|
+
"bytecode": "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",
|
|
1816
|
+
"debug_symbols": "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vX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fi9Xb12L19rVYvX0tVm9fj9Xb12P19vVYvX09Vm9fX0Ltyj1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X29Vi9fT1Wb1+P1dvXY/X2jVi9fSNWb9+I1ds3YvX2jSXUrjxi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faNWL19I1Zv34jV2zdi9faN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pCVfMGnJF0xa8kU5VjFpyRdMWvIFk5Z8waQlXzhpqXDSUuGkpcJJS4WTlg5nbn+jVU5aKpy0VDhpqXDSUuGkpcpJS5WTlionLVVOWjqcuf2NVjlpqXLSUuWkpcpJS5WTloSTluRMaekpb9DlTGlpYjV0WhrSX45e/+3trdWf8jW3/NCpZi4/dFKZyw+dPubyQyeKufzQKWEqX0NX/rn80NV8Lj90hZ7Lz111Y/OY5/JzV93YPOa5/NxVNzY3eS4/d9WNzTeey89ddWNziOfyc1fd2LzgufzcVTc213cuP3fVjc3fncvPXXVjc3Ln8nNX3dg827n83FU3Nnd2Lj931Y3Nh53Lz111Y3Nc5/JzV93YvNW5/NxVNzYXdS4/d9WNzS+dy89ddWNzRufyc1fd2DzQufzcVTc2t3MuP3fVjc3XnMvPXXVjczDn8nNX3di8yrn83FU3NldyLj931Y3Nf5zLz111Y3Ma5/JzV93YPMW5/NxVNzb3cC4/d9WNzSecy89cdWWJzRGcy89cdVf5mavuKj9z1V3lZ666q/zMVXeVn7nqrvIzV91Vfuaqu8rPXXVj8+jm8nNX3djcuLn83FU3Nt9tLj931Y3NYZvLz111Y/PS5vJzV93YXLO5/NxVNzZ/bC4/d9WNzQmby89ddWPzvObyc1fd2NytufzcVTc2H2suP3fVjc2xmsvPXXVTs6lW+bmrbmo21So/d9VNzaZa5eeuuqnZVKv83FU3NZtqlZ+76qZmU63yc1fd1GyqVX7uqpuaTbXKz111U7OpVvm5q25qNtUqP3fVTc2mWuXnrrqp2VSr/NxVNzWbapWfu+qmZlOt8nNX3dRsqlV+7qqbmk21ys9ddVOzqVb5uatuajbVKj931U3Nplrl5666qdlUq/zcVTc1m2qVn7vqpmZTrfJzV93UbKpVfu6qm5pNtcrPXXVTs6lW+bmrbmo21So/d9VNzaZa5eeuuqnZVKv83FU3NZtqlZ+76qZmU63yc1fd1GyqVX7uqpuaTbXKz111U7OpVvmpq27JzaYqudlUJTebquRmU5UlddUtudlUJTebquRmU5XcbKqSm01VcrOpSm42VcnNpiq52VQlN5uq5GZTldxsqpKbTVVys6lKbjZVyc2mKrnZVCU3m6rkZlOV3GyqkptNVXKzqUpuNlXJzaYqudlUJTebquRmU5XcbKqS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y89ddWMzKOfyc1fd2KzIufzcVTc203EuP3fVjc1enMvPXXVjMxLn8nNX3dgsw7n83FU3NnNwLj931Y3NBpzLz111YzP85vJzV93YrL25/NxVNzYTby4/d9WNza6by89ddWMz5ubyc1fd2Cy4ufzcVTc2s20uP3fVjc1Wm8vPXXVjM9Dm8lNXXYnNKpvLT111JTZTbC4/ddWVJXXVldg8r7n81FVXYnO35vJTV12Jzceayo/NvJrLz111c7OpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pys6kkN5tKcrOpJDebSnKzqSQ3m0pzs6k0N5tKc7OpNDebSpfUVVdzs6k0N5tKc7OpNDebSnOzqTQ3m0pzs6k0N5tKc7OpNDebSnOzqTQ3m0pzs6k0N5tKc7OpNDebSnOzqTQ3m0pzs6k0N5tKc7OpNDebSnOzqTQ3m0pzs6k0N5tKc7Op9DGbSlr/NWoNRbcxtT/SM+rLsXXo5OAyTG5Olzo5eLl9cllGe36wtfLyydbaGxnt0bxY1dvR1cvk6I9dTK/Ly3wsS3l7MX9OuFwTfuyE6zXhx07457NYXUq7nUInO2JfVfw6uNcy3m5xDz65iunLR9f1Xdn9jthzyx+55Vtu+Z5a/g7Esm+VX3LLr7nlS275mlt+7qqruatubmKZ5iaWaWJi2fof//zvf/7LX/78v/7xL3/9l3/6zz//9d/+48fg5cf/efxuYaxv+n993ljD9u3jSi2PtNrLwfImq7fyY+YeP/zv+PnyxZ+vX/z57Ys/v3/x548v/nz74s/3r/38x3F3x8//4vtXv/j+1S++f/WL71/94vtXP3z//hg0tgyyLYN8w6C2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",
|
|
1687
1817
|
"brillig_names": [
|
|
1688
|
-
"
|
|
1818
|
+
"get_note_internal",
|
|
1689
1819
|
"decompose_hint",
|
|
1690
|
-
"
|
|
1691
|
-
"notify_created_note_oracle_wrapper",
|
|
1692
|
-
"debug_log_oracle_wrapper",
|
|
1693
|
-
"get_random_bytes",
|
|
1694
|
-
"random",
|
|
1695
|
-
"field_less_than",
|
|
1820
|
+
"get_auth_witness",
|
|
1696
1821
|
"build_msg_block",
|
|
1697
1822
|
"attach_len_to_msg_block",
|
|
1698
|
-
"
|
|
1699
|
-
"
|
|
1700
|
-
"
|
|
1823
|
+
"enqueue_public_function_call_internal",
|
|
1824
|
+
"call_private_function_internal",
|
|
1825
|
+
"debug_log_oracle_wrapper",
|
|
1826
|
+
"notify_set_min_revertible_side_effect_counter_oracle_wrapper",
|
|
1701
1827
|
"directive_invert",
|
|
1828
|
+
"directive_integer_quotient",
|
|
1702
1829
|
"directive_to_radix"
|
|
1703
1830
|
],
|
|
1704
|
-
"verification_key": "
|
|
1831
|
+
"verification_key": "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"
|
|
1705
1832
|
},
|
|
1706
1833
|
{
|
|
1707
|
-
"name": "
|
|
1834
|
+
"name": "constructor",
|
|
1708
1835
|
"is_unconstrained": false,
|
|
1709
1836
|
"custom_attributes": [
|
|
1710
1837
|
"private",
|
|
1711
|
-
"
|
|
1712
|
-
"view"
|
|
1838
|
+
"initializer"
|
|
1713
1839
|
],
|
|
1714
1840
|
"abi": {
|
|
1715
1841
|
"error_types": {
|
|
1716
|
-
"11091894166229312484": {
|
|
1717
|
-
"error_kind": "fmtstring",
|
|
1718
|
-
"item_types": [],
|
|
1719
|
-
"length": 20
|
|
1720
|
-
},
|
|
1721
1842
|
"14514982005979867414": {
|
|
1722
1843
|
"error_kind": "string",
|
|
1723
1844
|
"string": "attempt to bit-shift with overflow"
|
|
@@ -1726,37 +1847,52 @@
|
|
|
1726
1847
|
"error_kind": "string",
|
|
1727
1848
|
"string": "Array index out of bounds"
|
|
1728
1849
|
},
|
|
1729
|
-
"
|
|
1850
|
+
"17618083556256589634": {
|
|
1730
1851
|
"error_kind": "string",
|
|
1731
|
-
"string": "
|
|
1852
|
+
"string": "Initialization hash does not match"
|
|
1732
1853
|
},
|
|
1733
1854
|
"17843811134343075018": {
|
|
1734
1855
|
"error_kind": "string",
|
|
1735
1856
|
"string": "Stack too deep"
|
|
1736
1857
|
},
|
|
1737
|
-
"
|
|
1858
|
+
"2233873454491509486": {
|
|
1738
1859
|
"error_kind": "string",
|
|
1739
|
-
"string": "
|
|
1860
|
+
"string": "Initializer address is not the contract deployer"
|
|
1861
|
+
},
|
|
1862
|
+
"2709101749560550278": {
|
|
1863
|
+
"error_kind": "string",
|
|
1864
|
+
"string": "Cannot serialize point at infinity as bytes."
|
|
1740
1865
|
},
|
|
1741
1866
|
"2920182694213909827": {
|
|
1742
1867
|
"error_kind": "string",
|
|
1743
1868
|
"string": "attempt to subtract with overflow"
|
|
1744
1869
|
},
|
|
1745
|
-
"
|
|
1746
|
-
"error_kind": "
|
|
1747
|
-
"
|
|
1870
|
+
"3151558035338938026": {
|
|
1871
|
+
"error_kind": "fmtstring",
|
|
1872
|
+
"item_types": [
|
|
1873
|
+
{
|
|
1874
|
+
"kind": "integer",
|
|
1875
|
+
"sign": "unsigned",
|
|
1876
|
+
"width": 32
|
|
1877
|
+
}
|
|
1878
|
+
],
|
|
1879
|
+
"length": 75
|
|
1748
1880
|
},
|
|
1749
1881
|
"5019202896831570965": {
|
|
1750
1882
|
"error_kind": "string",
|
|
1751
1883
|
"string": "attempt to add with overflow"
|
|
1752
1884
|
},
|
|
1753
|
-
"
|
|
1885
|
+
"6485997221020871071": {
|
|
1754
1886
|
"error_kind": "string",
|
|
1755
|
-
"string": "
|
|
1887
|
+
"string": "call to assert_max_bit_size"
|
|
1756
1888
|
},
|
|
1757
1889
|
"7233212735005103307": {
|
|
1758
1890
|
"error_kind": "string",
|
|
1759
1891
|
"string": "attempt to multiply with overflow"
|
|
1892
|
+
},
|
|
1893
|
+
"8193989641828211937": {
|
|
1894
|
+
"error_kind": "string",
|
|
1895
|
+
"string": "ciphertext length mismatch"
|
|
1760
1896
|
}
|
|
1761
1897
|
},
|
|
1762
1898
|
"parameters": [
|
|
@@ -2242,9 +2378,28 @@
|
|
|
2242
2378
|
"visibility": "private"
|
|
2243
2379
|
},
|
|
2244
2380
|
{
|
|
2245
|
-
"name": "
|
|
2381
|
+
"name": "signing_pub_key_x",
|
|
2246
2382
|
"type": {
|
|
2247
|
-
"kind": "
|
|
2383
|
+
"kind": "array",
|
|
2384
|
+
"length": 32,
|
|
2385
|
+
"type": {
|
|
2386
|
+
"kind": "integer",
|
|
2387
|
+
"sign": "unsigned",
|
|
2388
|
+
"width": 8
|
|
2389
|
+
}
|
|
2390
|
+
},
|
|
2391
|
+
"visibility": "private"
|
|
2392
|
+
},
|
|
2393
|
+
{
|
|
2394
|
+
"name": "signing_pub_key_y",
|
|
2395
|
+
"type": {
|
|
2396
|
+
"kind": "array",
|
|
2397
|
+
"length": 32,
|
|
2398
|
+
"type": {
|
|
2399
|
+
"kind": "integer",
|
|
2400
|
+
"sign": "unsigned",
|
|
2401
|
+
"width": 8
|
|
2402
|
+
}
|
|
2248
2403
|
},
|
|
2249
2404
|
"visibility": "private"
|
|
2250
2405
|
}
|
|
@@ -3354,152 +3509,34 @@
|
|
|
3354
3509
|
"visibility": "databus"
|
|
3355
3510
|
}
|
|
3356
3511
|
},
|
|
3357
|
-
"bytecode": "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",
|
|
3358
|
-
"debug_symbols": "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",
|
|
3512
|
+
"bytecode": "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NRADqoEdgKTfsRVPcdFdH4l5J+HTZ++waaDVQG9gDpGNd2fh9SC+7Mwwhe3MPH0i+LIzgxoATt1qZyAPdxGuBgjrLgw83JVJDewaxmpzMvaY/l3e3VoxBrwbw2TcX/hkTLj7M0zGplgRjYFibQHOAbDhQOttc8O6TBt2QCvGgAcwbNjdhW9Ywr17hDbs7sI3LLrehQutvBTwftsewPzZbFJ7tOJpUnu2Ygx4T4YmtZfwJkW497LUpJzyrn+ayV4MMn8XYI2Q9d5buMynRrc3g7zaR7isJMz7MODel0lW7mu4XYvOCXfNEHt8b4ZbM8gBZ29g7xgYgT00kGEPDWLaQ4MMD2rRORkIVqRVhljp19vD3+yn/779tR2gLa0toy2rLactry3QdqC2g7QdrO0QbYdqO0zb4doGaxui7QhtR2o7StvR2o7Rdqy247QN1TZM2/HaTtB2oraTtA3XdrK2U7SN0DZS26naTtN2urZR2kZrG6PtDG1jtY3Tdqa2s7Sdre0cbedqG6/tPG0TtE3Udr62C7RdqO0ibRdru0TbpdomaZus7TJtl2u7QtuV2q7SdrW2a7Rdq+06bddru0Hbjdpu0naztlu03aptirbbtN2u7Q5td2q7S9vd2u7Rdq+2qdqmabtP2/3aHtD2oLaHtD2s7RFt07XN0Paotse0Pa7tCW1PantK29PaZmp7Rtuz2p7T9ry2F7S9qO0lbS9re0Xbq9pe0/a6tje0vantLW1va3tH27va3tP2vrYPtH2o7SNtH2v7RNun2j7TNkvb59q+0Paltq+0fa3tG23favtO22xt32v7QduP2n7S9rO2X7T9qm2OtrnaftP2u7Z52uZr+0Pbn9r+0rZA29/aKlprXmproa2ltkptVdqqtdVoq9VWp62Vttba2mhrq62dtnptDdraa+ugbXltHbWtoG1FbStpW1nbKtpW1baattW1raFtTW1raeukbW1tnbWto21dbetp66JtfW0baNtQ20baNta2ibZNtW2mras2R5vS5mrztMW0xbUltPnaktpS2jbXtoW2LbVtpa2btu7attbWQ1tPbdto21bbdtp6aeutrY+27bX11dZP2w7adtS2k7adte2ibVdtu2nrr22Att217aFtT217adtb2z7a9tU2UNsgbftp21/bAdrS2jLastpy2vLaAm0HajtI28HaDtF2qLbD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",
|
|
3513
|
+
"debug_symbols": "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",
|
|
3359
3514
|
"brillig_names": [
|
|
3360
|
-
"
|
|
3515
|
+
"get_contract_instance_internal",
|
|
3361
3516
|
"decompose_hint",
|
|
3362
|
-
"
|
|
3517
|
+
"lte_hint",
|
|
3518
|
+
"notify_created_note_oracle_wrapper",
|
|
3519
|
+
"debug_log_oracle_wrapper",
|
|
3520
|
+
"get_random_bytes",
|
|
3521
|
+
"random",
|
|
3522
|
+
"field_less_than",
|
|
3363
3523
|
"build_msg_block",
|
|
3364
3524
|
"attach_len_to_msg_block",
|
|
3365
|
-
"
|
|
3366
|
-
"
|
|
3525
|
+
"get_app_tag_as_sender",
|
|
3526
|
+
"increment_app_tagging_secret_index_as_sender_wrapper",
|
|
3367
3527
|
"directive_integer_quotient",
|
|
3528
|
+
"directive_invert",
|
|
3368
3529
|
"directive_to_radix"
|
|
3369
3530
|
],
|
|
3370
|
-
"verification_key": "
|
|
3371
|
-
},
|
|
3372
|
-
{
|
|
3373
|
-
"name": "compute_note_hash_and_optionally_a_nullifier",
|
|
3374
|
-
"is_unconstrained": true,
|
|
3375
|
-
"custom_attributes": [],
|
|
3376
|
-
"abi": {
|
|
3377
|
-
"error_types": {
|
|
3378
|
-
"11091894166229312484": {
|
|
3379
|
-
"error_kind": "fmtstring",
|
|
3380
|
-
"item_types": [],
|
|
3381
|
-
"length": 20
|
|
3382
|
-
},
|
|
3383
|
-
"16761564377371454734": {
|
|
3384
|
-
"error_kind": "string",
|
|
3385
|
-
"string": "Array index out of bounds"
|
|
3386
|
-
},
|
|
3387
|
-
"17843811134343075018": {
|
|
3388
|
-
"error_kind": "string",
|
|
3389
|
-
"string": "Stack too deep"
|
|
3390
|
-
},
|
|
3391
|
-
"2920182694213909827": {
|
|
3392
|
-
"error_kind": "string",
|
|
3393
|
-
"string": "attempt to subtract with overflow"
|
|
3394
|
-
},
|
|
3395
|
-
"5019202896831570965": {
|
|
3396
|
-
"error_kind": "string",
|
|
3397
|
-
"string": "attempt to add with overflow"
|
|
3398
|
-
},
|
|
3399
|
-
"8270195893599566439": {
|
|
3400
|
-
"error_kind": "string",
|
|
3401
|
-
"string": "Invalid public keys hint for address"
|
|
3402
|
-
}
|
|
3403
|
-
},
|
|
3404
|
-
"parameters": [
|
|
3405
|
-
{
|
|
3406
|
-
"name": "contract_address",
|
|
3407
|
-
"type": {
|
|
3408
|
-
"fields": [
|
|
3409
|
-
{
|
|
3410
|
-
"name": "inner",
|
|
3411
|
-
"type": {
|
|
3412
|
-
"kind": "field"
|
|
3413
|
-
}
|
|
3414
|
-
}
|
|
3415
|
-
],
|
|
3416
|
-
"kind": "struct",
|
|
3417
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
3418
|
-
},
|
|
3419
|
-
"visibility": "private"
|
|
3420
|
-
},
|
|
3421
|
-
{
|
|
3422
|
-
"name": "nonce",
|
|
3423
|
-
"type": {
|
|
3424
|
-
"kind": "field"
|
|
3425
|
-
},
|
|
3426
|
-
"visibility": "private"
|
|
3427
|
-
},
|
|
3428
|
-
{
|
|
3429
|
-
"name": "storage_slot",
|
|
3430
|
-
"type": {
|
|
3431
|
-
"kind": "field"
|
|
3432
|
-
},
|
|
3433
|
-
"visibility": "private"
|
|
3434
|
-
},
|
|
3435
|
-
{
|
|
3436
|
-
"name": "note_type_id",
|
|
3437
|
-
"type": {
|
|
3438
|
-
"kind": "field"
|
|
3439
|
-
},
|
|
3440
|
-
"visibility": "private"
|
|
3441
|
-
},
|
|
3442
|
-
{
|
|
3443
|
-
"name": "compute_nullifier",
|
|
3444
|
-
"type": {
|
|
3445
|
-
"kind": "boolean"
|
|
3446
|
-
},
|
|
3447
|
-
"visibility": "private"
|
|
3448
|
-
},
|
|
3449
|
-
{
|
|
3450
|
-
"name": "serialized_note",
|
|
3451
|
-
"type": {
|
|
3452
|
-
"kind": "array",
|
|
3453
|
-
"length": 5,
|
|
3454
|
-
"type": {
|
|
3455
|
-
"kind": "field"
|
|
3456
|
-
}
|
|
3457
|
-
},
|
|
3458
|
-
"visibility": "private"
|
|
3459
|
-
}
|
|
3460
|
-
],
|
|
3461
|
-
"return_type": {
|
|
3462
|
-
"abi_type": {
|
|
3463
|
-
"kind": "array",
|
|
3464
|
-
"length": 4,
|
|
3465
|
-
"type": {
|
|
3466
|
-
"kind": "field"
|
|
3467
|
-
}
|
|
3468
|
-
},
|
|
3469
|
-
"visibility": "public"
|
|
3470
|
-
}
|
|
3471
|
-
},
|
|
3472
|
-
"bytecode": "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",
|
|
3473
|
-
"debug_symbols": "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",
|
|
3474
|
-
"brillig_names": [
|
|
3475
|
-
"compute_note_hash_and_optionally_a_nullifier"
|
|
3476
|
-
]
|
|
3477
|
-
},
|
|
3478
|
-
{
|
|
3479
|
-
"name": "sync_notes",
|
|
3480
|
-
"is_unconstrained": true,
|
|
3481
|
-
"custom_attributes": [],
|
|
3482
|
-
"abi": {
|
|
3483
|
-
"error_types": {
|
|
3484
|
-
"17843811134343075018": {
|
|
3485
|
-
"error_kind": "string",
|
|
3486
|
-
"string": "Stack too deep"
|
|
3487
|
-
}
|
|
3488
|
-
},
|
|
3489
|
-
"parameters": [],
|
|
3490
|
-
"return_type": null
|
|
3491
|
-
},
|
|
3492
|
-
"bytecode": "H4sIAAAAAAAA/9VUyw6CMBBseURBOaiJ3kz8gyIYOJJ49x8akKMe8OKNT5eabbqpVRKlJkzSbEs3szNlW0oUKESPvAH9tGnIFdhBDCA6aN/tRgFr9hviQKs7JH/O0iQw+BtQ/5OfWtIvIPktnT+bAM+xVfzYi6w77UaIesKWZ/nPbHpe9fhc/MFnh32k1caghm+uIYci3RuYR4Y8iRlRd9prh/eV5YzJei7w++RVO67va/lrWIeafvmOFV/qrDMe1wmv+YFXVVrypcYv4KBzGnMvbGHe1wvY45yo3mjul/J0vZ0b0gNB8gCVxsvQjgYAAA==",
|
|
3493
|
-
"debug_symbols": "ndLBCoQgEAbgd5lzhzQt7VViCSsLQTTMFpbo3deiXdqli10GR/zGw/wLdLKZh1qZ3k5QVgto2wqvrAndsibQOKW1GurzNaRbQWh/P43CbO3khfNQ4ixLQJounAgKvldaQpnj9ZEAwtEiixYkWtBYgS//4ATxg3BC8q9hbDf0hslvmOKGYfEmu9w+pyn7GIqLH7OG7imcEo2WR7j62bSnrPnXKP9iNzrbym52cgvgKXuhVqhIMA5jw+g3",
|
|
3494
|
-
"brillig_names": [
|
|
3495
|
-
"sync_notes"
|
|
3496
|
-
]
|
|
3531
|
+
"verification_key": "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"
|
|
3497
3532
|
},
|
|
3498
3533
|
{
|
|
3499
|
-
"name": "
|
|
3534
|
+
"name": "verify_private_authwit",
|
|
3500
3535
|
"is_unconstrained": false,
|
|
3501
3536
|
"custom_attributes": [
|
|
3502
|
-
"private"
|
|
3537
|
+
"private",
|
|
3538
|
+
"noinitcheck",
|
|
3539
|
+
"view"
|
|
3503
3540
|
],
|
|
3504
3541
|
"abi": {
|
|
3505
3542
|
"error_types": {
|
|
@@ -3524,17 +3561,21 @@
|
|
|
3524
3561
|
"error_kind": "string",
|
|
3525
3562
|
"string": "Stack too deep"
|
|
3526
3563
|
},
|
|
3564
|
+
"19458536156181958": {
|
|
3565
|
+
"error_kind": "string",
|
|
3566
|
+
"string": "Function verify_private_authwit can only be called statically"
|
|
3567
|
+
},
|
|
3527
3568
|
"2920182694213909827": {
|
|
3528
3569
|
"error_kind": "string",
|
|
3529
3570
|
"string": "attempt to subtract with overflow"
|
|
3530
3571
|
},
|
|
3531
|
-
"
|
|
3572
|
+
"4939791462094160055": {
|
|
3532
3573
|
"error_kind": "string",
|
|
3533
|
-
"string": "
|
|
3574
|
+
"string": "Message not authorized by account"
|
|
3534
3575
|
},
|
|
3535
|
-
"
|
|
3576
|
+
"5019202896831570965": {
|
|
3536
3577
|
"error_kind": "string",
|
|
3537
|
-
"string": "
|
|
3578
|
+
"string": "attempt to add with overflow"
|
|
3538
3579
|
},
|
|
3539
3580
|
"6869395374906889440": {
|
|
3540
3581
|
"error_kind": "string",
|
|
@@ -4028,193 +4069,29 @@
|
|
|
4028
4069
|
"visibility": "private"
|
|
4029
4070
|
},
|
|
4030
4071
|
{
|
|
4031
|
-
"name": "
|
|
4072
|
+
"name": "inner_hash",
|
|
4032
4073
|
"type": {
|
|
4033
|
-
"
|
|
4034
|
-
|
|
4035
|
-
|
|
4036
|
-
|
|
4037
|
-
|
|
4038
|
-
|
|
4039
|
-
|
|
4040
|
-
|
|
4041
|
-
|
|
4042
|
-
|
|
4043
|
-
|
|
4044
|
-
|
|
4045
|
-
|
|
4046
|
-
|
|
4047
|
-
|
|
4048
|
-
|
|
4049
|
-
|
|
4050
|
-
"
|
|
4051
|
-
|
|
4052
|
-
|
|
4053
|
-
|
|
4054
|
-
"kind": "integer",
|
|
4055
|
-
"sign": "unsigned",
|
|
4056
|
-
"width": 32
|
|
4057
|
-
}
|
|
4058
|
-
}
|
|
4059
|
-
],
|
|
4060
|
-
"kind": "struct",
|
|
4061
|
-
"path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
|
|
4062
|
-
}
|
|
4063
|
-
},
|
|
4064
|
-
{
|
|
4065
|
-
"name": "target_address",
|
|
4066
|
-
"type": {
|
|
4067
|
-
"fields": [
|
|
4068
|
-
{
|
|
4069
|
-
"name": "inner",
|
|
4070
|
-
"type": {
|
|
4071
|
-
"kind": "field"
|
|
4072
|
-
}
|
|
4073
|
-
}
|
|
4074
|
-
],
|
|
4075
|
-
"kind": "struct",
|
|
4076
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
4077
|
-
}
|
|
4078
|
-
},
|
|
4079
|
-
{
|
|
4080
|
-
"name": "is_public",
|
|
4081
|
-
"type": {
|
|
4082
|
-
"kind": "boolean"
|
|
4083
|
-
}
|
|
4084
|
-
},
|
|
4085
|
-
{
|
|
4086
|
-
"name": "is_static",
|
|
4087
|
-
"type": {
|
|
4088
|
-
"kind": "boolean"
|
|
4089
|
-
}
|
|
4090
|
-
}
|
|
4091
|
-
],
|
|
4092
|
-
"kind": "struct",
|
|
4093
|
-
"path": "authwit::entrypoint::function_call::FunctionCall"
|
|
4094
|
-
}
|
|
4095
|
-
}
|
|
4096
|
-
},
|
|
4097
|
-
{
|
|
4098
|
-
"name": "nonce",
|
|
4099
|
-
"type": {
|
|
4100
|
-
"kind": "field"
|
|
4101
|
-
}
|
|
4102
|
-
}
|
|
4103
|
-
],
|
|
4104
|
-
"kind": "struct",
|
|
4105
|
-
"path": "authwit::entrypoint::app::AppPayload"
|
|
4106
|
-
},
|
|
4107
|
-
"visibility": "private"
|
|
4108
|
-
},
|
|
4109
|
-
{
|
|
4110
|
-
"name": "fee_payload",
|
|
4111
|
-
"type": {
|
|
4112
|
-
"fields": [
|
|
4113
|
-
{
|
|
4114
|
-
"name": "function_calls",
|
|
4115
|
-
"type": {
|
|
4116
|
-
"kind": "array",
|
|
4117
|
-
"length": 2,
|
|
4118
|
-
"type": {
|
|
4119
|
-
"fields": [
|
|
4120
|
-
{
|
|
4121
|
-
"name": "args_hash",
|
|
4122
|
-
"type": {
|
|
4123
|
-
"kind": "field"
|
|
4124
|
-
}
|
|
4125
|
-
},
|
|
4126
|
-
{
|
|
4127
|
-
"name": "function_selector",
|
|
4128
|
-
"type": {
|
|
4129
|
-
"fields": [
|
|
4130
|
-
{
|
|
4131
|
-
"name": "inner",
|
|
4132
|
-
"type": {
|
|
4133
|
-
"kind": "integer",
|
|
4134
|
-
"sign": "unsigned",
|
|
4135
|
-
"width": 32
|
|
4136
|
-
}
|
|
4137
|
-
}
|
|
4138
|
-
],
|
|
4139
|
-
"kind": "struct",
|
|
4140
|
-
"path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
|
|
4141
|
-
}
|
|
4142
|
-
},
|
|
4143
|
-
{
|
|
4144
|
-
"name": "target_address",
|
|
4145
|
-
"type": {
|
|
4146
|
-
"fields": [
|
|
4147
|
-
{
|
|
4148
|
-
"name": "inner",
|
|
4149
|
-
"type": {
|
|
4150
|
-
"kind": "field"
|
|
4151
|
-
}
|
|
4152
|
-
}
|
|
4153
|
-
],
|
|
4154
|
-
"kind": "struct",
|
|
4155
|
-
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
4156
|
-
}
|
|
4157
|
-
},
|
|
4158
|
-
{
|
|
4159
|
-
"name": "is_public",
|
|
4160
|
-
"type": {
|
|
4161
|
-
"kind": "boolean"
|
|
4162
|
-
}
|
|
4163
|
-
},
|
|
4164
|
-
{
|
|
4165
|
-
"name": "is_static",
|
|
4166
|
-
"type": {
|
|
4167
|
-
"kind": "boolean"
|
|
4168
|
-
}
|
|
4169
|
-
}
|
|
4170
|
-
],
|
|
4171
|
-
"kind": "struct",
|
|
4172
|
-
"path": "authwit::entrypoint::function_call::FunctionCall"
|
|
4173
|
-
}
|
|
4174
|
-
}
|
|
4175
|
-
},
|
|
4176
|
-
{
|
|
4177
|
-
"name": "nonce",
|
|
4178
|
-
"type": {
|
|
4179
|
-
"kind": "field"
|
|
4180
|
-
}
|
|
4181
|
-
},
|
|
4182
|
-
{
|
|
4183
|
-
"name": "is_fee_payer",
|
|
4184
|
-
"type": {
|
|
4185
|
-
"kind": "boolean"
|
|
4186
|
-
}
|
|
4187
|
-
}
|
|
4188
|
-
],
|
|
4189
|
-
"kind": "struct",
|
|
4190
|
-
"path": "authwit::entrypoint::fee::FeePayload"
|
|
4191
|
-
},
|
|
4192
|
-
"visibility": "private"
|
|
4193
|
-
},
|
|
4194
|
-
{
|
|
4195
|
-
"name": "cancellable",
|
|
4196
|
-
"type": {
|
|
4197
|
-
"kind": "boolean"
|
|
4198
|
-
},
|
|
4199
|
-
"visibility": "private"
|
|
4200
|
-
}
|
|
4201
|
-
],
|
|
4202
|
-
"return_type": {
|
|
4203
|
-
"abi_type": {
|
|
4204
|
-
"fields": [
|
|
4205
|
-
{
|
|
4206
|
-
"name": "call_context",
|
|
4207
|
-
"type": {
|
|
4208
|
-
"fields": [
|
|
4209
|
-
{
|
|
4210
|
-
"name": "msg_sender",
|
|
4211
|
-
"type": {
|
|
4212
|
-
"fields": [
|
|
4213
|
-
{
|
|
4214
|
-
"name": "inner",
|
|
4215
|
-
"type": {
|
|
4216
|
-
"kind": "field"
|
|
4217
|
-
}
|
|
4074
|
+
"kind": "field"
|
|
4075
|
+
},
|
|
4076
|
+
"visibility": "private"
|
|
4077
|
+
}
|
|
4078
|
+
],
|
|
4079
|
+
"return_type": {
|
|
4080
|
+
"abi_type": {
|
|
4081
|
+
"fields": [
|
|
4082
|
+
{
|
|
4083
|
+
"name": "call_context",
|
|
4084
|
+
"type": {
|
|
4085
|
+
"fields": [
|
|
4086
|
+
{
|
|
4087
|
+
"name": "msg_sender",
|
|
4088
|
+
"type": {
|
|
4089
|
+
"fields": [
|
|
4090
|
+
{
|
|
4091
|
+
"name": "inner",
|
|
4092
|
+
"type": {
|
|
4093
|
+
"kind": "field"
|
|
4094
|
+
}
|
|
4218
4095
|
}
|
|
4219
4096
|
],
|
|
4220
4097
|
"kind": "struct",
|
|
@@ -5304,74 +5181,197 @@
|
|
|
5304
5181
|
"visibility": "databus"
|
|
5305
5182
|
}
|
|
5306
5183
|
},
|
|
5307
|
-
"bytecode": "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",
|
|
5308
|
-
"debug_symbols": "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lbuvp3J39VSWydVTWSZXT2WZXD2VZXL1VJbJ1VNZJldPZZlcPZVlcvVUlsnVU1kmX0/l5OupnHw9lZOvp3Ly9VROvp7KyddTOfl6KidfT+Xk66mcfD2Vs6+nsq/ePvHV2ye+evvEV2+f+OrtE1+9feKrt0989faJr94+8dXbJ756+8RXb5/46u0TX7194qu3T3z19omv3j7x1dsnvnr7xFdvn/jq7RNfvX3iq7dPfPX2ia/ePvHV2ye+evvEV2+f+OrtE1+9feKrt0989faJr94+8dXbJ756+8RXb5/46u0TX7194qu3T3z19omv3j7x1dsnvnr7xFdvn/jq7RNfvX3iq7dPfPX2ia/ePvHV2ye+evvEV2+f+OrtE1+9feKrt0989faJr94+8dXbJ756+8RXb5/46u0TX7194qu3T3z19omv3j7x1dsnvnr7xFdvn/jq7RNfvX3iq7dPfPX2ia/ePvHV2ye+evvEV2+f+OrtE1+9feKrt0999fapr94+9dXbp756+3Ry9VRWX7196qu3T3319qmv3j711dunvnr71Fdvn/rq7VNfvX3qq7dPffX2qa/ePvXV26e+evvUV2+f+urtU1+9feqrt0999fapr94+9dXbp756+9RXb5/66u1TX7196qu3T3319qmv3j711dunvnr71Fdvn/rq7VNfvX3qq7dPffX2qa/ePvXV26e+evvUV2+f+urtU1+9feqrt0999fapr94+9dXbp756+9RXb5/66u1TX7196qu3T3319qmv3j711dunvnr71Fdvn/rq7VNfvX3qq7dPffX2qa/ePvXV26e+evvUV2+f+urtU1+9feqrt0999fapr94+9dXbp756+9RXb5/66u1TX7196qu3T3319qmv3j711dunvnr71Fdvn/rq7VNfvX3qq7dPffX2qa/ePvXV26e+evvUV2+f+urtU1+9feqrt0999fapr94+9dXbp756+9RXb1/x1dtXfPX2FV+9fcVXb1+ZXD2Vi6/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u0rvnr7iq/evuKrt6/46u2rvnr7qq/evuqrt6/66u2rk6uncvXV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX7191VdvX/XV21d99fZVX719zVdvX/PV29d89fY1X719bXL1VG6+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evuar96+5qu3r/nq7Wu+evua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xAuvIF54BfHCK4gXXkG88ArihVcQL7yCeOEVxAuvIF54BfHCK4gXXkG88ArihVcQL7yCeOEVxAuvIF54BfHCK4gXXkG88ArihVcQL7yCeOEVxAuvIF54BfHCK4gXXkG88ArihVcQL7yCeOEVxAuvIF54BfHCK4gXXkG88ArihVcQL7yCeOEVxAuvIF54BfHCK4gXXkG88ArihVcQL7yCeOEVxAuvIF54BfHCK4gXXkG88ArihVcQL7yBeOENxAtvIF54A/HC26Qgr5zc1EC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF54A/HCG4gX3kC88AbihTcQL7yBeOENxAtvIF64gXjhBuKFG4gXbiBeuE0K8srJTQbihRuIF24gXriBeOEG4oUbiBduIF64gXjhBuKFG4gXbiBeuIF44QbihRuIF24gXriBeOEG4oUbiBduIF64gXjhBuKFG4gXbiBeuIF44QbihRuIF24gXriBeOEG4oUbiBduIF64gXjhBuKFG4gXbiBeuIF44QbihRuIF26788JFr+ql63OvqXSTq47U+y9ef+ovwfVXz/prztNVRy5ptNbmr/Mva23eLbhZaw3k1UBeO8fr7lzv7/SaQF4zyKscymuVq1e7yTe7c72/06vrLLSx12Plpudej5Wbnns9Vm567vVYuemp13qs3PTc67Fy03Ovx8pNz72CctPuXO/v9ArKTRWUmyooN1VQbqqg3NRAuamBclMD5aYGyk27c72/0ysoNzVQbmqg3NRAuamBcpOBcpOBcpOBcpOBctPuXO/v9ArKTQbKTQbKTQbKTQbKTR2UmzooN3VQbuqg3LQ71/s7vYJyUwfl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",
|
|
5184
|
+
"bytecode": "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",
|
|
5185
|
+
"debug_symbols": "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",
|
|
5309
5186
|
"brillig_names": [
|
|
5310
5187
|
"get_note_internal",
|
|
5311
5188
|
"decompose_hint",
|
|
5312
5189
|
"get_auth_witness",
|
|
5313
5190
|
"build_msg_block",
|
|
5314
5191
|
"attach_len_to_msg_block",
|
|
5315
|
-
"
|
|
5316
|
-
"call_private_function_internal",
|
|
5317
|
-
"debug_log_oracle_wrapper",
|
|
5318
|
-
"notify_set_min_revertible_side_effect_counter_oracle_wrapper",
|
|
5192
|
+
"pack_returns_oracle_wrapper",
|
|
5319
5193
|
"directive_invert",
|
|
5320
5194
|
"directive_integer_quotient",
|
|
5321
5195
|
"directive_to_radix"
|
|
5322
5196
|
],
|
|
5323
|
-
"verification_key": "
|
|
5324
|
-
}
|
|
5325
|
-
|
|
5326
|
-
|
|
5327
|
-
|
|
5328
|
-
"
|
|
5329
|
-
|
|
5330
|
-
|
|
5331
|
-
|
|
5332
|
-
|
|
5333
|
-
|
|
5334
|
-
|
|
5335
|
-
|
|
5336
|
-
|
|
5337
|
-
|
|
5338
|
-
|
|
5339
|
-
|
|
5340
|
-
|
|
5197
|
+
"verification_key": "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"
|
|
5198
|
+
},
|
|
5199
|
+
{
|
|
5200
|
+
"name": "compute_note_hash_and_optionally_a_nullifier",
|
|
5201
|
+
"is_unconstrained": true,
|
|
5202
|
+
"custom_attributes": [],
|
|
5203
|
+
"abi": {
|
|
5204
|
+
"error_types": {
|
|
5205
|
+
"11091894166229312484": {
|
|
5206
|
+
"error_kind": "fmtstring",
|
|
5207
|
+
"item_types": [],
|
|
5208
|
+
"length": 20
|
|
5209
|
+
},
|
|
5210
|
+
"16761564377371454734": {
|
|
5211
|
+
"error_kind": "string",
|
|
5212
|
+
"string": "Array index out of bounds"
|
|
5213
|
+
},
|
|
5214
|
+
"17843811134343075018": {
|
|
5215
|
+
"error_kind": "string",
|
|
5216
|
+
"string": "Stack too deep"
|
|
5217
|
+
},
|
|
5218
|
+
"2920182694213909827": {
|
|
5219
|
+
"error_kind": "string",
|
|
5220
|
+
"string": "attempt to subtract with overflow"
|
|
5221
|
+
},
|
|
5222
|
+
"5019202896831570965": {
|
|
5223
|
+
"error_kind": "string",
|
|
5224
|
+
"string": "attempt to add with overflow"
|
|
5225
|
+
},
|
|
5226
|
+
"8270195893599566439": {
|
|
5227
|
+
"error_kind": "string",
|
|
5228
|
+
"string": "Invalid public keys hint for address"
|
|
5229
|
+
}
|
|
5230
|
+
},
|
|
5231
|
+
"parameters": [
|
|
5232
|
+
{
|
|
5233
|
+
"name": "contract_address",
|
|
5234
|
+
"type": {
|
|
5341
5235
|
"fields": [
|
|
5342
5236
|
{
|
|
5343
|
-
"name": "
|
|
5344
|
-
"
|
|
5345
|
-
"
|
|
5346
|
-
{
|
|
5347
|
-
"name": "index",
|
|
5348
|
-
"value": {
|
|
5349
|
-
"kind": "integer",
|
|
5350
|
-
"sign": false,
|
|
5351
|
-
"value": "0000000000000000000000000000000000000000000000000000000000000000"
|
|
5352
|
-
}
|
|
5353
|
-
},
|
|
5354
|
-
{
|
|
5355
|
-
"name": "nullable",
|
|
5356
|
-
"value": {
|
|
5357
|
-
"kind": "boolean",
|
|
5358
|
-
"value": false
|
|
5359
|
-
}
|
|
5360
|
-
}
|
|
5361
|
-
],
|
|
5362
|
-
"kind": "struct"
|
|
5237
|
+
"name": "inner",
|
|
5238
|
+
"type": {
|
|
5239
|
+
"kind": "field"
|
|
5363
5240
|
}
|
|
5364
|
-
}
|
|
5365
|
-
|
|
5366
|
-
|
|
5367
|
-
|
|
5368
|
-
|
|
5369
|
-
|
|
5370
|
-
|
|
5371
|
-
|
|
5372
|
-
|
|
5373
|
-
|
|
5374
|
-
|
|
5241
|
+
}
|
|
5242
|
+
],
|
|
5243
|
+
"kind": "struct",
|
|
5244
|
+
"path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
|
|
5245
|
+
},
|
|
5246
|
+
"visibility": "private"
|
|
5247
|
+
},
|
|
5248
|
+
{
|
|
5249
|
+
"name": "nonce",
|
|
5250
|
+
"type": {
|
|
5251
|
+
"kind": "field"
|
|
5252
|
+
},
|
|
5253
|
+
"visibility": "private"
|
|
5254
|
+
},
|
|
5255
|
+
{
|
|
5256
|
+
"name": "storage_slot",
|
|
5257
|
+
"type": {
|
|
5258
|
+
"kind": "field"
|
|
5259
|
+
},
|
|
5260
|
+
"visibility": "private"
|
|
5261
|
+
},
|
|
5262
|
+
{
|
|
5263
|
+
"name": "note_type_id",
|
|
5264
|
+
"type": {
|
|
5265
|
+
"kind": "field"
|
|
5266
|
+
},
|
|
5267
|
+
"visibility": "private"
|
|
5268
|
+
},
|
|
5269
|
+
{
|
|
5270
|
+
"name": "compute_nullifier",
|
|
5271
|
+
"type": {
|
|
5272
|
+
"kind": "boolean"
|
|
5273
|
+
},
|
|
5274
|
+
"visibility": "private"
|
|
5275
|
+
},
|
|
5276
|
+
{
|
|
5277
|
+
"name": "serialized_note",
|
|
5278
|
+
"type": {
|
|
5279
|
+
"kind": "array",
|
|
5280
|
+
"length": 5,
|
|
5281
|
+
"type": {
|
|
5282
|
+
"kind": "field"
|
|
5283
|
+
}
|
|
5284
|
+
},
|
|
5285
|
+
"visibility": "private"
|
|
5286
|
+
}
|
|
5287
|
+
],
|
|
5288
|
+
"return_type": {
|
|
5289
|
+
"abi_type": {
|
|
5290
|
+
"kind": "array",
|
|
5291
|
+
"length": 4,
|
|
5292
|
+
"type": {
|
|
5293
|
+
"kind": "field"
|
|
5294
|
+
}
|
|
5295
|
+
},
|
|
5296
|
+
"visibility": "public"
|
|
5297
|
+
}
|
|
5298
|
+
},
|
|
5299
|
+
"bytecode": "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",
|
|
5300
|
+
"debug_symbols": "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",
|
|
5301
|
+
"brillig_names": [
|
|
5302
|
+
"compute_note_hash_and_optionally_a_nullifier"
|
|
5303
|
+
]
|
|
5304
|
+
},
|
|
5305
|
+
{
|
|
5306
|
+
"name": "sync_notes",
|
|
5307
|
+
"is_unconstrained": true,
|
|
5308
|
+
"custom_attributes": [],
|
|
5309
|
+
"abi": {
|
|
5310
|
+
"error_types": {
|
|
5311
|
+
"17843811134343075018": {
|
|
5312
|
+
"error_kind": "string",
|
|
5313
|
+
"string": "Stack too deep"
|
|
5314
|
+
}
|
|
5315
|
+
},
|
|
5316
|
+
"parameters": [],
|
|
5317
|
+
"return_type": null
|
|
5318
|
+
},
|
|
5319
|
+
"bytecode": "H4sIAAAAAAAA/9VUyw6CMBBseURBOaiJ3kz8gyIYOJJ49x8akKMe8OKNT5eabbqpVRKlJkzSbEs3szNlW0oUKESPvAH9tGnIFdhBDCA6aN/tRgFr9hviQKs7JH/O0iQw+BtQ/5OfWtIvIPktnT+bAM+xVfzYi6w77UaIesKWZ/nPbHpe9fhc/MFnh32k1caghm+uIYci3RuYR4Y8iRlRd9prh/eV5YzJei7w++RVO67va/lrWIeafvmOFV/qrDMe1wmv+YFXVVrypcYv4KBzGnMvbGHe1wvY45yo3mjul/J0vZ0b0gNB8gCVxsvQjgYAAA==",
|
|
5320
|
+
"debug_symbols": "ndLBCoQgFAXQf3nrFmla2a/EEFYWgmiYDQzRv49FMzRDG908vOJ5bu4KvWiXsZF6MDNU9QrKdNxJo31atwRaK5WSY3O9hnQfCB3v54nrPc6OWwcVzrIEhO79iSDvB6kEVDneHgkgHCyyYEGCBQ0V+PYPRhA7CSMk/xpEyIFoDMpjUBGDygiU3VaA0bT8IIqLX7T5+ORW8laJs2LDortL49xrEn/lm6zpRL9Ysdfw0kA/a1QkGPu1fvUb",
|
|
5321
|
+
"brillig_names": [
|
|
5322
|
+
"sync_notes"
|
|
5323
|
+
]
|
|
5324
|
+
}
|
|
5325
|
+
],
|
|
5326
|
+
"outputs": {
|
|
5327
|
+
"globals": {
|
|
5328
|
+
"notes": [
|
|
5329
|
+
{
|
|
5330
|
+
"fields": [
|
|
5331
|
+
{
|
|
5332
|
+
"kind": "integer",
|
|
5333
|
+
"sign": false,
|
|
5334
|
+
"value": "0000000000000000000000000000000000000000000000000000000004c141a0"
|
|
5335
|
+
},
|
|
5336
|
+
{
|
|
5337
|
+
"kind": "string",
|
|
5338
|
+
"value": "EcdsaPublicKeyNote"
|
|
5339
|
+
},
|
|
5340
|
+
{
|
|
5341
|
+
"fields": [
|
|
5342
|
+
{
|
|
5343
|
+
"name": "x",
|
|
5344
|
+
"value": {
|
|
5345
|
+
"fields": [
|
|
5346
|
+
{
|
|
5347
|
+
"name": "index",
|
|
5348
|
+
"value": {
|
|
5349
|
+
"kind": "integer",
|
|
5350
|
+
"sign": false,
|
|
5351
|
+
"value": "0000000000000000000000000000000000000000000000000000000000000000"
|
|
5352
|
+
}
|
|
5353
|
+
},
|
|
5354
|
+
{
|
|
5355
|
+
"name": "nullable",
|
|
5356
|
+
"value": {
|
|
5357
|
+
"kind": "boolean",
|
|
5358
|
+
"value": false
|
|
5359
|
+
}
|
|
5360
|
+
}
|
|
5361
|
+
],
|
|
5362
|
+
"kind": "struct"
|
|
5363
|
+
}
|
|
5364
|
+
},
|
|
5365
|
+
{
|
|
5366
|
+
"name": "y",
|
|
5367
|
+
"value": {
|
|
5368
|
+
"fields": [
|
|
5369
|
+
{
|
|
5370
|
+
"name": "index",
|
|
5371
|
+
"value": {
|
|
5372
|
+
"kind": "integer",
|
|
5373
|
+
"sign": false,
|
|
5374
|
+
"value": "0000000000000000000000000000000000000000000000000000000000000020"
|
|
5375
5375
|
}
|
|
5376
5376
|
},
|
|
5377
5377
|
{
|
|
@@ -5456,6 +5456,72 @@
|
|
|
5456
5456
|
},
|
|
5457
5457
|
"structs": {
|
|
5458
5458
|
"functions": [
|
|
5459
|
+
{
|
|
5460
|
+
"fields": [
|
|
5461
|
+
{
|
|
5462
|
+
"name": "parameters",
|
|
5463
|
+
"type": {
|
|
5464
|
+
"fields": [
|
|
5465
|
+
{
|
|
5466
|
+
"name": "signing_pub_key_x",
|
|
5467
|
+
"type": {
|
|
5468
|
+
"kind": "array",
|
|
5469
|
+
"length": 32,
|
|
5470
|
+
"type": {
|
|
5471
|
+
"kind": "integer",
|
|
5472
|
+
"sign": "unsigned",
|
|
5473
|
+
"width": 8
|
|
5474
|
+
}
|
|
5475
|
+
}
|
|
5476
|
+
},
|
|
5477
|
+
{
|
|
5478
|
+
"name": "signing_pub_key_y",
|
|
5479
|
+
"type": {
|
|
5480
|
+
"kind": "array",
|
|
5481
|
+
"length": 32,
|
|
5482
|
+
"type": {
|
|
5483
|
+
"kind": "integer",
|
|
5484
|
+
"sign": "unsigned",
|
|
5485
|
+
"width": 8
|
|
5486
|
+
}
|
|
5487
|
+
}
|
|
5488
|
+
}
|
|
5489
|
+
],
|
|
5490
|
+
"kind": "struct",
|
|
5491
|
+
"path": "EcdsaKAccount::constructor_parameters"
|
|
5492
|
+
}
|
|
5493
|
+
}
|
|
5494
|
+
],
|
|
5495
|
+
"kind": "struct",
|
|
5496
|
+
"path": "EcdsaKAccount::constructor_abi"
|
|
5497
|
+
},
|
|
5498
|
+
{
|
|
5499
|
+
"fields": [
|
|
5500
|
+
{
|
|
5501
|
+
"name": "parameters",
|
|
5502
|
+
"type": {
|
|
5503
|
+
"fields": [
|
|
5504
|
+
{
|
|
5505
|
+
"name": "inner_hash",
|
|
5506
|
+
"type": {
|
|
5507
|
+
"kind": "field"
|
|
5508
|
+
}
|
|
5509
|
+
}
|
|
5510
|
+
],
|
|
5511
|
+
"kind": "struct",
|
|
5512
|
+
"path": "EcdsaKAccount::verify_private_authwit_parameters"
|
|
5513
|
+
}
|
|
5514
|
+
},
|
|
5515
|
+
{
|
|
5516
|
+
"name": "return_type",
|
|
5517
|
+
"type": {
|
|
5518
|
+
"kind": "field"
|
|
5519
|
+
}
|
|
5520
|
+
}
|
|
5521
|
+
],
|
|
5522
|
+
"kind": "struct",
|
|
5523
|
+
"path": "EcdsaKAccount::verify_private_authwit_abi"
|
|
5524
|
+
},
|
|
5459
5525
|
{
|
|
5460
5526
|
"fields": [
|
|
5461
5527
|
{
|
|
@@ -5638,144 +5704,90 @@
|
|
|
5638
5704
|
],
|
|
5639
5705
|
"kind": "struct",
|
|
5640
5706
|
"path": "EcdsaKAccount::entrypoint_abi"
|
|
5641
|
-
},
|
|
5642
|
-
{
|
|
5643
|
-
"fields": [
|
|
5644
|
-
{
|
|
5645
|
-
"name": "parameters",
|
|
5646
|
-
"type": {
|
|
5647
|
-
"fields": [
|
|
5648
|
-
{
|
|
5649
|
-
"name": "signing_pub_key_x",
|
|
5650
|
-
"type": {
|
|
5651
|
-
"kind": "array",
|
|
5652
|
-
"length": 32,
|
|
5653
|
-
"type": {
|
|
5654
|
-
"kind": "integer",
|
|
5655
|
-
"sign": "unsigned",
|
|
5656
|
-
"width": 8
|
|
5657
|
-
}
|
|
5658
|
-
}
|
|
5659
|
-
},
|
|
5660
|
-
{
|
|
5661
|
-
"name": "signing_pub_key_y",
|
|
5662
|
-
"type": {
|
|
5663
|
-
"kind": "array",
|
|
5664
|
-
"length": 32,
|
|
5665
|
-
"type": {
|
|
5666
|
-
"kind": "integer",
|
|
5667
|
-
"sign": "unsigned",
|
|
5668
|
-
"width": 8
|
|
5669
|
-
}
|
|
5670
|
-
}
|
|
5671
|
-
}
|
|
5672
|
-
],
|
|
5673
|
-
"kind": "struct",
|
|
5674
|
-
"path": "EcdsaKAccount::constructor_parameters"
|
|
5675
|
-
}
|
|
5676
|
-
}
|
|
5677
|
-
],
|
|
5678
|
-
"kind": "struct",
|
|
5679
|
-
"path": "EcdsaKAccount::constructor_abi"
|
|
5680
|
-
},
|
|
5681
|
-
{
|
|
5682
|
-
"fields": [
|
|
5683
|
-
{
|
|
5684
|
-
"name": "parameters",
|
|
5685
|
-
"type": {
|
|
5686
|
-
"fields": [
|
|
5687
|
-
{
|
|
5688
|
-
"name": "inner_hash",
|
|
5689
|
-
"type": {
|
|
5690
|
-
"kind": "field"
|
|
5691
|
-
}
|
|
5692
|
-
}
|
|
5693
|
-
],
|
|
5694
|
-
"kind": "struct",
|
|
5695
|
-
"path": "EcdsaKAccount::verify_private_authwit_parameters"
|
|
5696
|
-
}
|
|
5697
|
-
},
|
|
5698
|
-
{
|
|
5699
|
-
"name": "return_type",
|
|
5700
|
-
"type": {
|
|
5701
|
-
"kind": "field"
|
|
5702
|
-
}
|
|
5703
|
-
}
|
|
5704
|
-
],
|
|
5705
|
-
"kind": "struct",
|
|
5706
|
-
"path": "EcdsaKAccount::verify_private_authwit_abi"
|
|
5707
5707
|
}
|
|
5708
5708
|
]
|
|
5709
5709
|
}
|
|
5710
5710
|
},
|
|
5711
5711
|
"file_map": {
|
|
5712
|
-
"
|
|
5713
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5714
|
-
"source": "use dep::protocol_types::{\n
|
|
5712
|
+
"100": {
|
|
5713
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/initializer.nr",
|
|
5714
|
+
"source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::GENERATOR_INDEX__CONSTRUCTOR, hash::poseidon2_hash_with_separator,\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext},\n oracle::get_contract_instance::{\n get_contract_instance, get_contract_instance_deployer_avm,\n get_contract_instance_initialization_hash_avm,\n },\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let deployer = get_contract_instance_deployer_avm(address).unwrap();\n let initialization_hash = get_contract_instance_initialization_hash_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (deployer.is_zero()) | (deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\npub fn compute_initialization_hash(\n init_selector: FunctionSelector,\n init_args_hash: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR,\n )\n}\n"
|
|
5715
5715
|
},
|
|
5716
|
-
"
|
|
5716
|
+
"102": {
|
|
5717
5717
|
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr",
|
|
5718
5718
|
"source": "use crate::{\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX},\n oracle::{\n key_validation_request::get_key_validation_request,\n keys::get_public_keys_and_partial_address,\n },\n};\nuse dep::protocol_types::{address::AztecAddress, public_keys::PublicKeys};\n\nmod test;\n\npub unconstrained fn get_nsk_app(npk_m_hash: Field) -> Field {\n get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// A helper function that gets app-siloed outgoing viewing key for a given `ovpk_m_hash`. This function is used\n// in unconstrained contexts only - when computing unconstrained note logs. The safe alternative is `request_ovsk_app`\n// function defined on `PrivateContext`.\npub unconstrained fn get_ovsk_app(ovpk_m_hash: Field) -> Field {\n get_key_validation_request(ovpk_m_hash, OUTGOING_INDEX).sk_app\n}\n\n// Returns all public keys for a given account, applying proper constraints to the context. We read all\n// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any\n// read keys that are not required by the caller can simply be discarded.\npub fn get_public_keys(account: AztecAddress) -> PublicKeys {\n // Public keys are constrained by showing their inclusion in the address's preimage.\n let (public_keys, partial_address) = unsafe { get_public_keys_and_partial_address(account) };\n assert_eq(\n account,\n AztecAddress::compute(public_keys, partial_address),\n \"Invalid public keys hint for address\",\n );\n\n public_keys\n}\n"
|
|
5719
5719
|
},
|
|
5720
|
-
"
|
|
5720
|
+
"105": {
|
|
5721
5721
|
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/keys/secret_derivation.nr",
|
|
5722
5722
|
"source": "use crate::utils::point::point_to_bytes;\nuse dep::protocol_types::{constants::GENERATOR_INDEX__SYMMETRIC_KEY, point::Point, scalar::Scalar};\nuse std::{embedded_curve_ops::multi_scalar_mul, hash::sha256};\n\npub fn derive_aes_secret(secret: Scalar, point: Point) -> [u8; 32] {\n let shared_secret = point_to_bytes(multi_scalar_mul([point], [secret]));\n\n let mut shared_secret_bytes_with_separator: [u8; 33] = std::mem::zeroed();\n for i in 0..shared_secret.len() {\n shared_secret_bytes_with_separator[i] = shared_secret[i];\n }\n\n shared_secret_bytes_with_separator[32] = GENERATOR_INDEX__SYMMETRIC_KEY;\n\n sha256(shared_secret_bytes_with_separator)\n}\n\n#[test]\nunconstrained fn test_derive_aes_secret_matches_noir() {\n // Value taken from \"derive shared secret\" test in encrypt_buffer.test.ts\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n };\n let point = Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false,\n };\n\n let key = derive_aes_secret(secret, point);\n\n // The following value was generated by `encrypt_buffer.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let key_from_typescript = [\n 251, 232, 177, 34, 2, 174, 35, 92, 165, 118, 168, 3, 153, 140, 46, 210, 203, 154, 184, 158,\n 236, 33, 95, 77, 93, 120, 72, 88, 190, 209, 64, 159,\n ];\n assert_eq(key, key_from_typescript);\n}\n"
|
|
5723
5723
|
},
|
|
5724
|
-
"
|
|
5725
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/note/
|
|
5726
|
-
"source": "use crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, NoteStatus, PropertySelector, Select, Sort, SortOrder},\n note_interface::{NoteInterface, NullifiableNote},\n note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request,\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\nuse dep::protocol_types::constants::{\n GET_NOTES_ORACLE_RETURN_LENGTH, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,\n};\n\npub use crate::note::constants::MAX_NOTES_PER_PAGE;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector,\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32>(context: PrivateContext, storage_slot: Field, note: Note)\nwhere\n Note: NoteInterface<N>,\n{\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>,\n) {\n for i in 0..selects.len() {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field =\n extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()),\n \"Mismatch return note field.\",\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>,\n) {\n for i in 0..sorts.len() {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field,\n) -> (Note, Field)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note = unsafe { get_note_internal(storage_slot) };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n ) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>)\nwhere\n Note: NoteInterface<N> + NullifiableNote + Eq,\n{\n let opt_notes = unsafe { get_notes_internal(storage_slot, options) };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS,\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n ) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>)\nwhere\n Note: NoteInterface<N> + NullifiableNote + Eq,\n{\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::array::collapse(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> =\n BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32>(storage_slot: Field) -> Note\nwhere\n Note: NoteInterface<N>,\n{\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length,\n )[0]\n .expect(f\"Failed to get a note\") // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL]\nwhere\n Note: NoteInterface<N>,\n{\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) =\n flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length,\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\npub unconstrained fn view_notes<Note, let N: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N>,\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE>\nwhere\n Note: NoteInterface<N>,\n{\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) =\n flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length,\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>,\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len() {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len() {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values,\n select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order,\n )\n}\n"
|
|
5724
|
+
"117": {
|
|
5725
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr",
|
|
5726
|
+
"source": "use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_emission::NoteEmission,\n note_header::NoteHeader,\n note_interface::{NoteInterface, NullifiableNote},\n utils::{compute_note_hash_for_nullify_internal, compute_note_hash_for_read_request},\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note,\n) -> NoteEmission<Note>\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n let serialized_note = Note::serialize_content(*note);\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter,\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, let N: u32>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note,\n)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, let N: u32>(context: &mut PrivateContext, note: Note)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, let N: u32>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field,\n)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_nullify =\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n notify_nullified_note(nullifier, notification_note_hash, nullifier_counter);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n"
|
|
5727
5727
|
},
|
|
5728
|
-
"
|
|
5728
|
+
"119": {
|
|
5729
5729
|
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/note/note_emission.nr",
|
|
5730
5730
|
"source": "/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\npub struct NoteEmission<Note> {\n pub note: Note,\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting\n * a change note in a token's transfer function only when there is \"change\" left).\n */\npub struct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"
|
|
5731
5731
|
},
|
|
5732
|
-
"
|
|
5733
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/note/
|
|
5734
|
-
"source": "use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_emission::NoteEmission,\n note_header::NoteHeader,\n note_interface::{NoteInterface, NullifiableNote},\n utils::{compute_note_hash_for_nullify_internal, compute_note_hash_for_read_request},\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note,\n) -> NoteEmission<Note>\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n let serialized_note = Note::serialize_content(*note);\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter,\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, let N: u32>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note,\n)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, let N: u32>(context: &mut PrivateContext, note: Note)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, let N: u32>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field,\n)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_nullify =\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n notify_nullified_note(nullifier, notification_note_hash, nullifier_counter);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n"
|
|
5732
|
+
"121": {
|
|
5733
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr",
|
|
5734
|
+
"source": "use crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, NoteStatus, PropertySelector, Select, Sort, SortOrder},\n note_interface::{NoteInterface, NullifiableNote},\n note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request,\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\nuse dep::protocol_types::constants::{\n GET_NOTES_ORACLE_RETURN_LENGTH, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,\n};\n\npub use crate::note::constants::MAX_NOTES_PER_PAGE;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector,\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32>(context: PrivateContext, storage_slot: Field, note: Note)\nwhere\n Note: NoteInterface<N>,\n{\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>,\n) {\n for i in 0..selects.len() {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field =\n extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()),\n \"Mismatch return note field.\",\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>,\n) {\n for i in 0..sorts.len() {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field,\n) -> (Note, Field)\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note = unsafe { get_note_internal(storage_slot) };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n ) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>)\nwhere\n Note: NoteInterface<N> + NullifiableNote + Eq,\n{\n let opt_notes = unsafe { get_notes_internal(storage_slot, options) };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS,\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n ) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>)\nwhere\n Note: NoteInterface<N> + NullifiableNote + Eq,\n{\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::array::collapse(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> =\n BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32>(storage_slot: Field) -> Note\nwhere\n Note: NoteInterface<N>,\n{\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length,\n )[0]\n .expect(f\"Failed to get a note\") // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>,\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL]\nwhere\n Note: NoteInterface<N>,\n{\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) =\n flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length,\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\npub unconstrained fn view_notes<Note, let N: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N>,\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE>\nwhere\n Note: NoteInterface<N>,\n{\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) =\n flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length,\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>,\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len() {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len() {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values,\n select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order,\n )\n}\n"
|
|
5735
5735
|
},
|
|
5736
|
-
"
|
|
5736
|
+
"128": {
|
|
5737
5737
|
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/note/utils.nr",
|
|
5738
5738
|
"source": "use crate::{\n context::PrivateContext,\n note::{note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote}},\n utils::array,\n};\n\nuse dep::protocol_types::hash::{\n compute_siloed_note_hash, compute_siloed_nullifier as compute_siloed_nullifier_from_preimage,\n compute_unique_note_hash,\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32>(\n note_with_header: Note,\n context: &mut PrivateContext,\n) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32>(note: Note) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash = note.compute_note_hash();\n let header = note.get_header();\n let nonce = header.nonce;\n let counter = header.note_hash_counter;\n\n // If same tx note, read request always uses the normal note hash\n if counter != 0 {\n note_hash\n } else {\n // If the note comes from a different tx, we need to compute the note hash that reached the tree\n compute_unique_note_hash(\n nonce,\n compute_siloed_note_hash(header.contract_address, note_hash),\n )\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32>(\n note: Note,\n note_hash_for_read_request: Field,\n) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let header = note.get_header();\n\n if (header.note_hash_counter != 0) & (header.nonce != 0) {\n // Non-revertible note, nullified by a revertible nullifier, we need to nullify the note hash that will reach the tree\n let siloed_note_hash =\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request);\n\n compute_unique_note_hash(header.nonce, siloed_note_hash)\n } else {\n note_hash_for_read_request\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in\n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in\n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the\n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the\n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from\n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32>(note: Note) -> Field\nwhere\n Note: NoteInterface<N> + NullifiableNote,\n{\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub unconstrained fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S],\n) -> [Field; 4]\nwhere\n T: NoteInterface<N> + NullifiableNote,\n{\n let mut note = deserialize_content(array::subarray(serialized_note, 0));\n note.set_header(note_header);\n\n let note_hash = note.compute_note_hash();\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, note_hash);\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, siloed_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"
|
|
5739
5739
|
},
|
|
5740
|
-
"
|
|
5741
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5742
|
-
"source": "use
|
|
5740
|
+
"131": {
|
|
5741
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr",
|
|
5742
|
+
"source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader,\n};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n) -> [Field; 2] {}\n\npub unconstrained fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"
|
|
5743
5743
|
},
|
|
5744
|
-
"
|
|
5745
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5746
|
-
"source": "
|
|
5744
|
+
"132": {
|
|
5745
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr",
|
|
5746
|
+
"source": "use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n) -> Field {}\n\npub unconstrained fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n) -> Field {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n )\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n) -> Field {}\n\npub unconstrained fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n) -> Field {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n )\n}\n\npub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n unsafe { notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter) };\n}\n\npub unconstrained fn notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n"
|
|
5747
5747
|
},
|
|
5748
|
-
"
|
|
5749
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5750
|
-
"source": "use dep::protocol_types::
|
|
5748
|
+
"134": {
|
|
5749
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr",
|
|
5750
|
+
"source": "use dep::protocol_types::{\n address::AztecAddress, constants::CONTRACT_INSTANCE_LENGTH, contract_class_id::ContractClassId,\n contract_instance::ContractInstance,\n};\n\n// NOTE: this is for use in private only\n#[oracle(getContractInstance)]\nunconstrained fn get_contract_instance_oracle(\n _address: AztecAddress,\n) -> [Field; CONTRACT_INSTANCE_LENGTH] {}\n\n// NOTE: this is for use in private only\nunconstrained fn get_contract_instance_internal(\n address: AztecAddress,\n) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n get_contract_instance_oracle(address)\n}\n\n// NOTE: this is for use in private only\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n let instance =\n unsafe { ContractInstance::deserialize(get_contract_instance_internal(address)) };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\n instance\n}\n\n// These oracles each return a ContractInstance member\n// plus a boolean indicating whether the instance was found.\n#[oracle(avmOpcodeGetContractInstanceDeployer)]\nunconstrained fn get_contract_instance_deployer_oracle_avm(\n _address: AztecAddress,\n) -> (Field, bool) {}\n#[oracle(avmOpcodeGetContractInstanceClassId)]\nunconstrained fn get_contract_instance_class_id_oracle_avm(\n _address: AztecAddress,\n) -> (Field, bool) {}\n#[oracle(avmOpcodeGetContractInstanceInitializationHash)]\nunconstrained fn get_contract_instance_initialization_hash_oracle_avm(\n _address: AztecAddress,\n) -> (Field, bool) {}\n\npub unconstrained fn get_contract_instance_deployer_internal_avm(\n address: AztecAddress,\n) -> (Field, bool) {\n get_contract_instance_deployer_oracle_avm(address)\n}\npub unconstrained fn get_contract_instance_class_id_internal_avm(\n address: AztecAddress,\n) -> (Field, bool) {\n get_contract_instance_class_id_oracle_avm(address)\n}\npub unconstrained fn get_contract_instance_initialization_hash_internal_avm(\n address: AztecAddress,\n) -> (Field, bool) {\n get_contract_instance_initialization_hash_oracle_avm(address)\n}\n\npub fn get_contract_instance_deployer_avm(address: AztecAddress) -> Option<AztecAddress> {\n let (member, exists) = get_contract_instance_deployer_internal_avm(address);\n if exists {\n Option::some(AztecAddress::from_field(member))\n } else {\n Option::none()\n }\n}\npub fn get_contract_instance_class_id_avm(address: AztecAddress) -> Option<ContractClassId> {\n let (member, exists) = get_contract_instance_class_id_internal_avm(address);\n if exists {\n Option::some(ContractClassId::from_field(member))\n } else {\n Option::none()\n }\n}\npub fn get_contract_instance_initialization_hash_avm(address: AztecAddress) -> Option<Field> {\n let (member, exists) = get_contract_instance_initialization_hash_internal_avm(address);\n if exists {\n Option::some(member)\n } else {\n Option::none()\n }\n}\n"
|
|
5751
5751
|
},
|
|
5752
|
-
"
|
|
5753
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5754
|
-
"source": "use dep::protocol_types::
|
|
5752
|
+
"140": {
|
|
5753
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr",
|
|
5754
|
+
"source": "use dep::protocol_types::abis::validation_requests::{\n key_validation_request::KEY_VALIDATION_REQUEST_LENGTH, KeyValidationRequest,\n};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field,\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field,\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\npub unconstrained fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field,\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"
|
|
5755
5755
|
},
|
|
5756
|
-
"
|
|
5757
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5758
|
-
"source": "use dep::protocol_types::debug_log::debug_log_format;\n\nuse crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n hash::{ArgsHasher, hash_args_array},\n keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, sk_generators},\n messaging::process_l1_to_l2_message,\n oracle::{\n arguments,\n block_header::get_block_header_at,\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal,\n },\n key_validation_request::get_key_validation_request,\n returns::pack_returns,\n },\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext,\n function_selector::FunctionSelector,\n log::Log,\n log_hash::LogHash,\n max_block_number::MaxBlockNumber,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::PrivateLogData,\n public_call_request::PublicCallRequest,\n read_request::ReadRequest,\n side_effect::Counted,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n },\n address::{AztecAddress, EthAddress},\n block_header::BlockHeader,\n constants::{\n MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL,\n PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DISPATCH_SELECTOR,\n },\n messaging::l2_to_l1_message::L2ToL1Message,\n traits::Empty,\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n pub inputs: PrivateContextInputs,\n pub side_effect_counter: u32,\n\n pub min_revertible_side_effect_counter: u32,\n pub is_fee_payer: bool,\n\n pub args_hash: Field,\n pub return_hash: Field,\n\n pub max_block_number: MaxBlockNumber,\n\n pub note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n pub nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n pub note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n pub nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n pub public_teardown_call_request: PublicCallRequest,\n pub l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub historical_header: BlockHeader,\n\n pub private_logs: BoundedVec<PrivateLogData, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<LogHash, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n pub fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n\n // WARNING(https://github.com/AztecProtocol/aztec-packages/issues/10558): if you delete this debug_log_format line, some tests fail.\n debug_log_format(\n \"Context.note_hashes, after pushing new note hash: {0}\",\n self.note_hashes.storage().map(|nh: NoteHash| nh.value),\n );\n }\n\n pub fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(\n Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() },\n );\n }\n\n pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(\n Nullifier {\n value: nullifier,\n note_hash: nullified_note_hash,\n counter: self.next_counter(),\n },\n );\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_block_header(self) -> BlockHeader {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_block_header_at(self, block_number: u32) -> BlockHeader {\n get_block_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage(),\n nullifier_read_requests: self.nullifier_read_requests.storage(),\n key_validation_requests_and_generators: self\n .key_validation_requests_and_generators\n .storage(),\n note_hashes: self.note_hashes.storage(),\n nullifiers: self.nullifiers.storage(),\n private_call_requests: self.private_call_requests.storage(),\n public_call_requests: self.public_call_requests.storage(),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage(),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: self.private_logs.storage(),\n contract_class_logs_hashes: self.contract_class_logs_hashes.storage(),\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context,\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\n \"Setting {0} as fee payer\",\n [self.this_address().to_field()],\n );\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number =\n MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request =\n self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale\n // Typically we'd validate keys by showing that they are the preimage of `pk_m_hash`, but that'd require\n // the oracle returning the master secret keys, which could cause malicious contracts to leak it or learn\n // about secrets from other contracts. We therefore silo secret keys, and rely on the private kernel to\n // validate that we siloed secret key corresponds to correct siloing of the master secret key that hashes\n // to `pk_m_hash`.\n let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n assert(request.pk_m.hash() == pk_m_hash);\n\n self.key_validation_requests_and_generators.push(\n KeyValidationRequestAndGenerator {\n request,\n sk_app_generator: sk_generators[key_index],\n },\n );\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field,\n ) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret,\n leaf_index,\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS]) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter: 0, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn emit_raw_note_log(\n &mut self,\n log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS],\n note_hash_counter: u32,\n ) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n\n // The oracle simulates the private call and returns the value of the side effects counter after execution of\n // the call (which means that end_side_effect_counter - start_side_effect_counter is the number of side effects\n // that took place), along with the hash of the return values. We validate these by requesting a private kernel\n // iteration in which the return values are constrained to hash to `returns_hash` and the side effects counter\n // to increment from start to end.\n let (end_side_effect_counter, returns_hash) = unsafe {\n call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n )\n };\n\n self.private_call_requests.push(\n PrivateCallRequest {\n call_context: CallContext {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n },\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter,\n },\n );\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n self.side_effect_counter = end_side_effect_counter + 1;\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n let call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.set_public_teardown_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n self.public_teardown_call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: BlockHeader::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n}\n"
|
|
5756
|
+
"141": {
|
|
5757
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/keys.nr",
|
|
5758
|
+
"source": "use dep::protocol_types::{\n address::{AztecAddress, PartialAddress},\n point::Point,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\npub unconstrained fn get_public_keys_and_partial_address(\n address: AztecAddress,\n) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM {\n inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool },\n },\n ovpk_m: OvpkM {\n inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool },\n },\n tpk_m: TpkM {\n inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool },\n },\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"
|
|
5759
|
+
},
|
|
5760
|
+
"144": {
|
|
5761
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/notes.nr",
|
|
5762
|
+
"source": "use crate::{note::{note_header::NoteHeader, note_interface::NoteInterface}, utils::array};\n\nuse dep::protocol_types::{\n address::AztecAddress,\n indexed_tagging_secret::{INDEXED_TAGGING_SECRET_LENGTH, IndexedTaggingSecret},\n};\n\n/// Notifies the simulator that a note has been created, so that it can be returned in future read requests in the same\n/// transaction. This note should only be added to the non-volatile database if found in an actual block.\npub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32,\n) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n notify_created_note_oracle_wrapper(\n storage_slot,\n note_type_id,\n serialized_note,\n note_hash,\n counter,\n )\n };\n}\n\n/// Notifies the simulator that a note has been nullified, so that it is no longer returned in future read requests in\n/// the same transaction. This note should only be removed to the non-volatile database if its nullifier is found in an\n/// actual block.\npub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe { notify_nullified_note_oracle_wrapper(nullifier, note_hash, counter) };\n}\n\nunconstrained fn notify_created_note_oracle_wrapper<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32,\n) {\n let _ = notify_created_note_oracle(\n storage_slot,\n note_type_id,\n serialized_note,\n note_hash,\n counter,\n );\n}\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32,\n) -> Field {}\n\nunconstrained fn notify_nullified_note_oracle_wrapper(\n nullifier: Field,\n note_hash: Field,\n counter: u32,\n) {\n let _ = notify_nullified_note_oracle(nullifier, note_hash, counter);\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(\n _nullifier: Field,\n _note_hash: Field,\n _counter: u32,\n) -> Field {}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S],\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S],\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields,\n )\n}\n\npub unconstrained fn get_notes<Note, let N: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N], // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S]\nwhere\n Note: NoteInterface<N>,\n{\n sync_notes_oracle_wrapper();\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields,\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let note_content = array::subarray(fields, read_offset + 2);\n\n let mut note = Note::deserialize_content(note_content);\n note.set_header(NoteHeader { contract_address, nonce, storage_slot, note_hash_counter });\n\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n/// Returns true if the nullifier exists. Note that a `true` value can be constrained by proving existence of the\n/// nullifier, but a `false` value should not be relied upon since other transactions may emit this nullifier before the\n/// current transaction is included in a block. While this might seem of little use at first, certain design patterns\n/// benefit from this abstraction (see e.g. `PrivateMutable`).\npub unconstrained fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n/// Same as `get_indexed_tagging_secret_as_sender`, except it returns the derived tag, ready to be included in a log.\npub unconstrained fn get_app_tag_as_sender(sender: AztecAddress, recipient: AztecAddress) -> Field {\n get_indexed_tagging_secret_as_sender(sender, recipient).compute_tag(recipient)\n}\n\n/// Returns the tagging secret for a given sender and recipient pair, siloed for the current contract address.\n/// Includes the last known index used to send a note tagged with this secret.\n/// For this to work, PXE must know the ivsk_m of the sender.\n/// For the recipient's side, only the address is needed.\npub unconstrained fn get_indexed_tagging_secret_as_sender(\n sender: AztecAddress,\n recipient: AztecAddress,\n) -> IndexedTaggingSecret {\n let result = get_indexed_tagging_secret_as_sender_oracle(sender, recipient);\n IndexedTaggingSecret::deserialize(result)\n}\n\n#[oracle(getIndexedTaggingSecretAsSender)]\nunconstrained fn get_indexed_tagging_secret_as_sender_oracle(\n _sender: AztecAddress,\n _recipient: AztecAddress,\n) -> [Field; INDEXED_TAGGING_SECRET_LENGTH] {}\n\n/// Notifies the simulator that a tag has been used in a note, and to therefore increment the associated index so that\n/// future notes get a different tag and can be discovered by the recipient.\n/// This change should only be persisted in a non-volatile database if the tagged log is found in an actual block -\n/// otherwise e.g. a reverting transaction can cause the sender to accidentally skip indices and later produce notes\n/// that are not found by the recipient.\npub fn increment_app_tagging_secret_index_as_sender(sender: AztecAddress, recipient: AztecAddress) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n increment_app_tagging_secret_index_as_sender_wrapper(sender, recipient);\n }\n}\n\nunconstrained fn increment_app_tagging_secret_index_as_sender_wrapper(\n sender: AztecAddress,\n recipient: AztecAddress,\n) {\n increment_app_tagging_secret_index_as_sender_oracle(sender, recipient);\n}\n\n#[oracle(incrementAppTaggingSecretIndexAsSender)]\nunconstrained fn increment_app_tagging_secret_index_as_sender_oracle(\n _sender: AztecAddress,\n _recipient: AztecAddress,\n) {}\n\n/// Finds new notes that may have been sent to all registered accounts in PXE in the current contract and makes them available\n/// for later querying via the `get_notes` oracle.\npub fn sync_notes() {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe {\n sync_notes_oracle_wrapper();\n }\n}\n\nunconstrained fn sync_notes_oracle_wrapper() {\n sync_notes_oracle();\n}\n\n#[oracle(syncNotes)]\nunconstrained fn sync_notes_oracle() {}\n"
|
|
5763
|
+
},
|
|
5764
|
+
"145": {
|
|
5765
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/random.nr",
|
|
5766
|
+
"source": "/// Returns an unconstrained random value. Note that it is not possible to constrain this value to prove that it is\n/// truly random: we assume that the oracle is cooperating and returning random values.\n/// In some applications this behavior might not be acceptable and other techniques might be more suitable, such as\n/// producing pseudo-random values by hashing values outside of user control (like block hashes) or secrets.\npub unconstrained fn random() -> Field {\n rand_oracle()\n}\n\n#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n"
|
|
5767
|
+
},
|
|
5768
|
+
"146": {
|
|
5769
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/returns.nr",
|
|
5770
|
+
"source": "/// Notifies the simulator that `returns` will be later fetched once the function return is processed, referenced by\n/// their hash. This allows the simulator to know how to respond to this future request.\n///\n/// This is only used during private execution, since in public it is the VM itself that keeps track of return values.\npub fn pack_returns(returns: [Field]) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call. When\n // unpacking however the caller must check that the returned value is indeed the preimage.\n unsafe { pack_returns_oracle_wrapper(returns) };\n}\n\npub unconstrained fn pack_returns_oracle_wrapper(returns: [Field]) {\n let _ = pack_returns_oracle(returns);\n}\n\npub unconstrained fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n\n#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n"
|
|
5771
|
+
},
|
|
5772
|
+
"151": {
|
|
5773
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr",
|
|
5774
|
+
"source": "use dep::protocol_types::{\n constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n hash::poseidon2_hash_with_separator,\n traits::{Deserialize, Serialize},\n};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note,\n note_emission::NoteEmission,\n note_getter::{get_note, view_notes},\n note_interface::{NoteInterface, NullifiableNote},\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\npub struct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context, let N: u32> Storage<T, N> for PrivateImmutable<T, Context>\nwhere\n T: Serialize<N> + Deserialize<N>,\n{}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor.\n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<let N: u32>(self, note: &mut Note) -> NoteEmission<Note>\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<let N: u32>(self) -> Note\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n pub unconstrained fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n pub unconstrained fn view_note<let N: u32>(self) -> Note\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"
|
|
5759
5775
|
},
|
|
5760
5776
|
"17": {
|
|
5761
5777
|
"path": "std/embedded_curve_ops.nr",
|
|
5762
5778
|
"source": "use crate::cmp::Eq;\nuse crate::ops::arith::{Add, Neg, Sub};\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n pub x: Field,\n pub y: Field,\n pub is_infinite: bool,\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n pub fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n pub fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n pub lo: Field,\n pub hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n pub fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a, b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n pub(crate) fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the\n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n let point_array = multi_scalar_mul_array_return(points, scalars);\n EmbeddedCurvePoint { x: point_array[0], y: point_array[1], is_infinite: point_array[2] as bool }\n}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_array_return<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N],\n) -> [Field; 3] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n let g1 = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n multi_scalar_mul([g1], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// This is a hack because returning an `EmbeddedCurvePoint` from a foreign function in brillig returns a [BrilligVariable::SingleAddr; 2] rather than BrilligVariable::BrilligArray\n// as is defined in the brillig bytecode format. This is a workaround which allows us to fix this without modifying the serialization format.\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n let x_coordinates_match = point1.x == point2.x;\n let y_coordinates_match = point1.y == point2.y;\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint {\n x: point1.x + (x_coordinates_match as Field),\n y: point1.y,\n is_infinite: x_coordinates_match,\n };\n // point1_1 is guaranteed to have a different abscissa than point2\n let mut result = embedded_curve_add_unsafe(point1_1, point2);\n result.is_infinite = x_coordinates_match;\n\n // dbl if x_match, y_match\n let double = embedded_curve_add_unsafe(point1, point1);\n result = if double_predicate { double } else { result };\n\n // infinity if x_match, !y_match\n if point1.is_infinite {\n result = point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n let mut result_is_infinity = infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(\n _point1: EmbeddedCurvePoint,\n _point2: EmbeddedCurvePoint,\n) -> [Field; 3] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint,\n) -> EmbeddedCurvePoint {\n let point_array = embedded_curve_add_array_return(point1, point2);\n let x = point_array[0];\n let y = point_array[1];\n\n EmbeddedCurvePoint { x, y, is_infinite: false }\n}\n"
|
|
5763
5779
|
},
|
|
5764
|
-
"
|
|
5765
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5766
|
-
"source": "
|
|
5767
|
-
},
|
|
5768
|
-
"179": {
|
|
5769
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr",
|
|
5770
|
-
"source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::{GENERATOR_INDEX__SYMMETRIC_KEY, PRIVATE_LOG_SIZE_IN_FIELDS},\n hash::poseidon2_hash,\n point::Point,\n public_keys::AddressPoint,\n scalar::Scalar,\n utils::arrays::array_concat,\n};\nuse std::{\n aes128::aes128_encrypt, embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n field::bn254::decompose, hash::from_field_unsafe as fr_to_fq_unsafe,\n};\n\nuse crate::{\n encrypted_logs::header::EncryptedLogHeader,\n keys::secret_derivation::derive_aes_secret,\n oracle::{\n notes::{get_app_tag_as_sender, increment_app_tagging_secret_index_as_sender},\n random::random,\n },\n utils::{bytes::bytes_to_fields, point::point_to_bytes},\n};\n\n// 1 field is reserved for tag.\nglobal ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 31;\n\ncomptime global HEADER_SIZE: u32 = 48;\n\n// Bytes padded to the overhead, so that the size of the incoming body ciphertext will be a multiple of 16.\ncomptime global OVERHEAD_PADDING: u32 = 15;\n\npub comptime global OVERHEAD_SIZE: u32 = 32 /* eph_pk */\n + HEADER_SIZE /* incoming_header */\n + OVERHEAD_PADDING /* padding */;\n\nglobal PLAINTEXT_LENGTH_SIZE: u32 = 2;\n\n// This is enough for 8 fields of data.\n// 1 field for storage slot, 1 field for note/event type id, allowing 6 fields for custom values.\nglobal MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES: u32 =\n ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - OVERHEAD_SIZE - PLAINTEXT_LENGTH_SIZE - 1 /* aes padding */;\n\n// Note: Might have to update PRIVATE_LOG_SIZE_IN_FIELDS in `constants.nr` if the above changes.\n// This value ideally should be set by the protocol, allowing users (or `aztec-nr`) to fit data within the defined size limits.\n// Currently, we adjust this value as the structure changes, then update `constants.nr` to match.\n// Once the structure is finalized with defined overhead and max note field sizes, this value will be fixed and should remain unaffected by further payload composition changes.\n\npub fn compute_private_log_payload<let P: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [Field; PRIVATE_LOG_SIZE_IN_FIELDS] {\n assert(\n P < MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n f\"plaintext for log must not exceed {MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES}\",\n );\n\n let extended_plaintext: [u8; MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; ENCRYPTED_PAYLOAD_SIZE_IN_BYTES] =\n compute_encrypted_log(contract_address, recipient, extended_plaintext);\n\n // We assume that the sender wants for the recipient to find the tagged note, and therefore that they will cooperate\n // and use the correct tag. Usage of a bad tag will result in the recipient not being able to find the note\n // automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n\n array_concat([tag], bytes_to_fields(encrypted))\n}\n\npub fn compute_partial_public_log_payload<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let extended_plaintext: [u8; P + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; M - 32] =\n compute_encrypted_log(contract_address, recipient, extended_plaintext);\n\n // We assume that the sender wants for the recipient to find the tagged note, and therefore that they will cooperate\n // and use the correct tag. Usage of a bad tag will result in the recipient not being able to find the note\n // automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n // Silo the tag with contract address.\n // This is done by the kernel circuit to the private logs, but since the partial log will be finalized and emitted\n // in public as unencrypted log, its tag is not siloed at the moment.\n // To avoid querying logs using two types of tags, we silo the tag manually here.\n // TODO(#10273) This should be done by the AVM when it's processing the raw logs instead of their hashes.\n let siloed_tag_bytes: [u8; 32] =\n poseidon2_hash([contract_address.to_field(), tag]).to_be_bytes();\n\n // Temporary hack so that the partial public log remains the same format.\n // It should return field array and make the tag the first field as compute_private_log_payload does.\n let mut log_bytes = [0; M];\n for i in 0..32 {\n log_bytes[i] = siloed_tag_bytes[i];\n }\n for i in 0..encrypted.len() {\n log_bytes[i + 32] = encrypted[i];\n }\n\n log_bytes\n}\n\nfn compute_encrypted_log<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] =\n header.compute_ciphertext(eph_sk, recipient.to_address_point());\n let incoming_body_ciphertext =\n compute_incoming_body_ciphertext(plaintext, eph_sk, recipient.to_address_point());\n\n let mut encrypted_bytes = [0; M];\n let mut offset = 0;\n\n // eph_pk\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[offset + i] = eph_pk_bytes[i];\n }\n offset += 32;\n\n // incoming_header\n for i in 0..HEADER_SIZE {\n encrypted_bytes[offset + i] = incoming_header_ciphertext[i];\n }\n offset += HEADER_SIZE;\n\n // Padding.\n offset += OVERHEAD_PADDING;\n\n // incoming_body\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - offset;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[offset + i] = incoming_body_ciphertext[i];\n }\n\n encrypted_bytes\n}\n\n// Prepend the plaintext length as the first byte, then copy the plaintext itself starting from the second byte.\n// Fill the remaining bytes with random values to reach a fixed length of N.\nfn extend_private_log_plaintext<let P: u32, let N: u32>(plaintext: [u8; P]) -> [u8; N] {\n let mut padded = unsafe { get_random_bytes() };\n padded[0] = (P >> 8) as u8;\n padded[1] = P as u8;\n for i in 0..P {\n padded[i + PLAINTEXT_LENGTH_SIZE] = plaintext[i];\n }\n padded\n}\n\nunconstrained fn get_random_bytes<let N: u32>() -> [u8; N] {\n let mut bytes = [0; N];\n let mut idx = 32;\n let mut randomness = [0; 32];\n for i in 0..N {\n if idx == 32 {\n randomness = random().to_be_bytes();\n idx = 1; // Skip the first byte as it's always 0.\n }\n bytes[i] = randomness[idx];\n idx += 1;\n }\n bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the randomness to preserve the privacy of both the sender and recipient via encryption, so a malicious\n // sender could use non-random values to reveal the plaintext. But they already know it themselves anyway, and so\n // the recipient already trusts them to not disclose this information. We can therefore assume that the sender will\n // cooperate in the random value generation.\n let randomness = unsafe { random() };\n\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(randomness);\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\npub fn compute_incoming_body_ciphertext<let P: u32>(\n plaintext: [u8; P],\n eph_sk: Scalar,\n address_point: AddressPoint,\n) -> [u8] {\n let full_key = derive_aes_secret(eph_sk, address_point.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(plaintext, iv, sym_key)\n}\n\nmod test {\n use crate::encrypted_logs::payload::{\n compute_incoming_body_ciphertext, compute_private_log_payload,\n MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n };\n use dep::protocol_types::{address::AztecAddress, point::Point, scalar::Scalar};\n use protocol_types::public_keys::AddressPoint;\n use std::test::OracleMock;\n\n #[test]\n unconstrained fn test_encrypted_log_matches_typescript() {\n // All the values in this test were copied over from `encrypted_log_payload.test.ts`\n let contract_address = AztecAddress::from_field(\n 0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04,\n );\n\n let plaintext = [\n 0, 0, 0, 1, 48, 22, 64, 206, 234, 117, 131, 145, 178, 225, 97, 201, 44, 5, 19, 241, 41,\n 2, 15, 65, 37, 37, 106, 253, 174, 38, 70, 206, 49, 9, 159, 92, 16, 244, 140, 217, 239,\n 247, 174, 91, 32, 156, 85, 124, 112, 222, 46, 101, 126, 231, 145, 102, 134, 134, 118,\n 183, 135, 233, 65, 126, 25, 38, 14, 4, 15, 228, 107, 229, 131, 183, 31, 74, 181, 183,\n 12, 38, 87, 255, 29, 5, 204, 207, 29, 41, 42, 147, 105, 98, 141, 26, 25, 79, 148, 78,\n 101, 153, 0, 0, 16, 39,\n ];\n\n let randomness = 0x0101010101010101010101010101010101010101010101010101010101010101;\n let _ = OracleMock::mock(\"getRandomField\").returns(randomness).times(\n (MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES as u64 + 1 + 30) / 31,\n );\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk).times(1);\n\n let recipient = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let sender = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let _ = OracleMock::mock(\"getIndexedTaggingSecretAsSender\").returns([69420, 1337]);\n\n let _ = OracleMock::mock(\"incrementAppTaggingSecretIndexAsSender\").returns(());\n\n let payload = compute_private_log_payload(contract_address, recipient, sender, plaintext);\n\n // The following value was generated by `encrypted_log_payload.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let private_log_payload_from_typescript = [\n 0x0e9cffc3ddd746affb02410d8f0a823e89939785bcc8e88ee4f3cae05e737c36,\n 0x008d460c0e434d846ec1ea286e4090eb56376ff27bddc1aacae1d856549f701f,\n 0x00a70577790aeabcc2d81ec8d0c99e7f5d2bf2f1452025dc777a178404f851d9,\n 0x003de818923f85187871d99bdf95d695eff0a900000000000000000000000000,\n 0x000000a600a61f7d59eeaf52eb51bc0592ff981d9ba3ea8e6ea8ba9dc0cec8c7,\n 0x000b81e84556a77ce6c3ca47a527f99ffe7b2524bb885a23020b7295748ad19c,\n 0x001083618ad96298b76ee07eb1a56d19cc798710e9f5de96501bd59b3781c9c0,\n 0x002a6c95c5912f8936b1500d362afbf0922c85b1ada18db8b95162a6e9d06765,\n 0x005cdf669eb387f8e0492a95fdcdb39429d5340b4bebc250ba9bf62c2f49f549,\n 0x00f37beed75a668aa51967e0e57547e5a655157bcf381e22f30e25881548ec96,\n 0x0006a151b5fbfb2d14ee4b34bf4c1dbd71c7be15ad4c63474bb6f89970aeb3d9,\n 0x00489c8edbdff80a1a3a5c28370e534abc870a85ea4318326ea19222fb10df35,\n 0x008c765edada497db4284ae30507a2e03e983d23cfa0bd831577e857bbef9cf7,\n 0x0090c97cb5699cc8783a1b4276d929be2882e5b9b72829a4f8404f7e3c853d11,\n 0x00d6d5a000b80134891e95f81007ad35d3945eaeecbe137fff85d01d7eaf8f19,\n 0x00a15eb965c6a4bc97aa87fd3463c31c9d4e0d722a8ba870bcc50c9c7a8b48ad,\n 0x0063c861bdbe490d44c57382decbae663927909652f87ac18dcfd5b30649cce5,\n 0x00820f14caa725efe1fa3485ceac88499eadf0565c5b20998c05931bbf478e68,\n ];\n\n assert_eq(payload, private_log_payload_from_typescript);\n }\n\n #[test]\n fn test_incoming_body_ciphertext_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n };\n let address_point = AddressPoint {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false,\n },\n };\n let plaintext = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,\n ];\n\n // `compute_incoming_body_ciphertext(...)` function then derives symmetric key from `eph_sk` and `address_point` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = compute_incoming_body_ciphertext(plaintext, eph_sk, address_point);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160,\n 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157,\n 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93,\n 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130,\n 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95,\n 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234,\n 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162,\n 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185,\n 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236,\n 23, 206, 229, 108,\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"
|
|
5780
|
+
"177": {
|
|
5781
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/utils/array/subarray.nr",
|
|
5782
|
+
"source": "/// Returns `DST_LEN` elements from a source array, starting at `offset`. `DST_LEN` must be large enough to hold all of\n/// the elements past `offset`.\n///\n/// Example:\n/// ```\n/// let foo: [Field; 2] = subarray([1, 2, 3, 4, 5], 2);\n/// assert_eq(foo, [3, 4]);\n/// ```\npub fn subarray<let SRC_LEN: u32, let DST_LEN: u32>(\n src: [Field; SRC_LEN],\n offset: u32,\n) -> [Field; DST_LEN] {\n assert(offset + DST_LEN <= SRC_LEN, \"offset too large\");\n\n let mut dst: [Field; DST_LEN] = std::mem::zeroed();\n for i in 0..DST_LEN {\n dst[i] = src[i + offset];\n }\n\n dst\n}\n\nmod test {\n use super::subarray;\n\n #[test]\n unconstrained fn subarray_into_empty() {\n // In all of these cases we're setting DST_LEN to be 0, so we always get back an emtpy array.\n assert_eq(subarray([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 2), []);\n }\n\n #[test]\n unconstrained fn subarray_complete() {\n assert_eq(subarray([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), [1, 2, 3, 4, 5]);\n }\n\n #[test]\n unconstrained fn subarray_different_end_sizes() {\n // We implicitly select how many values to read in the size of the return array\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4, 5]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2]);\n }\n\n #[test(should_fail)]\n unconstrained fn subarray_offset_too_large() {\n // With an offset of 1 we can only request up to 4 elements\n let _: [_; 5] = subarray([1, 2, 3, 4, 5], 1);\n }\n\n #[test(should_fail)]\n unconstrained fn subarray_bad_return_value() {\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [3, 3, 4, 5]);\n }\n}\n"
|
|
5771
5783
|
},
|
|
5772
5784
|
"18": {
|
|
5773
5785
|
"path": "std/field/bn254.nr",
|
|
5774
5786
|
"source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\nglobal TWO_POW_64: Field = 0x10000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(mut x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 64 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low_lower_64 = (x as u64) as Field;\n x = (x - low_lower_64) / TWO_POW_64;\n let low_upper_64 = (x as u64) as Field;\n\n let high = (x - low_upper_64) / TWO_POW_64;\n let low = low_upper_64 * TWO_POW_64 + low_lower_64;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n unsafe {\n /*@safety: borrow is enforced to be boolean due to its type.\n if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n */\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n unsafe {\n /*@safety: decomposition is properly checked below*/\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n unsafe {\n //@safety: already unconstrained\n field_less_than(b, a)\n },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n unsafe {\n //@safety: unsafe in unconstrained\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n unsafe {\n //@safety: Take a hint of the comparison and verify it\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"
|
|
5775
5787
|
},
|
|
5776
|
-
"
|
|
5777
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5778
|
-
"source": "use
|
|
5788
|
+
"181": {
|
|
5789
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/utils/point.nr",
|
|
5790
|
+
"source": "use dep::protocol_types::point::Point;\n\n// I am storing the modulus minus 1 divided by 2 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field =\n 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use crate::utils::point::point_to_bytes;\n use dep::protocol_types::point::Point;\n\n #[test]\n unconstrained fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false,\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122,\n 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115,\n ];\n assert_eq(expected_compressed_point_positive_sign, compressed_point);\n }\n\n #[test]\n unconstrained fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false,\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169,\n 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181,\n ];\n\n assert_eq(expected_compressed_point_negative_sign, compressed_point);\n }\n}\n"
|
|
5779
5791
|
},
|
|
5780
5792
|
"19": {
|
|
5781
5793
|
"path": "std/field/mod.nr",
|
|
@@ -5785,61 +5797,61 @@
|
|
|
5785
5797
|
"path": "std/hash/mod.nr",
|
|
5786
5798
|
"source": "pub mod poseidon;\npub mod poseidon2;\npub mod keccak;\npub mod sha256;\npub mod sha512;\n\nuse crate::default::Default;\nuse crate::embedded_curve_ops::{\n EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_array_return,\n};\nuse crate::meta::derive_via;\nuse crate::uint128::U128;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\n#[inline_always]\npub fn pedersen_commitment_with_separator<let N: u32>(\n input: [Field; N],\n separator: u32,\n) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n pedersen_hash_with_separator(input, 0)\n}\n\n#[no_predicates]\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: [EmbeddedCurveScalar; N + 1] = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N + 1];\n let mut generators: [EmbeddedCurvePoint; N + 1] =\n [EmbeddedCurvePoint::point_at_infinity(); N + 1];\n let domain_generators: [EmbeddedCurvePoint; N] =\n derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n\n for i in 0..N {\n scalars[i] = from_field_unsafe(input[i]);\n generators[i] = domain_generators[i];\n }\n scalars[N] = EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field };\n\n let length_generator: [EmbeddedCurvePoint; 1] =\n derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n generators[N] = length_generator[0];\n multi_scalar_mul_array_return(generators, scalars)[0]\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Same as from_field but:\n// does not assert the limbs are 128 bits\n// does not assert the decomposition does not overflow the EmbeddedCurveScalar\nfn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n let (xlo, xhi) = unsafe {\n //@safety : xlo and xhi decomposition is checked below\n crate::field::bn254::decompose_hint(scalar)\n };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn hash_to_field(inputs: [Field]) -> Field {\n let mut sum = 0;\n\n for input in inputs {\n let input_bytes: [u8; 32] = input.to_le_bytes();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n// docs:start:keccak256\npub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{\n crate::hash::keccak::keccak256(input, message_size)\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<let N: u32>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(\n s,\n name,\n signature,\n for_each_field,\n quote {},\n |fields| fields,\n )\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\npub trait Hasher {\n fn finish(self) -> Field;\n\n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\npub trait BuildHasher<H>\nwhere\n H: Hasher,\n{\n fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H)\n where\n H: Hasher,\n {}\n}\n\nimpl Hash for U128 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self.lo as Field);\n H::write(state, self.hi as Field);\n }\n}\n\nimpl<T, let N: u32> Hash for [T; N]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B)\nwhere\n A: Hash,\n B: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n E: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1),\n 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f,\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1),\n EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false,\n },\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2),\n 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2),\n EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3),\n 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3),\n EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4),\n 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4),\n EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5),\n 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5),\n EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6),\n 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6),\n EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false,\n },\n );\n}\n"
|
|
5787
5799
|
},
|
|
5788
|
-
"
|
|
5800
|
+
"233": {
|
|
5789
5801
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr",
|
|
5790
5802
|
"source": "use crate::{point::Point, traits::{Deserialize, Empty, Serialize}};\npub use crate::constants::KEY_VALIDATION_REQUEST_LENGTH;\n\npub struct KeyValidationRequest {\n pub pk_m: Point,\n pub sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m)) & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest { pk_m: Point::empty(), sk_app: 0 }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [self.pk_m.x, self.pk_m.y, self.pk_m.is_infinite as Field, self.sk_app]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self {\n pk_m: Point { x: fields[0], y: fields[1], is_infinite: fields[2] as bool },\n sk_app: fields[3],\n }\n }\n}\n"
|
|
5791
5803
|
},
|
|
5792
|
-
"
|
|
5793
|
-
"path": "
|
|
5794
|
-
"source": "use crate::
|
|
5804
|
+
"240": {
|
|
5805
|
+
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
|
|
5806
|
+
"source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{\n partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n },\n constants::{\n AZTEC_ADDRESS_LENGTH, FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n MAX_FIELD_VALUE,\n },\n contract_class_id::ContractClassId,\n hash::{poseidon2_hash_with_separator, private_functions_root_from_siblings},\n merkle_tree::membership::MembershipWitness,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n traits::{Deserialize, Empty, FromField, Serialize, ToField},\n};\n\n// We do below because `use crate::point::Point;` does not work\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\nuse crate::public_keys::AddressPoint;\nuse ec::{pow, sqrt};\nuse std::embedded_curve_ops::{EmbeddedCurveScalar, fixed_base_scalar_mul as derive_public_key};\n\n// Aztec address\npub struct AztecAddress {\n pub inner: Field,\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn to_address_point(self) -> AddressPoint {\n // We compute the address point by taking our address, setting it to x, and then solving for y in the\n // equation which defines our bn curve:\n // y^2 = x^3 - 17; x = address\n let x = self.inner;\n let y_squared = pow(x, 3) - 17;\n\n // TODO (#8970): Handle cases where we cannot recover a point from an address\n let mut y = sqrt(y_squared);\n\n // If we get a negative y coordinate (any y where y > MAX_FIELD_VALUE / 2), we pin it to the\n // positive one (any value where y <= MAX_FIELD_VALUE / 2) by subtracting it from the Field modulus\n // note: The field modulus is MAX_FIELD_VALUE + 1\n if (!(y.lt(MAX_FIELD_VALUE / 2) | y.eq(MAX_FIELD_VALUE / 2))) {\n y = (MAX_FIELD_VALUE + 1) - y;\n }\n\n AddressPoint { inner: Point { x: self.inner, y, is_infinite: false } }\n }\n\n pub fn compute(public_keys: PublicKeys, partial_address: PartialAddress) -> AztecAddress {\n let public_keys_hash = public_keys.hash();\n\n let pre_address = poseidon2_hash_with_separator(\n [public_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n );\n\n let address_point = derive_public_key(EmbeddedCurveScalar::from_field(pre_address)).add(\n public_keys.ivpk_m.to_point(),\n );\n\n // Note that our address is only the x-coordinate of the full address_point. This is okay because when people want to encrypt something and send it to us\n // they can recover our full point using the x-coordinate (our address itself). To do this, they recompute the y-coordinate according to the equation y^2 = x^3 - 17.\n // When they do this, they may get a positive y-coordinate (a value that is less than or equal to MAX_FIELD_VALUE / 2) or\n // a negative y-coordinate (a value that is more than MAX_FIELD_VALUE), and we cannot dictate which one they get and hence the recovered point may sometimes be different than the one\n // our secrect can decrypt. Regardless though, they should and will always encrypt using point with the positive y-coordinate by convention.\n // This ensures that everyone encrypts to the same point given an arbitrary x-coordinate (address). This is allowed because even though our original point may not have a positive y-coordinate,\n // with our original secret, we will be able to derive the secret to the point with the flipped (and now positive) y-coordinate that everyone encrypts to.\n AztecAddress::from_field(address_point.x)\n }\n\n pub fn compute_from_private_function(\n function_selector: FunctionSelector,\n function_vk_hash: Field,\n function_leaf_membership_witness: MembershipWitness<FUNCTION_TREE_HEIGHT>,\n contract_class_artifact_hash: Field,\n contract_class_public_bytecode_commitment: Field,\n salted_initialization_hash: SaltedInitializationHash,\n public_keys: PublicKeys,\n ) -> Self {\n let private_functions_root = private_functions_root_from_siblings(\n function_selector,\n function_vk_hash,\n function_leaf_membership_witness.leaf_index,\n function_leaf_membership_witness.sibling_path,\n );\n\n let contract_class_id = ContractClassId::compute(\n contract_class_artifact_hash,\n private_functions_root,\n contract_class_public_bytecode_commitment,\n );\n\n // Compute contract address using the preimage which includes the class_id.\n let partial_address = PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n salted_initialization_hash,\n );\n\n AztecAddress::compute(public_keys, partial_address)\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys() {\n let public_keys = PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: 0x22f7fcddfa3ce3e8f0cc8e82d7b94cdd740afa3e77f8e4a63ea78a239432dcab,\n y: 0x0471657de2b6216ade6c506d28fbc22ba8b8ed95c871ad9f3e3984e90d9723a7,\n is_infinite: false,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: 0x111223493147f6785514b1c195bb37a2589f22a6596d30bb2bb145fdc9ca8f1e,\n y: 0x273bbffd678edce8fe30e0deafc4f66d58357c06fd4a820285294b9746c3be95,\n is_infinite: false,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: 0x09115c96e962322ffed6522f57194627136b8d03ac7469109707f5e44190c484,\n y: 0x0c49773308a13d740a7f0d4f0e6163b02c5a408b6f965856b6a491002d073d5b,\n is_infinite: false,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: 0x00d3d81beb009873eb7116327cf47c612d5758ef083d4fda78e9b63980b2a762,\n y: 0x2f567d22d2b02fe1f4ad42db9d58a36afd1983e7e2909d1cab61cafedad6193a,\n is_infinite: false,\n },\n },\n };\n\n let partial_address = PartialAddress::from_field(\n 0x0a7c585381b10f4666044266a02405bf6e01fa564c8517d4ad5823493abd31de,\n );\n\n let address = AztecAddress::compute(public_keys, partial_address);\n\n // The following value was generated by `derivation.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_computed_address_from_partial_and_pubkeys =\n 0x24e4646f58b9fbe7d38e317db8d5636c423fbbdfbe119fc190fe9c64747e0c62;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkeys);\n}\n\n#[test]\nfn compute_preaddress_from_partial_and_pub_keys() {\n let pre_address = poseidon2_hash_with_separator([1, 2], GENERATOR_INDEX__CONTRACT_ADDRESS_V1);\n let expected_computed_preaddress_from_partial_and_pubkey =\n 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(pre_address == expected_computed_preaddress_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"
|
|
5795
5807
|
},
|
|
5796
|
-
"
|
|
5797
|
-
"path": "
|
|
5798
|
-
"source": "use crate::runtime::is_unconstrained;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// A message block is up to 64 bytes taken from the input.\nglobal BLOCK_SIZE: u32 = 64;\n\n// The first index in the block where the 8 byte message size will be written.\nglobal MSG_SIZE_PTR: u32 = 56;\n\n// Size of the message block when packed as 4-byte integer array.\nglobal INT_BLOCK_SIZE: u32 = 16;\n\n// A `u32` integer consists of 4 bytes.\nglobal INT_SIZE: u32 = 4;\n\n// Index of the integer in the `INT_BLOCK` where the length is written.\nglobal INT_SIZE_PTR: u32 = MSG_SIZE_PTR / INT_SIZE;\n\n// Magic numbers for bit shifting.\n// Works with actual bit shifting as well as the compiler turns them into * and /\n// but circuit execution appears to be 10% faster this way.\nglobal TWO_POW_8: u32 = 256;\nglobal TWO_POW_16: u32 = TWO_POW_8 * 256;\nglobal TWO_POW_24: u32 = TWO_POW_16 * 256;\nglobal TWO_POW_32: u64 = TWO_POW_24 as u64 * 256;\n\n// Index of a byte in a 64 byte block; ie. 0..=63\ntype BLOCK_BYTE_PTR = u32;\n\n// The foreign function to compress blocks works on 16 pieces of 4-byte integers, instead of 64 bytes.\ntype INT_BLOCK = [u32; INT_BLOCK_SIZE];\n\n// A message block is a slice of the original message of a fixed size,\n// potentially padded with zeros, with neighbouring 4 bytes packed into integers.\ntype MSG_BLOCK = INT_BLOCK;\n\n// The hash is 32 bytes.\ntype HASH = [u8; 32];\n\n// The state accumulates the blocks.\n// Its overall size is the same as the `HASH`.\ntype STATE = [u32; 8];\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> HASH\n// docs:end:sha256\n{\n digest(input)\n}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: INT_BLOCK, _state: STATE) -> STATE {}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> HASH {\n sha256_var(msg, N as u64)\n}\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> HASH {\n let message_size = message_size as u32;\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n // Intermediate hash, starting with the canonical initial value\n let mut h: STATE = [\n 1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635,\n 1541459225,\n ];\n // Pointer into msg_block on a 64 byte scale\n let mut msg_byte_ptr = 0;\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n /*@safety : the msg_block is checked below in verify_msg_block*/\n build_msg_block(msg, message_size, msg_start)\n };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if (msg_start < message_size) & (msg_byte_ptr == BLOCK_SIZE) {\n h = sha256_compression(msg_block, h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n //@safety : the msg_block is checked below in verify_msg_block\n build_msg_block(msg, message_size, msg_start)\n };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n verify_msg_block_padding(msg_block, msg_byte_ptr);\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n // If we had modulo == 0 then it means the last block was full,\n // and we can reset the pointer to zero to overwrite it.\n if msg_byte_ptr == BLOCK_SIZE {\n msg_byte_ptr = 0;\n }\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n // Here we rely on the fact that everything beyond the available input is set to 0.\n msg_block = update_block_item(\n msg_block,\n msg_byte_ptr,\n |msg_item| set_item_byte_then_zeros(msg_item, msg_byte_ptr, 1 << 7),\n );\n msg_byte_ptr = msg_byte_ptr + 1;\n let last_block = msg_block;\n\n // If we don't have room to write the size, compress the block and reset it.\n if msg_byte_ptr > MSG_SIZE_PTR {\n h = sha256_compression(msg_block, h);\n // `attach_len_to_msg_block` will zero out everything after the `msg_byte_ptr`.\n msg_byte_ptr = 0;\n }\n\n msg_block = unsafe {\n //@safety : the msg_len is checked below in verify_msg_len\n attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size)\n };\n\n if !is_unconstrained() {\n verify_msg_len(msg_block, last_block, msg_byte_ptr, message_size);\n }\n\n hash_final_block(msg_block, h)\n}\n\n// Take `BLOCK_SIZE` number of bytes from `msg` starting at `msg_start`.\n// Returns the block and the length that has been copied rather than padded with zeros.\nunconstrained fn build_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_start: u32,\n) -> (MSG_BLOCK, BLOCK_BYTE_PTR) {\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n\n // We insert `BLOCK_SIZE` bytes (or up to the end of the message)\n let block_input = if msg_start + BLOCK_SIZE > message_size {\n if message_size < msg_start {\n // This function is sometimes called with `msg_start` past the end of the message.\n // In this case we return an empty block and zero pointer to signal that the result should be ignored.\n 0\n } else {\n message_size - msg_start\n }\n } else {\n BLOCK_SIZE\n };\n\n // Figure out the number of items in the int array that we have to pack.\n // e.g. if the input is [0,1,2,3,4,5] then we need to pack it as 2 items: [0123, 4500]\n let mut int_input = block_input / INT_SIZE;\n if block_input % INT_SIZE != 0 {\n int_input = int_input + 1;\n };\n\n for i in 0..int_input {\n let mut msg_item: u32 = 0;\n // Always construct the integer as 4 bytes, even if it means going beyond the input.\n for j in 0..INT_SIZE {\n let k = i * INT_SIZE + j;\n let msg_byte = if k < block_input {\n msg[msg_start + k]\n } else {\n 0\n };\n msg_item = lshift8(msg_item, 1) + msg_byte as u32;\n }\n msg_block[i] = msg_item;\n }\n\n // Returning the index as if it was a 64 byte array.\n // We have to project it down to 16 items and bit shifting to get a byte back if we need it.\n (msg_block, block_input)\n}\n\n// Verify the block we are compressing was appropriately constructed by `build_msg_block`\n// and matches the input data. Returns the index of the first unset item.\n// If `message_size` is less than `msg_start` then this is called with the old non-empty block;\n// in that case we can skip verification, ie. no need to check that everything is zero.\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_block: MSG_BLOCK,\n msg_start: u32,\n) -> BLOCK_BYTE_PTR {\n let mut msg_byte_ptr = 0;\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n // We might have to go beyond the input to pad the fields.\n if msg_end % INT_SIZE != 0 {\n msg_end = msg_end + INT_SIZE - msg_end % INT_SIZE;\n }\n\n // Reconstructed packed item.\n let mut msg_item: u32 = 0;\n\n // Inclusive at the end so that we can compare the last item.\n let mut i: u32 = 0;\n for k in msg_start..=msg_end {\n if k % INT_SIZE == 0 {\n // If we consumed some input we can compare against the block.\n if (msg_start < message_size) & (k > msg_start) {\n assert_eq(msg_block[i], msg_item as u32);\n i = i + 1;\n msg_item = 0;\n }\n }\n // Shift the accumulator\n msg_item = lshift8(msg_item, 1);\n // If we have input to consume, add it at the rightmost position.\n if k < message_size & k < msg_end {\n msg_item = msg_item + msg[k] as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\n// Verify the block we are compressing was appropriately padded with zeros by `build_msg_block`.\n// This is only relevant for the last, potentially partially filled block.\nfn verify_msg_block_padding(msg_block: MSG_BLOCK, msg_byte_ptr: BLOCK_BYTE_PTR) {\n // Check all the way to the end of the block.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_BLOCK_SIZE);\n}\n\n// Verify that a region of ints in the message block are (partially) zeroed,\n// up to an (exclusive) maximum which can either be the end of the block\n// or just where the size is to be written.\nfn verify_msg_block_zeros(\n msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n max_int_byte_ptr: u32,\n) {\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // First integer which is supposed to be (partially) zero.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n let zeros = INT_SIZE - modulo;\n let mask = if zeros == 3 {\n TWO_POW_24\n } else if zeros == 2 {\n TWO_POW_16\n } else {\n TWO_POW_8\n };\n assert_eq(msg_block[int_byte_ptr] % mask, zero);\n int_byte_ptr = int_byte_ptr + 1;\n }\n\n // Check the rest of the items.\n for i in 0..max_int_byte_ptr {\n if i >= int_byte_ptr {\n assert_eq(msg_block[i], zero);\n }\n }\n}\n\n// Verify that up to the byte pointer the two blocks are equal.\n// At the byte pointer the new block can be partially zeroed.\nfn verify_msg_block_equals_last(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n) {\n // msg_byte_ptr is the position at which they are no longer have to be the same.\n // First integer which is supposed to be (partially) zero contains that pointer.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Reconstruct the partially zero item from the last block.\n let last_field = last_block[int_byte_ptr];\n let mut msg_item: u32 = 0;\n // Reset to where they are still equal.\n msg_byte_ptr = msg_byte_ptr - modulo;\n for i in 0..INT_SIZE {\n msg_item = lshift8(msg_item, 1);\n if i < modulo {\n msg_item = msg_item + get_item_byte(last_field, msg_byte_ptr) as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n assert_eq(msg_block[int_byte_ptr], msg_item);\n }\n\n for i in 0..INT_SIZE_PTR {\n if i < int_byte_ptr {\n assert_eq(msg_block[i], last_block[i]);\n }\n }\n}\n\n// Apply a function on the block item which the pointer indicates.\nfn update_block_item<Env>(\n mut msg_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n f: fn[Env](u32) -> u32,\n) -> MSG_BLOCK {\n let i = msg_byte_ptr / INT_SIZE;\n msg_block[i] = f(msg_block[i]);\n msg_block\n}\n\n// Set the rightmost `zeros` number of bytes to 0.\nfn set_item_zeros(item: u32, zeros: u8) -> u32 {\n lshift8(rshift8(item, zeros), zeros)\n}\n\n// Replace one byte in the item with a value, and set everything after it to zero.\nfn set_item_byte_then_zeros(msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR, msg_byte: u8) -> u32 {\n let zeros = INT_SIZE - msg_byte_ptr % INT_SIZE;\n let zeroed_item = set_item_zeros(msg_item, zeros as u8);\n let new_item = byte_into_item(msg_byte, msg_byte_ptr);\n zeroed_item + new_item\n}\n\n// Get a byte of a message item according to its overall position in the `BLOCK_SIZE` space.\nfn get_item_byte(mut msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR) -> u8 {\n // How many times do we have to shift to the right to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n msg_item = rshift8(msg_item, shifts as u8);\n // At this point the byte we want is in the rightmost position.\n msg_item as u8\n}\n\n// Project a byte into a position in a field based on the overall block pointer.\n// For example putting 1 into pointer 5 would be 100, because overall we would\n// have [____, 0100] with indexes [0123,4567].\nfn byte_into_item(msg_byte: u8, msg_byte_ptr: BLOCK_BYTE_PTR) -> u32 {\n let mut msg_item = msg_byte as u32;\n // How many times do we have to shift to the left to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n lshift8(msg_item, shifts as u8)\n}\n\n// Construct a field out of 4 bytes.\nfn make_item(b0: u8, b1: u8, b2: u8, b3: u8) -> u32 {\n let mut item = b0 as u32;\n item = lshift8(item, 1) + b1 as u32;\n item = lshift8(item, 1) + b2 as u32;\n item = lshift8(item, 1) + b3 as u32;\n item\n}\n\n// Shift by 8 bits to the left between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise multiplies by 256.\nfn lshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n if item == 0 {\n 0\n } else {\n // Brillig wouldn't shift 0<<4 without overflow.\n item << (8 * shifts)\n }\n } else {\n // We can do a for loop up to INT_SIZE or an if-else.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item * TWO_POW_8\n } else if shifts == 2 {\n item * TWO_POW_16\n } else if shifts == 3 {\n item * TWO_POW_24\n } else {\n // Doesn't make sense, but it's most likely called on 0 anyway.\n 0\n }\n }\n}\n\n// Shift by 8 bits to the right between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise divides by 256.\nfn rshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n item >> (8 * shifts)\n } else {\n // Division wouldn't work on `Field`.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item / TWO_POW_8\n } else if shifts == 2 {\n item / TWO_POW_16\n } else if shifts == 3 {\n item / TWO_POW_24\n } else {\n 0\n }\n }\n}\n\n// Zero out all bytes between the end of the message and where the length is appended,\n// then write the length into the last 8 bytes of the block.\nunconstrained fn attach_len_to_msg_block(\n mut msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) -> MSG_BLOCK {\n // We assume that `msg_byte_ptr` is less than 57 because if not then it is reset to zero before calling this function.\n // In any case, fill blocks up with zeros until the last 64 bits (i.e. until msg_byte_ptr = 56).\n // There can be one item which has to be partially zeroed.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Index of the block in which we find the item we need to partially zero.\n let i = msg_byte_ptr / INT_SIZE;\n let zeros = INT_SIZE - modulo;\n msg_block[i] = set_item_zeros(msg_block[i], zeros as u8);\n msg_byte_ptr = msg_byte_ptr + zeros;\n }\n\n // The rest can be zeroed without bit shifting anything.\n for i in (msg_byte_ptr / INT_SIZE)..INT_SIZE_PTR {\n msg_block[i] = 0;\n }\n\n // Set the last two 4 byte ints as the first/second half of the 8 bytes of the length.\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for i in 0..=1 {\n let shift = i * 4;\n msg_block[INT_SIZE_PTR + i] = make_item(\n len_bytes[shift],\n len_bytes[shift + 1],\n len_bytes[shift + 2],\n len_bytes[shift + 3],\n );\n }\n msg_block\n}\n\n// Verify that the message length was correctly written by `attach_len_to_msg_block`,\n// and that everything between the byte pointer and the size pointer was zeroed,\n// and that everything before the byte pointer was untouched.\nfn verify_msg_len(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) {\n // Check zeros up to the size pointer.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_SIZE_PTR);\n\n // Check that up to the pointer we match the last block.\n verify_msg_block_equals_last(msg_block, last_block, msg_byte_ptr);\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let mut reconstructed_len: u64 = 0;\n for i in INT_SIZE_PTR..INT_BLOCK_SIZE {\n reconstructed_len = reconstructed_len * TWO_POW_32;\n reconstructed_len = reconstructed_len + msg_block[i] as u64;\n }\n let len = 8 * message_size as u64;\n assert_eq(reconstructed_len, len);\n}\n\n// Perform the final compression, then transform the `STATE` into `HASH`.\nfn hash_final_block(msg_block: MSG_BLOCK, mut state: STATE) -> HASH {\n let mut out_h: HASH = [0; 32]; // Digest as sequence of bytes\n // Hash final padded block\n state = sha256_compression(msg_block, state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[j] as Field).to_be_bytes();\n for k in 0..4 {\n out_h[4 * j + k] = h_bytes[k];\n }\n }\n\n out_h\n}\n\nmod tests {\n use super::{\n attach_len_to_msg_block, build_msg_block, byte_into_item, get_item_byte, make_item,\n set_item_byte_then_zeros, set_item_zeros,\n };\n use super::INT_BLOCK;\n use super::sha256_var;\n\n #[test]\n fn smoke_test() {\n let input = [0xbd];\n let result = [\n 0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d,\n 0x05, 0x70, 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0,\n 0x8f, 0xfe, 0x73, 0x2b,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116,\n ];\n let result = [\n 91, 122, 146, 93, 52, 109, 133, 148, 171, 61, 156, 70, 189, 238, 153, 7, 222, 184, 94,\n 24, 65, 114, 192, 244, 207, 199, 87, 232, 192, 224, 171, 207,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_multiple_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115,\n 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49,\n 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46,\n 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115,\n 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97,\n 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45,\n 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55,\n 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32,\n 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32,\n 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64,\n 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103,\n 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115,\n 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101,\n 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109,\n 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56,\n 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48,\n 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75,\n 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67,\n 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101,\n 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99,\n ];\n let result = [\n 116, 90, 151, 31, 78, 22, 138, 180, 211, 189, 69, 76, 227, 200, 155, 29, 59, 123, 154,\n 60, 47, 153, 203, 129, 157, 251, 48, 2, 79, 11, 65, 47,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_under_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59,\n ];\n let result = [\n 143, 140, 76, 173, 222, 123, 102, 68, 70, 149, 207, 43, 39, 61, 34, 79, 216, 252, 213,\n 165, 74, 16, 110, 74, 29, 64, 138, 167, 30, 1, 9, 119,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_not_block_multiple() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115,\n 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49,\n 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46,\n 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115,\n 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97,\n 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45,\n 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55,\n 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32,\n 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32,\n 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64,\n 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103,\n 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115,\n 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101,\n 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109,\n 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56,\n 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48,\n 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75,\n 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67,\n 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101,\n 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99, 116, 58, 77, 101, 115, 115, 97,\n 103, 101, 45, 73, 100, 58, 68, 97, 116, 101, 58, 116, 111, 59, 32, 98, 61,\n ];\n let result = [\n 112, 144, 73, 182, 208, 98, 9, 238, 54, 229, 61, 145, 222, 17, 72, 62, 148, 222, 186,\n 55, 192, 82, 220, 35, 66, 47, 193, 200, 22, 38, 26, 186,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_with_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17,\n 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12,\n 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48,\n 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6,\n 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2,\n 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89,\n 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2,\n 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75,\n 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1,\n 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189,\n 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4,\n 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45,\n 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4,\n 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188,\n 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212,\n 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53,\n ];\n let message_size = 297;\n assert_eq(sha256_var(input, message_size), result);\n }\n\n #[test]\n fn msg_big_no_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17,\n 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12,\n 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48,\n 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6,\n 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2,\n 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89,\n 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2,\n 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75,\n 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1,\n 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189,\n 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4,\n 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45,\n 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4,\n 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188,\n 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38,\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212,\n 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn same_msg_len_variable_padding() {\n let input = [\n 29, 81, 165, 84, 243, 114, 101, 37, 242, 146, 127, 99, 69, 145, 39, 72, 213, 39, 253,\n 179, 218, 37, 217, 201, 172, 93, 198, 50, 249, 70, 15, 30, 162, 112, 187, 40, 140, 9,\n 236, 53, 32, 44, 38, 163, 113, 254, 192, 197, 44, 89, 71, 130, 169, 242, 17, 211, 214,\n 72, 19, 178, 186, 168, 147, 127, 99, 101, 252, 227, 8, 147, 150, 85, 97, 158, 17, 107,\n 218, 244, 82, 113, 247, 91, 208, 214, 60, 244, 87, 137, 173, 201, 130, 18, 66, 56, 198,\n 149, 207, 189, 175, 120, 123, 224, 177, 167, 251, 159, 143, 110, 68, 183, 189, 70, 126,\n 32, 35, 164, 44, 30, 44, 12, 65, 18, 62, 239, 242, 2, 248, 104, 2, 178, 64, 28, 126, 36,\n 137, 24, 14, 116, 91, 98, 90, 159, 218, 102, 45, 11, 110, 223, 245, 184, 52, 99, 59,\n 245, 136, 175, 3, 72, 164, 146, 145, 116, 22, 66, 24, 49, 193, 121, 3, 60, 37, 41, 97,\n 3, 190, 66, 195, 225, 63, 46, 3, 118, 4, 208, 15, 1, 40, 254, 235, 151, 123, 70, 180,\n 170, 44, 172, 90, 4, 254, 53, 239, 116, 246, 67, 56, 129, 61, 22, 169, 213, 65, 27, 216,\n 116, 162, 239, 214, 207, 126, 177, 20, 100, 25, 48, 143, 84, 215, 70, 197, 53, 65, 70,\n 86, 172, 61, 62, 9, 212, 167, 169, 133, 41, 126, 213, 196, 33, 192, 238, 0, 63, 246,\n 215, 58, 128, 110, 101, 92, 3, 170, 214, 130, 149, 52, 81, 125, 118, 233, 3, 118, 193,\n 104, 207, 120, 115, 77, 253, 191, 122, 0, 107, 164, 207, 113, 81, 169, 36, 201, 228, 74,\n 134, 131, 218, 178, 35, 30, 216, 101, 2, 103, 174, 87, 95, 50, 50, 215, 157, 5, 210,\n 188, 54, 211, 78, 45, 199, 96, 121, 241, 241, 176, 226, 194, 134, 130, 89, 217, 210,\n 186, 32, 140, 39, 91, 103, 212, 26, 87, 32, 72, 144, 228, 230, 117, 99, 188, 50, 15, 69,\n 79, 179, 50, 12, 106, 86, 218, 101, 73, 142, 243, 29, 250, 122, 228, 233, 29, 255, 22,\n 121, 114, 125, 103, 41, 250, 241, 179, 126, 158, 198, 116, 209, 65, 94, 98, 228, 175,\n 169, 96, 3, 9, 233, 133, 214, 55, 161, 164, 103, 80, 85, 24, 186, 64, 167, 92, 131, 53,\n 101, 202, 47, 25, 104, 118, 155, 14, 12, 12, 25, 116, 45, 221, 249, 28, 246, 212, 200,\n 157, 167, 169, 56, 197, 181, 4, 245, 146, 1, 140, 234, 191, 212, 228, 125, 87, 81, 86,\n 119, 30, 63, 129, 143, 32, 96,\n ];\n\n // Prepare inputs of different lengths\n let mut input_511 = [0; 511];\n let mut input_512 = [0; 512]; // Next block\n let mut input_575 = [0; 575];\n let mut input_576 = [0; 576]; // Next block\n for i in 0..input.len() {\n input_511[i] = input[i];\n input_512[i] = input[i];\n input_575[i] = input[i];\n input_576[i] = input[i];\n }\n\n // Compute hashes of all inputs (with same message length)\n let fixed_length_hash = super::sha256(input);\n let var_full_length_hash = sha256_var(input, input.len() as u64);\n let var_length_hash_511 = sha256_var(input_511, input.len() as u64);\n let var_length_hash_512 = sha256_var(input_512, input.len() as u64);\n let var_length_hash_575 = sha256_var(input_575, input.len() as u64);\n let var_length_hash_576 = sha256_var(input_576, input.len() as u64);\n\n // All of the above should have produced the same hash\n assert_eq(var_full_length_hash, fixed_length_hash);\n assert_eq(var_length_hash_511, fixed_length_hash);\n assert_eq(var_length_hash_512, fixed_length_hash);\n assert_eq(var_length_hash_575, fixed_length_hash);\n assert_eq(var_length_hash_576, fixed_length_hash);\n }\n\n #[test]\n fn test_get_item_byte() {\n let fld = make_item(10, 20, 30, 40);\n assert_eq(fld, 0x0a141e28);\n assert_eq(get_item_byte(fld, 0), 10);\n assert_eq(get_item_byte(fld, 4), 10);\n assert_eq(get_item_byte(fld, 6), 30);\n }\n\n #[test]\n fn test_byte_into_item() {\n let fld = make_item(0, 20, 0, 0);\n assert_eq(byte_into_item(20, 1), fld);\n assert_eq(byte_into_item(20, 5), fld);\n }\n\n #[test]\n fn test_set_item_zeros() {\n let fld0 = make_item(10, 20, 30, 40);\n let fld1 = make_item(10, 0, 0, 0);\n assert_eq(set_item_zeros(fld0, 3), fld1);\n assert_eq(set_item_zeros(fld0, 4), 0);\n assert_eq(set_item_zeros(0, 4), 0);\n }\n\n #[test]\n fn test_set_item_byte_then_zeros() {\n let fld0 = make_item(10, 20, 30, 40);\n let fld1 = make_item(10, 50, 0, 0);\n assert_eq(set_item_byte_then_zeros(fld0, 1, 50), fld1);\n }\n\n #[test]\n fn test_build_msg_block_start_0() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48,\n ];\n assert_eq(input.len(), 22);\n let (msg_block, msg_byte_ptr) = unsafe {\n //@safety : testing context\n build_msg_block(input, input.len(), 0)\n };\n assert_eq(msg_byte_ptr, input.len());\n assert_eq(msg_block[0], make_item(input[0], input[1], input[2], input[3]));\n assert_eq(msg_block[1], make_item(input[4], input[5], input[6], input[7]));\n assert_eq(msg_block[5], make_item(input[20], input[21], 0, 0));\n assert_eq(msg_block[6], 0);\n }\n\n #[test]\n fn test_build_msg_block_start_1() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116,\n ];\n assert_eq(input.len(), 68);\n let (msg_block, msg_byte_ptr) = unsafe {\n //@safety : testing context\n build_msg_block(input, input.len(), 64)\n };\n assert_eq(msg_byte_ptr, 4);\n assert_eq(msg_block[0], make_item(input[64], input[65], input[66], input[67]));\n assert_eq(msg_block[1], 0);\n }\n\n #[test]\n fn test_attach_len_to_msg_block() {\n let input: INT_BLOCK = [\n 2152555847, 1397309779, 1936618851, 1262052426, 1936876331, 1985297723, 543702374,\n 1919905082, 1131376244, 1701737517, 1417244773, 978151789, 1697470053, 1920166255,\n 1849316213, 1651139939,\n ];\n let msg_block = unsafe {\n //@safety : testing context\n attach_len_to_msg_block(input, 1, 448)\n };\n assert_eq(msg_block[0], ((1 << 7) as u32) * 256 * 256 * 256);\n assert_eq(msg_block[1], 0);\n assert_eq(msg_block[15], 3584);\n }\n}\n"
|
|
5808
|
+
"243": {
|
|
5809
|
+
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr",
|
|
5810
|
+
"source": "use crate::{\n address::{aztec_address::AztecAddress, salted_initialization_hash::SaltedInitializationHash},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator,\n traits::{Deserialize, Serialize, ToField},\n};\n\nglobal PARTIAL_ADDRESS_LENGTH: u32 = 1;\n\n// Partial address\npub struct PartialAddress {\n pub inner: Field,\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress,\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer),\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash,\n ) -> Self {\n PartialAddress::from_field(poseidon2_hash_with_separator(\n [contract_class_id.to_field(), salted_initialization_hash.to_field()],\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n ))\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"
|
|
5799
5811
|
},
|
|
5800
|
-
"
|
|
5812
|
+
"245": {
|
|
5813
|
+
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr",
|
|
5814
|
+
"source": "use crate::{\n address::aztec_address::AztecAddress, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField,\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\npub struct SaltedInitializationHash {\n pub inner: Field,\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(poseidon2_hash_with_separator(\n [salt, initialization_hash, deployer.to_field()],\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n ))\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"
|
|
5815
|
+
},
|
|
5816
|
+
"250": {
|
|
5817
|
+
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr",
|
|
5818
|
+
"source": "use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress},\n constants::CONTRACT_INSTANCE_LENGTH,\n contract_class_id::ContractClassId,\n public_keys::PublicKeys,\n traits::{Deserialize, Hash, Serialize},\n};\n\npub struct ContractInstance {\n pub salt: Field,\n pub deployer: AztecAddress,\n pub contract_class_id: ContractClassId,\n pub initialization_hash: Field,\n pub public_keys: PublicKeys,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys.eq(other.public_keys)\n & self.initialization_hash.eq(other.initialization_hash)\n & self.contract_class_id.eq(other.contract_class_id)\n & self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n let public_keys_serialized = self.public_keys.serialize();\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n public_keys_serialized[0],\n public_keys_serialized[1],\n public_keys_serialized[2],\n public_keys_serialized[3],\n public_keys_serialized[4],\n public_keys_serialized[5],\n public_keys_serialized[6],\n public_keys_serialized[7],\n public_keys_serialized[8],\n public_keys_serialized[9],\n public_keys_serialized[10],\n public_keys_serialized[11],\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys: PublicKeys::deserialize([\n serialized[4],\n serialized[5],\n serialized[6],\n serialized[7],\n serialized[8],\n serialized[9],\n serialized[10],\n serialized[11],\n serialized[12],\n serialized[13],\n serialized[14],\n serialized[15],\n ]),\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n pub fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer,\n ),\n )\n }\n}\n"
|
|
5819
|
+
},
|
|
5820
|
+
"256": {
|
|
5801
5821
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr",
|
|
5802
5822
|
"source": "/// Utility function to console.log data in the acir simulator.\n/// Example:\n/// debug_log(\"blah blah this is a debug string\");\npub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n\n/// Utility function to console.log data in the acir simulator. This variant receives a format string in which the\n/// `${k}` tokens will be replaced with the k-eth value in the `args` array.\n/// Examples:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe { debug_log_oracle_wrapper(msg, args) };\n}\n\npub unconstrained fn debug_log_oracle_wrapper<let M: u32, let N: u32>(\n msg: str<M>,\n args: [Field; N],\n) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n"
|
|
5803
5823
|
},
|
|
5804
|
-
"
|
|
5824
|
+
"257": {
|
|
5805
5825
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
|
|
5806
5826
|
"source": "use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n log_hash::{LogHash, ScopedLogHash},\n note_hash::ScopedNoteHash,\n nullifier::ScopedNullifier,\n private_log::{PrivateLog, PrivateLogData},\n side_effect::scoped::Scoped,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n },\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc,\n};\nuse super::utils::{arrays::array_concat, field::field_from_bytes};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [tx_hash, note_index_in_tx as Field],\n GENERATOR_INDEX__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), note_hash],\n GENERATOR_INDEX__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique note hashes from siloed note hashes\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n tx_hash: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n compute_unique_note_hash(nonce, siloed_note_hash)\n }\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.value())\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), nullifier],\n GENERATOR_INDEX__OUTER_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn compute_siloed_private_log_field(contract_address: AztecAddress, field: Field) -> Field {\n poseidon2_hash([contract_address.to_field(), field])\n}\n\npub fn silo_private_log(private_log: Scoped<PrivateLogData>) -> PrivateLog {\n if private_log.contract_address.is_zero() {\n private_log.inner.log\n } else {\n let mut fields = private_log.inner.log.fields;\n fields[0] = compute_siloed_private_log_field(private_log.contract_address, fields[0]);\n PrivateLog { fields }\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs =\n [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage())\n}\n\npub fn silo_l2_to_l1_message(\n msg: ScopedL2ToL1Message,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\npub fn compute_tx_logs_hash<let N: u32>(logs: [LogHash; N]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; N * 32];\n for offset in 0..N {\n // TODO: This is not checking that the decomposition is smaller than P\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn verification_key_hash<let N: u32>(key: [Field; N]) -> Field {\n crate::hash::poseidon2_hash(key)\n}\n\n#[inline_always]\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n let inputs_with_separator = array_concat([separator.to_field()], inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\n// Performs a fixed length hash with a subarray of the given input.\n// Useful for SpongeBlob in which we aborb M things and want to check it vs a hash of M elts of an N-len array.\n// Using stdlib poseidon, this will always absorb an extra 1 as a 'variable' hash, and not match spongeblob.squeeze()\n// or any ts implementation. Also checks that any remaining elts not hashed are empty.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_chunks(input, in_len, false);\n sponge.squeeze()\n}\n\n// NB the below is the same as std::hash::poseidon2::Poseidon2::hash(), but replacing a range check with a bit check,\n// and absorbing in chunks of 3 below.\n#[no_predicates]\npub fn poseidon2_cheaper_variable_hash<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_chunks(input, in_len, true);\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if in_len != N {\n sponge.absorb(1);\n }\n sponge.squeeze()\n}\n\n// The below fn reduces gates of a conditional poseidon2 hash by approx 3x (thank you ~* Giant Brain Dev @IlyasRidhuan *~ for the idea)\n// Why? Because when we call stdlib poseidon, we call absorb for each item. When absorbing is conditional, it seems the compiler does not know\n// what cache_size will be when calling absorb, so it assigns the permutation gates for /each i/ rather than /every 3rd i/, which is actually required.\n// The below code forces the compiler to:\n// - absorb normally up to 2 times to set cache_size to 1\n// - absorb in chunks of 3 to ensure perm. only happens every 3rd absorb\n// - absorb normally up to 2 times to add any remaining values to the hash\n// In fixed len hashes, the compiler is able to tell that it will only need to perform the permutation every 3 absorbs.\n// NB: it also replaces unnecessary range checks (i < thing) with a bit check (&= i != thing), which alone reduces the gates of a var. hash by half.\n\n#[no_predicates]\nfn poseidon2_absorb_chunks<let N: u32>(\n input: [Field; N],\n in_len: u32,\n variable: bool,\n) -> std::hash::poseidon2::Poseidon2 {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n // Even though shift is always 1 here, if we input in_len = 0 we get an underflow\n // since we cannot isolate computation branches. The below is just to avoid that.\n let shift = if in_len == 0 { 0 } else { 1 };\n if in_len != 0 {\n // cache_size = 0, init absorb\n sponge.cache[0] = input[0];\n sponge.cache_size = 1;\n // shift = num elts already added to make cache_size 1 = 1 for a fresh sponge\n // M = max_chunks = (N - 1 - (N - 1) % 3) / 3: (must be written as a fn of N to compile)\n // max_remainder = (N - 1) % 3;\n // max_chunks = (N - 1 - max_remainder) / 3;\n sponge = poseidon2_absorb_chunks_loop::<N, (N - 1 - (N - 1) % 3) / 3>(\n sponge,\n input,\n in_len,\n variable,\n shift,\n );\n }\n sponge\n}\n\n// NB: If it's not required to check that the non-absorbed elts of 'input' are 0s, set skip_0_check=true\n#[no_predicates]\npub fn poseidon2_absorb_chunks_existing_sponge<let N: u32>(\n in_sponge: std::hash::poseidon2::Poseidon2,\n input: [Field; N],\n in_len: u32,\n skip_0_check: bool,\n) -> std::hash::poseidon2::Poseidon2 {\n let mut sponge = in_sponge;\n // 'shift' is to account for already added inputs\n let mut shift = 0;\n // 'stop' is to avoid an underflow when inputting in_len = 0\n let mut stop = false;\n for i in 0..3 {\n if shift == in_len {\n stop = true;\n }\n if (sponge.cache_size != 1) & (!stop) {\n sponge.absorb(input[i]);\n shift += 1;\n }\n }\n sponge = if stop {\n sponge\n } else {\n // max_chunks = (N - (N % 3)) / 3;\n poseidon2_absorb_chunks_loop::<N, (N - (N % 3)) / 3>(\n sponge,\n input,\n in_len,\n skip_0_check,\n shift,\n )\n };\n sponge\n}\n\n// The below is the loop to absorb elts into a poseidon sponge in chunks of 3\n// shift - the num of elts already absorbed to ensure the sponge's cache_size = 1\n// M - the max number of chunks required to absorb N things (must be comptime to compile)\n// NB: The 0 checks ('Found non-zero field...') are messy, but having a separate loop over N to check\n// for 0s costs 3N gates. Current approach is approx 2N gates.\n#[no_predicates]\nfn poseidon2_absorb_chunks_loop<let N: u32, let M: u32>(\n in_sponge: std::hash::poseidon2::Poseidon2,\n input: [Field; N],\n in_len: u32,\n variable: bool,\n shift: u32,\n) -> std::hash::poseidon2::Poseidon2 {\n assert(in_len <= N, \"Given in_len to absorb is larger than the input array len\");\n // When we have an existing sponge, we may have a shift of 0, and the final 'k+2' below = N\n // The below avoids an overflow\n let skip_last = 3 * M == N;\n // Writing in_sponge: &mut does not compile\n let mut sponge = in_sponge;\n let mut should_add = true;\n // The num of things left over after absorbing in 3s\n let remainder = (in_len - shift) % 3;\n // The num of chunks of 3 to absorb (maximum M)\n let chunks = (in_len - shift - remainder) / 3;\n for i in 0..M {\n // Now we loop through cache size = 1 -> 3\n should_add &= i != chunks;\n // This is the index at the start of the chunk (for readability)\n let k = 3 * i + shift;\n if should_add {\n // cache_size = 1, 2 => just assign\n sponge.cache[1] = input[k];\n sponge.cache[2] = input[k + 1];\n // cache_size = 3 => duplex + perm\n for j in 0..3 {\n sponge.state[j] += sponge.cache[j];\n }\n sponge.state = std::hash::poseidon2_permutation(sponge.state, 4);\n sponge.cache[0] = input[k + 2];\n // cache_size is now 1 again, repeat loop\n } else if (!variable) & (i != chunks) {\n // if we are hashing a fixed len array which is a subarray, we check the remaining elts are 0\n // NB: we don't check at i == chunks, because that chunk contains elts to be absorbed or checked below\n let last_0 = if (i == M - 1) & (skip_last) {\n 0\n } else {\n input[k + 2]\n };\n let all_0 = (input[k] == 0) & (input[k + 1] == 0) & (last_0 == 0);\n assert(all_0, \"Found non-zero field after breakpoint\");\n }\n }\n // we have 'remainder' num of items left to absorb\n should_add = true;\n // below is to avoid overflows (i.e. if inlen is close to N)\n let mut should_check = !variable;\n for i in 0..3 {\n should_add &= i != remainder;\n should_check &= in_len - remainder + i != N;\n if should_add {\n // we want to absorb the final 'remainder' items\n sponge.absorb(input[in_len - remainder + i]);\n } else if should_check {\n assert(input[in_len - remainder + i] == 0, \"Found non-zero field after breakpoint\");\n }\n }\n sponge\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n let mut fields = [0; (N + 30) / 31];\n let mut field_index = 0;\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n fields[field_index] = field_from_bytes(current_field, false);\n current_field = [0; 31];\n field_index += 1;\n }\n }\n if field_index != fields.len() {\n fields[field_index] = field_from_bytes(current_field, false);\n }\n poseidon2_hash(fields)\n}\n\n#[test]\nfn poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n let sub_chunk_hash = poseidon2_hash_subarray(input, in_len);\n let fixed_len_hash = std::hash::poseidon2::Poseidon2::hash(fixed_input, fixed_input.len());\n assert(sub_chunk_hash == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_matches_variable() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n for i in 0..in_len {\n input[i] = 3;\n }\n let variable_chunk_hash = poseidon2_cheaper_variable_hash(input, in_len);\n let variable_len_hash = std::hash::poseidon2::Poseidon2::hash(input, in_len);\n assert(variable_chunk_hash == variable_len_hash);\n}\n\n#[test]\nfn existing_sponge_poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n // absorb 250 of the 501 things\n let two_pow_64 = 18446744073709551616;\n let empty_sponge = std::hash::poseidon2::Poseidon2::new((in_len as Field) * two_pow_64);\n let first_sponge = poseidon2_absorb_chunks_existing_sponge(empty_sponge, input, 250, true);\n // now absorb the final 251 (since they are all 3s, im being lazy and not making a new array)\n let mut final_sponge = poseidon2_absorb_chunks_existing_sponge(first_sponge, input, 251, true);\n let fixed_len_hash = std::hash::poseidon2::Poseidon2::hash(fixed_input, fixed_input.len());\n assert(final_sponge.squeeze() == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_empty_inputs() {\n let in_len = 0;\n let mut input: [Field; 4096] = [0; 4096];\n let mut contructed_empty_sponge = poseidon2_absorb_chunks(input, in_len, true);\n let mut first_sponge =\n poseidon2_absorb_chunks_existing_sponge(contructed_empty_sponge, input, in_len, true);\n assert(first_sponge.squeeze() == contructed_empty_sponge.squeeze());\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3),\n },\n version,\n chainId,\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"
|
|
5807
5827
|
},
|
|
5808
|
-
"
|
|
5809
|
-
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/
|
|
5810
|
-
"source": "
|
|
5828
|
+
"258": {
|
|
5829
|
+
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/indexed_tagging_secret.nr",
|
|
5830
|
+
"source": "use crate::traits::{Deserialize, Serialize};\nuse super::{address::aztec_address::AztecAddress, hash::poseidon2_hash};\nuse std::meta::derive;\n\npub global INDEXED_TAGGING_SECRET_LENGTH: u32 = 2;\n\n#[derive(Serialize, Deserialize)]\npub struct IndexedTaggingSecret {\n app_tagging_secret: Field,\n index: u32,\n}\n\nimpl IndexedTaggingSecret {\n pub fn compute_tag(self, recipient: AztecAddress) -> Field {\n poseidon2_hash(\n [self.app_tagging_secret, recipient.to_field(), self.index as Field],\n )\n }\n}\n"
|
|
5811
5831
|
},
|
|
5812
|
-
"
|
|
5813
|
-
"path": "/
|
|
5814
|
-
"source": "
|
|
5832
|
+
"26": {
|
|
5833
|
+
"path": "std/hash/poseidon2.nr",
|
|
5834
|
+
"source": "use crate::default::Default;\nuse crate::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size, message_size != N)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"
|
|
5835
|
+
},
|
|
5836
|
+
"27": {
|
|
5837
|
+
"path": "std/hash/sha256.nr",
|
|
5838
|
+
"source": "use crate::runtime::is_unconstrained;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// A message block is up to 64 bytes taken from the input.\nglobal BLOCK_SIZE: u32 = 64;\n\n// The first index in the block where the 8 byte message size will be written.\nglobal MSG_SIZE_PTR: u32 = 56;\n\n// Size of the message block when packed as 4-byte integer array.\nglobal INT_BLOCK_SIZE: u32 = 16;\n\n// A `u32` integer consists of 4 bytes.\nglobal INT_SIZE: u32 = 4;\n\n// Index of the integer in the `INT_BLOCK` where the length is written.\nglobal INT_SIZE_PTR: u32 = MSG_SIZE_PTR / INT_SIZE;\n\n// Magic numbers for bit shifting.\n// Works with actual bit shifting as well as the compiler turns them into * and /\n// but circuit execution appears to be 10% faster this way.\nglobal TWO_POW_8: u32 = 256;\nglobal TWO_POW_16: u32 = TWO_POW_8 * 256;\nglobal TWO_POW_24: u32 = TWO_POW_16 * 256;\nglobal TWO_POW_32: u64 = TWO_POW_24 as u64 * 256;\n\n// Index of a byte in a 64 byte block; ie. 0..=63\ntype BLOCK_BYTE_PTR = u32;\n\n// The foreign function to compress blocks works on 16 pieces of 4-byte integers, instead of 64 bytes.\ntype INT_BLOCK = [u32; INT_BLOCK_SIZE];\n\n// A message block is a slice of the original message of a fixed size,\n// potentially padded with zeros, with neighbouring 4 bytes packed into integers.\ntype MSG_BLOCK = INT_BLOCK;\n\n// The hash is 32 bytes.\ntype HASH = [u8; 32];\n\n// The state accumulates the blocks.\n// Its overall size is the same as the `HASH`.\ntype STATE = [u32; 8];\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> HASH\n// docs:end:sha256\n{\n digest(input)\n}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: INT_BLOCK, _state: STATE) -> STATE {}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> HASH {\n sha256_var(msg, N as u64)\n}\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> HASH {\n let message_size = message_size as u32;\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n // Intermediate hash, starting with the canonical initial value\n let mut h: STATE = [\n 1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635,\n 1541459225,\n ];\n // Pointer into msg_block on a 64 byte scale\n let mut msg_byte_ptr = 0;\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n /*@safety : the msg_block is checked below in verify_msg_block*/\n build_msg_block(msg, message_size, msg_start)\n };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if (msg_start < message_size) & (msg_byte_ptr == BLOCK_SIZE) {\n h = sha256_compression(msg_block, h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n //@safety : the msg_block is checked below in verify_msg_block\n build_msg_block(msg, message_size, msg_start)\n };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n verify_msg_block_padding(msg_block, msg_byte_ptr);\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n // If we had modulo == 0 then it means the last block was full,\n // and we can reset the pointer to zero to overwrite it.\n if msg_byte_ptr == BLOCK_SIZE {\n msg_byte_ptr = 0;\n }\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n // Here we rely on the fact that everything beyond the available input is set to 0.\n msg_block = update_block_item(\n msg_block,\n msg_byte_ptr,\n |msg_item| set_item_byte_then_zeros(msg_item, msg_byte_ptr, 1 << 7),\n );\n msg_byte_ptr = msg_byte_ptr + 1;\n let last_block = msg_block;\n\n // If we don't have room to write the size, compress the block and reset it.\n if msg_byte_ptr > MSG_SIZE_PTR {\n h = sha256_compression(msg_block, h);\n // `attach_len_to_msg_block` will zero out everything after the `msg_byte_ptr`.\n msg_byte_ptr = 0;\n }\n\n msg_block = unsafe {\n //@safety : the msg_len is checked below in verify_msg_len\n attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size)\n };\n\n if !is_unconstrained() {\n verify_msg_len(msg_block, last_block, msg_byte_ptr, message_size);\n }\n\n hash_final_block(msg_block, h)\n}\n\n// Take `BLOCK_SIZE` number of bytes from `msg` starting at `msg_start`.\n// Returns the block and the length that has been copied rather than padded with zeros.\nunconstrained fn build_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_start: u32,\n) -> (MSG_BLOCK, BLOCK_BYTE_PTR) {\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n\n // We insert `BLOCK_SIZE` bytes (or up to the end of the message)\n let block_input = if msg_start + BLOCK_SIZE > message_size {\n if message_size < msg_start {\n // This function is sometimes called with `msg_start` past the end of the message.\n // In this case we return an empty block and zero pointer to signal that the result should be ignored.\n 0\n } else {\n message_size - msg_start\n }\n } else {\n BLOCK_SIZE\n };\n\n // Figure out the number of items in the int array that we have to pack.\n // e.g. if the input is [0,1,2,3,4,5] then we need to pack it as 2 items: [0123, 4500]\n let mut int_input = block_input / INT_SIZE;\n if block_input % INT_SIZE != 0 {\n int_input = int_input + 1;\n };\n\n for i in 0..int_input {\n let mut msg_item: u32 = 0;\n // Always construct the integer as 4 bytes, even if it means going beyond the input.\n for j in 0..INT_SIZE {\n let k = i * INT_SIZE + j;\n let msg_byte = if k < block_input {\n msg[msg_start + k]\n } else {\n 0\n };\n msg_item = lshift8(msg_item, 1) + msg_byte as u32;\n }\n msg_block[i] = msg_item;\n }\n\n // Returning the index as if it was a 64 byte array.\n // We have to project it down to 16 items and bit shifting to get a byte back if we need it.\n (msg_block, block_input)\n}\n\n// Verify the block we are compressing was appropriately constructed by `build_msg_block`\n// and matches the input data. Returns the index of the first unset item.\n// If `message_size` is less than `msg_start` then this is called with the old non-empty block;\n// in that case we can skip verification, ie. no need to check that everything is zero.\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_block: MSG_BLOCK,\n msg_start: u32,\n) -> BLOCK_BYTE_PTR {\n let mut msg_byte_ptr = 0;\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n // We might have to go beyond the input to pad the fields.\n if msg_end % INT_SIZE != 0 {\n msg_end = msg_end + INT_SIZE - msg_end % INT_SIZE;\n }\n\n // Reconstructed packed item.\n let mut msg_item: u32 = 0;\n\n // Inclusive at the end so that we can compare the last item.\n let mut i: u32 = 0;\n for k in msg_start..=msg_end {\n if k % INT_SIZE == 0 {\n // If we consumed some input we can compare against the block.\n if (msg_start < message_size) & (k > msg_start) {\n assert_eq(msg_block[i], msg_item as u32);\n i = i + 1;\n msg_item = 0;\n }\n }\n // Shift the accumulator\n msg_item = lshift8(msg_item, 1);\n // If we have input to consume, add it at the rightmost position.\n if k < message_size & k < msg_end {\n msg_item = msg_item + msg[k] as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\n// Verify the block we are compressing was appropriately padded with zeros by `build_msg_block`.\n// This is only relevant for the last, potentially partially filled block.\nfn verify_msg_block_padding(msg_block: MSG_BLOCK, msg_byte_ptr: BLOCK_BYTE_PTR) {\n // Check all the way to the end of the block.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_BLOCK_SIZE);\n}\n\n// Verify that a region of ints in the message block are (partially) zeroed,\n// up to an (exclusive) maximum which can either be the end of the block\n// or just where the size is to be written.\nfn verify_msg_block_zeros(\n msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n max_int_byte_ptr: u32,\n) {\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // First integer which is supposed to be (partially) zero.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n let zeros = INT_SIZE - modulo;\n let mask = if zeros == 3 {\n TWO_POW_24\n } else if zeros == 2 {\n TWO_POW_16\n } else {\n TWO_POW_8\n };\n assert_eq(msg_block[int_byte_ptr] % mask, zero);\n int_byte_ptr = int_byte_ptr + 1;\n }\n\n // Check the rest of the items.\n for i in 0..max_int_byte_ptr {\n if i >= int_byte_ptr {\n assert_eq(msg_block[i], zero);\n }\n }\n}\n\n// Verify that up to the byte pointer the two blocks are equal.\n// At the byte pointer the new block can be partially zeroed.\nfn verify_msg_block_equals_last(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n) {\n // msg_byte_ptr is the position at which they are no longer have to be the same.\n // First integer which is supposed to be (partially) zero contains that pointer.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Reconstruct the partially zero item from the last block.\n let last_field = last_block[int_byte_ptr];\n let mut msg_item: u32 = 0;\n // Reset to where they are still equal.\n msg_byte_ptr = msg_byte_ptr - modulo;\n for i in 0..INT_SIZE {\n msg_item = lshift8(msg_item, 1);\n if i < modulo {\n msg_item = msg_item + get_item_byte(last_field, msg_byte_ptr) as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n assert_eq(msg_block[int_byte_ptr], msg_item);\n }\n\n for i in 0..INT_SIZE_PTR {\n if i < int_byte_ptr {\n assert_eq(msg_block[i], last_block[i]);\n }\n }\n}\n\n// Apply a function on the block item which the pointer indicates.\nfn update_block_item<Env>(\n mut msg_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n f: fn[Env](u32) -> u32,\n) -> MSG_BLOCK {\n let i = msg_byte_ptr / INT_SIZE;\n msg_block[i] = f(msg_block[i]);\n msg_block\n}\n\n// Set the rightmost `zeros` number of bytes to 0.\nfn set_item_zeros(item: u32, zeros: u8) -> u32 {\n lshift8(rshift8(item, zeros), zeros)\n}\n\n// Replace one byte in the item with a value, and set everything after it to zero.\nfn set_item_byte_then_zeros(msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR, msg_byte: u8) -> u32 {\n let zeros = INT_SIZE - msg_byte_ptr % INT_SIZE;\n let zeroed_item = set_item_zeros(msg_item, zeros as u8);\n let new_item = byte_into_item(msg_byte, msg_byte_ptr);\n zeroed_item + new_item\n}\n\n// Get a byte of a message item according to its overall position in the `BLOCK_SIZE` space.\nfn get_item_byte(mut msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR) -> u8 {\n // How many times do we have to shift to the right to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n msg_item = rshift8(msg_item, shifts as u8);\n // At this point the byte we want is in the rightmost position.\n msg_item as u8\n}\n\n// Project a byte into a position in a field based on the overall block pointer.\n// For example putting 1 into pointer 5 would be 100, because overall we would\n// have [____, 0100] with indexes [0123,4567].\nfn byte_into_item(msg_byte: u8, msg_byte_ptr: BLOCK_BYTE_PTR) -> u32 {\n let mut msg_item = msg_byte as u32;\n // How many times do we have to shift to the left to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n lshift8(msg_item, shifts as u8)\n}\n\n// Construct a field out of 4 bytes.\nfn make_item(b0: u8, b1: u8, b2: u8, b3: u8) -> u32 {\n let mut item = b0 as u32;\n item = lshift8(item, 1) + b1 as u32;\n item = lshift8(item, 1) + b2 as u32;\n item = lshift8(item, 1) + b3 as u32;\n item\n}\n\n// Shift by 8 bits to the left between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise multiplies by 256.\nfn lshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n if item == 0 {\n 0\n } else {\n // Brillig wouldn't shift 0<<4 without overflow.\n item << (8 * shifts)\n }\n } else {\n // We can do a for loop up to INT_SIZE or an if-else.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item * TWO_POW_8\n } else if shifts == 2 {\n item * TWO_POW_16\n } else if shifts == 3 {\n item * TWO_POW_24\n } else {\n // Doesn't make sense, but it's most likely called on 0 anyway.\n 0\n }\n }\n}\n\n// Shift by 8 bits to the right between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise divides by 256.\nfn rshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n item >> (8 * shifts)\n } else {\n // Division wouldn't work on `Field`.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item / TWO_POW_8\n } else if shifts == 2 {\n item / TWO_POW_16\n } else if shifts == 3 {\n item / TWO_POW_24\n } else {\n 0\n }\n }\n}\n\n// Zero out all bytes between the end of the message and where the length is appended,\n// then write the length into the last 8 bytes of the block.\nunconstrained fn attach_len_to_msg_block(\n mut msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) -> MSG_BLOCK {\n // We assume that `msg_byte_ptr` is less than 57 because if not then it is reset to zero before calling this function.\n // In any case, fill blocks up with zeros until the last 64 bits (i.e. until msg_byte_ptr = 56).\n // There can be one item which has to be partially zeroed.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Index of the block in which we find the item we need to partially zero.\n let i = msg_byte_ptr / INT_SIZE;\n let zeros = INT_SIZE - modulo;\n msg_block[i] = set_item_zeros(msg_block[i], zeros as u8);\n msg_byte_ptr = msg_byte_ptr + zeros;\n }\n\n // The rest can be zeroed without bit shifting anything.\n for i in (msg_byte_ptr / INT_SIZE)..INT_SIZE_PTR {\n msg_block[i] = 0;\n }\n\n // Set the last two 4 byte ints as the first/second half of the 8 bytes of the length.\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for i in 0..=1 {\n let shift = i * 4;\n msg_block[INT_SIZE_PTR + i] = make_item(\n len_bytes[shift],\n len_bytes[shift + 1],\n len_bytes[shift + 2],\n len_bytes[shift + 3],\n );\n }\n msg_block\n}\n\n// Verify that the message length was correctly written by `attach_len_to_msg_block`,\n// and that everything between the byte pointer and the size pointer was zeroed,\n// and that everything before the byte pointer was untouched.\nfn verify_msg_len(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) {\n // Check zeros up to the size pointer.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_SIZE_PTR);\n\n // Check that up to the pointer we match the last block.\n verify_msg_block_equals_last(msg_block, last_block, msg_byte_ptr);\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let mut reconstructed_len: u64 = 0;\n for i in INT_SIZE_PTR..INT_BLOCK_SIZE {\n reconstructed_len = reconstructed_len * TWO_POW_32;\n reconstructed_len = reconstructed_len + msg_block[i] as u64;\n }\n let len = 8 * message_size as u64;\n assert_eq(reconstructed_len, len);\n}\n\n// Perform the final compression, then transform the `STATE` into `HASH`.\nfn hash_final_block(msg_block: MSG_BLOCK, mut state: STATE) -> HASH {\n let mut out_h: HASH = [0; 32]; // Digest as sequence of bytes\n // Hash final padded block\n state = sha256_compression(msg_block, state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[j] as Field).to_be_bytes();\n for k in 0..4 {\n out_h[4 * j + k] = h_bytes[k];\n }\n }\n\n out_h\n}\n\nmod tests {\n use super::{\n attach_len_to_msg_block, build_msg_block, byte_into_item, get_item_byte, make_item,\n set_item_byte_then_zeros, set_item_zeros,\n };\n use super::INT_BLOCK;\n use super::sha256_var;\n\n #[test]\n fn smoke_test() {\n let input = [0xbd];\n let result = [\n 0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d,\n 0x05, 0x70, 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0,\n 0x8f, 0xfe, 0x73, 0x2b,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116,\n ];\n let result = [\n 91, 122, 146, 93, 52, 109, 133, 148, 171, 61, 156, 70, 189, 238, 153, 7, 222, 184, 94,\n 24, 65, 114, 192, 244, 207, 199, 87, 232, 192, 224, 171, 207,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_multiple_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115,\n 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49,\n 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46,\n 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115,\n 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97,\n 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45,\n 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55,\n 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32,\n 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32,\n 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64,\n 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103,\n 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115,\n 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101,\n 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109,\n 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56,\n 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48,\n 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75,\n 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67,\n 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101,\n 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99,\n ];\n let result = [\n 116, 90, 151, 31, 78, 22, 138, 180, 211, 189, 69, 76, 227, 200, 155, 29, 59, 123, 154,\n 60, 47, 153, 203, 129, 157, 251, 48, 2, 79, 11, 65, 47,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_under_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59,\n ];\n let result = [\n 143, 140, 76, 173, 222, 123, 102, 68, 70, 149, 207, 43, 39, 61, 34, 79, 216, 252, 213,\n 165, 74, 16, 110, 74, 29, 64, 138, 167, 30, 1, 9, 119,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_not_block_multiple() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115,\n 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49,\n 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46,\n 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115,\n 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97,\n 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45,\n 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55,\n 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32,\n 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32,\n 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64,\n 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103,\n 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115,\n 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101,\n 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109,\n 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56,\n 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48,\n 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75,\n 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67,\n 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101,\n 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99, 116, 58, 77, 101, 115, 115, 97,\n 103, 101, 45, 73, 100, 58, 68, 97, 116, 101, 58, 116, 111, 59, 32, 98, 61,\n ];\n let result = [\n 112, 144, 73, 182, 208, 98, 9, 238, 54, 229, 61, 145, 222, 17, 72, 62, 148, 222, 186,\n 55, 192, 82, 220, 35, 66, 47, 193, 200, 22, 38, 26, 186,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_with_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17,\n 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12,\n 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48,\n 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6,\n 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2,\n 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89,\n 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2,\n 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75,\n 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1,\n 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189,\n 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4,\n 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45,\n 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4,\n 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188,\n 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212,\n 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53,\n ];\n let message_size = 297;\n assert_eq(sha256_var(input, message_size), result);\n }\n\n #[test]\n fn msg_big_no_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17,\n 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12,\n 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48,\n 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6,\n 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2,\n 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89,\n 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2,\n 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75,\n 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1,\n 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189,\n 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4,\n 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45,\n 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4,\n 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188,\n 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38,\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212,\n 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn same_msg_len_variable_padding() {\n let input = [\n 29, 81, 165, 84, 243, 114, 101, 37, 242, 146, 127, 99, 69, 145, 39, 72, 213, 39, 253,\n 179, 218, 37, 217, 201, 172, 93, 198, 50, 249, 70, 15, 30, 162, 112, 187, 40, 140, 9,\n 236, 53, 32, 44, 38, 163, 113, 254, 192, 197, 44, 89, 71, 130, 169, 242, 17, 211, 214,\n 72, 19, 178, 186, 168, 147, 127, 99, 101, 252, 227, 8, 147, 150, 85, 97, 158, 17, 107,\n 218, 244, 82, 113, 247, 91, 208, 214, 60, 244, 87, 137, 173, 201, 130, 18, 66, 56, 198,\n 149, 207, 189, 175, 120, 123, 224, 177, 167, 251, 159, 143, 110, 68, 183, 189, 70, 126,\n 32, 35, 164, 44, 30, 44, 12, 65, 18, 62, 239, 242, 2, 248, 104, 2, 178, 64, 28, 126, 36,\n 137, 24, 14, 116, 91, 98, 90, 159, 218, 102, 45, 11, 110, 223, 245, 184, 52, 99, 59,\n 245, 136, 175, 3, 72, 164, 146, 145, 116, 22, 66, 24, 49, 193, 121, 3, 60, 37, 41, 97,\n 3, 190, 66, 195, 225, 63, 46, 3, 118, 4, 208, 15, 1, 40, 254, 235, 151, 123, 70, 180,\n 170, 44, 172, 90, 4, 254, 53, 239, 116, 246, 67, 56, 129, 61, 22, 169, 213, 65, 27, 216,\n 116, 162, 239, 214, 207, 126, 177, 20, 100, 25, 48, 143, 84, 215, 70, 197, 53, 65, 70,\n 86, 172, 61, 62, 9, 212, 167, 169, 133, 41, 126, 213, 196, 33, 192, 238, 0, 63, 246,\n 215, 58, 128, 110, 101, 92, 3, 170, 214, 130, 149, 52, 81, 125, 118, 233, 3, 118, 193,\n 104, 207, 120, 115, 77, 253, 191, 122, 0, 107, 164, 207, 113, 81, 169, 36, 201, 228, 74,\n 134, 131, 218, 178, 35, 30, 216, 101, 2, 103, 174, 87, 95, 50, 50, 215, 157, 5, 210,\n 188, 54, 211, 78, 45, 199, 96, 121, 241, 241, 176, 226, 194, 134, 130, 89, 217, 210,\n 186, 32, 140, 39, 91, 103, 212, 26, 87, 32, 72, 144, 228, 230, 117, 99, 188, 50, 15, 69,\n 79, 179, 50, 12, 106, 86, 218, 101, 73, 142, 243, 29, 250, 122, 228, 233, 29, 255, 22,\n 121, 114, 125, 103, 41, 250, 241, 179, 126, 158, 198, 116, 209, 65, 94, 98, 228, 175,\n 169, 96, 3, 9, 233, 133, 214, 55, 161, 164, 103, 80, 85, 24, 186, 64, 167, 92, 131, 53,\n 101, 202, 47, 25, 104, 118, 155, 14, 12, 12, 25, 116, 45, 221, 249, 28, 246, 212, 200,\n 157, 167, 169, 56, 197, 181, 4, 245, 146, 1, 140, 234, 191, 212, 228, 125, 87, 81, 86,\n 119, 30, 63, 129, 143, 32, 96,\n ];\n\n // Prepare inputs of different lengths\n let mut input_511 = [0; 511];\n let mut input_512 = [0; 512]; // Next block\n let mut input_575 = [0; 575];\n let mut input_576 = [0; 576]; // Next block\n for i in 0..input.len() {\n input_511[i] = input[i];\n input_512[i] = input[i];\n input_575[i] = input[i];\n input_576[i] = input[i];\n }\n\n // Compute hashes of all inputs (with same message length)\n let fixed_length_hash = super::sha256(input);\n let var_full_length_hash = sha256_var(input, input.len() as u64);\n let var_length_hash_511 = sha256_var(input_511, input.len() as u64);\n let var_length_hash_512 = sha256_var(input_512, input.len() as u64);\n let var_length_hash_575 = sha256_var(input_575, input.len() as u64);\n let var_length_hash_576 = sha256_var(input_576, input.len() as u64);\n\n // All of the above should have produced the same hash\n assert_eq(var_full_length_hash, fixed_length_hash);\n assert_eq(var_length_hash_511, fixed_length_hash);\n assert_eq(var_length_hash_512, fixed_length_hash);\n assert_eq(var_length_hash_575, fixed_length_hash);\n assert_eq(var_length_hash_576, fixed_length_hash);\n }\n\n #[test]\n fn test_get_item_byte() {\n let fld = make_item(10, 20, 30, 40);\n assert_eq(fld, 0x0a141e28);\n assert_eq(get_item_byte(fld, 0), 10);\n assert_eq(get_item_byte(fld, 4), 10);\n assert_eq(get_item_byte(fld, 6), 30);\n }\n\n #[test]\n fn test_byte_into_item() {\n let fld = make_item(0, 20, 0, 0);\n assert_eq(byte_into_item(20, 1), fld);\n assert_eq(byte_into_item(20, 5), fld);\n }\n\n #[test]\n fn test_set_item_zeros() {\n let fld0 = make_item(10, 20, 30, 40);\n let fld1 = make_item(10, 0, 0, 0);\n assert_eq(set_item_zeros(fld0, 3), fld1);\n assert_eq(set_item_zeros(fld0, 4), 0);\n assert_eq(set_item_zeros(0, 4), 0);\n }\n\n #[test]\n fn test_set_item_byte_then_zeros() {\n let fld0 = make_item(10, 20, 30, 40);\n let fld1 = make_item(10, 50, 0, 0);\n assert_eq(set_item_byte_then_zeros(fld0, 1, 50), fld1);\n }\n\n #[test]\n fn test_build_msg_block_start_0() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48,\n ];\n assert_eq(input.len(), 22);\n let (msg_block, msg_byte_ptr) = unsafe {\n //@safety : testing context\n build_msg_block(input, input.len(), 0)\n };\n assert_eq(msg_byte_ptr, input.len());\n assert_eq(msg_block[0], make_item(input[0], input[1], input[2], input[3]));\n assert_eq(msg_block[1], make_item(input[4], input[5], input[6], input[7]));\n assert_eq(msg_block[5], make_item(input[20], input[21], 0, 0));\n assert_eq(msg_block[6], 0);\n }\n\n #[test]\n fn test_build_msg_block_start_1() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116,\n ];\n assert_eq(input.len(), 68);\n let (msg_block, msg_byte_ptr) = unsafe {\n //@safety : testing context\n build_msg_block(input, input.len(), 64)\n };\n assert_eq(msg_byte_ptr, 4);\n assert_eq(msg_block[0], make_item(input[64], input[65], input[66], input[67]));\n assert_eq(msg_block[1], 0);\n }\n\n #[test]\n fn test_attach_len_to_msg_block() {\n let input: INT_BLOCK = [\n 2152555847, 1397309779, 1936618851, 1262052426, 1936876331, 1985297723, 543702374,\n 1919905082, 1131376244, 1701737517, 1417244773, 978151789, 1697470053, 1920166255,\n 1849316213, 1651139939,\n ];\n let msg_block = unsafe {\n //@safety : testing context\n attach_len_to_msg_block(input, 1, 448)\n };\n assert_eq(msg_block[0], ((1 << 7) as u32) * 256 * 256 * 256);\n assert_eq(msg_block[1], 0);\n assert_eq(msg_block[15], 3584);\n }\n}\n"
|
|
5815
5839
|
},
|
|
5816
|
-
"
|
|
5840
|
+
"273": {
|
|
5817
5841
|
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/point.nr",
|
|
5818
5842
|
"source": "pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{hash::poseidon2_hash, traits::{Deserialize, Empty, Hash, Serialize}};\n\npub global POINT_LENGTH: u32 = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point { x: 0, y: 0, is_infinite: false }\n }\n}\n\nimpl Deserialize<POINT_LENGTH> for Point {\n fn deserialize(serialized: [Field; POINT_LENGTH]) -> Point {\n Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool }\n }\n}\n"
|
|
5819
5843
|
},
|
|
5820
|
-
"
|
|
5821
|
-
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/
|
|
5822
|
-
"source": "use crate::{\n address::
|
|
5823
|
-
},
|
|
5824
|
-
"311": {
|
|
5825
|
-
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr",
|
|
5826
|
-
"source": "use crate::{\n address::{aztec_address::AztecAddress, salted_initialization_hash::SaltedInitializationHash},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator,\n traits::{Deserialize, Serialize, ToField},\n};\n\nglobal PARTIAL_ADDRESS_LENGTH: u32 = 1;\n\n// Partial address\npub struct PartialAddress {\n pub inner: Field,\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress,\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer),\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash,\n ) -> Self {\n PartialAddress::from_field(poseidon2_hash_with_separator(\n [contract_class_id.to_field(), salted_initialization_hash.to_field()],\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n ))\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"
|
|
5827
|
-
},
|
|
5828
|
-
"312": {
|
|
5829
|
-
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
|
|
5830
|
-
"source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{\n partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n },\n constants::{\n AZTEC_ADDRESS_LENGTH, FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n MAX_FIELD_VALUE,\n },\n contract_class_id::ContractClassId,\n hash::{poseidon2_hash_with_separator, private_functions_root_from_siblings},\n merkle_tree::membership::MembershipWitness,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n traits::{Deserialize, Empty, FromField, Serialize, ToField},\n};\n\n// We do below because `use crate::point::Point;` does not work\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\nuse crate::public_keys::AddressPoint;\nuse ec::{pow, sqrt};\nuse std::embedded_curve_ops::{EmbeddedCurveScalar, fixed_base_scalar_mul as derive_public_key};\n\n// Aztec address\npub struct AztecAddress {\n pub inner: Field,\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn to_address_point(self) -> AddressPoint {\n // We compute the address point by taking our address, setting it to x, and then solving for y in the\n // equation which defines our bn curve:\n // y^2 = x^3 - 17; x = address\n let x = self.inner;\n let y_squared = pow(x, 3) - 17;\n\n // TODO (#8970): Handle cases where we cannot recover a point from an address\n let mut y = sqrt(y_squared);\n\n // If we get a negative y coordinate (any y where y > MAX_FIELD_VALUE / 2), we pin it to the\n // positive one (any value where y <= MAX_FIELD_VALUE / 2) by subtracting it from the Field modulus\n // note: The field modulus is MAX_FIELD_VALUE + 1\n if (!(y.lt(MAX_FIELD_VALUE / 2) | y.eq(MAX_FIELD_VALUE / 2))) {\n y = (MAX_FIELD_VALUE + 1) - y;\n }\n\n AddressPoint { inner: Point { x: self.inner, y, is_infinite: false } }\n }\n\n pub fn compute(public_keys: PublicKeys, partial_address: PartialAddress) -> AztecAddress {\n let public_keys_hash = public_keys.hash();\n\n let pre_address = poseidon2_hash_with_separator(\n [public_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n );\n\n let address_point = derive_public_key(EmbeddedCurveScalar::from_field(pre_address)).add(\n public_keys.ivpk_m.to_point(),\n );\n\n // Note that our address is only the x-coordinate of the full address_point. This is okay because when people want to encrypt something and send it to us\n // they can recover our full point using the x-coordinate (our address itself). To do this, they recompute the y-coordinate according to the equation y^2 = x^3 - 17.\n // When they do this, they may get a positive y-coordinate (a value that is less than or equal to MAX_FIELD_VALUE / 2) or\n // a negative y-coordinate (a value that is more than MAX_FIELD_VALUE), and we cannot dictate which one they get and hence the recovered point may sometimes be different than the one\n // our secrect can decrypt. Regardless though, they should and will always encrypt using point with the positive y-coordinate by convention.\n // This ensures that everyone encrypts to the same point given an arbitrary x-coordinate (address). This is allowed because even though our original point may not have a positive y-coordinate,\n // with our original secret, we will be able to derive the secret to the point with the flipped (and now positive) y-coordinate that everyone encrypts to.\n AztecAddress::from_field(address_point.x)\n }\n\n pub fn compute_from_private_function(\n function_selector: FunctionSelector,\n function_vk_hash: Field,\n function_leaf_membership_witness: MembershipWitness<FUNCTION_TREE_HEIGHT>,\n contract_class_artifact_hash: Field,\n contract_class_public_bytecode_commitment: Field,\n salted_initialization_hash: SaltedInitializationHash,\n public_keys: PublicKeys,\n ) -> Self {\n let private_functions_root = private_functions_root_from_siblings(\n function_selector,\n function_vk_hash,\n function_leaf_membership_witness.leaf_index,\n function_leaf_membership_witness.sibling_path,\n );\n\n let contract_class_id = ContractClassId::compute(\n contract_class_artifact_hash,\n private_functions_root,\n contract_class_public_bytecode_commitment,\n );\n\n // Compute contract address using the preimage which includes the class_id.\n let partial_address = PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n salted_initialization_hash,\n );\n\n AztecAddress::compute(public_keys, partial_address)\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys() {\n let public_keys = PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: 0x22f7fcddfa3ce3e8f0cc8e82d7b94cdd740afa3e77f8e4a63ea78a239432dcab,\n y: 0x0471657de2b6216ade6c506d28fbc22ba8b8ed95c871ad9f3e3984e90d9723a7,\n is_infinite: false,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: 0x111223493147f6785514b1c195bb37a2589f22a6596d30bb2bb145fdc9ca8f1e,\n y: 0x273bbffd678edce8fe30e0deafc4f66d58357c06fd4a820285294b9746c3be95,\n is_infinite: false,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: 0x09115c96e962322ffed6522f57194627136b8d03ac7469109707f5e44190c484,\n y: 0x0c49773308a13d740a7f0d4f0e6163b02c5a408b6f965856b6a491002d073d5b,\n is_infinite: false,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: 0x00d3d81beb009873eb7116327cf47c612d5758ef083d4fda78e9b63980b2a762,\n y: 0x2f567d22d2b02fe1f4ad42db9d58a36afd1983e7e2909d1cab61cafedad6193a,\n is_infinite: false,\n },\n },\n };\n\n let partial_address = PartialAddress::from_field(\n 0x0a7c585381b10f4666044266a02405bf6e01fa564c8517d4ad5823493abd31de,\n );\n\n let address = AztecAddress::compute(public_keys, partial_address);\n\n // The following value was generated by `derivation.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_computed_address_from_partial_and_pubkeys =\n 0x24e4646f58b9fbe7d38e317db8d5636c423fbbdfbe119fc190fe9c64747e0c62;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkeys);\n}\n\n#[test]\nfn compute_preaddress_from_partial_and_pub_keys() {\n let pre_address = poseidon2_hash_with_separator([1, 2], GENERATOR_INDEX__CONTRACT_ADDRESS_V1);\n let expected_computed_preaddress_from_partial_and_pubkey =\n 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(pre_address == expected_computed_preaddress_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"
|
|
5831
|
-
},
|
|
5832
|
-
"317": {
|
|
5833
|
-
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr",
|
|
5834
|
-
"source": "use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress},\n constants::CONTRACT_INSTANCE_LENGTH,\n contract_class_id::ContractClassId,\n public_keys::PublicKeys,\n traits::{Deserialize, Hash, Serialize},\n};\n\npub struct ContractInstance {\n pub salt: Field,\n pub deployer: AztecAddress,\n pub contract_class_id: ContractClassId,\n pub initialization_hash: Field,\n pub public_keys: PublicKeys,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys.eq(other.public_keys)\n & self.initialization_hash.eq(other.initialization_hash)\n & self.contract_class_id.eq(other.contract_class_id)\n & self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n let public_keys_serialized = self.public_keys.serialize();\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n public_keys_serialized[0],\n public_keys_serialized[1],\n public_keys_serialized[2],\n public_keys_serialized[3],\n public_keys_serialized[4],\n public_keys_serialized[5],\n public_keys_serialized[6],\n public_keys_serialized[7],\n public_keys_serialized[8],\n public_keys_serialized[9],\n public_keys_serialized[10],\n public_keys_serialized[11],\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys: PublicKeys::deserialize([\n serialized[4],\n serialized[5],\n serialized[6],\n serialized[7],\n serialized[8],\n serialized[9],\n serialized[10],\n serialized[11],\n serialized[12],\n serialized[13],\n serialized[14],\n serialized[15],\n ]),\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n pub fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer,\n ),\n )\n }\n}\n"
|
|
5844
|
+
"282": {
|
|
5845
|
+
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/public_keys.nr",
|
|
5846
|
+
"source": "use crate::{\n address::public_keys_hash::PublicKeysHash,\n constants::{\n DEFAULT_IVPK_M_X, DEFAULT_IVPK_M_Y, DEFAULT_NPK_M_X, DEFAULT_NPK_M_Y, DEFAULT_OVPK_M_X,\n DEFAULT_OVPK_M_Y, DEFAULT_TPK_M_X, DEFAULT_TPK_M_Y, GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n },\n hash::poseidon2_hash_with_separator,\n point::POINT_LENGTH,\n traits::{Deserialize, Hash, Serialize},\n};\n\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse std::default::Default;\n\npub global PUBLIC_KEYS_LENGTH: u32 = 12;\n\npub struct PublicKeys {\n pub npk_m: NpkM,\n pub ivpk_m: IvpkM,\n pub ovpk_m: OvpkM,\n pub tpk_m: TpkM,\n}\n\npub trait ToPoint {\n fn to_point(self) -> Point;\n}\n\npub struct NpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\npub struct IvpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct OvpkM {\n pub inner: Point,\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct TpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for TpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nimpl Default for PublicKeys {\n fn default() -> Self {\n PublicKeys {\n npk_m: NpkM {\n inner: Point { x: DEFAULT_NPK_M_X, y: DEFAULT_NPK_M_Y, is_infinite: false },\n },\n ivpk_m: IvpkM {\n inner: Point { x: DEFAULT_IVPK_M_X, y: DEFAULT_IVPK_M_Y, is_infinite: false },\n },\n ovpk_m: OvpkM {\n inner: Point { x: DEFAULT_OVPK_M_X, y: DEFAULT_OVPK_M_Y, is_infinite: false },\n },\n tpk_m: TpkM {\n inner: Point { x: DEFAULT_TPK_M_X, y: DEFAULT_TPK_M_Y, is_infinite: false },\n },\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field,\n ))\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field,\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: serialized[0],\n y: serialized[1],\n is_infinite: serialized[2] as bool,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: serialized[3],\n y: serialized[4],\n is_infinite: serialized[5] as bool,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: serialized[6],\n y: serialized[7],\n is_infinite: serialized[8] as bool,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: serialized[9],\n y: serialized[10],\n is_infinite: serialized[11] as bool,\n },\n },\n }\n }\n}\n\npub struct AddressPoint {\n pub inner: Point,\n}\n\nimpl ToPoint for AddressPoint {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[test]\nunconstrained fn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash =\n 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nunconstrained fn compute_default_hash() {\n let keys = PublicKeys::default();\n\n let actual = keys.hash();\n let test_data_default_hash = 0x1d3bf1fb93ae0e9cda83b203dd91c3bfb492a9aecf30ec90e1057eced0f0e62d;\n\n assert(actual.to_field() == test_data_default_hash);\n}\n\n#[test]\nunconstrained fn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"
|
|
5835
5847
|
},
|
|
5836
|
-
"
|
|
5837
|
-
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/
|
|
5838
|
-
"source": "use
|
|
5848
|
+
"318": {
|
|
5849
|
+
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr",
|
|
5850
|
+
"source": "pub mod assert_array_appended;\npub mod assert_array_prepended;\npub mod assert_combined_array;\npub mod assert_combined_transformed_array;\npub mod assert_exposed_sorted_transformed_value_array;\npub mod assert_sorted_array;\npub mod assert_sorted_transformed_value_array;\npub mod assert_split_sorted_transformed_value_arrays;\npub mod assert_split_transformed_value_arrays;\npub mod get_sorted_result;\npub mod get_sorted_tuple;\npub mod sort_by;\npub mod sort_by_counter;\n\n// Re-exports.\npub use assert_array_appended::{\n assert_array_appended, assert_array_appended_and_scoped, assert_array_appended_reversed,\n assert_array_appended_scoped,\n};\npub use assert_array_prepended::assert_array_prepended;\npub use assert_combined_array::{assert_combined_array, combine_arrays};\npub use assert_combined_transformed_array::{\n assert_combined_transformed_array, combine_and_transform_arrays,\n};\npub use assert_exposed_sorted_transformed_value_array::{\n assert_exposed_sorted_transformed_value_array,\n get_order_hints::{get_order_hints_asc, get_order_hints_desc, OrderHint},\n};\npub use assert_sorted_array::assert_sorted_array;\npub use assert_sorted_transformed_value_array::{\n assert_sorted_transformed_value_array, assert_sorted_transformed_value_array_capped_size,\n};\npub use assert_split_sorted_transformed_value_arrays::{\n assert_split_sorted_transformed_value_arrays_asc,\n assert_split_sorted_transformed_value_arrays_desc,\n get_split_order_hints::{get_split_order_hints_asc, get_split_order_hints_desc, SplitOrderHints},\n};\npub use assert_split_transformed_value_arrays::assert_split_transformed_value_arrays;\npub use get_sorted_result::{get_sorted_result, SortedResult};\npub use sort_by_counter::{sort_by_counter_asc, sort_by_counter_desc};\n\nuse crate::traits::{Empty, is_empty};\n\npub fn subarray<let SRC_LEN: u32, let DST_LEN: u32>(\n src: [Field; SRC_LEN],\n offset: u32,\n) -> [Field; DST_LEN] {\n assert(offset + DST_LEN <= SRC_LEN, \"offset too large\");\n\n let mut dst: [Field; DST_LEN] = std::mem::zeroed();\n for i in 0..DST_LEN {\n dst[i] = src[i + offset];\n }\n\n dst\n}\n\n// Helper function to convert a validated array to BoundedVec.\n// Important: Only use it for validated arrays: validate_array(array) should be true.\npub unconstrained fn array_to_bounded_vec<T, let N: u32>(array: [T; N]) -> BoundedVec<T, N>\nwhere\n T: Empty + Eq,\n{\n let len = array_length(array);\n BoundedVec::from_parts_unchecked(array, len)\n}\n\npub unconstrained fn find_index_hint<T, let N: u32, Env>(\n array: [T; N],\n find: fn[Env](T) -> bool,\n) -> u32 {\n let mut index = N;\n for i in 0..N {\n if (index == N) & find(array[i]) {\n index = i;\n }\n }\n index\n}\n\n// Routine which validates that all zero values of an array form a contiguous region at the end, i.e.,\n// of the form: [*,*,*...,0,0,0,0] where any * is non-zero. Note that a full array of non-zero values is\n// valid.\npub fn validate_array<T, let N: u32>(array: [T; N]) -> u32\nwhere\n T: Empty + Eq,\n{\n let mut seen_empty = false;\n let mut length = 0;\n for i in 0..N {\n if is_empty(array[i]) {\n seen_empty = true;\n } else {\n assert(seen_empty == false, \"invalid array\");\n length += 1;\n }\n }\n length\n}\n\n// Helper function to count the number of non-empty elements in a validated array.\n// Important: Only use it for validated arrays: validate_array(array) should be true.\npub fn array_length<T, let N: u32>(array: [T; N]) -> u32\nwhere\n T: Empty + Eq,\n{\n let length = unsafe { find_index_hint(array, |elem: T| is_empty(elem)) };\n if length != 0 {\n assert(!is_empty(array[length - 1]));\n }\n if length != N {\n assert(is_empty(array[length]));\n }\n length\n}\n\npub fn array_concat<T, let N: u32, let M: u32>(array1: [T; N], array2: [T; M]) -> [T; N + M] {\n let mut result = [array1[0]; N + M];\n for i in 1..N {\n result[i] = array1[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n}\n\npub fn array_merge<T, let N: u32>(array1: [T; N], array2: [T; N]) -> [T; N]\nwhere\n T: Empty + Eq,\n{\n let mut result: [T; N] = [T::empty(); N];\n let mut i = 0;\n for elem in array1 {\n if !is_empty(elem) {\n result[i] = elem;\n i += 1;\n }\n }\n for elem in array2 {\n if !is_empty(elem) {\n result[i] = elem;\n i += 1;\n }\n }\n result\n}\n\n// Helper fn to create a subarray from a given array\npub fn array_splice<T, let N: u32, let M: u32>(array: [T; N], offset: u32) -> [T; M]\nwhere\n T: Empty,\n{\n assert(M + offset <= N, \"Subarray length larger than array length\");\n let mut result: [T; M] = [T::empty(); M];\n for i in 0..M {\n result[i] = array[offset + i];\n }\n result\n}\n\npub fn check_permutation<T, let N: u32>(\n original_array: [T; N],\n permuted_array: [T; N],\n original_indexes: [u32; N],\n)\nwhere\n T: Eq + Empty,\n{\n let mut seen_value = [false; N];\n for i in 0..N {\n let index = original_indexes[i];\n let original_value = original_array[index];\n assert(permuted_array[i].eq(original_value), \"Invalid index\");\n assert(!seen_value[index], \"Duplicated index\");\n seen_value[index] = true;\n }\n}\n\n#[test]\nfn smoke_validate_array() {\n let valid_array: [Field; 0] = [];\n assert(validate_array(valid_array) == 0);\n\n let valid_array = [0];\n assert(validate_array(valid_array) == 0);\n\n let valid_array = [3];\n assert(validate_array(valid_array) == 1);\n\n let valid_array = [1, 2, 3];\n assert(validate_array(valid_array) == 3);\n\n let valid_array = [1, 2, 3, 0];\n assert(validate_array(valid_array) == 3);\n\n let valid_array = [1, 2, 3, 0, 0];\n assert(validate_array(valid_array) == 3);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case0() {\n let invalid_array = [0, 1];\n let _ = validate_array(invalid_array);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case1() {\n let invalid_array = [1, 0, 0, 1, 0];\n let _ = validate_array(invalid_array);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case2() {\n let invalid_array = [0, 0, 0, 0, 1];\n let _ = validate_array(invalid_array);\n}\n\n#[test]\nfn test_empty_array_length() {\n assert_eq(array_length([0]), 0);\n assert_eq(array_length([0, 0, 0]), 0);\n}\n\n#[test]\nfn test_array_length() {\n assert_eq(array_length([123]), 1);\n assert_eq(array_length([123, 0, 0]), 1);\n assert_eq(array_length([123, 456]), 2);\n assert_eq(array_length([123, 456, 0]), 2);\n}\n\n#[test]\nfn test_array_length_invalid_arrays() {\n // Result can be misleading (but correct) for invalid arrays.\n assert_eq(array_length([0, 0, 123]), 0);\n assert_eq(array_length([0, 123, 0]), 0);\n assert_eq(array_length([0, 123, 456]), 0);\n assert_eq(array_length([123, 0, 456]), 1);\n}\n\n#[test]\nfn find_index_greater_than_min() {\n let values = [10, 20, 30, 40];\n let min = 22;\n let index = unsafe { find_index_hint(values, |v: Field| min.lt(v)) };\n assert_eq(index, 2);\n}\n\n#[test]\nfn find_index_not_found() {\n let values = [10, 20, 30, 40];\n let min = 100;\n let index = unsafe { find_index_hint(values, |v: Field| min.lt(v)) };\n assert_eq(index, 4);\n}\n\n#[test]\nfn test_array_concat() {\n let array0 = [1, 2, 3];\n let array1 = [4, 5];\n let concated = array_concat(array0, array1);\n assert_eq(concated, [1, 2, 3, 4, 5]);\n}\n\n#[test]\nfn check_permutation_basic_test() {\n let original_array = [1, 2, 3];\n let permuted_array = [3, 1, 2];\n let indexes = [2, 0, 1];\n check_permutation(original_array, permuted_array, indexes);\n}\n\n#[test(should_fail_with = \"Duplicated index\")]\nfn check_permutation_duplicated_index() {\n let original_array = [0, 1, 0];\n let permuted_array = [1, 0, 0];\n let indexes = [1, 0, 0];\n check_permutation(original_array, permuted_array, indexes);\n}\n\n#[test(should_fail_with = \"Invalid index\")]\nfn check_permutation_invalid_index() {\n let original_array = [0, 1, 2];\n let permuted_array = [1, 0, 0];\n let indexes = [1, 0, 2];\n check_permutation(original_array, permuted_array, indexes);\n}\n"
|
|
5839
5851
|
},
|
|
5840
5852
|
"321": {
|
|
5841
|
-
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/
|
|
5842
|
-
"source": "
|
|
5853
|
+
"path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr",
|
|
5854
|
+
"source": "pub struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self) -> [Field; K] {\n let mut result = [0; K];\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array());\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(\n &mut self,\n deserialise: fn([Field; K]) -> T,\n mut result: [T; C],\n ) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"
|
|
5843
5855
|
},
|
|
5844
5856
|
"326": {
|
|
5845
5857
|
"path": "/root/nargo/github.com/noir-lang/ec/v0.1.2/src/lib.nr",
|
|
@@ -5865,65 +5877,53 @@
|
|
|
5865
5877
|
"path": "/build-volume/noir-projects/noir-contracts/contracts/ecdsa_k_account_contract/src/main.nr",
|
|
5866
5878
|
"source": "// Account contract that uses ECDSA signatures for authentication on the same curve as Ethereum.\n// The signing key is stored in an immutable private note and should be different from the signing key.\nuse dep::aztec::macros::aztec;\n\n#[aztec]\ncontract EcdsaKAccount {\n use dep::aztec::{\n encrypted_logs::encrypted_note_emission::encode_and_encrypt_note,\n macros::{functions::{initializer, noinitcheck, private, view}, storage::storage},\n };\n use dep::aztec::prelude::{PrivateContext, PrivateImmutable};\n\n use dep::authwit::{\n account::AccountActions,\n auth_witness::get_auth_witness,\n entrypoint::{app::AppPayload, fee::FeePayload},\n };\n\n use dep::ecdsa_public_key_note::EcdsaPublicKeyNote;\n\n #[storage]\n struct Storage<Context> {\n public_key: PrivateImmutable<EcdsaPublicKeyNote, Context>,\n }\n\n // Creates a new account out of an ECDSA public key to use for signature verification\n #[private]\n #[initializer]\n fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) {\n let this = context.this_address();\n let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this);\n\n storage.public_key.initialize(&mut pub_key_note).emit(encode_and_encrypt_note(\n &mut context,\n this,\n this,\n ));\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts\n #[private]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[private]\n #[noinitcheck]\n #[view]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.public_key.get_note();\n\n // Load auth witness\n let witness: [Field; 64] = unsafe { get_auth_witness(outer_hash) };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify payload signature using Ethereum's signing scheme\n // Note that noir expects the hash of the message/challenge as input to the ECDSA verification.\n let outer_hash_bytes: [u8; 32] = outer_hash.to_be_bytes();\n let hashed_message: [u8; 32] = std::hash::sha256(outer_hash_bytes);\n std::ecdsa_secp256k1::verify_signature(\n public_key.x,\n public_key.y,\n signature,\n hashed_message,\n )\n }\n}\n\n"
|
|
5867
5879
|
},
|
|
5868
|
-
"
|
|
5869
|
-
"path": "/build-volume/noir-projects/aztec-nr/authwit/src/
|
|
5870
|
-
"source": "use dep::aztec::
|
|
5871
|
-
},
|
|
5872
|
-
"66": {
|
|
5873
|
-
"path": "/build-volume/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr",
|
|
5874
|
-
"source": "use crate::entrypoint::function_call::FunctionCall;\nuse dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD,\n hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize},\n};\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: u32 = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: u32 = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS: u32 = 2;\n\n// docs:start:fee-payload-struct\npub struct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage()\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__FEE_PAYLOAD)\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage()\n }\n\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n }\n }\n }\n if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"
|
|
5880
|
+
"63": {
|
|
5881
|
+
"path": "/build-volume/noir-projects/aztec-nr/authwit/src/account.nr",
|
|
5882
|
+
"source": "use dep::aztec::{\n context::PrivateContext,\n hash::poseidon2_hash_with_separator,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n};\n\nuse crate::auth::{compute_authwit_message_hash, IS_VALID_SELECTOR};\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\n\npub struct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD,\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier =\n poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash,\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"
|
|
5875
5883
|
},
|
|
5876
|
-
"
|
|
5884
|
+
"64": {
|
|
5877
5885
|
"path": "/build-volume/noir-projects/aztec-nr/authwit/src/auth.nr",
|
|
5878
5886
|
"source": "use dep::aztec::{context::{gas::GasOpts, PrivateContext, PublicContext}, hash::hash_args_array};\nuse dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n constants::{\n CANONICAL_AUTH_REGISTRY_ADDRESS, GENERATOR_INDEX__AUTHWIT_INNER,\n GENERATOR_INDEX__AUTHWIT_NULLIFIER, GENERATOR_INDEX__AUTHWIT_OUTER,\n },\n hash::poseidon2_hash_with_separator,\n};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `poseidon2_hash_bytes(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR: Field = 0x47dacd73; // 4 last bytes of poseidon2_hash_bytes(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` has authorized the current call with a valid authentication witness\n *\n * Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that has allegedly authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([\n context.msg_sender().to_field(),\n context.selector().to_field(),\n context.args_hash,\n ]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that has allegedly authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(\n context: &mut PrivateContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field,\n) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context\n .static_call_private_function(\n on_behalf_of,\n comptime { FunctionSelector::from_signature(\"verify_private_authwit(Field)\") },\n [inner_hash],\n )\n .unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allows the same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` has authorized the current call in the authentication registry\n *\n * Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that has allegedly authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub unconstrained fn assert_current_call_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n) {\n let inner_hash = compute_inner_authwit_hash([\n (*context).msg_sender().to_field(),\n (*context).selector().to_field(),\n (*context).get_args_hash(),\n ]);\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` has authorized a specific `inner_hash` in the authentication registry\n *\n * Compute the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then make a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that has allegedly authorized the `inner_hash`\n */\npub unconstrained fn assert_inner_hash_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field,\n) {\n let results: [Field] = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime { FunctionSelector::from_signature(\"consume((Field),Field)\") },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default(),\n );\n assert(results.len() == 1, \"Invalid response from registry\");\n assert(results[0] == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N],\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash =\n compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computes the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that has authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [consumer.to_field(), chain_id, version, inner_hash],\n GENERATOR_INDEX__AUTHWIT_OUTER,\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub unconstrained fn set_authorized(\n context: &mut PublicContext,\n message_hash: Field,\n authorize: bool,\n) {\n let res = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime { FunctionSelector::from_signature(\"set_authorized(Field,bool)\") },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default(),\n );\n assert(res.len() == 0);\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub unconstrained fn set_reject_all(context: &mut PublicContext, reject: bool) {\n let res = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime { FunctionSelector::from_signature(\"set_reject_all(bool)\") },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default(),\n );\n assert(res.len() == 0);\n}\n"
|
|
5879
5887
|
},
|
|
5880
|
-
"
|
|
5888
|
+
"65": {
|
|
5881
5889
|
"path": "/build-volume/noir-projects/aztec-nr/authwit/src/auth_witness.nr",
|
|
5882
5890
|
"source": "#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n *\n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\npub unconstrained fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"
|
|
5883
5891
|
},
|
|
5892
|
+
"67": {
|
|
5893
|
+
"path": "/build-volume/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr",
|
|
5894
|
+
"source": "use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD,\n hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize},\n};\n\nuse crate::entrypoint::function_call::FunctionCall;\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u32 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u32 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u32 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\npub struct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage()\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage()\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"
|
|
5895
|
+
},
|
|
5896
|
+
"68": {
|
|
5897
|
+
"path": "/build-volume/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr",
|
|
5898
|
+
"source": "use crate::entrypoint::function_call::FunctionCall;\nuse dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD,\n hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize},\n};\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: u32 = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: u32 = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS: u32 = 2;\n\n// docs:start:fee-payload-struct\npub struct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage()\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__FEE_PAYLOAD)\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage()\n }\n\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n );\n }\n }\n }\n if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"
|
|
5899
|
+
},
|
|
5884
5900
|
"7": {
|
|
5885
5901
|
"path": "std/collections/bounded_vec.nr",
|
|
5886
5902
|
"source": "use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n///\n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n///\n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n///\n/// Example:\n///\n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a\n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n ///\n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n ///\n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n ///\n /// Example:\n ///\n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n ///\n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n ///\n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n ///\n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure.\n /// vec.set_unchecked(2, 42);\n /// println(vec);\n ///\n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n ///\n /// Panics if the new length of the vector will be greater than the max length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n ///\n /// v.push(1);\n /// v.push(2);\n ///\n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n ///\n /// v.push(100);\n /// assert(v.len() == 1);\n ///\n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n ///\n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n ///\n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n ///\n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n ///\n /// Note that uninitialized elements may be zeroed out!\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n ///\n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n ///\n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n ///\n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n ///\n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n ///\n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n ///\n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n ///\n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input.\n /// The maximum length of the vector is determined based on the type signature.\n ///\n /// Example:\n ///\n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n ///\n /// Panics if the vector is empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n ///\n /// let two = v.pop();\n /// let one = v.pop();\n ///\n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n ///\n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n ///\n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function will zero out any elements at or past index `len` of `array`.\n /// This incurs an extra runtime cost of O(MaxLen). If you are sure your array is\n /// zeroed after that index, you can use `from_parts_unchecked` to remove the extra loop.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n /// ```\n pub fn from_parts(mut array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n let zeroed = crate::mem::zeroed();\n for i in 0..MaxLen {\n if i >= len {\n array[i] = zeroed;\n }\n }\n BoundedVec { storage: array, len }\n }\n\n /// Creates a new BoundedVec from the given array and length.\n /// The given length must be less than or equal to the length of the array.\n ///\n /// This function is unsafe because it expects all elements past the `len` index\n /// of `array` to be zeroed, but does not check for this internally. Use `from_parts`\n /// for a safe version of this function which does zero out any indices past the\n /// given length. Invalidating this assumption can notably cause `BoundedVec::eq`\n /// to give incorrect results since it will check even elements past `len`.\n ///\n /// Example:\n ///\n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n /// assert_eq(vec.len(), 3);\n ///\n /// // invalid use!\n /// let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n /// let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n ///\n /// // both vecs have length 3 so we'd expect them to be equal, but this\n /// // fails because elements past the length are still checked in eq\n /// assert_eq(vec1, vec2); // fails\n /// ```\n pub fn from_parts_unchecked(array: [T; MaxLen], len: u32) -> Self {\n assert(len <= MaxLen);\n BoundedVec { storage: array, len }\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen>\nwhere\n T: Eq,\n{\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n if self.len == other.len {\n self.storage == other.storage\n } else {\n false\n }\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.get_unchecked(2), 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n assert_eq(bounded_vec.get(2), 3);\n }\n\n #[test(should_fail_with = \"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.get(0), 1);\n assert_eq(bounded_vec.get(1), 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n\n mod from_parts {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn from_parts() {\n // docs:start:from-parts\n let vec: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // Any elements past the given length are zeroed out, so these\n // two BoundedVecs will be completely equal\n let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 1], 3);\n let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts([1, 2, 3, 2], 3);\n assert_eq(vec1, vec2);\n // docs:end:from-parts\n }\n\n #[test]\n fn from_parts_unchecked() {\n // docs:start:from-parts-unchecked\n let vec: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 0], 3);\n assert_eq(vec.len(), 3);\n\n // invalid use!\n let vec1: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 1], 3);\n let vec2: BoundedVec<u32, 4> = BoundedVec::from_parts_unchecked([1, 2, 3, 2], 3);\n\n // both vecs have length 3 so we'd expect them to be equal, but this\n // fails because elements past the length are still checked in eq\n assert(vec1 != vec2);\n // docs:end:from-parts-unchecked\n }\n }\n}\n"
|
|
5887
5903
|
},
|
|
5888
|
-
"
|
|
5889
|
-
"path": "/build-volume/noir-projects/aztec-nr/
|
|
5890
|
-
"source": "use dep::aztec::{\n context::PrivateContext,\n hash::poseidon2_hash_with_separator,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n};\n\nuse crate::auth::{compute_authwit_message_hash, IS_VALID_SELECTOR};\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\n\npub struct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD,\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier =\n poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash,\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"
|
|
5891
|
-
},
|
|
5892
|
-
"72": {
|
|
5893
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/initializer.nr",
|
|
5894
|
-
"source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::GENERATOR_INDEX__CONSTRUCTOR, hash::poseidon2_hash_with_separator,\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext},\n oracle::get_contract_instance::{\n get_contract_instance, get_contract_instance_deployer_avm,\n get_contract_instance_initialization_hash_avm,\n },\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let deployer = get_contract_instance_deployer_avm(address).unwrap();\n let initialization_hash = get_contract_instance_initialization_hash_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (deployer.is_zero()) | (deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\npub fn compute_initialization_hash(\n init_selector: FunctionSelector,\n init_args_hash: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR,\n )\n}\n"
|
|
5895
|
-
},
|
|
5896
|
-
"75": {
|
|
5897
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr",
|
|
5898
|
-
"source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader,\n};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n) -> [Field; 2] {}\n\npub unconstrained fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"
|
|
5899
|
-
},
|
|
5900
|
-
"79": {
|
|
5901
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr",
|
|
5902
|
-
"source": "use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n) -> Field {}\n\npub unconstrained fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n) -> Field {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n )\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n) -> Field {}\n\npub unconstrained fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n) -> Field {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n )\n}\n\npub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n unsafe { notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter) };\n}\n\npub unconstrained fn notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n"
|
|
5903
|
-
},
|
|
5904
|
-
"84": {
|
|
5905
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/keys.nr",
|
|
5906
|
-
"source": "use dep::protocol_types::{\n address::{AztecAddress, PartialAddress},\n point::Point,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\npub unconstrained fn get_public_keys_and_partial_address(\n address: AztecAddress,\n) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM {\n inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool },\n },\n ovpk_m: OvpkM {\n inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool },\n },\n tpk_m: TpkM {\n inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool },\n },\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"
|
|
5904
|
+
"80": {
|
|
5905
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/context/private_context.nr",
|
|
5906
|
+
"source": "use dep::protocol_types::debug_log::debug_log_format;\n\nuse crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n hash::{ArgsHasher, hash_args_array},\n keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, sk_generators},\n messaging::process_l1_to_l2_message,\n oracle::{\n arguments,\n block_header::get_block_header_at,\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal,\n },\n key_validation_request::get_key_validation_request,\n returns::pack_returns,\n },\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext,\n function_selector::FunctionSelector,\n log::Log,\n log_hash::LogHash,\n max_block_number::MaxBlockNumber,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::PrivateLogData,\n public_call_request::PublicCallRequest,\n read_request::ReadRequest,\n side_effect::Counted,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n },\n address::{AztecAddress, EthAddress},\n block_header::BlockHeader,\n constants::{\n MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL,\n PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DISPATCH_SELECTOR,\n },\n messaging::l2_to_l1_message::L2ToL1Message,\n traits::Empty,\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n pub inputs: PrivateContextInputs,\n pub side_effect_counter: u32,\n\n pub min_revertible_side_effect_counter: u32,\n pub is_fee_payer: bool,\n\n pub args_hash: Field,\n pub return_hash: Field,\n\n pub max_block_number: MaxBlockNumber,\n\n pub note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n pub nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n pub note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n pub nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n pub public_teardown_call_request: PublicCallRequest,\n pub l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub historical_header: BlockHeader,\n\n pub private_logs: BoundedVec<PrivateLogData, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<LogHash, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n pub fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n\n // WARNING(https://github.com/AztecProtocol/aztec-packages/issues/10558): if you delete this debug_log_format line, some tests fail.\n debug_log_format(\n \"Context.note_hashes, after pushing new note hash: {0}\",\n self.note_hashes.storage().map(|nh: NoteHash| nh.value),\n );\n }\n\n pub fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(\n Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() },\n );\n }\n\n pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(\n Nullifier {\n value: nullifier,\n note_hash: nullified_note_hash,\n counter: self.next_counter(),\n },\n );\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_block_header(self) -> BlockHeader {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_block_header_at(self, block_number: u32) -> BlockHeader {\n get_block_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage(),\n nullifier_read_requests: self.nullifier_read_requests.storage(),\n key_validation_requests_and_generators: self\n .key_validation_requests_and_generators\n .storage(),\n note_hashes: self.note_hashes.storage(),\n nullifiers: self.nullifiers.storage(),\n private_call_requests: self.private_call_requests.storage(),\n public_call_requests: self.public_call_requests.storage(),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage(),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: self.private_logs.storage(),\n contract_class_logs_hashes: self.contract_class_logs_hashes.storage(),\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context,\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\n \"Setting {0} as fee payer\",\n [self.this_address().to_field()],\n );\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number =\n MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request =\n self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale\n // Typically we'd validate keys by showing that they are the preimage of `pk_m_hash`, but that'd require\n // the oracle returning the master secret keys, which could cause malicious contracts to leak it or learn\n // about secrets from other contracts. We therefore silo secret keys, and rely on the private kernel to\n // validate that we siloed secret key corresponds to correct siloing of the master secret key that hashes\n // to `pk_m_hash`.\n let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n assert(request.pk_m.hash() == pk_m_hash);\n\n self.key_validation_requests_and_generators.push(\n KeyValidationRequestAndGenerator {\n request,\n sk_app_generator: sk_generators[key_index],\n },\n );\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field,\n ) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret,\n leaf_index,\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS]) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter: 0, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn emit_raw_note_log(\n &mut self,\n log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS],\n note_hash_counter: u32,\n ) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_private_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n\n // The oracle simulates the private call and returns the value of the side effects counter after execution of\n // the call (which means that end_side_effect_counter - start_side_effect_counter is the number of side effects\n // that took place), along with the hash of the return values. We validate these by requesting a private kernel\n // iteration in which the return values are constrained to hash to `returns_hash` and the side effects counter\n // to increment from start to end.\n let (end_side_effect_counter, returns_hash) = unsafe {\n call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n )\n };\n\n self.private_call_requests.push(\n PrivateCallRequest {\n call_context: CallContext {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n },\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter,\n },\n );\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n self.side_effect_counter = end_side_effect_counter + 1;\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.call_public_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n let call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n arguments::pack_arguments_array(args);\n self.set_public_teardown_function_with_packed_args(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n // WARNING: This is insecure and should be temporary!\n // The oracle repacks the arguments and returns a new args_hash.\n // new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n // We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n // b) this is only temporary.\n let args_hash = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n );\n\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n self.public_teardown_call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: BlockHeader::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n}\n"
|
|
5907
5907
|
},
|
|
5908
5908
|
"85": {
|
|
5909
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5910
|
-
"source": "use dep::protocol_types::{\n address::AztecAddress, constants::
|
|
5909
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr",
|
|
5910
|
+
"source": "use crate::{\n context::PrivateContext,\n encrypted_logs::payload::compute_private_log_payload,\n note::{note_emission::NoteEmission, note_interface::NoteInterface},\n};\nuse dep::protocol_types::{\n abis::note_hash::NoteHash, address::AztecAddress, constants::PRIVATE_LOG_SIZE_IN_FIELDS,\n};\n\n/// Computes private note log payload\nfn compute_payload<Note, let N: u32>(\n context: PrivateContext,\n note: Note,\n recipient: AztecAddress,\n sender: AztecAddress,\n) -> ([Field; PRIVATE_LOG_SIZE_IN_FIELDS], u32)\nwhere\n Note: NoteInterface<N>,\n{\n let note_header = note.get_header();\n let note_hash_counter = note_header.note_hash_counter;\n let storage_slot = note_header.storage_slot;\n\n // TODO(#8589): use typesystem to skip this check when not needed\n let note_exists =\n context.note_hashes.storage().any(|n: NoteHash| n.counter == note_hash_counter);\n assert(note_exists, \"Can only emit a note log for an existing note.\");\n\n let contract_address: AztecAddress = context.this_address();\n\n let plaintext = note.to_be_bytes(storage_slot);\n\n let payload = compute_private_log_payload(contract_address, recipient, sender, plaintext);\n\n (payload, note_hash_counter)\n}\n\nunconstrained fn compute_payload_unconstrained<Note, let N: u32>(\n context: PrivateContext,\n note: Note,\n recipient: AztecAddress,\n sender: AztecAddress,\n) -> ([Field; PRIVATE_LOG_SIZE_IN_FIELDS], u32)\nwhere\n Note: NoteInterface<N>,\n{\n compute_payload(context, note, recipient, sender)\n}\n\n// This function seems to be affected by the following Noir bug:\n// https://github.com/noir-lang/noir/issues/5771\n// If you get weird behavior it might be because of it.\npub fn encode_and_encrypt_note<Note, let N: u32>(\n context: &mut PrivateContext,\n recipient: AztecAddress,\n // We need this because to compute a tagging secret, we require a sender:\n sender: AztecAddress,\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> ()\nwhere\n Note: NoteInterface<N>,\n{\n |e: NoteEmission<Note>| {\n let (encrypted_log, note_hash_counter) =\n compute_payload(*context, e.note, recipient, sender);\n context.emit_raw_note_log(encrypted_log, note_hash_counter);\n }\n}\n\npub fn encode_and_encrypt_note_unconstrained<Note, let N: u32>(\n context: &mut PrivateContext,\n recipient: AztecAddress,\n // We need this because to compute a tagging secret, we require a sender:\n sender: AztecAddress,\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> ()\nwhere\n Note: NoteInterface<N>,\n{\n |e: NoteEmission<Note>| {\n // Unconstrained logs have both their content and encryption unconstrained - it could occur that the\n // recipient is unable to decrypt the payload.\n // Regarding the note hash counter, this is used for squashing. The kernel assumes that a given note can have\n // more than one log and removes all of the matching ones, so all a malicious sender could do is either: cause\n // for the log to be deleted when it shouldn't have (which is fine - they can already make the content be\n // whatever), or cause for the log to not be deleted when it should have (which is also fine - it'll be a log\n // for a note that doesn't exist).\n // It's important here that we do not\n // return the log from this function to the app, otherwise it could try to do stuff with it and then that might\n // be wrong.\n let (encrypted_log, note_hash_counter) =\n unsafe { compute_payload_unconstrained(*context, e.note, recipient, sender) };\n context.emit_raw_note_log(encrypted_log, note_hash_counter);\n }\n}\n"
|
|
5911
5911
|
},
|
|
5912
|
-
"
|
|
5913
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5914
|
-
"source": "use
|
|
5912
|
+
"86": {
|
|
5913
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr",
|
|
5914
|
+
"source": "use dep::protocol_types::{\n address::AztecAddress,\n point::Point,\n public_keys::{IvpkM, ToPoint},\n scalar::Scalar,\n};\n\nuse crate::keys::secret_derivation::derive_aes_secret;\n\nuse std::aes128::aes128_encrypt;\n\npub struct EncryptedLogHeader {\n address: AztecAddress,\n}\n\nimpl EncryptedLogHeader {\n pub fn new(address: AztecAddress) -> Self {\n EncryptedLogHeader { address }\n }\n\n pub fn compute_ciphertext<T>(self, secret: Scalar, pk: T) -> [u8; 48]\n where\n T: ToPoint,\n {\n let full_key = derive_aes_secret(secret, pk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n\n let input: [u8; 32] = self.address.to_field().to_be_bytes();\n aes128_encrypt(input, iv, sym_key).as_array()\n }\n}\n\n#[test]\nunconstrained fn test_encrypted_log_header_matches_noir() {\n let address = AztecAddress::from_field(0xdeadbeef);\n let header = EncryptedLogHeader::new(address);\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n };\n let point = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false,\n },\n };\n\n let ciphertext = header.compute_ciphertext(secret, point);\n\n // The following value was generated by `encrypted_log_header.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_header_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 194, 44, 7, 131,\n 160, 83, 64, 181, 98, 38, 153, 214, 62, 171, 253, 161, 111, 191, 28, 247, 216, 26, 222, 171,\n 176, 218, 48, 209, 73, 89, 200, 209,\n ];\n\n assert_eq(ciphertext, expected_header_ciphertext_from_typescript);\n}\n"
|
|
5915
5915
|
},
|
|
5916
|
-
"
|
|
5917
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5918
|
-
"source": "use dep::protocol_types::abis::validation_requests::{\n key_validation_request::KEY_VALIDATION_REQUEST_LENGTH, KeyValidationRequest,\n};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field,\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field,\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\npub unconstrained fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field,\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"
|
|
5916
|
+
"88": {
|
|
5917
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr",
|
|
5918
|
+
"source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::{GENERATOR_INDEX__SYMMETRIC_KEY, PRIVATE_LOG_SIZE_IN_FIELDS},\n hash::poseidon2_hash,\n point::Point,\n public_keys::AddressPoint,\n scalar::Scalar,\n utils::arrays::array_concat,\n};\nuse std::{\n aes128::aes128_encrypt, embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n field::bn254::decompose, hash::from_field_unsafe as fr_to_fq_unsafe,\n};\n\nuse crate::{\n encrypted_logs::header::EncryptedLogHeader,\n keys::secret_derivation::derive_aes_secret,\n oracle::{\n notes::{get_app_tag_as_sender, increment_app_tagging_secret_index_as_sender},\n random::random,\n },\n utils::{bytes::bytes_to_fields, point::point_to_bytes},\n};\n\n// 1 field is reserved for tag.\nglobal ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 31;\n\ncomptime global HEADER_SIZE: u32 = 48;\n\n// Bytes padded to the overhead, so that the size of the incoming body ciphertext will be a multiple of 16.\ncomptime global OVERHEAD_PADDING: u32 = 15;\n\npub comptime global OVERHEAD_SIZE: u32 = 32 /* eph_pk */\n + HEADER_SIZE /* incoming_header */\n + OVERHEAD_PADDING /* padding */;\n\nglobal PLAINTEXT_LENGTH_SIZE: u32 = 2;\n\n// This is enough for 8 fields of data.\n// 1 field for storage slot, 1 field for note/event type id, allowing 6 fields for custom values.\nglobal MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES: u32 =\n ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - OVERHEAD_SIZE - PLAINTEXT_LENGTH_SIZE - 1 /* aes padding */;\n\n// Note: Might have to update PRIVATE_LOG_SIZE_IN_FIELDS in `constants.nr` if the above changes.\n// This value ideally should be set by the protocol, allowing users (or `aztec-nr`) to fit data within the defined size limits.\n// Currently, we adjust this value as the structure changes, then update `constants.nr` to match.\n// Once the structure is finalized with defined overhead and max note field sizes, this value will be fixed and should remain unaffected by further payload composition changes.\n\npub fn compute_private_log_payload<let P: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [Field; PRIVATE_LOG_SIZE_IN_FIELDS] {\n assert(\n P < MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n f\"plaintext for log must not exceed {MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES}\",\n );\n\n let extended_plaintext: [u8; MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; ENCRYPTED_PAYLOAD_SIZE_IN_BYTES] =\n compute_encrypted_log(contract_address, recipient, extended_plaintext);\n\n // We assume that the sender wants for the recipient to find the tagged note, and therefore that they will cooperate\n // and use the correct tag. Usage of a bad tag will result in the recipient not being able to find the note\n // automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n\n array_concat([tag], bytes_to_fields(encrypted))\n}\n\npub fn compute_partial_public_log_payload<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let extended_plaintext: [u8; P + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; M - 32] =\n compute_encrypted_log(contract_address, recipient, extended_plaintext);\n\n // We assume that the sender wants for the recipient to find the tagged note, and therefore that they will cooperate\n // and use the correct tag. Usage of a bad tag will result in the recipient not being able to find the note\n // automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n // Silo the tag with contract address.\n // This is done by the kernel circuit to the private logs, but since the partial log will be finalized and emitted\n // in public as unencrypted log, its tag is not siloed at the moment.\n // To avoid querying logs using two types of tags, we silo the tag manually here.\n // TODO(#10273) This should be done by the AVM when it's processing the raw logs instead of their hashes.\n let siloed_tag_bytes: [u8; 32] =\n poseidon2_hash([contract_address.to_field(), tag]).to_be_bytes();\n\n // Temporary hack so that the partial public log remains the same format.\n // It should return field array and make the tag the first field as compute_private_log_payload does.\n let mut log_bytes = [0; M];\n for i in 0..32 {\n log_bytes[i] = siloed_tag_bytes[i];\n }\n for i in 0..encrypted.len() {\n log_bytes[i + 32] = encrypted[i];\n }\n\n log_bytes\n}\n\nfn compute_encrypted_log<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] =\n header.compute_ciphertext(eph_sk, recipient.to_address_point());\n let incoming_body_ciphertext =\n compute_incoming_body_ciphertext(plaintext, eph_sk, recipient.to_address_point());\n\n let mut encrypted_bytes = [0; M];\n let mut offset = 0;\n\n // eph_pk\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[offset + i] = eph_pk_bytes[i];\n }\n offset += 32;\n\n // incoming_header\n for i in 0..HEADER_SIZE {\n encrypted_bytes[offset + i] = incoming_header_ciphertext[i];\n }\n offset += HEADER_SIZE;\n\n // Padding.\n offset += OVERHEAD_PADDING;\n\n // incoming_body\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - offset;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[offset + i] = incoming_body_ciphertext[i];\n }\n\n encrypted_bytes\n}\n\n// Prepend the plaintext length as the first byte, then copy the plaintext itself starting from the second byte.\n// Fill the remaining bytes with random values to reach a fixed length of N.\nfn extend_private_log_plaintext<let P: u32, let N: u32>(plaintext: [u8; P]) -> [u8; N] {\n let mut padded = unsafe { get_random_bytes() };\n padded[0] = (P >> 8) as u8;\n padded[1] = P as u8;\n for i in 0..P {\n padded[i + PLAINTEXT_LENGTH_SIZE] = plaintext[i];\n }\n padded\n}\n\nunconstrained fn get_random_bytes<let N: u32>() -> [u8; N] {\n let mut bytes = [0; N];\n let mut idx = 32;\n let mut randomness = [0; 32];\n for i in 0..N {\n if idx == 32 {\n randomness = random().to_be_bytes();\n idx = 1; // Skip the first byte as it's always 0.\n }\n bytes[i] = randomness[idx];\n idx += 1;\n }\n bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the randomness to preserve the privacy of both the sender and recipient via encryption, so a malicious\n // sender could use non-random values to reveal the plaintext. But they already know it themselves anyway, and so\n // the recipient already trusts them to not disclose this information. We can therefore assume that the sender will\n // cooperate in the random value generation.\n let randomness = unsafe { random() };\n\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(randomness);\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\npub fn compute_incoming_body_ciphertext<let P: u32>(\n plaintext: [u8; P],\n eph_sk: Scalar,\n address_point: AddressPoint,\n) -> [u8] {\n let full_key = derive_aes_secret(eph_sk, address_point.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(plaintext, iv, sym_key)\n}\n\nmod test {\n use crate::encrypted_logs::payload::{\n compute_incoming_body_ciphertext, compute_private_log_payload,\n MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n };\n use dep::protocol_types::{address::AztecAddress, point::Point, scalar::Scalar};\n use protocol_types::public_keys::AddressPoint;\n use std::test::OracleMock;\n\n #[test]\n unconstrained fn test_encrypted_log_matches_typescript() {\n // All the values in this test were copied over from `encrypted_log_payload.test.ts`\n let contract_address = AztecAddress::from_field(\n 0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04,\n );\n\n let plaintext = [\n 0, 0, 0, 1, 48, 22, 64, 206, 234, 117, 131, 145, 178, 225, 97, 201, 44, 5, 19, 241, 41,\n 2, 15, 65, 37, 37, 106, 253, 174, 38, 70, 206, 49, 9, 159, 92, 16, 244, 140, 217, 239,\n 247, 174, 91, 32, 156, 85, 124, 112, 222, 46, 101, 126, 231, 145, 102, 134, 134, 118,\n 183, 135, 233, 65, 126, 25, 38, 14, 4, 15, 228, 107, 229, 131, 183, 31, 74, 181, 183,\n 12, 38, 87, 255, 29, 5, 204, 207, 29, 41, 42, 147, 105, 98, 141, 26, 25, 79, 148, 78,\n 101, 153, 0, 0, 16, 39,\n ];\n\n let randomness = 0x0101010101010101010101010101010101010101010101010101010101010101;\n let _ = OracleMock::mock(\"getRandomField\").returns(randomness).times(\n (MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES as u64 + 1 + 30) / 31,\n );\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk).times(1);\n\n let recipient = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let sender = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let _ = OracleMock::mock(\"getIndexedTaggingSecretAsSender\").returns([69420, 1337]);\n\n let _ = OracleMock::mock(\"incrementAppTaggingSecretIndexAsSender\").returns(());\n\n let payload = compute_private_log_payload(contract_address, recipient, sender, plaintext);\n\n // The following value was generated by `encrypted_log_payload.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let private_log_payload_from_typescript = [\n 0x0e9cffc3ddd746affb02410d8f0a823e89939785bcc8e88ee4f3cae05e737c36,\n 0x008d460c0e434d846ec1ea286e4090eb56376ff27bddc1aacae1d856549f701f,\n 0x00a70577790aeabcc2d81ec8d0c99e7f5d2bf2f1452025dc777a178404f851d9,\n 0x003de818923f85187871d99bdf95d695eff0a900000000000000000000000000,\n 0x000000a600a61f7d59eeaf52eb51bc0592ff981d9ba3ea8e6ea8ba9dc0cec8c7,\n 0x000b81e84556a77ce6c3ca47a527f99ffe7b2524bb885a23020b7295748ad19c,\n 0x001083618ad96298b76ee07eb1a56d19cc798710e9f5de96501bd59b3781c9c0,\n 0x002a6c95c5912f8936b1500d362afbf0922c85b1ada18db8b95162a6e9d06765,\n 0x005cdf669eb387f8e0492a95fdcdb39429d5340b4bebc250ba9bf62c2f49f549,\n 0x00f37beed75a668aa51967e0e57547e5a655157bcf381e22f30e25881548ec96,\n 0x0006a151b5fbfb2d14ee4b34bf4c1dbd71c7be15ad4c63474bb6f89970aeb3d9,\n 0x00489c8edbdff80a1a3a5c28370e534abc870a85ea4318326ea19222fb10df35,\n 0x008c765edada497db4284ae30507a2e03e983d23cfa0bd831577e857bbef9cf7,\n 0x0090c97cb5699cc8783a1b4276d929be2882e5b9b72829a4f8404f7e3c853d11,\n 0x00d6d5a000b80134891e95f81007ad35d3945eaeecbe137fff85d01d7eaf8f19,\n 0x00a15eb965c6a4bc97aa87fd3463c31c9d4e0d722a8ba870bcc50c9c7a8b48ad,\n 0x0063c861bdbe490d44c57382decbae663927909652f87ac18dcfd5b30649cce5,\n 0x00820f14caa725efe1fa3485ceac88499eadf0565c5b20998c05931bbf478e68,\n ];\n\n assert_eq(payload, private_log_payload_from_typescript);\n }\n\n #[test]\n fn test_incoming_body_ciphertext_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n };\n let address_point = AddressPoint {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false,\n },\n };\n let plaintext = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,\n ];\n\n // `compute_incoming_body_ciphertext(...)` function then derives symmetric key from `eph_sk` and `address_point` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = compute_incoming_body_ciphertext(plaintext, eph_sk, address_point);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160,\n 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157,\n 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93,\n 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130,\n 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95,\n 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234,\n 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162,\n 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185,\n 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236,\n 23, 206, 229, 108,\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"
|
|
5919
5919
|
},
|
|
5920
|
-
"
|
|
5921
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5922
|
-
"source": "
|
|
5920
|
+
"91": {
|
|
5921
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/generators.nr",
|
|
5922
|
+
"source": "use dep::protocol_types::point::Point;\n\n// A set of generators generated with `derive_generators(...)` function from noir::std\npub global Ga1: Point = Point {\n x: 0x30426e64aee30e998c13c8ceecda3a77807dbead52bc2f3bf0eae851b4b710c1,\n y: 0x113156a068f603023240c96b4da5474667db3b8711c521c748212a15bc034ea6,\n is_infinite: false,\n};\npub global Ga2: Point = Point {\n x: 0x2825c79cc6a5cbbeef7d6a8f1b6a12b312aa338440aefeb4396148c89147c049,\n y: 0x129bfd1da54b7062d6b544e7e36b90736350f6fba01228c41c72099509f5701e,\n is_infinite: false,\n};\npub global Ga3: Point = Point {\n x: 0x0edb1e293c3ce91bfc04e3ceaa50d2c541fa9d091c72eb403efb1cfa2cb3357f,\n y: 0x1341d675fa030ece3113ad53ca34fd13b19b6e9762046734f414824c4d6ade35,\n is_infinite: false,\n};\npub global Ga4: Point = Point {\n x: 0x0e0dad2250583f2a9f0acb04ededf1701b85b0393cae753fe7e14b88af81cb52,\n y: 0x0973b02c5caac339ee4ad5dab51329920f7bf1b6a07e1dabe5df67040b300962,\n is_infinite: false,\n};\npub global Ga5: Point = Point {\n x: 0x2f3342e900e8c488a28931aae68970738fdc68afde2910de7b320c00c902087d,\n y: 0x1bf958dc63cb09d59230603a0269ae86d6f92494da244910351f1132df20fc08,\n is_infinite: false,\n};\n// If you change this update `G_SLOT` in `yarn-project/simulator/src/client/test_utils.ts` as well\npub global G_slot: Point = Point {\n x: 0x041223147b680850dc82e8a55a952d4df20256fe0593d949a9541ca00f0abf15,\n y: 0x0a8c72e60d0e60f5d804549d48f3044d06140b98ed717a9b532af630c1530791,\n is_infinite: false,\n};\n\nmod test {\n use crate::generators::{G_slot, Ga1, Ga2, Ga3, Ga4, Ga5};\n use dep::protocol_types::point::Point;\n use std::hash::derive_generators;\n\n #[test]\n unconstrained fn test_generators() {\n let generators: [Point; 6] = derive_generators(\"aztec_nr_generators\".as_bytes(), 0);\n assert_eq(generators[0], Ga1);\n assert_eq(generators[1], Ga2);\n assert_eq(generators[2], Ga3);\n assert_eq(generators[4], Ga4);\n assert_eq(generators[5], Ga5);\n assert_eq(generators[3], G_slot);\n }\n}\n"
|
|
5923
5923
|
},
|
|
5924
5924
|
"92": {
|
|
5925
|
-
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/
|
|
5926
|
-
"source": "
|
|
5925
|
+
"path": "/build-volume/noir-projects/aztec-nr/aztec/src/hash.nr",
|
|
5926
|
+
"source": "use crate::utils::to_bytes::{arr_to_be_bytes_arr, str_to_be_bytes_arr};\nuse dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__FUNCTION_ARGS, GENERATOR_INDEX__MESSAGE_NULLIFIER,\n GENERATOR_INDEX__SECRET_HASH,\n },\n hash::{poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice, sha256_to_field},\n point::Point,\n traits::Hash,\n};\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<let N: u32>(\n contract_address: AztecAddress,\n log: [u8; N],\n) -> Field {\n let mut hash_bytes = [0; N + 36];\n // Address is converted to 32 bytes in ts\n let address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (N as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..N {\n hash_bytes[36 + i] = log[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_l1_to_l2_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field,\n leaf_index: Field,\n) -> Field {\n let mut hash_bytes = [0 as u8; 224];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n let leaf_index_bytes: [u8; 32] = leaf_index.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n hash_bytes[i + 192] = leaf_index_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret\npub fn compute_l1_to_l2_message_nullifier(message_hash: Field, secret: Field) -> Field {\n poseidon2_hash_with_separator([message_hash, secret], GENERATOR_INDEX__MESSAGE_NULLIFIER)\n}\n\npub struct ArgsHasher {\n pub fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(\n 0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6,\n );\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd,\n ];\n let serialized_log = arr_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(\n 0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6,\n );\n let log = AztecAddress::from_field(\n 0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303,\n );\n let serialized_log: [u8; 32] = log.to_field().to_be_bytes();\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(\n 0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8,\n );\n let log = \"dummy\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(\n 0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8,\n );\n let log = \"Hello this is a string\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"
|
|
5927
5927
|
}
|
|
5928
5928
|
}
|
|
5929
5929
|
}
|