key v1 after upgrade

This commit is contained in:
Trinity 2025-10-27 08:29:32 +07:00
parent 2bc1991c09
commit bade30ba1a
2 changed files with 31 additions and 29 deletions

View File

@ -66,8 +66,8 @@ func (h *GprcHandler) Keygen(ctx context.Context, req *nockchain.KeygenRequest)
PrivateKey: base58.Encode(masterKey.PrivateKey),
Address: address,
ChainCode: base58.Encode(masterKey.ChainCode),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, int(req.Version), crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, int(req.Version), crypto.KeyType_PUBLIC)),
Version: req.Version,
}, nil
}
@ -118,8 +118,8 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR
PrivateKey: base58.Encode(masterKey.PrivateKey),
Address: address,
ChainCode: base58.Encode(masterKey.ChainCode),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, int(req.Version), crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, int(req.Version), crypto.KeyType_PUBLIC)),
Version: req.Version,
}, nil
case strings.HasPrefix(req.Key, "zpub"):
@ -155,7 +155,7 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR
Address: address,
ChainCode: base58.Encode(chainCode),
ImportPrivateKey: "",
ImportPublicKey: base58.Encode(crypto.SerializeExtend(chainCode, publicKey, 0, crypto.KeyType_PUBLIC)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(chainCode, publicKey, int(req.Version), crypto.KeyType_PUBLIC)),
Version: req.Version,
}, nil
default:
@ -196,8 +196,8 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR
PrivateKey: base58.Encode(masterKey.PrivateKey),
Address: address,
ChainCode: base58.Encode(masterKey.ChainCode),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, int(req.Version), crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, int(req.Version), crypto.KeyType_PUBLIC)),
Version: req.Version,
}, nil
case nockchain.ImportType_SEEDPHRASE:
@ -223,8 +223,8 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR
PrivateKey: base58.Encode(masterKey.PrivateKey),
Address: address,
ChainCode: base58.Encode(masterKey.ChainCode),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, int(req.Version), crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, int(req.Version), crypto.KeyType_PUBLIC)),
Version: req.Version,
}, nil
case nockchain.ImportType_WATCH_ONLY:

View File

