---
# System prepended metadata

title: weekly report

---

# 4/2 Learning report

## 董事會投票
### Workflow
- Before : Admin去拿所有人的名單，然後去Voting machine設置投票內容。
- In : Voter拿手機去admin做身分認證拿到票，之後到Voting machine上做投票。
    - 先拿android當UI和操作介面->安全性考量將全部做在m2354上面  
- After: 之後到Voting machine拿結果。

### Mecha

Admin: android
Voter: android
Voting machine: M2354+android

Communication:
Admin <-> Voting machine : 藍芽
Admin <-> Voter : 藍芽
Voter <-> Voting machine : 藍芽

Data:
Data Serializtion: Json


### Function
- onboard( low-priority ):
    - Menu:
        - issue initialization u-ticket to voting machine
        - issue ownership u-ticket to Admin
    - Admin:
        - onboard(): 交換公鑰。
        - apply ownership u-ticket to voting machine
    - Voting machine:
        - onboard(): 交換公鑰。
- Before:
    - Admin:
        - init(): 拿所有人的名單，以及設置投票內容。(透過電腦)
        - admin_issue_config_uticket(): 和Voting machine連結並設置投票內容。(以u票形式)
    - Voting machine:
        - vm_recv_uticket(): 接受config的設置。
- In:
    - Admin:
        - send_nonce() : send a nonce after the bluetooth connection.
        - verify_voter() : receive signature and verify
        - response_voter() : response success or fail
        - issue(): issue voting U-ticket to Voter
    - Voter:
    	- scan() : scan the QR code on Admin
    	- sign() : Voter sign the nonce with private key and send signature
        - request(): request voting U-ticket from Admin
        - voter_apply_ticket(): apply voting U-ticket
    - Voting machine:
        - vote_auth() : verify voting U-ticket from Voter
        - store_result() : store the result from Voter
        - r票存起來
- After:
    - Admin:
        - tally(): 叫Voting machine傳結果。(u票形式)
        - receive(): 統計並且顯示結果
        - upload(): 上傳結果及r票到blockChain。
    - Voting machine:
        - 回傳結果給Admin。

### Todos
#### Team Android
- Build U-ticket and R-ticket class using ureka-framework.
- Implement the functions of admin and voter.

畫圖 -- workflow(function), mechanical

e.g.
![image](https://hackmd.io/_uploads/HklnYAOyR.png)

![image](https://hackmd.io/_uploads/rJlEJJtk0.png)

![image](https://hackmd.io/_uploads/rkBrkyYyC.png)


Define API


# 4/2 YangBao


開發路徑：
先轉成java, c -> ***test*** with simulation
完成之後再將其植入m2354, android


---
開發文件：
一般有兩個版本（外部文件（一般人）， 內部文件（工程人員））
- 外部文件：操作說明, ＵＩ
- 要講為啥我們要這樣做，而不是全雲端。

專題展就照著學長給的ppt改。

---
Ureka mapping

voting mahcine -> IOT device
tally machine (merge Election admin) -> agent
voter -> agent

m2354 做tally 和 voting

reuse api 不要自己定義新的資安function 

### next week

完成文件(參考學長的)
看code
寫feature(分工)

## 4/15
1. Admin 需透過 tally 傳 config 給 voting 
2. voter 拆成 passer


## 4/16

assumption(會不會被惡意植入程式)
所有的program都是正常運行的

補齊ownership->是一個人
每個人都有一個機器(可能是手機)還不存在(可能是卡片)device裡面裝有private key，可以生出去很多不同的public key

eid怎麼來的怎麼灌進tally machine大家都可以撿到u-ticket但只有user可以用

陽寶一開始想的就是最棒的不要東改改西改改

assumed 事功發的是就可以先設計一臺就好
assumption 很重要最後再來討論
voter 合併passer

passer 參考其他國家的投票(例如印度

owner scope 要定義一夏


### next week

開發環境(兩三個人一起實作的開發環境)
想一下 windows10 (github)拉拉拉屎


## 4/18

1. 因為做身份認證也需要發送u-ticket，所以不能直接跟tally做，需要先跟admin要求身份認證的u-ticket
2. 設計足夠安全的app

![image](https://hackmd.io/_uploads/ryPGebClR.png)

4/30
想說哪一些情況是合理或不合理
voting machine要account
voting的rule要知道才能有一致的結果
RULE要可以被大家驗證之後投票才會成立
voting machine可以存幾張票(RULE+R票)



用docker中environment



討論:
eid怎麼做

5/8
1. 假設有eid, eid裡面有key pair和events
2. 根據是否有進入董事會來決定是否可以投票。
3. 從鏈上下載有“進入董事會”這個event的eid -> 獲得key table
4. Admin 將 voter 投完得到的R Ticket傳到鏈上，否則票數對不上的話會判定失效。投票結果包在tally R Ticket中。
5. key table要在admin machine上
6. 用hashmap保證投過不能再投
7. 為什麼要分voting machine和admin agent? 因為要降低admin的權利
（避免可以同時操控上傳區塊鏈以及計票的功能）

5/20

Configuration:
1. 用eID event生成voter table 和 candidate table
2. 由admin agent下載兩張table並拿去config voting machine
3. Config R-Ticket 傳給 Admin agent 並上傳bc
4. Config R-Ticket 存有兩個 table 的 hashValue
5. Config 僅可設置一次，需要經過tally後才可以再次進行

In election:
1. Voter 拿著 Voter agent 找 Admin agent 做身份驗證
2. Voter agent 需有App (包含 eID key pair)
3. Admin agent 驗證後核發 Voting U-Ticket
4. Voter Agent 拿著 Voting U-Ticket 找 Voting machine
5. Voting machine 先確認 Ｕ-Ticket 上的 Public key 有無投票過以及是否可以投票（驗證投票者身份及確保只有投過一次）
6. 驗證完成後 Voter agent 進行投票
7. Voting machine 將 R-Ticket 的副本傳給 Voter agent (R-Ticket 正本將會在 tally 時傳回給 Admin agent)

After election:
1. Admin machine 傳送 Tally U-ticket 要求 voting machine 進行結算
2. Voting machine 結算後回傳 Tally R-Ticket 以及所有 voting R-Tickets
3. Tally R-ticket 包括結果(各個候選人得票數)
4. Admin agent 將這些 R-Tickets 上傳bc
5. bc 確認所有 voting R-Tickets 的 key 是否都在 key table 上並確認R-Ticket 總數符合總票數

Q:
1. Voting Ｒ-Ticket 需要紀錄 voter key嗎？(與現實相反)
2. 需不需要 check? -> 因為我們的系統不存在除了系統故障以外的潛在風險，我們認為R-Ticket就可以解決

5/22

Q1: 我們要讓任何人都可以不經過admin去跟voting machine 要R票
1. plan A: permissionless ticket -> can see config R-Ticket
2. plan B: use button
3. tally 後才能做這件事情
4. 誰都可以看

Q2: 什麼時候進入tally階段
1. 所有人完成投票
2. 訂一個時間，在這個時間以前且還有未投票者則無法tally
3. 投票者拿著voting U-ticket需在admin進行tally以前完成投票，否則該票無效

5/29
1. 把投過票的名單包在tally R-Ticket回傳 -> 解決空間問題
2. 採用時間模組
3. 測驗
- Admin 創假人：
- 有沒資格的人來投票：
- 有人重複投票：
- Admin 亂改結果：