This repository has been archived by the owner on Apr 9, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 10
/
nopkcs11.go
97 lines (80 loc) · 2.42 KB
/
nopkcs11.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// +build !pkcs11
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package factory
import (
"github.com/hyperledger/fabric/bccsp"
"github.com/pkg/errors"
)
const pkcs11Enabled = false
// FactoryOpts holds configuration information used to initialize factory implementations
type FactoryOpts struct {
ProviderName string `mapstructure:"default" json:"default" yaml:"Default"`
SwOpts *SwOpts `mapstructure:"SW,omitempty" json:"SW,omitempty" yaml:"SwOpts"`
PluginOpts *PluginOpts `mapstructure:"PLUGIN,omitempty" json:"PLUGIN,omitempty" yaml:"PluginOpts"`
}
// InitFactories must be called before using factory interfaces
// It is acceptable to call with config = nil, in which case
// some defaults will get used
// Error is returned only if defaultBCCSP cannot be found
func InitFactories(config *FactoryOpts) error {
factoriesInitOnce.Do(func() {
factoriesInitError = initFactories(config)
})
return factoriesInitError
}
func initFactories(config *FactoryOpts) error {
// Take some precautions on default opts
if config == nil {
config = GetDefaultOpts()
}
if config.ProviderName == "" {
config.ProviderName = "SW"
}
if config.SwOpts == nil {
config.SwOpts = GetDefaultOpts().SwOpts
}
// Initialize factories map
bccspMap = make(map[string]bccsp.BCCSP)
// Software-Based BCCSP
if config.ProviderName == "SW" && config.SwOpts != nil {
f := &SWFactory{}
err := initBCCSP(f, config)
if err != nil {
return errors.Wrapf(err, "Failed initializing BCCSP")
}
}
// BCCSP Plugin
if config.ProviderName == "PLUGIN" && config.PluginOpts != nil {
f := &PluginFactory{}
err := initBCCSP(f, config)
if err != nil {
return errors.Wrapf(err, "Failed initializing PLUGIN.BCCSP")
}
}
var ok bool
defaultBCCSP, ok = bccspMap[config.ProviderName]
if !ok {
return errors.Errorf("Could not find default `%s` BCCSP", config.ProviderName)
}
return nil
}
// GetBCCSPFromOpts returns a BCCSP created according to the options passed in input.
func GetBCCSPFromOpts(config *FactoryOpts) (bccsp.BCCSP, error) {
var f BCCSPFactory
switch config.ProviderName {
case "SW":
f = &SWFactory{}
case "PLUGIN":
f = &PluginFactory{}
default:
return nil, errors.Errorf("Could not find BCCSP, no '%s' provider", config.ProviderName)
}
csp, err := f.Get(config)
if err != nil {
return nil, errors.Wrapf(err, "Could not initialize BCCSP %s", f.Name())
}
return csp, nil
}