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