fix some tests

This commit is contained in:
eyedeekay
2025-03-22 18:03:06 -04:00
parent 3142a394aa
commit 8aac97351d
5 changed files with 64 additions and 20 deletions

View File

@ -263,7 +263,7 @@ func generateTestDestination(t *testing.T) (*destination.Destination, crypto.Rec
// Create Destination
dest := &destination.Destination{
KeysAndCert: *kac,
KeysAndCert: kac,
}
return dest, elg_pubkey, ed25519_pubkey, &ed25519_privkey, nil

View File

@ -8,6 +8,7 @@ import (
"time"
"github.com/go-i2p/go-i2p/lib/common/certificate"
"github.com/go-i2p/go-i2p/lib/common/signature"
"github.com/samber/oops"
"github.com/go-i2p/go-i2p/lib/crypto"
@ -384,28 +385,28 @@ func NewRouterInfo(
publishedDate, _, err := ReadDate(dateBytes)
if err != nil {
log.WithError(err).Error("Failed to create Published Date")
return nil, err
return nil, oops.Errorf("failed to create published date: %v", err)
}
// 2. Create Size Integer
sizeInt, err := NewIntegerFromInt(len(addresses), 1)
if err != nil {
log.WithError(err).Error("Failed to create Size Integer")
return nil, err
return nil, oops.Errorf("failed to create size integer: %v", err)
}
// 3. Create PeerSize Integer (always 0)
peerSizeInt, err := NewIntegerFromInt(0, 1)
if err != nil {
log.WithError(err).Error("Failed to create PeerSize Integer")
return nil, err
return nil, oops.Errorf("failed to create peer size integer: %v", err)
}
// 4. Convert options map to Mapping
mapping, err := GoMapToMapping(options)
if err != nil {
log.WithError(err).Error("Failed to convert options map to Mapping")
return nil, err
return nil, oops.Errorf("failed to convert options to mapping: %v", err)
}
// 5. Assemble RouterInfo without signature
@ -422,25 +423,47 @@ func NewRouterInfo(
// 6. Serialize RouterInfo without signature
dataBytes := routerInfo.serializeWithoutSignature()
// 7. Compute signature over serialized data
signer, err := signingPrivateKey.NewSigner()
if err != nil {
log.WithError(err).Error("Failed to create new signer")
return nil, err
}
signatureBytes, err := signer.Sign(dataBytes)
if err != nil {
log.WithError(err).Error("Failed to sign")
// 7. Verify signingPrivateKey is valid
if signingPrivateKey == nil {
return nil, oops.Errorf("signing private key is nil")
}
// 8. Create Signature struct from signatureBytes
// 8. Create new signer based on signature type
var signer crypto.Signer
switch sigType {
case signature.SIGNATURE_TYPE_EDDSA_SHA512_ED25519:
ed25519Key, ok := signingPrivateKey.(*crypto.Ed25519PrivateKey)
if !ok {
return nil, oops.Errorf("expected *Ed25519PrivateKey but got %T", signingPrivateKey)
}
if len(*ed25519Key) != 64 {
return nil, oops.Errorf("invalid Ed25519 private key size: got %d, want 64", len(*ed25519Key))
}
signer, err = ed25519Key.NewSigner()
default:
return nil, oops.Errorf("unsupported signature type: %d", sigType)
}
if err != nil {
log.WithError(err).Error("Failed to create signer")
return nil, oops.Errorf("failed to create signer: %v", err)
}
// 9. Sign the data
signatureBytes, err := signer.Sign(dataBytes)
if err != nil {
log.WithError(err).Error("Failed to sign RouterInfo data")
return nil, oops.Errorf("failed to sign data: %v", err)
}
// 10. Create Signature struct from signature bytes
sig, _, err := ReadSignature(signatureBytes, sigType)
if err != nil {
log.WithError(err).Error("Failed to create Signature from signature bytes")
return nil, err
return nil, oops.Errorf("failed to create signature: %v", err)
}
// 9. Attach signature to RouterInfo
// 11. Attach signature to RouterInfo
routerInfo.signature = &sig
log.WithFields(logrus.Fields{

View File

@ -22,12 +22,18 @@ import (
func TestCreateRouterInfo(t *testing.T) {
// Generate signing key pair (Ed25519)
var ed25519_privkey crypto.Ed25519PrivateKey
ed25519_signingprivkey, err := ed25519_privkey.Generate()
ed25519_signingprivkey, err := crypto.GenerateEd25519Key() // Use direct key generation
if err != nil {
t.Fatalf("Failed to generate Ed25519 private key: %v\n", err)
}
ed25519_privkey = ed25519_signingprivkey.(crypto.Ed25519PrivateKey) // Store the generated key
ed25519_pubkey_raw, err := ed25519_signingprivkey.Public()
// Verify key size
if len(ed25519_privkey) != 64 {
t.Fatalf("Generated Ed25519 private key has wrong size: got %d, want 64", len(ed25519_privkey))
}
ed25519_pubkey_raw, err := ed25519_privkey.Public()
if err != nil {
t.Fatalf("Failed to derive Ed25519 public key: %v\n", err)
}

View File

@ -23,10 +23,17 @@ import (
func generateTestRouterInfo(t *testing.T, publishedTime time.Time) (*RouterInfo, error) {
// Generate signing key pair (Ed25519)
var ed25519_privkey crypto.Ed25519PrivateKey
_, err := (&ed25519_privkey).Generate()
ed25519_signingprivkey, err := crypto.GenerateEd25519Key() // Use direct key generation
if err != nil {
t.Fatalf("Failed to generate Ed25519 private key: %v\n", err)
}
ed25519_privkey = ed25519_signingprivkey.(crypto.Ed25519PrivateKey) // Store the generated key
// Verify key size
if len(ed25519_privkey) != 64 {
t.Fatalf("Generated Ed25519 private key has wrong size: got %d, want 64", len(ed25519_privkey))
}
ed25519_pubkey_raw, err := ed25519_privkey.Public()
if err != nil {
t.Fatalf("Failed to derive Ed25519 public key: %v\n", err)

View File

@ -19,6 +19,14 @@ var (
ErrInvalidPublicKeySize = oops.Errorf("failed to verify: invalid ed25519 public key size")
)
func GenerateEd25519Key() (SigningPrivateKey, error) {
_, priv, err := ed25519.GenerateKey(rand.Reader)
if err != nil {
return nil, oops.Errorf("failed to generate ed25519")
}
return Ed25519PrivateKey(priv), nil
}
type Ed25519PublicKey []byte
type Ed25519Verifier struct {