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 (bcr *BlockchainReactor) pseudohsmCreateKey(ctx context.Context, in struct {
24 Alias string `json:"alias"`
25 Password string `json:"password"`
27 xpub, err := bcr.hsm.XCreate(in.Alias, in.Password)
29 return NewErrorResponse(err)
31 return NewSuccessResponse(xpub)
34 func (bcr *BlockchainReactor) pseudohsmListKeys(ctx context.Context) Response {
35 xpubs, err := bcr.hsm.ListKeys()
37 return NewErrorResponse(err)
40 return NewSuccessResponse(xpubs)
43 func (bcr *BlockchainReactor) pseudohsmDeleteKey(ctx context.Context, x struct {
44 Password string `json:"password"`
45 XPub chainkd.XPub `json:"xpubs"`
47 if err := bcr.hsm.XDelete(x.XPub, x.Password); err != nil {
48 return NewErrorResponse(err)
50 return NewSuccessResponse(nil)
53 func (bcr *BlockchainReactor) 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, bcr.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(&x.Txs)
65 func (bcr *BlockchainReactor) pseudohsmSignTemplate(ctx context.Context, xpub chainkd.XPub, path [][]byte, data [32]byte, password string) ([]byte, error) {
66 return bcr.hsm.XSign(xpub, path, data[:], password)
69 func (bcr *BlockchainReactor) pseudohsmResetPassword(ctx context.Context, x struct {
72 XPub chainkd.XPub `json:"xpubs"`
74 return bcr.hsm.ResetPassword(x.XPub, x.OldPassword, x.NewPassword)