github.com/defanghe/fabric@v2.1.1+incompatible/bccsp/sw/fileks_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package sw 8 9 import ( 10 "crypto/ecdsa" 11 "crypto/elliptic" 12 "crypto/rand" 13 "fmt" 14 "io/ioutil" 15 "os" 16 "path/filepath" 17 "testing" 18 19 "github.com/hyperledger/fabric/bccsp/utils" 20 "github.com/stretchr/testify/assert" 21 ) 22 23 func TestInvalidStoreKey(t *testing.T) { 24 t.Parallel() 25 26 tempDir, err := ioutil.TempDir("", "bccspks") 27 assert.NoError(t, err) 28 defer os.RemoveAll(tempDir) 29 30 ks, err := NewFileBasedKeyStore(nil, filepath.Join(tempDir, "bccspks"), false) 31 if err != nil { 32 t.Fatalf("Failed initiliazing KeyStore [%s]", err) 33 } 34 35 err = ks.StoreKey(nil) 36 if err == nil { 37 t.Fatal("Error should be different from nil in this case") 38 } 39 40 err = ks.StoreKey(&ecdsaPrivateKey{nil}) 41 if err == nil { 42 t.Fatal("Error should be different from nil in this case") 43 } 44 45 err = ks.StoreKey(&ecdsaPublicKey{nil}) 46 if err == nil { 47 t.Fatal("Error should be different from nil in this case") 48 } 49 50 err = ks.StoreKey(&aesPrivateKey{nil, false}) 51 if err == nil { 52 t.Fatal("Error should be different from nil in this case") 53 } 54 55 err = ks.StoreKey(&aesPrivateKey{nil, true}) 56 if err == nil { 57 t.Fatal("Error should be different from nil in this case") 58 } 59 } 60 61 func TestBigKeyFile(t *testing.T) { 62 ksPath, err := ioutil.TempDir("", "bccspks") 63 assert.NoError(t, err) 64 defer os.RemoveAll(ksPath) 65 66 ks, err := NewFileBasedKeyStore(nil, ksPath, false) 67 assert.NoError(t, err) 68 69 // Generate a key for keystore to find 70 privKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) 71 assert.NoError(t, err) 72 73 cspKey := &ecdsaPrivateKey{privKey} 74 ski := cspKey.SKI() 75 rawKey, err := utils.PrivateKeyToPEM(privKey, nil) 76 assert.NoError(t, err) 77 78 // Large padding array, of some values PEM parser will NOOP 79 bigBuff := make([]byte, (1 << 17)) 80 for i := range bigBuff { 81 bigBuff[i] = '\n' 82 } 83 copy(bigBuff, rawKey) 84 85 //>64k, so that total file size will be too big 86 ioutil.WriteFile(filepath.Join(ksPath, "bigfile.pem"), bigBuff, 0666) 87 88 _, err = ks.GetKey(ski) 89 assert.Error(t, err) 90 expected := fmt.Sprintf("key with SKI %x not found in %s", ski, ksPath) 91 assert.EqualError(t, err, expected) 92 93 // 1k, so that the key would be found 94 ioutil.WriteFile(filepath.Join(ksPath, "smallerfile.pem"), bigBuff[0:1<<10], 0666) 95 96 _, err = ks.GetKey(ski) 97 assert.NoError(t, err) 98 } 99 100 func TestReInitKeyStore(t *testing.T) { 101 ksPath, err := ioutil.TempDir("", "bccspks") 102 assert.NoError(t, err) 103 defer os.RemoveAll(ksPath) 104 105 ks, err := NewFileBasedKeyStore(nil, ksPath, false) 106 assert.NoError(t, err) 107 fbKs, isFileBased := ks.(*fileBasedKeyStore) 108 assert.True(t, isFileBased) 109 err = fbKs.Init(nil, ksPath, false) 110 assert.EqualError(t, err, "keystore is already initialized") 111 } 112 func TestDirExists(t *testing.T) { 113 r, err := dirExists("") 114 assert.False(t, r) 115 assert.NoError(t, err) 116 117 r, err = dirExists(os.TempDir()) 118 assert.NoError(t, err) 119 assert.Equal(t, true, r) 120 121 r, err = dirExists(filepath.Join(os.TempDir(), "7rhf90239vhev90")) 122 assert.NoError(t, err) 123 assert.Equal(t, false, r) 124 } 125 126 func TestDirEmpty(t *testing.T) { 127 _, err := dirEmpty("") 128 assert.Error(t, err) 129 130 path := filepath.Join(os.TempDir(), "7rhf90239vhev90") 131 defer os.Remove(path) 132 os.Mkdir(path, os.ModePerm) 133 134 r, err := dirEmpty(path) 135 assert.NoError(t, err) 136 assert.Equal(t, true, r) 137 138 r, err = dirEmpty(os.TempDir()) 139 assert.NoError(t, err) 140 assert.Equal(t, false, r) 141 }