github.com/defanghe/fabric@v2.1.1+incompatible/bccsp/sw/new.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/elliptic" 11 "crypto/sha256" 12 "crypto/sha512" 13 "reflect" 14 15 "github.com/hyperledger/fabric/bccsp" 16 "github.com/pkg/errors" 17 "golang.org/x/crypto/sha3" 18 ) 19 20 // NewDefaultSecurityLevel returns a new instance of the software-based BCCSP 21 // at security level 256, hash family SHA2 and using FolderBasedKeyStore as KeyStore. 22 func NewDefaultSecurityLevel(keyStorePath string) (bccsp.BCCSP, error) { 23 ks := &fileBasedKeyStore{} 24 if err := ks.Init(nil, keyStorePath, false); err != nil { 25 return nil, errors.Wrapf(err, "Failed initializing key store at [%v]", keyStorePath) 26 } 27 28 return NewWithParams(256, "SHA2", ks) 29 } 30 31 // NewDefaultSecurityLevel returns a new instance of the software-based BCCSP 32 // at security level 256, hash family SHA2 and using the passed KeyStore. 33 func NewDefaultSecurityLevelWithKeystore(keyStore bccsp.KeyStore) (bccsp.BCCSP, error) { 34 return NewWithParams(256, "SHA2", keyStore) 35 } 36 37 // NewWithParams returns a new instance of the software-based BCCSP 38 // set at the passed security level, hash family and KeyStore. 39 func NewWithParams(securityLevel int, hashFamily string, keyStore bccsp.KeyStore) (bccsp.BCCSP, error) { 40 // Init config 41 conf := &config{} 42 err := conf.setSecurityLevel(securityLevel, hashFamily) 43 if err != nil { 44 return nil, errors.Wrapf(err, "Failed initializing configuration at [%v,%v]", securityLevel, hashFamily) 45 } 46 47 swbccsp, err := New(keyStore) 48 if err != nil { 49 return nil, err 50 } 51 52 // Notice that errors are ignored here because some test will fail if one 53 // of the following call fails. 54 55 // Set the Encryptors 56 swbccsp.AddWrapper(reflect.TypeOf(&aesPrivateKey{}), &aescbcpkcs7Encryptor{}) 57 58 // Set the Decryptors 59 swbccsp.AddWrapper(reflect.TypeOf(&aesPrivateKey{}), &aescbcpkcs7Decryptor{}) 60 61 // Set the Signers 62 swbccsp.AddWrapper(reflect.TypeOf(&ecdsaPrivateKey{}), &ecdsaSigner{}) 63 64 // Set the Verifiers 65 swbccsp.AddWrapper(reflect.TypeOf(&ecdsaPrivateKey{}), &ecdsaPrivateKeyVerifier{}) 66 swbccsp.AddWrapper(reflect.TypeOf(&ecdsaPublicKey{}), &ecdsaPublicKeyKeyVerifier{}) 67 68 // Set the Hashers 69 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.SHAOpts{}), &hasher{hash: conf.hashFunction}) 70 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.SHA256Opts{}), &hasher{hash: sha256.New}) 71 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.SHA384Opts{}), &hasher{hash: sha512.New384}) 72 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.SHA3_256Opts{}), &hasher{hash: sha3.New256}) 73 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.SHA3_384Opts{}), &hasher{hash: sha3.New384}) 74 75 // Set the key generators 76 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.ECDSAKeyGenOpts{}), &ecdsaKeyGenerator{curve: conf.ellipticCurve}) 77 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.ECDSAP256KeyGenOpts{}), &ecdsaKeyGenerator{curve: elliptic.P256()}) 78 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.ECDSAP384KeyGenOpts{}), &ecdsaKeyGenerator{curve: elliptic.P384()}) 79 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.AESKeyGenOpts{}), &aesKeyGenerator{length: conf.aesBitLength}) 80 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.AES256KeyGenOpts{}), &aesKeyGenerator{length: 32}) 81 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.AES192KeyGenOpts{}), &aesKeyGenerator{length: 24}) 82 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.AES128KeyGenOpts{}), &aesKeyGenerator{length: 16}) 83 84 // Set the key deriver 85 swbccsp.AddWrapper(reflect.TypeOf(&ecdsaPrivateKey{}), &ecdsaPrivateKeyKeyDeriver{}) 86 swbccsp.AddWrapper(reflect.TypeOf(&ecdsaPublicKey{}), &ecdsaPublicKeyKeyDeriver{}) 87 swbccsp.AddWrapper(reflect.TypeOf(&aesPrivateKey{}), &aesPrivateKeyKeyDeriver{conf: conf}) 88 89 // Set the key importers 90 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.AES256ImportKeyOpts{}), &aes256ImportKeyOptsKeyImporter{}) 91 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.HMACImportKeyOpts{}), &hmacImportKeyOptsKeyImporter{}) 92 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.ECDSAPKIXPublicKeyImportOpts{}), &ecdsaPKIXPublicKeyImportOptsKeyImporter{}) 93 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.ECDSAPrivateKeyImportOpts{}), &ecdsaPrivateKeyImportOptsKeyImporter{}) 94 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.ECDSAGoPublicKeyImportOpts{}), &ecdsaGoPublicKeyImportOptsKeyImporter{}) 95 swbccsp.AddWrapper(reflect.TypeOf(&bccsp.X509PublicKeyImportOpts{}), &x509PublicKeyImportOptsKeyImporter{bccsp: swbccsp}) 96 97 return swbccsp, nil 98 }