Documentation
¶
Index ¶
- Constants
- Variables
- func CKKSDecryptAmountFromCT(ct *rlwe.Ciphertext, sk *rlwe.SecretKey) float64
- func CKKSEncryptAmount(amount float64, pk *rlwe.PublicKey) *rlwe.Ciphertext
- func CheckIfOK(jsonData map[string]interface{}) (err error)
- func CryptoInit() (err error)
- func ExtractTransactionFromResponseJSON(jsonData map[string]interface{}) (tx *transaction.Transaction, err error)
- func GetTransactionFromServer(id uuid.UUID) (tx *transaction.Transaction, err error)
- func ImportCKKSKeychainFromFile()
- func InitDatabase() (db *sql.DB, err error)
- func RegisterSwk(userIn, userOut uuid.UUID, swk *rlwe.SwitchingKey) error
- func RequestAuthorize(rlwe.SecretKey, rlwe.PublicKey) ([]string, error)
- func RequestNewKeyFromCA() (rlwe.SecretKey, rlwe.PublicKey)
- func ServerGetBalance(server string, target uuid.UUID) (balance *rlwe.Ciphertext, err error)
- func SyncCASigningKey() ([]ecdsa.PublicKey, error)
- func SyncCASigningKeyWithURL(caUrl string) ([]ecdsa.PublicKey, error)
- func UnmarshalTransactionFromResponse(resp *http.Response) (*transaction.Transaction, error)
- type Client
- type GetBalanceJSON
- type HTTPRequestJSON
- type User
- func (u User) AcceptTransaction(t interface{}) (sig []byte, err error)
- func (u User) AcceptTransactionByTransaction(t *transaction.Transaction) (sig []byte, err error)
- func (u User) AcceptTransactionByUUID(uuid uuid.UUID) (sig []byte, err error)
- func (u User) AuthSwitchingKey() error
- func (u User) CreateConfirmTransactionTask(t *transaction.Transaction) error
- func (u *User) CreateReceiveJob(target User) error
- func (u *User) CreateTransferJob(transaction *transaction.Transaction) (newT *transaction.Transaction, err error)
- func (u User) DecryptAmountFromCT(ct *rlwe.Ciphertext) (amount float64, err error)
- func (u User) GetBalance() (balance float64, err error)
- func (u User) NewOutgoingTransaction(receipt *User) (t *transaction.Transaction, err error)
- func (u *User) RegisterUser() error
- func (u User) RejectTransactionByTransaction()
- func (u User) Sign(ct interface{}) (sig []byte, e error)
- func (u User) SignAcceptTransactionCT(ct rlwe.Ciphertext) (sig []byte, e error)
- func (u User) SignCipherText(ct rlwe.Ciphertext) (sig []byte, e error)
- func (u User) TransferByReceiptPK(receipt *User, amount float64) (t *transaction.Transaction, err error)
- func (u User) TransferBySenderPK(receipt *User, amount float64) (t *transaction.Transaction, err error)
- func (u User) VerifyAmountIsMoreThanBalance(amount float64) (result bool, err error)
- func (u User) VerifyCTSignature(ct *rlwe.Ciphertext, sig []byte) (bool, error)
- func (u User) VerifySignature(payload []byte, sig []byte) (bool, error)
Constants ¶
const ( DefaultDatabaseDirPath string = "/.config/Chimata/" DefaultDatabaseFileName string = "client.db" )
const ( DefaultServerURL string = "http://127.0.0.1:16001" TransactionCreateEndpoint string = "/transaction/create" TransactionConfirmEndpoint string = "/transaction/confirm" TransactionGetEndpoint string = "/transaction/get" GetBalanceEndpoint string = "/user/getBalance" RegisterUserEndpoint string = "/register/user" RegisterSwkEndpoint string = "/register/swk" )
const (
CAPubkeyEndpoint string = "/pubkey"
)
const ( // 默认的 CA 接口,测试就用这个了 DefaultCAUrl string = "http://localhost:16002" )
Variables ¶
var ( CKKSEncoder ckks.Encoder CKKSParams ckks.Parameters // 方案中使用 P-256 作为曲线参数 ECDSACurve elliptic.Curve = elliptic.P256() )
CKKS 安全参数和公用结构体
var (
ConfigDatabasePath string = homedir + DefaultDatabaseDirPath + DefaultDatabaseFileName
)
var (
ConfigServerURL string = DefaultServerURL
)
Functions ¶
func CKKSDecryptAmountFromCT ¶
func CKKSDecryptAmountFromCT(ct *rlwe.Ciphertext, sk *rlwe.SecretKey) float64
CKKSDecryptAmountFromCT 从密文中提取加密的金额 输入:密文(ct),私钥 输出:金额(float64)
func CKKSEncryptAmount ¶
func CKKSEncryptAmount(amount float64, pk *rlwe.PublicKey) *rlwe.Ciphertext
CKKSEncryptAmount 对数字(交易金额)进行基于 CKKS 的加密 输入:金额,公钥 输出:密文(rlwe.ct)
func ExtractTransactionFromResponseJSON ¶
func ExtractTransactionFromResponseJSON(jsonData map[string]interface{}) (tx *transaction.Transaction, err error)
func GetTransactionFromServer ¶
func GetTransactionFromServer(id uuid.UUID) (tx *transaction.Transaction, err error)
func ImportCKKSKeychainFromFile ¶
func ImportCKKSKeychainFromFile()
ImportCKKSKeychainFromFile 从文件中导入 CKKS 密钥链 目前不考虑
func InitDatabase ¶
func RegisterSwk ¶
func RegisterSwk(userIn, userOut uuid.UUID, swk *rlwe.SwitchingKey) error
func ServerGetBalance ¶
ServerGetBalance 从服务端获取用户的余额密文。一个更优雅的方法是调用 User.ServerGetBalance()。 一个可能返回的json: "status": "OK", "Failed" "balance" : rlwe.ciphertext
func SyncCASigningKey ¶
func SyncCASigningKeyWithURL ¶
func UnmarshalTransactionFromResponse ¶
func UnmarshalTransactionFromResponse(resp *http.Response) (*transaction.Transaction, error)
Types ¶
type Client ¶
func (Client) ConfirmTransaction ¶
func (c Client) ConfirmTransaction(t *transaction.Transaction) (err error)
func (Client) GetTransactionAmount ¶
type GetBalanceJSON ¶
type GetBalanceJSON struct {
UserUUID [16]byte `json:"useruuid"`
}
type HTTPRequestJSON ¶
type User ¶
继承 users.User
func (User) AcceptTransaction ¶
func (User) AcceptTransactionByTransaction ¶
func (u User) AcceptTransactionByTransaction(t *transaction.Transaction) (sig []byte, err error)
func (User) AcceptTransactionByUUID ¶
func (User) CreateConfirmTransactionTask ¶
func (u User) CreateConfirmTransactionTask(t *transaction.Transaction) error
CreateConfirmTransactionTask 用来将确认交易信息上传到服务端 输入:Transaction 结构体 不会有返回值
func (*User) CreateReceiveJob ¶
CreateReceiveTask 创建一个接受任务,提交至云端,并将接受任务的 UUID/流水号返回 目前不考虑
func (*User) CreateTransferJob ¶
func (u *User) CreateTransferJob(transaction *transaction.Transaction) (newT *transaction.Transaction, err error)
调用 createTransferJob 进行进一步动作。 createTransferJob 基于 HTTP POST 进行转账请求的发起,将编码后的转账请求发送到服务端; 服务端将转账请求存入数据库,并返回转账任务的 UUID/流水号
func (User) DecryptAmountFromCT ¶
func (u User) DecryptAmountFromCT(ct *rlwe.Ciphertext) (amount float64, err error)
func (User) GetBalance ¶
func (User) NewOutgoingTransaction ¶
func (u User) NewOutgoingTransaction(receipt *User) (t *transaction.Transaction, err error)
NewOutgoingTransaction 以用户为接收器生成一个新的转账交易
func (*User) RegisterUser ¶
func (User) RejectTransactionByTransaction ¶
func (u User) RejectTransactionByTransaction()
func (User) SignAcceptTransactionCT ¶
func (u User) SignAcceptTransactionCT(ct rlwe.Ciphertext) (sig []byte, e error)
SignAcceptTransactionCT() 对接受交易的密文进行签名 接收方式为对 "Accept+"+CT 进行签名
func (User) SignCipherText ¶
func (u User) SignCipherText(ct rlwe.Ciphertext) (sig []byte, e error)
对密文进行签名
func (User) TransferByReceiptPK ¶
func (u User) TransferByReceiptPK(receipt *User, amount float64) (t *transaction.Transaction, err error)
TransferBySenderPK 使用发送方的密钥链对金额进行加密并签名, 输入:接收用户,金额明文 输出:一个新的Transaction
func (User) TransferBySenderPK ¶
func (u User) TransferBySenderPK(receipt *User, amount float64) (t *transaction.Transaction, err error)
TransferBySenderPK 使用发送方的密钥链对金额进行加密并签名, 输出:一个新的 Transaction
func (User) VerifyAmountIsMoreThanBalance ¶
VerifyAmountIsMoreThanBalance 客户端验证余额是否足够 输入:金额明文 输出:是否足够,错误
func (User) VerifyCTSignature ¶
VerifyCTSignature 以密文对象为输入,验证签名