Skip to content
This repository was archived by the owner on Apr 25, 2025. It is now read-only.

Commit f7ec0aa

Browse files
committed
[FAB-9540] bccsp provider type - case insensitive
Change-Id: I956ce938785a44a27baaf106349c11ca5f2c4e15 Signed-off-by: Sudesh Shetty <sudesh.shetty@securekey.com>
1 parent 95c8574 commit f7ec0aa

File tree

11 files changed

+95
-16
lines changed

11 files changed

+95
-16
lines changed

pkg/core/config/lookup/lookup.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ package lookup
99
import (
1010
"time"
1111

12+
"strings"
13+
1214
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/core"
1315
"github.com/mitchellh/mapstructure"
1416
"github.com/spf13/cast"
@@ -63,6 +65,15 @@ func (c *ConfigLookup) GetString(key string) string {
6365
return cast.ToString(value)
6466
}
6567

68+
//GetLowerString returns lower case string value for given key
69+
func (c *ConfigLookup) GetLowerString(key string) string {
70+
value, ok := c.backend.Lookup(key)
71+
if !ok {
72+
return ""
73+
}
74+
return strings.ToLower(cast.ToString(value))
75+
}
76+
6677
//GetInt returns int value for given key
6778
func (c *ConfigLookup) GetInt(key string) int {
6879
value, ok := c.backend.Lookup(key)

pkg/core/config/lookup/lookup_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,27 @@ func TestGetInt(t *testing.T) {
5555
func TestGetString(t *testing.T) {
5656
testLookup := New(backend)
5757
assert.True(t, testLookup.GetString("key.string.valid") == "valid-string", "expected lookup to return valid string value")
58+
assert.True(t, testLookup.GetString("key.string.valid.lower.case") == "valid-string", "expected lookup to return valid string value")
59+
assert.True(t, testLookup.GetString("key.string.valid.upper.case") == "VALID-STRING", "expected lookup to return valid string value")
60+
assert.True(t, testLookup.GetString("key.string.valid.mixed.case") == "VaLiD-StRiNg", "expected lookup to return valid string value")
5861
assert.True(t, testLookup.GetString("key.string.empty") == "", "expected lookup to return empty string value")
5962
assert.True(t, testLookup.GetString("key.string.nil") == "", "expected lookup to return empty string value")
6063
assert.True(t, testLookup.GetString("key.string.number") == "1234", "expected lookup to return valid string value")
6164
assert.True(t, testLookup.GetString("key.string.not existing") == "", "expected lookup to return empty string value")
6265
}
6366

67+
func TestGetLowerString(t *testing.T) {
68+
testLookup := New(backend)
69+
assert.True(t, testLookup.GetLowerString("key.string.valid") == "valid-string", "expected lookup to return valid lowercase string value")
70+
assert.True(t, testLookup.GetLowerString("key.string.valid.lower.case") == "valid-string", "expected lookup to return valid lowercase string value")
71+
assert.True(t, testLookup.GetLowerString("key.string.valid.upper.case") == "valid-string", "expected lookup to return valid lowercase string value")
72+
assert.True(t, testLookup.GetLowerString("key.string.valid.mixed.case") == "valid-string", "expected lookup to return valid lowercase string value")
73+
assert.True(t, testLookup.GetLowerString("key.string.empty") == "", "expected lookup to return empty string value")
74+
assert.True(t, testLookup.GetLowerString("key.string.nil") == "", "expected lookup to return empty string value")
75+
assert.True(t, testLookup.GetLowerString("key.string.number") == "1234", "expected lookup to return valid string value")
76+
assert.True(t, testLookup.GetLowerString("key.string.not existing") == "", "expected lookup to return empty string value")
77+
}
78+
6479
func TestGetDuration(t *testing.T) {
6580
testLookup := New(backend)
6681
assert.True(t, testLookup.GetDuration("key.duration.valid.hour").String() == (24*time.Hour).String(), "expected valid time value")
@@ -219,6 +234,9 @@ func setupCustomBackend() {
219234
backendMap["key.int.invalid"] = "INVALID"
220235

221236
backendMap["key.string.valid"] = "valid-string"
237+
backendMap["key.string.valid.mixed.case"] = "VaLiD-StRiNg"
238+
backendMap["key.string.valid.lower.case"] = "valid-string"
239+
backendMap["key.string.valid.upper.case"] = "VALID-STRING"
222240
backendMap["key.string.empty"] = ""
223241
backendMap["key.string.nil"] = nil
224242
backendMap["key.string.number"] = 1234

pkg/core/cryptosuite/bccsp/multisuite/cryptosuiteimpl.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import (
1616
//GetSuiteByConfig returns cryptosuite adaptor for bccsp loaded according to given config
1717
func GetSuiteByConfig(config core.CryptoSuiteConfig) (core.CryptoSuite, error) {
1818
switch config.SecurityProvider() {
19-
case "SW":
19+
case "sw":
2020
return sw.GetSuiteByConfig(config)
21-
case "PKCS11":
21+
case "pkcs11":
2222
return pkcs11.GetSuiteByConfig(config)
2323
}
2424

pkg/core/cryptosuite/bccsp/multisuite/cryptosuiteimpl_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ func TestCryptoSuiteByConfigSW(t *testing.T) {
3737
defer mockCtrl.Finish()
3838

3939
mockConfig := mockcore.NewMockCryptoSuiteConfig(mockCtrl)
40-
mockConfig.EXPECT().SecurityProvider().Return("SW")
41-
mockConfig.EXPECT().SecurityProvider().Return("SW")
40+
mockConfig.EXPECT().SecurityProvider().Return("sw")
41+
mockConfig.EXPECT().SecurityProvider().Return("sw")
4242
mockConfig.EXPECT().SecurityAlgorithm().Return("SHA2")
4343
mockConfig.EXPECT().SecurityLevel().Return(256)
4444
mockConfig.EXPECT().KeyStorePath().Return("/tmp/msp")
@@ -61,8 +61,8 @@ func TestCryptoSuiteByConfigPKCS11(t *testing.T) {
6161
providerLib, softHSMPin, softHSMTokenLabel := pkcs11.FindPKCS11Lib()
6262

6363
mockConfig := mockcore.NewMockCryptoSuiteConfig(mockCtrl)
64-
mockConfig.EXPECT().SecurityProvider().Return("PKCS11")
65-
mockConfig.EXPECT().SecurityProvider().Return("PKCS11")
64+
mockConfig.EXPECT().SecurityProvider().Return("pkcs11")
65+
mockConfig.EXPECT().SecurityProvider().Return("pkcs11")
6666
mockConfig.EXPECT().SecurityAlgorithm().Return("SHA2")
6767
mockConfig.EXPECT().SecurityLevel().Return(256)
6868
mockConfig.EXPECT().KeyStorePath().Return("/tmp/msp")

pkg/core/cryptosuite/bccsp/pkcs11/cryptosuiteimpl.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var logger = logging.NewLogger("fabsdk/core")
2121
//GetSuiteByConfig returns cryptosuite adaptor for bccsp loaded according to given config
2222
func GetSuiteByConfig(config core.CryptoSuiteConfig) (core.CryptoSuite, error) {
2323
// TODO: delete this check?
24-
if config.SecurityProvider() != "PKCS11" {
24+
if config.SecurityProvider() != "pkcs11" {
2525
return nil, errors.Errorf("Unsupported BCCSP Provider: %s", config.SecurityProvider())
2626
}
2727

pkg/core/cryptosuite/bccsp/pkcs11/cryptosuiteimpl_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func TestCryptoSuiteByConfigPKCS11(t *testing.T) {
5151
providerLib, softHSMPin, softHSMTokenLabel := pkcs11.FindPKCS11Lib()
5252

5353
mockConfig := mockcore.NewMockCryptoSuiteConfig(mockCtrl)
54-
mockConfig.EXPECT().SecurityProvider().Return("PKCS11")
54+
mockConfig.EXPECT().SecurityProvider().Return("pkcs11")
5555
mockConfig.EXPECT().SecurityAlgorithm().Return("SHA2")
5656
mockConfig.EXPECT().SecurityLevel().Return(256)
5757
mockConfig.EXPECT().KeyStorePath().Return("/tmp/msp")
@@ -76,7 +76,7 @@ func TestCryptoSuiteByConfigPKCS11Failure(t *testing.T) {
7676
defer mockCtrl.Finish()
7777
//Prepare Config
7878
mockConfig := mockcore.NewMockCryptoSuiteConfig(mockCtrl)
79-
mockConfig.EXPECT().SecurityProvider().Return("PKCS11")
79+
mockConfig.EXPECT().SecurityProvider().Return("pkcs11")
8080
mockConfig.EXPECT().SecurityAlgorithm().Return("SHA2")
8181
mockConfig.EXPECT().SecurityLevel().Return(256)
8282
mockConfig.EXPECT().KeyStorePath().Return("/tmp/msp")

pkg/core/cryptosuite/bccsp/sw/cryptosuiteimpl.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var logger = logging.NewLogger("fabsdk/core")
2121
//GetSuiteByConfig returns cryptosuite adaptor for bccsp loaded according to given config
2222
func GetSuiteByConfig(config core.CryptoSuiteConfig) (core.CryptoSuite, error) {
2323
// TODO: delete this check?
24-
if config.SecurityProvider() != "SW" {
24+
if config.SecurityProvider() != "sw" {
2525
return nil, errors.Errorf("Unsupported BCCSP Provider: %s", config.SecurityProvider())
2626
}
2727

pkg/core/cryptosuite/bccsp/sw/cryptosuiteimpl_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func TestCryptoSuiteByConfigSW(t *testing.T) {
3737
defer mockCtrl.Finish()
3838

3939
mockConfig := mockcore.NewMockCryptoSuiteConfig(mockCtrl)
40-
mockConfig.EXPECT().SecurityProvider().Return("SW")
40+
mockConfig.EXPECT().SecurityProvider().Return("sw").AnyTimes()
4141
mockConfig.EXPECT().SecurityAlgorithm().Return("SHA2")
4242
mockConfig.EXPECT().SecurityLevel().Return(256)
4343
mockConfig.EXPECT().KeyStorePath().Return("/tmp/msp")
@@ -56,7 +56,7 @@ func TestCryptoSuiteByBadConfigSW(t *testing.T) {
5656
defer mockCtrl.Finish()
5757

5858
mockConfig := mockcore.NewMockCryptoSuiteConfig(mockCtrl)
59-
mockConfig.EXPECT().SecurityProvider().Return("SW")
59+
mockConfig.EXPECT().SecurityProvider().Return("sw")
6060
mockConfig.EXPECT().SecurityAlgorithm().Return("SHA0")
6161
mockConfig.EXPECT().SecurityLevel().Return(256)
6262
mockConfig.EXPECT().KeyStorePath().Return("")

pkg/core/cryptosuite/cryptoconfig.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (c *Config) SecurityLevel() int {
4343

4444
//SecurityProvider provider SW or PKCS11
4545
func (c *Config) SecurityProvider() string {
46-
return c.backend.GetString("client.BCCSP.security.default.provider")
46+
return c.backend.GetLowerString("client.BCCSP.security.default.provider")
4747
}
4848

4949
//SoftVerify flag

pkg/core/cryptosuite/cryptoconfig_test.go

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import (
1010
"path"
1111
"testing"
1212

13+
"os"
14+
15+
"strings"
16+
1317
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/core"
1418
"github.com/hyperledger/fabric-sdk-go/pkg/core/config"
1519
"github.com/hyperledger/fabric-sdk-go/pkg/core/mocks"
@@ -113,8 +117,8 @@ func TestCAConfigSecurityProvider(t *testing.T) {
113117
if !ok || val == nil {
114118
t.Fatal("expected valid value")
115119
}
116-
if val.(string) != cryptoConfig.SecurityProvider() {
117-
t.Fatalf("Incorrect BCCSP SecurityProvider provider")
120+
if !strings.EqualFold(val.(string), cryptoConfig.SecurityProvider()) {
121+
t.Fatalf("Incorrect BCCSP SecurityProvider provider : %s", cryptoConfig.SecurityProvider())
118122
}
119123
}
120124

@@ -178,6 +182,52 @@ func TestCAConfigSecurityProviderLabel(t *testing.T) {
178182
}
179183
}
180184

185+
func TestCAConfigSecurityProviderCase(t *testing.T) {
186+
187+
// we expect the following values
188+
const expectedPkcs11Value = "pkcs11"
189+
const expectedSwValue = "sw"
190+
191+
// map key represents what we will input
192+
providerTestValues := map[string]string{
193+
// all upper case
194+
"SW": expectedSwValue,
195+
"PKCS11": expectedPkcs11Value,
196+
// all lower case
197+
"sw": expectedSwValue,
198+
"pkcs11": expectedPkcs11Value,
199+
// mixed case
200+
"Sw": expectedSwValue,
201+
"Pkcs11": expectedPkcs11Value,
202+
}
203+
204+
for inputValue, expectedValue := range providerTestValues {
205+
206+
// set the input value, overriding what's in file
207+
os.Setenv("FABRIC_SDK_CLIENT_BCCSP_SECURITY_DEFAULT_PROVIDER", inputValue)
208+
209+
backend, err := config.FromFile(configTestFilePath)()
210+
if err != nil {
211+
t.Fatal("Failed to get config backend")
212+
}
213+
214+
customBackend := getCustomBackend(backend)
215+
216+
cryptoConfig := ConfigFromBackend(customBackend).(*Config)
217+
218+
// expected values should be uppercase
219+
if expectedValue != cryptoConfig.SecurityProvider() {
220+
t.Fatalf(
221+
"Incorrect BCCSP SecurityProvider - input:%s actual:%s, expected:%s",
222+
inputValue,
223+
cryptoConfig.SecurityProvider(),
224+
expectedValue,
225+
)
226+
}
227+
228+
}
229+
}
230+
181231
//getCustomBackend returns custom backend to override config values and to avoid using new config file for test scenarios
182232
func getCustomBackend(configBackend core.ConfigBackend) *mocks.MockConfigBackend {
183233
backendMap := make(map[string]interface{})

0 commit comments

Comments
 (0)