mnemonic.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package service
  2. import (
  3. "context"
  4. "key-manager/crypto"
  5. "key-manager/dao"
  6. "key-manager/hd"
  7. "key-manager/key"
  8. )
  9. func (km *KeyManager) CreateMnemonic(ctx context.Context, req *CreateMnemonicRequest) (*CreateMnemonicResponse, error) {
  10. km.lk.Lock()
  11. defer km.lk.Unlock()
  12. mType := hd.MnemonicType(req.MnemonicType)
  13. if hd.Mnemonic12 != mType && hd.Mnemonic24 != mType {
  14. return &CreateMnemonicResponse{
  15. Code: mnemonicTypeErrCode,
  16. Msg: mnemonicTypeErrMsg,
  17. }, nil
  18. }
  19. if req.Name == "" {
  20. return &CreateMnemonicResponse{
  21. Code: mnemonicNameErrCode,
  22. Msg: mnemonicNameErrMsg,
  23. }, nil
  24. }
  25. log.Infow("CreateMnemonic", "name", req.Name, "mnemonic", mType.String())
  26. passwordKey := crypto.GenerateEncryptKey([]byte(km.password))
  27. mnemonic, err := key.GenerateMnemonic(mType)
  28. if err != nil {
  29. log.Warnw("CreateMnemonic: ", "err", err)
  30. return &CreateMnemonicResponse{
  31. Code: GenerateMnemonicErrCode,
  32. Msg: err.Error(),
  33. }, nil
  34. }
  35. encryptedMnemonic, err := encryptMnemonic(mnemonic, passwordKey)
  36. if err != nil {
  37. log.Warnw("CreateMnemonic: ", "err", err)
  38. return &CreateMnemonicResponse{
  39. Code: encryptMnemonicErrCode,
  40. Msg: err.Error(),
  41. }, nil
  42. }
  43. err = km.dao.CreateMnemonic(&dao.Mnemonic{
  44. Name: req.Name,
  45. Mnemonic: encryptedMnemonic,
  46. })
  47. if err != nil {
  48. log.Warnw("CreateMnemonic: ", "err", err)
  49. return &CreateMnemonicResponse{
  50. Code: dbErrCode,
  51. Msg: err.Error(),
  52. }, nil
  53. }
  54. km.mnemonics[req.Name] = mnemonic
  55. return &CreateMnemonicResponse{
  56. Code: okCode,
  57. Msg: okMsg,
  58. }, nil
  59. }