clientlib

package
v0.0.0-...-a26456e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 21, 2023 License: Apache-2.0 Imports: 25 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultDatabaseDirPath  string = "/.config/Chimata/"
	DefaultDatabaseFileName string = "client.db"
)
View Source
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"
)
View Source
const (
	CAPubkeyEndpoint string = "/pubkey"
)
View Source
const (
	// 默认的 CA 接口,测试就用这个了
	DefaultCAUrl string = "http://localhost:16002"
)

Variables

View Source
var (
	CKKSEncoder ckks.Encoder
	CKKSParams  ckks.Parameters
	// 方案中使用 P-256 作为曲线参数
	ECDSACurve elliptic.Curve = elliptic.P256()
)

CKKS 安全参数和公用结构体

View Source
var (
	ConfigDatabasePath string = homedir + DefaultDatabaseDirPath + DefaultDatabaseFileName
)
View Source
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 CheckIfOK

func CheckIfOK(jsonData map[string]interface{}) (err error)

判断服务端返回的json是否是成功的

func CryptoInit

func CryptoInit() (err error)

对参数等进行初始化

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 InitDatabase() (db *sql.DB, err error)

func RegisterSwk

func RegisterSwk(userIn, userOut uuid.UUID, swk *rlwe.SwitchingKey) error

func RequestAuthorize

func RequestAuthorize(rlwe.SecretKey, rlwe.PublicKey) ([]string, error)

func RequestNewKeyFromCA

func RequestNewKeyFromCA() (rlwe.SecretKey, rlwe.PublicKey)

func ServerGetBalance

func ServerGetBalance(server string, target uuid.UUID) (balance *rlwe.Ciphertext, err error)

ServerGetBalance 从服务端获取用户的余额密文。一个更优雅的方法是调用 User.ServerGetBalance()。 一个可能返回的json: "status": "OK", "Failed" "balance" : rlwe.ciphertext

func SyncCASigningKey

func SyncCASigningKey() ([]ecdsa.PublicKey, error)

func SyncCASigningKeyWithURL

func SyncCASigningKeyWithURL(caUrl string) ([]ecdsa.PublicKey, error)

func UnmarshalTransactionFromResponse

func UnmarshalTransactionFromResponse(resp *http.Response) (*transaction.Transaction, error)

Types

type Client

type Client struct {
	Database *sql.DB
	MainUser User
}

func NewClient

func NewClient(dbPath string, mainUser User) (c *Client, err error)

func (Client) ConfirmTransaction

func (c Client) ConfirmTransaction(t *transaction.Transaction) (err error)

func (Client) GetTransactionAmount

func (c Client) GetTransactionAmount(t interface{}) (amount float64, err error)

func (Client) TransferViaUser

func (c Client) TransferViaUser(u *User, amount float64, method string) (err error)

转账任务

type GetBalanceJSON

type GetBalanceJSON struct {
	UserUUID [16]byte `json:"useruuid"`
}

type HTTPRequestJSON

type HTTPRequestJSON struct {
	OAuth string                 `json:"oauth"`
	Body  map[string]interface{} `json:"body"`
}

type User

type User struct {
	// 集成
	users.User

	// 服务端认证,现阶段不考虑
	OAuth string
}

继承 users.User

func (User) AcceptTransaction

func (u User) AcceptTransaction(t interface{}) (sig []byte, err error)

func (User) AcceptTransactionByTransaction

func (u User) AcceptTransactionByTransaction(t *transaction.Transaction) (sig []byte, err error)

func (User) AcceptTransactionByUUID

func (u User) AcceptTransactionByUUID(uuid uuid.UUID) (sig []byte, err error)

func (User) AuthSwitchingKey

func (u User) AuthSwitchingKey() error

真的要在这个阶段写么

func (User) CreateConfirmTransactionTask

func (u User) CreateConfirmTransactionTask(t *transaction.Transaction) error

CreateConfirmTransactionTask 用来将确认交易信息上传到服务端 输入:Transaction 结构体 不会有返回值

func (*User) CreateReceiveJob

func (u *User) CreateReceiveJob(target User) error

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 (u User) GetBalance() (balance float64, err error)

func (User) NewOutgoingTransaction

func (u User) NewOutgoingTransaction(receipt *User) (t *transaction.Transaction, err error)

NewOutgoingTransaction 以用户为接收器生成一个新的转账交易

func (*User) RegisterUser

func (u *User) RegisterUser() error

func (User) RejectTransactionByTransaction

func (u User) RejectTransactionByTransaction()

func (User) Sign

func (u User) Sign(ct interface{}) (sig []byte, e error)

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

func (u User) VerifyAmountIsMoreThanBalance(amount float64) (result bool, err error)

VerifyAmountIsMoreThanBalance 客户端验证余额是否足够 输入:金额明文 输出:是否足够,错误

func (User) VerifyCTSignature

func (u User) VerifyCTSignature(ct *rlwe.Ciphertext, sig []byte) (bool, error)

VerifyCTSignature 以密文对象为输入,验证签名

func (User) VerifySignature

func (u User) VerifySignature(payload []byte, sig []byte) (bool, error)

Low-level 验证签名方法

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL