6 log "github.com/sirupsen/logrus"
8 "github.com/bytom/blockchain/pseudohsm"
9 "github.com/bytom/blockchain/txbuilder"
10 "github.com/bytom/crypto/ed25519/chainkd"
11 "github.com/bytom/net/http/httperror"
15 //Error code 050 represents alias of key duplicated
16 errorFormatter.Errors[pseudohsm.ErrDuplicateKeyAlias] = httperror.Info{400, "BTM050", "Alias already exists"}
17 //Error code 801 represents query request format error
18 errorFormatter.Errors[pseudohsm.ErrInvalidAfter] = httperror.Info{400, "BTM801", "Invalid `after` in query"}
19 //Error code 802 represents query reponses too many
20 errorFormatter.Errors[pseudohsm.ErrTooManyAliasesToList] = httperror.Info{400, "BTM802", "Too many aliases to list"}
23 func (a *API) pseudohsmCreateKey(ctx context.Context, in struct {
24 Alias string `json:"alias"`
25 Password string `json:"password"`
27 xpub, err := a.wallet.Hsm.XCreate(in.Alias, in.Password)
29 return NewErrorResponse(err)
31 return NewSuccessResponse(xpub)
34 func (a *API) pseudohsmListKeys(ctx context.Context) Response {
35 return NewSuccessResponse(a.wallet.Hsm.ListKeys())
38 func (a *API) pseudohsmDeleteKey(ctx context.Context, x struct {
39 Password string `json:"password"`
40 XPub chainkd.XPub `json:"xpub"`
42 if err := a.wallet.Hsm.XDelete(x.XPub, x.Password); err != nil {
43 return NewErrorResponse(err)
45 return NewSuccessResponse(nil)
48 type signResp struct {
49 Tx *txbuilder.Template `json:"transaction"`
50 SignComplete bool `json:"sign_complete"`
53 func (a *API) pseudohsmSignTemplates(ctx context.Context, x struct {
54 Password string `json:"password"`
55 Txs txbuilder.Template `json:"transaction"`
57 if err := txbuilder.Sign(ctx, &x.Txs, nil, x.Password, a.pseudohsmSignTemplate); err != nil {
58 log.WithField("build err", err).Error("fail on sign transaction.")
59 return NewErrorResponse(err)
61 log.Info("Sign Transaction complete.")
62 return NewSuccessResponse(&signResp{Tx: &x.Txs, SignComplete: txbuilder.SignProgress(&x.Txs)})
65 func (a *API) pseudohsmSignTemplate(ctx context.Context, xpub chainkd.XPub, path [][]byte, data [32]byte, password string) ([]byte, error) {
66 return a.wallet.Hsm.XSign(xpub, path, data[:], password)
69 type ResetPasswordResp struct {
70 Changed bool `json:"changed"`
73 func (a *API) pseudohsmResetPassword(ctx context.Context, ins struct {
74 XPub chainkd.XPub `json:"xpub"`
75 OldPassword string `json:"old_password"`
76 NewPassword string `json:"new_password"`
78 resp := &ResetPasswordResp{Changed: false}
79 if err := a.wallet.Hsm.ResetPassword(ins.XPub, ins.OldPassword, ins.NewPassword); err != nil {
80 return NewSuccessResponse(resp)
83 return NewSuccessResponse(resp)