voting_schemes-electionguard 0.24.1 → 0.24.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/Gemfile.lock +90 -83
- data/app/assets/javascripts/voting_schemes/electionguard/electionguard.js +1 -1
- data/lib/voting_schemes/electionguard/version.rb +1 -1
- data/public/assets/electionguard/attrs.data +0 -0
- data/public/assets/electionguard/attrs.js +1 -1
- data/public/assets/electionguard/bulletin_board-electionguard.data +0 -0
- data/public/assets/electionguard/bulletin_board-electionguard.js +1 -1
- data/public/assets/electionguard/console.html +89 -61
- data/public/assets/electionguard/electionguard.data +0 -0
- data/public/assets/electionguard/electionguard.js +1 -1
- data/public/assets/electionguard/gmpy2.data +0 -0
- data/public/assets/electionguard/gmpy2.js +1 -1
- data/public/assets/electionguard/hypothesis.data +0 -0
- data/public/assets/electionguard/hypothesis.js +1 -1
- data/public/assets/electionguard/jsons.data +0 -0
- data/public/assets/electionguard/jsons.js +1 -1
- data/public/assets/electionguard/micropip.data +0 -0
- data/public/assets/electionguard/micropip.js +1 -1
- data/public/assets/electionguard/packages.json +1 -1
- data/public/assets/electionguard/packaging.data +0 -0
- data/public/assets/electionguard/packaging.js +1 -0
- data/public/assets/electionguard/pyasn1.data +0 -0
- data/public/assets/electionguard/pyasn1.js +1 -1
- data/public/assets/electionguard/pyodide.asm.data +0 -0
- data/public/assets/electionguard/pyodide.asm.js +11 -11
- data/public/assets/electionguard/pyodide.asm.wasm +0 -0
- data/public/assets/electionguard/pyodide.js +781 -333
- data/public/assets/electionguard/pyparsing.data +0 -0
- data/public/assets/electionguard/pyparsing.js +1 -0
- data/public/assets/electionguard/rsa.data +0 -0
- data/public/assets/electionguard/rsa.js +1 -1
- data/public/assets/electionguard/six.data +0 -0
- data/public/assets/electionguard/six.js +1 -0
- data/public/assets/electionguard/sortedcontainers.data +0 -0
- data/public/assets/electionguard/sortedcontainers.js +1 -1
- data/public/assets/electionguard/test.data +0 -0
- data/public/assets/electionguard/test.html +21 -24
- data/public/assets/electionguard/test.js +1 -1
- data/public/assets/electionguard/typish.data +0 -0
- data/public/assets/electionguard/typish.js +1 -1
- data/public/assets/electionguard/webworker.js +29 -21
- data/public/assets/electionguard/webworker_dev.js +14 -14
- metadata +9 -7
- data/public/assets/electionguard/distlib.data +0 -0
- data/public/assets/electionguard/distlib.js +0 -1
- data/public/assets/electionguard/pyodide.asm.data.js +0 -1
- data/public/assets/electionguard/renderedhtml.css +0 -209
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 133827bbdd7b9b0c9b885d7c194577527e4b7c0a256ab347483d577468948b72
|
4
|
+
data.tar.gz: 63b2e8d727374ee769918619b1b4130a2ceb98fe70ea5959fa0f9ab54ce10580
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff706b029ced40fca15b3d5fc7763032e8e4f15bdd139066ca54516aea6222d457c33d9302afa4adb6e8101a99316412d8de29f442fe7139a454a19510eec7ee
|
7
|
+
data.tar.gz: 21fc706d03691c93303cefc3db90c3198797bca8a8982cc631b32534386e2ad94cc919e20d2d3ae8959ead32a1caaf1630350d1be3f4ab5c5d4e288f5df59525
|
data/.rubocop.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,73 +1,73 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
voting_schemes-electionguard (0.24.
|
4
|
+
voting_schemes-electionguard (0.24.3)
|
5
5
|
rails (>= 5.0.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
actioncable (7.0.
|
11
|
-
actionpack (= 7.0.
|
12
|
-
activesupport (= 7.0.
|
10
|
+
actioncable (7.0.8)
|
11
|
+
actionpack (= 7.0.8)
|
12
|
+
activesupport (= 7.0.8)
|
13
13
|
nio4r (~> 2.0)
|
14
14
|
websocket-driver (>= 0.6.1)
|
15
|
-
actionmailbox (7.0.
|
16
|
-
actionpack (= 7.0.
|
17
|
-
activejob (= 7.0.
|
18
|
-
activerecord (= 7.0.
|
19
|
-
activestorage (= 7.0.
|
20
|
-
activesupport (= 7.0.
|
15
|
+
actionmailbox (7.0.8)
|
16
|
+
actionpack (= 7.0.8)
|
17
|
+
activejob (= 7.0.8)
|
18
|
+
activerecord (= 7.0.8)
|
19
|
+
activestorage (= 7.0.8)
|
20
|
+
activesupport (= 7.0.8)
|
21
21
|
mail (>= 2.7.1)
|
22
22
|
net-imap
|
23
23
|
net-pop
|
24
24
|
net-smtp
|
25
|
-
actionmailer (7.0.
|
26
|
-
actionpack (= 7.0.
|
27
|
-
actionview (= 7.0.
|
28
|
-
activejob (= 7.0.
|
29
|
-
activesupport (= 7.0.
|
25
|
+
actionmailer (7.0.8)
|
26
|
+
actionpack (= 7.0.8)
|
27
|
+
actionview (= 7.0.8)
|
28
|
+
activejob (= 7.0.8)
|
29
|
+
activesupport (= 7.0.8)
|
30
30
|
mail (~> 2.5, >= 2.5.4)
|
31
31
|
net-imap
|
32
32
|
net-pop
|
33
33
|
net-smtp
|
34
34
|
rails-dom-testing (~> 2.0)
|
35
|
-
actionpack (7.0.
|
36
|
-
actionview (= 7.0.
|
37
|
-
activesupport (= 7.0.
|
38
|
-
rack (~> 2.0, >= 2.2.
|
35
|
+
actionpack (7.0.8)
|
36
|
+
actionview (= 7.0.8)
|
37
|
+
activesupport (= 7.0.8)
|
38
|
+
rack (~> 2.0, >= 2.2.4)
|
39
39
|
rack-test (>= 0.6.3)
|
40
40
|
rails-dom-testing (~> 2.0)
|
41
41
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
42
|
-
actiontext (7.0.
|
43
|
-
actionpack (= 7.0.
|
44
|
-
activerecord (= 7.0.
|
45
|
-
activestorage (= 7.0.
|
46
|
-
activesupport (= 7.0.
|
42
|
+
actiontext (7.0.8)
|
43
|
+
actionpack (= 7.0.8)
|
44
|
+
activerecord (= 7.0.8)
|
45
|
+
activestorage (= 7.0.8)
|
46
|
+
activesupport (= 7.0.8)
|
47
47
|
globalid (>= 0.6.0)
|
48
48
|
nokogiri (>= 1.8.5)
|
49
|
-
actionview (7.0.
|
50
|
-
activesupport (= 7.0.
|
49
|
+
actionview (7.0.8)
|
50
|
+
activesupport (= 7.0.8)
|
51
51
|
builder (~> 3.1)
|
52
52
|
erubi (~> 1.4)
|
53
53
|
rails-dom-testing (~> 2.0)
|
54
54
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
55
|
-
activejob (7.0.
|
56
|
-
activesupport (= 7.0.
|
55
|
+
activejob (7.0.8)
|
56
|
+
activesupport (= 7.0.8)
|
57
57
|
globalid (>= 0.3.6)
|
58
|
-
activemodel (7.0.
|
59
|
-
activesupport (= 7.0.
|
60
|
-
activerecord (7.0.
|
61
|
-
activemodel (= 7.0.
|
62
|
-
activesupport (= 7.0.
|
63
|
-
activestorage (7.0.
|
64
|
-
actionpack (= 7.0.
|
65
|
-
activejob (= 7.0.
|
66
|
-
activerecord (= 7.0.
|
67
|
-
activesupport (= 7.0.
|
58
|
+
activemodel (7.0.8)
|
59
|
+
activesupport (= 7.0.8)
|
60
|
+
activerecord (7.0.8)
|
61
|
+
activemodel (= 7.0.8)
|
62
|
+
activesupport (= 7.0.8)
|
63
|
+
activestorage (7.0.8)
|
64
|
+
actionpack (= 7.0.8)
|
65
|
+
activejob (= 7.0.8)
|
66
|
+
activerecord (= 7.0.8)
|
67
|
+
activesupport (= 7.0.8)
|
68
68
|
marcel (~> 1.0)
|
69
69
|
mini_mime (>= 1.1.0)
|
70
|
-
activesupport (7.0.
|
70
|
+
activesupport (7.0.8)
|
71
71
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
72
72
|
i18n (>= 1.6, < 2)
|
73
73
|
minitest (>= 5.1)
|
@@ -76,67 +76,74 @@ GEM
|
|
76
76
|
builder (3.2.4)
|
77
77
|
concurrent-ruby (1.1.10)
|
78
78
|
crass (1.0.6)
|
79
|
+
date (3.3.3)
|
79
80
|
diff-lcs (1.5.0)
|
80
|
-
erubi (1.
|
81
|
+
erubi (1.12.0)
|
81
82
|
faker (2.22.0)
|
82
83
|
i18n (>= 1.8.11, < 2)
|
83
|
-
globalid (1.
|
84
|
-
activesupport (>=
|
84
|
+
globalid (1.2.1)
|
85
|
+
activesupport (>= 6.1)
|
85
86
|
i18n (1.12.0)
|
86
87
|
concurrent-ruby (~> 1.0)
|
87
|
-
loofah (2.
|
88
|
+
loofah (2.21.3)
|
88
89
|
crass (~> 1.0.2)
|
89
|
-
nokogiri (>= 1.
|
90
|
-
mail (2.
|
90
|
+
nokogiri (>= 1.12.0)
|
91
|
+
mail (2.8.1)
|
91
92
|
mini_mime (>= 0.1.1)
|
93
|
+
net-imap
|
94
|
+
net-pop
|
95
|
+
net-smtp
|
92
96
|
marcel (1.0.2)
|
93
97
|
method_source (1.0.0)
|
94
|
-
mini_mime (1.1.
|
95
|
-
mini_portile2 (2.8.
|
96
|
-
minitest (5.
|
97
|
-
net-imap (0.3.
|
98
|
+
mini_mime (1.1.5)
|
99
|
+
mini_portile2 (2.8.4)
|
100
|
+
minitest (5.20.0)
|
101
|
+
net-imap (0.3.7)
|
102
|
+
date
|
98
103
|
net-protocol
|
99
104
|
net-pop (0.1.2)
|
100
105
|
net-protocol
|
101
|
-
net-protocol (0.1
|
106
|
+
net-protocol (0.2.1)
|
102
107
|
timeout
|
103
|
-
net-smtp (0.
|
108
|
+
net-smtp (0.4.0)
|
104
109
|
net-protocol
|
105
|
-
nio4r (2.5.
|
106
|
-
nokogiri (1.
|
107
|
-
mini_portile2 (~> 2.8.
|
110
|
+
nio4r (2.5.9)
|
111
|
+
nokogiri (1.15.4)
|
112
|
+
mini_portile2 (~> 2.8.2)
|
108
113
|
racc (~> 1.4)
|
109
|
-
nokogiri (1.
|
114
|
+
nokogiri (1.15.4-x86_64-linux)
|
110
115
|
racc (~> 1.4)
|
111
116
|
parallel (1.22.1)
|
112
117
|
parser (3.1.2.1)
|
113
118
|
ast (~> 2.4.1)
|
114
|
-
racc (1.
|
115
|
-
rack (2.2.
|
116
|
-
rack-test (2.0
|
119
|
+
racc (1.7.1)
|
120
|
+
rack (2.2.8)
|
121
|
+
rack-test (2.1.0)
|
117
122
|
rack (>= 1.3)
|
118
|
-
rails (7.0.
|
119
|
-
actioncable (= 7.0.
|
120
|
-
actionmailbox (= 7.0.
|
121
|
-
actionmailer (= 7.0.
|
122
|
-
actionpack (= 7.0.
|
123
|
-
actiontext (= 7.0.
|
124
|
-
actionview (= 7.0.
|
125
|
-
activejob (= 7.0.
|
126
|
-
activemodel (= 7.0.
|
127
|
-
activerecord (= 7.0.
|
128
|
-
activestorage (= 7.0.
|
129
|
-
activesupport (= 7.0.
|
123
|
+
rails (7.0.8)
|
124
|
+
actioncable (= 7.0.8)
|
125
|
+
actionmailbox (= 7.0.8)
|
126
|
+
actionmailer (= 7.0.8)
|
127
|
+
actionpack (= 7.0.8)
|
128
|
+
actiontext (= 7.0.8)
|
129
|
+
actionview (= 7.0.8)
|
130
|
+
activejob (= 7.0.8)
|
131
|
+
activemodel (= 7.0.8)
|
132
|
+
activerecord (= 7.0.8)
|
133
|
+
activestorage (= 7.0.8)
|
134
|
+
activesupport (= 7.0.8)
|
130
135
|
bundler (>= 1.15.0)
|
131
|
-
railties (= 7.0.
|
132
|
-
rails-dom-testing (2.0
|
133
|
-
activesupport (>=
|
136
|
+
railties (= 7.0.8)
|
137
|
+
rails-dom-testing (2.2.0)
|
138
|
+
activesupport (>= 5.0.0)
|
139
|
+
minitest
|
134
140
|
nokogiri (>= 1.6)
|
135
|
-
rails-html-sanitizer (1.
|
136
|
-
loofah (~> 2.
|
137
|
-
|
138
|
-
|
139
|
-
|
141
|
+
rails-html-sanitizer (1.6.0)
|
142
|
+
loofah (~> 2.21)
|
143
|
+
nokogiri (~> 1.14)
|
144
|
+
railties (7.0.8)
|
145
|
+
actionpack (= 7.0.8)
|
146
|
+
activesupport (= 7.0.8)
|
140
147
|
method_source
|
141
148
|
rake (>= 12.2)
|
142
149
|
thor (~> 1.0)
|
@@ -175,15 +182,15 @@ GEM
|
|
175
182
|
rubocop-rspec (2.11.1)
|
176
183
|
rubocop (~> 1.19)
|
177
184
|
ruby-progressbar (1.11.0)
|
178
|
-
thor (1.2.
|
179
|
-
timeout (0.
|
180
|
-
tzinfo (2.0.
|
185
|
+
thor (1.2.2)
|
186
|
+
timeout (0.4.0)
|
187
|
+
tzinfo (2.0.6)
|
181
188
|
concurrent-ruby (~> 1.0)
|
182
189
|
unicode-display_width (2.2.0)
|
183
|
-
websocket-driver (0.7.
|
190
|
+
websocket-driver (0.7.6)
|
184
191
|
websocket-extensions (>= 0.1.0)
|
185
192
|
websocket-extensions (0.1.5)
|
186
|
-
zeitwerk (2.6.
|
193
|
+
zeitwerk (2.6.12)
|
187
194
|
|
188
195
|
PLATFORMS
|
189
196
|
ruby
|
@@ -1 +1 @@
|
|
1
|
-
(()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{TrusteeWrapperAdapter:()=>o,VoterWrapperAdapter:()=>s});class r{processPythonCodeOnWorker(e,t){return new Promise(((r,o)=>{this.worker.onmessage=e=>{r(e.data.results)},this.worker.onerror=e=>{console.error(e),o(e)},this.worker.postMessage({python:e,...t})}))}}class o extends r{constructor({trusteeId:e,workerUrl:t}){super(),this.trusteeId=e,this.worker=new Worker(t)}setup(){return this.processPythonCodeOnWorker("\n from js import trustee_id\n from bulletin_board.electionguard.trustee import Trustee\n trustee = Trustee(trustee_id)\n ",{trustee_id:this.trusteeId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n
|
1
|
+
(()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{TrusteeWrapperAdapter:()=>o,VoterWrapperAdapter:()=>s});class r{async processPythonCodeOnWorker(e,t){return new Promise(((r,o)=>{this.worker.onmessage=e=>{r(e.data.results)},this.worker.onerror=e=>{console.error("Error in worker",e),o(e)},this.worker.postMessage({python:e,...t})}))}}class o extends r{constructor({trusteeId:e,workerUrl:t}){super(),this.trusteeId=e,this.worker=new Worker(t)}async setup(){return await this.processPythonCodeOnWorker("\n from js import trustee_id\n from bulletin_board.electionguard.trustee import Trustee\n trustee = Trustee(trustee_id)\n ",{trustee_id:this.trusteeId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n from js import message_type, decoded_data\n import json\n trustee.process_message(\n message_type,\n json.loads(decoded_data)\n )\n ",{message_type:e,decoded_data:JSON.stringify(t)});if(r&&r.length>0){const{message_type:e,content:t}=r[0]instanceof Map?Object.fromEntries(r[0]):r[0];return{messageType:e,content:t}}}isFresh(){return this.processPythonCodeOnWorker("\n trustee.is_fresh()\n ")}backup(){return this.processPythonCodeOnWorker("\n trustee.backup().hex()\n ")}restore(e){return this.processPythonCodeOnWorker("\n from js import state\n trustee = Trustee.restore(bytes.fromhex(state))\n True\n ",{state:e})}isKeyCeremonyDone(){return this.processPythonCodeOnWorker("\n trustee.is_key_ceremony_done()\n ")}isTallyDone(){return this.processPythonCodeOnWorker("\n trustee.is_tally_done()\n ")}}class s extends r{constructor({voterId:e,workerUrl:t}){super(),this.voterId=e,this.worker=new Worker(t)}async setup(){return await this.processPythonCodeOnWorker("\n from js import voter_id\n from bulletin_board.electionguard.voter import Voter\n voter = Voter(voter_id)\n ",{voter_id:this.voterId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n from js import message_type, decoded_data\n import json\n voter.process_message(message_type, json.loads(decoded_data))\n ",{message_type:e,decoded_data:JSON.stringify(t)});if(r&&r.length>0){const{message_type:e,content:t}=r[0]instanceof Map?Object.fromEntries(r[0]):r[0];return{messageType:e,content:t}}}async encrypt(e,t){const[r,o]=await this.processPythonCodeOnWorker("\n from js import plain_vote, ballot_style\n voter.encrypt(plain_vote.to_py(), ballot_style)\n ",{plain_vote:e,ballot_style:t});return{auditableData:r,encryptedData:o}}}window.electionGuardVotingScheme=t})();
|
Binary file
|
@@ -1 +1 @@
|
|
1
|
-
var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};
|
1
|
+
var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="attrs.data";var REMOTE_PACKAGE_BASE="attrs.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.8",true,true);Module["FS_createPath"]("/lib/python3.8","site-packages",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","attr",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","attrs-20.3.0-py3.8.egg-info",true,true);function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={data:null,cachedOffset:92978,cachedIndexes:[-1,-1],cachedChunks:[null,null],offsets:[0,1227,2006,3370,4474,5719,6922,7675,8936,9546,10717,12163,13627,14972,16280,17692,18936,20230,21408,22516,23639,24615,25769,26939,28145,29078,30174,31513,32982,34363,35793,37242,38685,39939,41019,42071,43329,44497,45703,46714,48039,49397,50538,51657,52710,53556,54223,55090,56433,57526,58752,59851,60878,62233,63549,64809,66043,67255,68514,69558,70665,71889,73220,74419,75617,76697,77673,78932,80211,80726,81351,81808,82902,84052,85128,86160,87398,88782,90168,91468,92514],sizes:[1227,779,1364,1104,1245,1203,753,1261,610,1171,1446,1464,1345,1308,1412,1244,1294,1178,1108,1123,976,1154,1170,1206,933,1096,1339,1469,1381,1430,1449,1443,1254,1080,1052,1258,1168,1206,1011,1325,1358,1141,1119,1053,846,667,867,1343,1093,1226,1099,1027,1355,1316,1260,1234,1212,1259,1044,1107,1224,1331,1199,1198,1080,976,1259,1279,515,625,457,1094,1150,1076,1032,1238,1384,1386,1300,1046,464],successes:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData["data"]=byteArray;assert(typeof Module.LZ4==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module.LZ4.loadPackage({metadata:metadata,compressedData:compressedData},true);Module["removeRunDependency"]("datafile_attrs.data")}Module["addRunDependency"]("datafile_attrs.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({files:[{filename:"/lib/python3.8/site-packages/attr/__init__.py",start:0,end:1568,audio:0},{filename:"/lib/python3.8/site-packages/attr/_compat.py",start:1568,end:8876,audio:0},{filename:"/lib/python3.8/site-packages/attr/_config.py",start:8876,end:9390,audio:0},{filename:"/lib/python3.8/site-packages/attr/_funcs.py",start:9390,end:22471,audio:0},{filename:"/lib/python3.8/site-packages/attr/_make.py",start:22471,end:110784,audio:0},{filename:"/lib/python3.8/site-packages/attr/_next_gen.py",start:110784,end:114922,audio:0},{filename:"/lib/python3.8/site-packages/attr/_version_info.py",start:114922,end:117084,audio:0},{filename:"/lib/python3.8/site-packages/attr/converters.py",start:117084,end:119298,audio:0},{filename:"/lib/python3.8/site-packages/attr/exceptions.py",start:119298,end:121248,audio:0},{filename:"/lib/python3.8/site-packages/attr/filters.py",start:121248,end:122346,audio:0},{filename:"/lib/python3.8/site-packages/attr/setters.py",start:122346,end:123780,audio:0},{filename:"/lib/python3.8/site-packages/attr/validators.py",start:123780,end:135277,audio:0},{filename:"/lib/python3.8/site-packages/attr/__init__.pyi",start:135277,end:148263,audio:0},{filename:"/lib/python3.8/site-packages/attr/_version_info.pyi",start:148263,end:148472,audio:0},{filename:"/lib/python3.8/site-packages/attr/converters.pyi",start:148472,end:148852,audio:0},{filename:"/lib/python3.8/site-packages/attr/exceptions.pyi",start:148852,end:149391,audio:0},{filename:"/lib/python3.8/site-packages/attr/filters.pyi",start:149391,end:149605,audio:0},{filename:"/lib/python3.8/site-packages/attr/py.typed",start:149605,end:149605,audio:0},{filename:"/lib/python3.8/site-packages/attr/setters.pyi",start:149605,end:150172,audio:0},{filename:"/lib/python3.8/site-packages/attr/validators.pyi",start:150172,end:152040,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/PKG-INFO",start:152040,end:162595,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/SOURCES.txt",start:162595,end:164440,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/dependency_links.txt",start:164440,end:164441,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/not-zip-safe",start:164441,end:164442,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/requires.txt",start:164442,end:164755,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/top_level.txt",start:164755,end:164760,audio:0}],remote_package_size:97074,package_uuid:"f0be090d-5cb6-4ce9-a045-0253e15d3955"})})();
|
Binary file
|
@@ -1 +1 @@
|
|
1
|
-
var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};
|
1
|
+
var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="bulletin_board-electionguard.data";var REMOTE_PACKAGE_BASE="bulletin_board-electionguard.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.8",true,true);Module["FS_createPath"]("/lib/python3.8","site-packages",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","bulletin_board_electionguard-0.1.1-py3.8.egg-info",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","bulletin_board",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages/bulletin_board","electionguard",true,true);function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={data:null,cachedOffset:26805,cachedIndexes:[-1,-1],cachedChunks:[null,null],offsets:[0,1088,2277,3305,4361,5364,6209,6987,8084,9014,10138,11001,11858,12803,13829,14793,15728,16809,17905,18957,20050,21188,22192,23353,24125,25098,26019],sizes:[1088,1189,1028,1056,1003,845,778,1097,930,1124,863,857,945,1026,964,935,1081,1096,1052,1093,1138,1004,1161,772,973,921,786],successes:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData["data"]=byteArray;assert(typeof Module.LZ4==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module.LZ4.loadPackage({metadata:metadata,compressedData:compressedData},true);Module["removeRunDependency"]("datafile_bulletin_board-electionguard.data")}Module["addRunDependency"]("datafile_bulletin_board-electionguard.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({files:[{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/PKG-INFO",start:0,end:348,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/SOURCES.txt",start:348,end:1253,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/requires.txt",start:1253,end:1285,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/dependency_links.txt",start:1285,end:1443,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/top_level.txt",start:1443,end:1458,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/__init__.py",start:1458,end:1458,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/common.py",start:1458,end:6073,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/tally_decryptor.py",start:6073,end:15156,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/utils.py",start:15156,end:16389,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/messages.py",start:16389,end:18101,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/trustee.py",start:18101,end:34144,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/serializable.py",start:34144,end:36902,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/dummy_scheduler.py",start:36902,end:37273,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/voter.py",start:37273,end:41172,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/election.py",start:41172,end:45269,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/bulletin_board.py",start:45269,end:54785,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/__init__.py",start:54785,end:54785,audio:0}],remote_package_size:30901,package_uuid:"7bc125a9-1257-44c4-aaa9-e2890bb3679c"})})();
|
@@ -2,83 +2,111 @@
|
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<meta charset="UTF-8">
|
5
|
-
<script src="https://
|
6
|
-
<script src="https://cdn.jsdelivr.net/npm/jquery.terminal/js/jquery.terminal.min.js"></script>
|
7
|
-
<link href="https://cdn.jsdelivr.net/npm/jquery.terminal/css/jquery.terminal.min.css" rel="stylesheet"/>
|
8
|
-
<link href="renderedhtml.css" rel="stylesheet"/>
|
9
|
-
<script type="text/javascript">
|
10
|
-
// set the pyodide files URL (packages.json, pyodide.asm.data etc)
|
11
|
-
window.languagePluginUrl = './';
|
12
|
-
</script>
|
5
|
+
<script src="https://cdn.jsdelivr.net/npm/jquery"></script>
|
6
|
+
<script src="https://cdn.jsdelivr.net/npm/jquery.terminal@2.23.0/js/jquery.terminal.min.js"></script>
|
7
|
+
<link href="https://cdn.jsdelivr.net/npm/jquery.terminal@2.23.0/css/jquery.terminal.min.css" rel="stylesheet"/>
|
13
8
|
<script src="./pyodide.js"></script>
|
9
|
+
<style>
|
10
|
+
.terminal { --size: 1.5; }
|
11
|
+
</style>
|
14
12
|
</head>
|
15
13
|
<body>
|
16
14
|
<script>
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
function sleep(s){
|
16
|
+
return new Promise(resolve => setTimeout(resolve, s));
|
17
|
+
}
|
18
|
+
async function main() {
|
19
|
+
await loadPyodide({ indexURL : './' });
|
20
|
+
let namespace = pyodide.globals.get("dict")();
|
21
|
+
pyodide.runPython(`
|
22
|
+
import sys
|
23
|
+
import js
|
24
|
+
from pyodide import console
|
25
|
+
import __main__
|
21
26
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
);
|
27
|
+
class PyConsole(console._InteractiveConsole):
|
28
|
+
def __init__(self):
|
29
|
+
super().__init__(
|
30
|
+
__main__.__dict__,
|
31
|
+
persistent_stream_redirection=False,
|
32
|
+
)
|
29
33
|
|
30
|
-
|
31
|
-
|
32
|
-
import io, code, sys
|
33
|
-
from js import term, pyodide
|
34
|
+
def banner(self):
|
35
|
+
return f"Welcome to the Pyodide terminal emulator 🐍\\n{super().banner()}"
|
34
36
|
|
35
|
-
class Console(code.InteractiveConsole):
|
36
|
-
def runcode(self, code):
|
37
|
-
sys.stdout = io.StringIO()
|
38
|
-
sys.stderr = io.StringIO()
|
39
|
-
term.runPython("\\n".join(self.buffer))
|
40
|
-
_c = Console(locals=globals())
|
41
|
-
`)
|
42
37
|
|
43
|
-
|
38
|
+
js.pyconsole = PyConsole()
|
39
|
+
`, namespace);
|
40
|
+
namespace.destroy();
|
44
41
|
|
45
|
-
|
46
|
-
if (result) {
|
47
|
-
term.set_prompt('[[;gray;]... ]')
|
48
|
-
} else {
|
49
|
-
term.set_prompt('[[;red;]>>> ]')
|
50
|
-
var stderr = pyodide.runPython("sys.stderr.getvalue()").trim()
|
51
|
-
if (stderr) {
|
52
|
-
term.echo(`[[;red;]${stderr}]`)
|
53
|
-
} else {
|
54
|
-
var stdout = pyodide.runPython("sys.stdout.getvalue()")
|
55
|
-
if (stdout) {
|
56
|
-
term.echo(stdout.trim())
|
57
|
-
}
|
58
|
-
}
|
59
|
-
}
|
60
|
-
}
|
42
|
+
let ps1 = '>>> ', ps2 = '... ';
|
61
43
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
)
|
44
|
+
async function lock(){
|
45
|
+
let resolve;
|
46
|
+
let ready = term.ready;
|
47
|
+
term.ready = new Promise(res => resolve = res);
|
48
|
+
await ready;
|
49
|
+
return resolve;
|
66
50
|
}
|
67
51
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
52
|
+
async function interpreter(command) {
|
53
|
+
let unlock = await lock();
|
54
|
+
try {
|
55
|
+
term.pause();
|
56
|
+
// multiline should be splitted (useful when pasting)
|
57
|
+
for( const c of command.split('\n') ) {
|
58
|
+
let run_complete = pyconsole.run_complete;
|
59
|
+
try {
|
60
|
+
const incomplete = pyconsole.push(c);
|
61
|
+
term.set_prompt(incomplete ? ps2 : ps1);
|
62
|
+
let r = await run_complete;
|
63
|
+
if(pyodide.isPyProxy(r)){
|
64
|
+
r.destroy();
|
65
|
+
}
|
66
|
+
} catch(e){
|
67
|
+
if(e.name !== "PythonError"){
|
68
|
+
term.error(e);
|
69
|
+
throw e;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
run_complete.destroy();
|
73
|
+
}
|
74
|
+
} finally {
|
75
|
+
term.resume();
|
76
|
+
await sleep(10);
|
77
|
+
unlock();
|
75
78
|
}
|
76
79
|
}
|
77
80
|
|
78
|
-
term
|
79
|
-
|
81
|
+
let term = $('body').terminal(
|
82
|
+
interpreter,
|
83
|
+
{
|
84
|
+
greetings: pyconsole.banner(),
|
85
|
+
prompt: ps1,
|
86
|
+
completionEscape: false,
|
87
|
+
completion: function(command, callback) {
|
88
|
+
callback(pyconsole.complete(command).toJs()[0]);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
);
|
92
|
+
window.term = term;
|
93
|
+
pyconsole.stdout_callback = s => term.echo(s, {newline : false});
|
94
|
+
pyconsole.stderr_callback = s => {
|
95
|
+
term.error(s.trimEnd());
|
80
96
|
}
|
81
|
-
|
97
|
+
term.ready = Promise.resolve();
|
98
|
+
pyodide._module.on_fatal = async (e) => {
|
99
|
+
term.error("Pyodide has suffered a fatal error. Please report this to the Pyodide maintainers.");
|
100
|
+
term.error("The cause of the fatal error was:");
|
101
|
+
term.error(e);
|
102
|
+
term.error("Look in the browser console for more details.");
|
103
|
+
await term.ready;
|
104
|
+
term.pause();
|
105
|
+
await sleep(15);
|
106
|
+
term.pause();
|
107
|
+
};
|
108
|
+
}
|
109
|
+
window.console_ready = main();
|
82
110
|
</script>
|
83
111
|
</body>
|
84
112
|
</html>
|
Binary file
|