Skip to content

Instantly share code, notes, and snippets.

@CamberLoid
Last active May 1, 2023 16:09
Show Gist options
  • Save CamberLoid/a160bb65acfc1d0bc64963d6f0678555 to your computer and use it in GitHub Desktop.
Save CamberLoid/a160bb65acfc1d0bc64963d6f0678555 to your computer and use it in GitHub Desktop.
Chimata Progress & Plan (In Chinese)

计划表!

  • 写论文 ETA 5.2
    • 绪论
    • 基础知识
    • 方案描述
      • 代码描述
      • 测试结果:和集成测试一起写
  • 写客户端Lib ETA 4.23
    • Core Library 95%
    • 集成测试 ETA 4.29
    • CLI前端
  • 写服务端Lib 95% ETA 4.26
    • Core
    • 集成测试 ETA 4.29 5.4
    • CLI前端
  • 写冒烟测试 ETA Before 5.1
  • 完善,运行测试 ETA 5.1 - 5.2

目前已经完成的进度:

客户端

前端

  • client.go: CLI客户端
    • 不考虑,集中于集成的test和benchmark
  • db.go:数据库操作,现阶段不考虑。
    • [ ]

Clientlib

  • crypto.go
    • Phase 1 Core:
      • func CryptoInit()
      • func CKKSEncryptAmount(amount, pk) ct 加密
      • func CKKSDecryptAmountFromCT(ct, sk) float64 解密
  • transaction.go:
    • Phase 1: Core
      • func u.TransferByReceiptPK(*User, float64): 使用接受者公钥进行转账,并使用发送者私钥签名。需要接受者确认;
      • func u.TransferBySenderPK(*User, float64): 使用发送者密钥链进行转账和签名。不需要发送者确认。使用该方法时,服务端在验证后直接进行记账。
        • 转交给:u.CreateTransferJob()
      • u.AcceptTransactionByTransaction(t Transaction): TransferByReceiptPK的后续处理方法,生成签名返回给服务端
        • 前置:func u.NewIncomingTransaction
        • u.RejectTransactionByTransaction(t Transaction): 生成取消签名
      • u.VerifyAmountIsMoreThanBalance(): 客户端方面确认余额是否足够
    • Phase 2: Extend
      • u.AcceptTransaction(t interface{}):
      • u.AcceptTransactionByUUID():
  • server.go:
    • CreateTransferJob(t Transaction):
    • func ConfirmTransaction
    • func RejectTransaction 向服务器发送新的交易请求,返回交易识别符 uuid [16]byte
    • CreateReceiveJob(): Advanced,后期处理
  • user.go
    • Phase 1:
      • type User struct 继承 internal/user 的共用部分
        • 不太完备,不勾上了
      • Sign() 签名
        • func SignCipherText(ct)(sig ,err)
        • func SignAcceptTransactionCT(ct)(sig, err): 接受签名
      • u.GetBalance() float64
        • GetBalance(userUUID [16]byte) rlwe.CipherText
      • u.DecryptAmountFromCT() 解密
        • CKKSDecryptAmountFromCT
    • Phase 2:
      • u.QueryTransaction(q interface{})

客户端测试

  • 冒烟测试 1
    • 造两个User出来
      • 造Switchingkey并丢给服务端
    • 模拟转账
      • 验证交易金额正确性
      • 验证交易消耗时间

服务端

CLI

  • server.go: 主函数
  • db.go: 数据库操作: 使用 SQLite
  • api.go: 负责处理 RestfulAPI 请求
    • Phase 1 核心
      • /transaction/create: 创建新的交易
        • .../bySenderPK:
        • .../byReceiptPK:
      • transaction/get: TransactionGetWithUUID
      • Transaction/confirm: 确认待确认的交易
      • User/GetBalance: 以uuid为凭据,获取余额的密文
    • Phase 2 其他更多
      • User/GetTransaction: 以uuid为凭据,获取该用户的交易列表

Server-lib

Serverlib 负责所有离线的客户端可能的函数

  • transaction.go
    • VerifyTransactionValidity(t Transaction) error: 检验交易合法性:
      • RequestCAVerifyValidity: 检验透支
  • crypto.go
    • GetSwitchingKey(uuidIn, uuidOut)(*swk, error): 访问内部的 map[string]map[string]*swk
      在第一阶段中,假设其已经有了这些重加密密钥信息
      • RequestSwitchingKey(uuidIn, uuidOut): Advanced用来向CA要求的重加密密钥的;
    • ReEncryptCTWithSwk

Others

type Transaction Struct {}

  • transaction.go
    • type Transaction struct
      • func GetSenderCT
      • func GetReceiptCT
    • 大概没有了?

db.go 共用的SQLite数据库操作方法

  • 建表
    • 测试
  • 查询
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment