2025-03-26 18:52:51 -04:00
|
|
|
package ecdsa
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto"
|
|
|
|
"crypto/elliptic"
|
|
|
|
|
|
|
|
"github.com/go-i2p/go-i2p/lib/crypto/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
type (
|
2025-03-26 19:31:32 -04:00
|
|
|
ECP384PublicKey [96]byte
|
2025-03-26 18:52:51 -04:00
|
|
|
)
|
|
|
|
|
2025-03-27 20:30:31 -04:00
|
|
|
// Verify implements types.Verifier.
|
|
|
|
func (k ECP384PublicKey) Verify(data []byte, sig []byte) error {
|
2025-05-05 22:37:46 -04:00
|
|
|
log.WithField("data_length", len(data)).Debug("Verifying data with ECDSA-P384")
|
|
|
|
verifier, err := k.NewVerifier()
|
|
|
|
if err != nil {
|
|
|
|
log.WithError(err).Error("Failed to create verifier")
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return verifier.Verify(data, sig)
|
2025-03-27 20:30:31 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
// VerifyHash implements types.Verifier.
|
|
|
|
func (k ECP384PublicKey) VerifyHash(h []byte, sig []byte) error {
|
2025-05-05 22:37:46 -04:00
|
|
|
log.WithField("hash_length", len(h)).Debug("Verifying hash with ECDSA-P384")
|
|
|
|
verifier, err := k.NewVerifier()
|
|
|
|
if err != nil {
|
|
|
|
log.WithError(err).Error("Failed to create verifier")
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return verifier.VerifyHash(h, sig)
|
2025-03-27 20:30:31 -04:00
|
|
|
}
|
|
|
|
|
2025-03-26 18:52:51 -04:00
|
|
|
func (k ECP384PublicKey) Bytes() []byte {
|
|
|
|
return k[:]
|
|
|
|
}
|
|
|
|
|
|
|
|
func (k ECP384PublicKey) Len() int {
|
|
|
|
return len(k)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (k ECP384PublicKey) NewVerifier() (types.Verifier, error) {
|
|
|
|
log.Debug("Creating new P384 ECDSA verifier")
|
2025-03-27 20:30:31 -04:00
|
|
|
v, err := CreateECVerifier(elliptic.P384(), crypto.SHA384, k[:])
|
2025-03-26 18:52:51 -04:00
|
|
|
if err != nil {
|
|
|
|
log.WithError(err).Error("Failed to create P384 ECDSA verifier")
|
|
|
|
}
|
|
|
|
return v, err
|
|
|
|
// return createECVerifier(elliptic.P384(), crypto.SHA384, k[:])
|
|
|
|
}
|
2025-03-27 20:30:31 -04:00
|
|
|
|
|
|
|
var _ types.Verifier = ECP384PublicKey{}
|