OSDN Git Service

Change mnemonic length to 12
authorYahtoo Ma <yahtoo.ma@gmail.com>
Fri, 16 Nov 2018 02:24:07 +0000 (10:24 +0800)
committerYahtoo Ma <yahtoo.ma@gmail.com>
Fri, 16 Nov 2018 02:51:18 +0000 (10:51 +0800)
blockchain/pseudohsm/pseudohsm.go

index 1679677..efb050f 100644 (file)
@@ -22,8 +22,12 @@ var (
        ErrDuplicateKeyAlias = errors.New("duplicate key alias")
        ErrLoadKey           = errors.New("key not found or wrong password ")
        ErrDecrypt           = errors.New("could not decrypt key with given passphrase")
+       ErrMnemonicLength    = errors.New("mnemonic length error")
 )
 
+// EntropyLength random entropy length to generate mnemonics.
+const EntropyLength = 128
+
 // HSM type for storing pubkey and privatekey
 type HSM struct {
        cacheMu  sync.Mutex
@@ -72,6 +76,12 @@ func (h *HSM) ImportKeyFromMnemonic(alias string, auth string, mnemonic string,
        h.cacheMu.Lock()
        defer h.cacheMu.Unlock()
 
+       // checksum length = entropy length /32
+       // mnemonic length = (entropy length + checksum length)/11
+       if len(strings.Fields(mnemonic)) != (EntropyLength+EntropyLength/32)/11 {
+               return nil, ErrMnemonicLength
+       }
+
        normalizedAlias := strings.ToLower(strings.TrimSpace(alias))
        if ok := h.cache.hasAlias(normalizedAlias); ok {
                return nil, ErrDuplicateKeyAlias
@@ -116,7 +126,7 @@ func (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string)
 
 func (h *HSM) createChainKDKey(alias string, auth string, language string) (*XPub, *string, error) {
        // Generate a mnemonic for memorization or user-friendly seeds
-       entropy, err := mnem.NewEntropy(256)
+       entropy, err := mnem.NewEntropy(EntropyLength)
        if err != nil {
                return nil, nil, err
        }