You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.3 KiB
55 lines
1.3 KiB
package multibls
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/harmony-one/harmony/crypto/bls"
|
|
|
|
bls_core "github.com/harmony-one/bls/ffi/go/bls"
|
|
)
|
|
|
|
// PrivateKeys stores the bls secret keys that belongs to the node
|
|
type PrivateKeys []bls.PrivateKeyWrapper
|
|
|
|
// PublicKeys stores the bls public keys that belongs to the node
|
|
type PublicKeys []bls.PublicKeyWrapper
|
|
|
|
// SerializeToHexStr wrapper
|
|
func (multiKey PublicKeys) SerializeToHexStr() string {
|
|
if multiKey == nil {
|
|
return ""
|
|
}
|
|
var builder strings.Builder
|
|
for _, pubKey := range multiKey {
|
|
builder.WriteString(pubKey.Bytes.Hex() + ";")
|
|
}
|
|
return builder.String()
|
|
}
|
|
|
|
// Contains wrapper
|
|
func (multiKey PublicKeys) Contains(pubKey *bls_core.PublicKey) bool {
|
|
for _, key := range multiKey {
|
|
if key.Object.IsEqual(pubKey) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// GetPublicKeys wrapper
|
|
func (multiKey PrivateKeys) GetPublicKeys() PublicKeys {
|
|
pubKeys := make([]bls.PublicKeyWrapper, len(multiKey))
|
|
for i, key := range multiKey {
|
|
pubKeys[i] = *key.Pub
|
|
}
|
|
|
|
return pubKeys
|
|
}
|
|
|
|
// GetPrivateKeys creates a multibls PrivateKeys using bls.SecretKey
|
|
func GetPrivateKeys(key *bls_core.SecretKey) PrivateKeys {
|
|
pub := key.GetPublicKey()
|
|
pubWrapper := bls.PublicKeyWrapper{Object: pub}
|
|
pubWrapper.Bytes.FromLibBLSPublicKey(pub)
|
|
return PrivateKeys{bls.PrivateKeyWrapper{Pri: key, Pub: &pubWrapper}}
|
|
}
|
|
|