mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-07 02:02:18 +00:00
6f20d17d15
Co-authored-by: Radosław Kapka <rkapka@wp.pl>
57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
package bls
|
|
|
|
// SignatureBatch refers to the defined set of
|
|
// signatures and its respective public keys and
|
|
// messages required to verify it.
|
|
type SignatureBatch struct {
|
|
Signatures [][]byte
|
|
PublicKeys []PublicKey
|
|
Messages [][32]byte
|
|
}
|
|
|
|
// NewSet constructs an empty signature batch object.
|
|
func NewSet() *SignatureBatch {
|
|
return &SignatureBatch{
|
|
Signatures: [][]byte{},
|
|
PublicKeys: []PublicKey{},
|
|
Messages: [][32]byte{},
|
|
}
|
|
}
|
|
|
|
// Join merges the provided signature batch to out current one.
|
|
func (s *SignatureBatch) Join(set *SignatureBatch) *SignatureBatch {
|
|
s.Signatures = append(s.Signatures, set.Signatures...)
|
|
s.PublicKeys = append(s.PublicKeys, set.PublicKeys...)
|
|
s.Messages = append(s.Messages, set.Messages...)
|
|
return s
|
|
}
|
|
|
|
// Verify the current signature batch using the batch verify algorithm.
|
|
func (s *SignatureBatch) Verify() (bool, error) {
|
|
return VerifyMultipleSignatures(s.Signatures, s.Messages, s.PublicKeys)
|
|
}
|
|
|
|
// Copy the attached signature batch and return it
|
|
// to the caller.
|
|
func (s *SignatureBatch) Copy() *SignatureBatch {
|
|
signatures := make([][]byte, len(s.Signatures))
|
|
pubkeys := make([]PublicKey, len(s.PublicKeys))
|
|
messages := make([][32]byte, len(s.Messages))
|
|
for i := range s.Signatures {
|
|
sig := make([]byte, len(s.Signatures[i]))
|
|
copy(sig, s.Signatures[i])
|
|
signatures[i] = sig
|
|
}
|
|
for i := range s.PublicKeys {
|
|
pubkeys[i] = s.PublicKeys[i].Copy()
|
|
}
|
|
for i := range s.Messages {
|
|
copy(messages[i][:], s.Messages[i][:])
|
|
}
|
|
return &SignatureBatch{
|
|
Signatures: signatures,
|
|
PublicKeys: pubkeys,
|
|
Messages: messages,
|
|
}
|
|
}
|