@ -103,18 +103,18 @@ func TestKeyGenV1(t *testing.T) {
// assert import priv/pubkey
privBytes := append([]byte{0x00}, masterKey.PrivateKey...)
importPrivKey := crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)
importPrivKey := crypto.SerializeExtend(masterKey.ChainCode, privBytes, 1, crypto.KeyType_PRIVATE)
assert.Len(t, importPrivKey, 83)
importPubKey := crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)
importPubKey := crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 1, crypto.KeyType_PUBLIC)
assert.Len(t, importPubKey, 147)
assert.Equal(t,
base58.Encode(importPrivKey),
"zprvLpf3WSvYWmHRd4ifBMKZTDRa4s5sNBZo7cLx7PhFsYvdCEwv6WdHnDFYHFFvd4sKy1DcSpU4xAohfutPqVpsKGsyCdwLgZDpVH7sHSM382d6",
"zprvLxxkCBq3s5HYzjhcW8wh3FhHSt5YowSGApRdHsptZQrtcCdqibUo7qwqfa7qkazttRgcaRwy4YYwv9DLhmUNcMG9uAtsgaPkfwyiGkf5Bpib",
)
assert.Equal(t,
base58.Encode(importPubKey),
"zpub2jgndknkQprVYB9YTkv6VAteaXtW1rQcGMVtNEsuKUJay8MkBm5VW5LyFLYhpQyE1hChW2ZkCiN6BCcTF2wBNiVeCzu7sFP4kaV5DVHZDY3BsdYXimDjQ8GCw6o1qWH8w6kTZrMwkA8o7BSLZ6vk1BHHASi6P2qNSeDBw2No6fAHAr5xvEnUY7Xqa63m4jXYcgFD",
"zpub2kRJ7D6VCvzVfDg5e6iXb4T2ea97QJKN6JzjTArrhgZzwHo6rmT8Z3mEp11T67fNvU8ZWLcTTFS17NLwvYs7ErmqCJQNrtjRgVcvZNeWBebpztihXzrhvHZumDiejPmLb6QQNhkPhhK3uyS6XBbaPybqGDdWAgHKvPHkKirVsSJWEmDJYEj8ePN4ufscv1DL2pTD",
)
}
func TestImportKey(t *testing.T) {
@ -125,34 +125,36 @@ func TestImportKey(t *testing.T) {
errStr string
}
correctImportPrivKey := base58.Decode("zprvLpf3WSvYWmHRd3jj5oR8UXr7bi88pGnfJXj1dM9RnwJwu1MLo6fZzcKauqpxL2W7dk2fmjYKAUzavbyaGpnvqY5QndcrUzsBrPQAHXNnhiXx")
correctImportPrivKeyV0 := base58.Decode("zprvLpf3WSvYWmHRd3jj5oR8UXr7bi88pGnfJXj1dM9RnwJwu1MLo6fZzcKauqpxL2W7dk2fmjYKAUzavbyaGpnvqY5QndcrUzsBrPQAHXNnhiXx")
correctImportPrivKeyV1 := base58.Decode("zprvLxxkCBq3s5HYziigQb3G4a7pyj7pG2f8MjogoqH4UoFDJy3GRBX5LF1tJAgsTYdgZAVfuM2DGrjqAqJX96SS8cTbVAaPV23834G1GqgfEEg7")
invalidImportPrivKeyPrefix := make([]byte, 83)
copy(invalidImportPrivKeyPrefix[:], correctImportPrivKey)
copy(invalidImportPrivKeyPrefix[:], correctImportPrivKeyV0)
invalidImportPrivKeyPrefix[46] = 0x01
invalidImportPrivKeyChecksum := make([]byte, 83)
copy(invalidImportPrivKeyChecksum[:], correctImportPrivKey)
copy(invalidImportPrivKeyChecksum[:], correctImportPrivKeyV0)
copy(invalidImportPrivKeyChecksum[79:], []byte{1, 2, 3, 4})
correctImportPubkey := base58.Decode("zpub2jgndknkQprVYB4X4mqREyn7ZTUE5zp9qkSugdpiqhC5NSeNBceafoz6jGSLEpzJhaLryvY8MF6TokwZN627UXhsg5zd2U12woEL82UtZaLHRL8PZi8YiQnE41BiNJwkfpWjzAbq8mwbAHV3nXUEFgJW2BKCz4GmfoMCkCUDhJppYh5KFsMUkN41DzsfFZHuFrzo")
correctImportPubkeyV0 := base58.Decode("zpub2jgndknkQprVYB4X4mqREyn7ZTUE5zp9qkSugdpiqhC5NSeNBceafoz6jGSLEpzJhaLryvY8MF6TokwZN627UXhsg5zd2U12woEL82UtZaLHRL8PZi8YiQnE41BiNJwkfpWjzAbq8mwbAHV3nXUEFgJW2BKCz4GmfoMCkCUDhJppYh5KFsMUkN41DzsfFZHuFrzo")
correctImportPubkeyV1 := base58.Decode("zpub2kRJ7D6VCvzVfDb4F7drLsLVdViqUSiufhwkmZogDuTVLc5ird2DinQNHvu5WXgTcMGizEaqbnANjvg43bx3Lfz4fPVt27MPsiNBTuqqXgtvYbJZNwmXEa5vt87MGCRxKpAgo1zH6K7qy5Uokc94eUd47xEcmhij9YRm8twvU5y3ccCessJ8rdtEZahX6pv8RFBi")
invalidImportPubkeyChecksum := make([]byte, 147)
copy(invalidImportPubkeyChecksum[:], correctImportPubkey)
copy(invalidImportPubkeyChecksum[:], correctImportPubkeyV0)
copy(invalidImportPubkeyChecksum[143:], []byte{1, 2, 3, 4})
responseV0 := &nockchain.ImportKeysResponse{
Address: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6",
PrivateKey: "3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg",
ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8",
ImportPrivateKey: base58.Encode(correctImportPrivKey),
ImportPublicKey: base58.Encode(correctImportPubkey),
ImportPrivateKey: base58.Encode(correctImportPrivKeyV0),
ImportPublicKey: base58.Encode(correctImportPubkeyV0),
Version: 0,
}
responseV1 := &nockchain.ImportKeysResponse{
Address: "BAmYAxgpVrJeFqqPnKAZHVZZdmVfzrgu7bBqcRBNca8HpxQofzUZG8Q",
PrivateKey: "3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg",
ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8",
ImportPrivateKey: base58.Encode(correctImportPrivKey),
ImportPublicKey: base58.Encode(correctImportPubkey),
ImportPrivateKey: base58.Encode(correctImportPrivKeyV1),
ImportPublicKey: base58.Encode(correctImportPubkeyV1),
Version: 1,
}
@ -161,7 +163,7 @@ func TestImportKey(t *testing.T) {
PrivateKey: "",
ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8",
ImportPrivateKey: "",
ImportPublicKey: base58.Encode(correctImportPubkey),
ImportPublicKey: base58.Encode(correctImportPubkeyV0),
Version: 0,
}
responseV1ReadOnly := &nockchain.ImportKeysResponse{
@ -169,7 +171,7 @@ func TestImportKey(t *testing.T) {
PrivateKey: "",
ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8",
ImportPrivateKey: "",
ImportPublicKey: base58.Encode(correctImportPubkey),
ImportPublicKey: base58.Encode(correctImportPubkeyV1),
Version: 1,
}
@ -228,7 +230,7 @@ func TestImportKey(t *testing.T) {
// case success import priv key v0
{
req: &nockchain.ImportKeysRequest{
Key: base58.Encode(correctImportPrivKey),
Key: base58.Encode(correctImportPrivKeyV0),
ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 0,
},
@ -239,7 +241,7 @@ func TestImportKey(t *testing.T) {
// case success import priv key v1
{
req: &nockchain.ImportKeysRequest{
Key: base58.Encode(correctImportPrivKey),
Key: base58.Encode(correctImportPrivKeyV1),
ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 1,
},
@ -271,7 +273,7 @@ func TestImportKey(t *testing.T) {
// case success import pub key v0
{
req: &nockchain.ImportKeysRequest{
Key: base58.Encode(correctImportPubkey),
Key: base58.Encode(correctImportPubkeyV0),
ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 0,
},
@ -282,7 +284,7 @@ func TestImportKey(t *testing.T) {
// case success import pub key v1
{
req: &nockchain.ImportKeysRequest{
Key: base58.Encode(correctImportPubkey),
Key: base58.Encode(correctImportPubkeyV1),
ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 1,
},