Update go.mod module line, all require/replace directives, and every .go import path from forge.lthn.ai/core/go-blockchain to dappco.re/go/core/blockchain. Add replace directives to bridge dappco.re paths to existing forge.lthn.ai registry during migration. Update CLAUDE.md, README, and docs to reflect the new module path. Co-Authored-By: Virgil <virgil@lethean.io>
91 lines
2.4 KiB
Go
91 lines
2.4 KiB
Go
// Copyright (c) 2017-2026 Lethean (https://lt.hn)
|
|
//
|
|
// Licensed under the European Union Public Licence (EUPL) version 1.2.
|
|
// SPDX-License-Identifier: EUPL-1.2
|
|
|
|
package consensus
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"dappco.re/go/core/blockchain/config"
|
|
"dappco.re/go/core/blockchain/crypto"
|
|
"dappco.re/go/core/blockchain/types"
|
|
"dappco.re/go/core/blockchain/wire"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestVerifyV1Signatures_Good_MockRing(t *testing.T) {
|
|
pub, sec, err := crypto.GenerateKeys()
|
|
require.NoError(t, err)
|
|
|
|
ki, err := crypto.GenerateKeyImage(pub, sec)
|
|
require.NoError(t, err)
|
|
|
|
tx := &types.Transaction{
|
|
Version: types.VersionPreHF4,
|
|
Vin: []types.TxInput{
|
|
types.TxInputToKey{
|
|
Amount: 100,
|
|
KeyOffsets: []types.TxOutRef{
|
|
{Tag: types.RefTypeGlobalIndex, GlobalIndex: 0},
|
|
},
|
|
KeyImage: types.KeyImage(ki),
|
|
},
|
|
},
|
|
Vout: []types.TxOutput{
|
|
types.TxOutputBare{Amount: 90, Target: types.TxOutToKey{Key: types.PublicKey(pub)}},
|
|
},
|
|
}
|
|
|
|
prefixHash := wire.TransactionPrefixHash(tx)
|
|
|
|
sigs, err := crypto.GenerateRingSignature(
|
|
[32]byte(prefixHash), ki, [][32]byte{pub}, sec, 0)
|
|
require.NoError(t, err)
|
|
|
|
tx.Signatures = [][]types.Signature{make([]types.Signature, 1)}
|
|
tx.Signatures[0][0] = types.Signature(sigs[0])
|
|
|
|
getRing := func(amount uint64, offsets []uint64) ([]types.PublicKey, error) {
|
|
return []types.PublicKey{types.PublicKey(pub)}, nil
|
|
}
|
|
|
|
err = VerifyTransactionSignatures(tx, config.MainnetForks, 100, getRing, nil)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestVerifyV1Signatures_Bad_WrongSig(t *testing.T) {
|
|
pub, sec, err := crypto.GenerateKeys()
|
|
require.NoError(t, err)
|
|
|
|
ki, err := crypto.GenerateKeyImage(pub, sec)
|
|
require.NoError(t, err)
|
|
|
|
tx := &types.Transaction{
|
|
Version: types.VersionPreHF4,
|
|
Vin: []types.TxInput{
|
|
types.TxInputToKey{
|
|
Amount: 100,
|
|
KeyOffsets: []types.TxOutRef{
|
|
{Tag: types.RefTypeGlobalIndex, GlobalIndex: 0},
|
|
},
|
|
KeyImage: types.KeyImage(ki),
|
|
},
|
|
},
|
|
Vout: []types.TxOutput{
|
|
types.TxOutputBare{Amount: 90, Target: types.TxOutToKey{Key: types.PublicKey(pub)}},
|
|
},
|
|
Signatures: [][]types.Signature{
|
|
{types.Signature{}},
|
|
},
|
|
}
|
|
|
|
getRing := func(amount uint64, offsets []uint64) ([]types.PublicKey, error) {
|
|
return []types.PublicKey{types.PublicKey(pub)}, nil
|
|
}
|
|
|
|
err = VerifyTransactionSignatures(tx, config.MainnetForks, 100, getRing, nil)
|
|
assert.Error(t, err)
|
|
}
|