mirror of https://github.com/poanetwork/quorum.git
46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package plugin
|
|
|
|
import (
|
|
"fmt"
|
|
"path"
|
|
|
|
"github.com/ethereum/go-ethereum/log"
|
|
)
|
|
|
|
// Plugin Integrity Verifier.
|
|
// Verifier works on the assumption an attacker can not compromise the integrity of geth running process.
|
|
type Verifier interface {
|
|
// verify plugin signature using checksum & pgp public key
|
|
VerifySignature(definition *PluginDefinition, checksum string) error
|
|
}
|
|
|
|
type NonVerifier struct {
|
|
}
|
|
|
|
func (*NonVerifier) VerifySignature(definition *PluginDefinition, checksum string) error {
|
|
return nil
|
|
}
|
|
|
|
func NewNonVerifier() *NonVerifier {
|
|
return &NonVerifier{}
|
|
}
|
|
|
|
func NewVerifier(pm *PluginManager, localVerify bool, publicKey string) (Verifier, error) {
|
|
log.Debug("using verifier", "local", localVerify)
|
|
pluginBaseDir := pm.pluginBaseDir
|
|
centralClient := pm.centralClient
|
|
// resolve public key
|
|
if publicKey == "" {
|
|
publicKey = fmt.Sprintf("file://%s", path.Join(pluginBaseDir, DefaultPublicKeyFile))
|
|
}
|
|
publicKeyPath, err := resolveFilePath(publicKey)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if localVerify {
|
|
return NewLocalVerifier(publicKeyPath, pluginBaseDir)
|
|
} else {
|
|
return NewOnlineVerifier(centralClient), nil
|
|
}
|
|
}
|