github.com/darrenli6/fabric-sdk-example@v0.0.0-20220109053535-94b13b56df8c/bccsp/pkcs11/ecdsakey_test.go (about)

     1  /*
     2  Copyright IBM Corp. 2017 All Rights Reserved.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8  		 http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package pkcs11
    18  
    19  import (
    20  	"crypto/rand"
    21  	"crypto/rsa"
    22  	"crypto/x509"
    23  	"testing"
    24  
    25  	"github.com/hyperledger/fabric/bccsp"
    26  	"github.com/hyperledger/fabric/bccsp/utils"
    27  	"github.com/stretchr/testify/assert"
    28  )
    29  
    30  func TestECDSAPKIXPublicKeyImportOptsKeyImporter(t *testing.T) {
    31  	ki := currentBCCSP
    32  
    33  	_, err := ki.KeyImport("Hello World", &bccsp.ECDSAPKIXPublicKeyImportOpts{})
    34  	assert.Error(t, err)
    35  	assert.Contains(t, err.Error(), "[ECDSAPKIXPublicKeyImportOpts] Invalid raw material. Expected byte array.")
    36  
    37  	_, err = ki.KeyImport("Hello World", nil)
    38  	assert.Error(t, err)
    39  	assert.Contains(t, err.Error(), "Invalid Opts parameter. It must not be nil.")
    40  
    41  	_, err = ki.KeyImport(nil, &bccsp.ECDSAPKIXPublicKeyImportOpts{})
    42  	assert.Error(t, err)
    43  	assert.Contains(t, err.Error(), "Invalid raw. Cannot be nil.")
    44  
    45  	_, err = ki.KeyImport([]byte(nil), &bccsp.ECDSAPKIXPublicKeyImportOpts{})
    46  	assert.Error(t, err)
    47  	assert.Contains(t, err.Error(), "[ECDSAPKIXPublicKeyImportOpts] Invalid raw. It must not be nil.")
    48  
    49  	_, err = ki.KeyImport([]byte{0}, &bccsp.ECDSAPKIXPublicKeyImportOpts{})
    50  	assert.Error(t, err)
    51  	assert.Contains(t, err.Error(), "Failed converting PKIX to ECDSA public key")
    52  
    53  	k, err := rsa.GenerateKey(rand.Reader, 512)
    54  	assert.NoError(t, err)
    55  	raw, err := utils.PublicKeyToDER(&k.PublicKey)
    56  	assert.NoError(t, err)
    57  	_, err = ki.KeyImport(raw, &bccsp.ECDSAPKIXPublicKeyImportOpts{})
    58  	assert.Error(t, err)
    59  	assert.Contains(t, err.Error(), "Failed casting to ECDSA public key. Invalid raw material.")
    60  }
    61  
    62  func TestECDSAPrivateKeyImportOptsKeyImporter(t *testing.T) {
    63  	if currentBCCSP.(*impl).noPrivImport {
    64  		t.Skip("Key import turned off. Skipping Private Key Importer tests as they currently require Key Import.")
    65  	}
    66  
    67  	ki := currentBCCSP
    68  
    69  	_, err := ki.KeyImport("Hello World", &bccsp.ECDSAPrivateKeyImportOpts{})
    70  	assert.Error(t, err)
    71  	assert.Contains(t, err.Error(), "[ECDSADERPrivateKeyImportOpts] Invalid raw material. Expected byte array.")
    72  
    73  	_, err = ki.KeyImport(nil, &bccsp.ECDSAPrivateKeyImportOpts{})
    74  	assert.Error(t, err)
    75  	assert.Contains(t, err.Error(), "Invalid raw. Cannot be nil.")
    76  
    77  	_, err = ki.KeyImport([]byte(nil), &bccsp.ECDSAPrivateKeyImportOpts{})
    78  	assert.Error(t, err)
    79  	assert.Contains(t, err.Error(), "[ECDSADERPrivateKeyImportOpts] Invalid raw. It must not be nil.")
    80  
    81  	_, err = ki.KeyImport([]byte{0}, &bccsp.ECDSAPrivateKeyImportOpts{})
    82  	assert.Error(t, err)
    83  	assert.Contains(t, err.Error(), "Failed converting PKIX to ECDSA public key")
    84  
    85  	k, err := rsa.GenerateKey(rand.Reader, 512)
    86  	assert.NoError(t, err)
    87  	raw := x509.MarshalPKCS1PrivateKey(k)
    88  	_, err = ki.KeyImport(raw, &bccsp.ECDSAPrivateKeyImportOpts{})
    89  	assert.Error(t, err)
    90  	assert.Contains(t, err.Error(), "Failed casting to ECDSA public key. Invalid raw material.")
    91  }
    92  
    93  func TestECDSAGoPublicKeyImportOptsKeyImporter(t *testing.T) {
    94  	ki := currentBCCSP
    95  
    96  	_, err := ki.KeyImport("Hello World", &bccsp.ECDSAGoPublicKeyImportOpts{})
    97  	assert.Error(t, err)
    98  	assert.Contains(t, err.Error(), "[ECDSAGoPublicKeyImportOpts] Invalid raw material. Expected *ecdsa.PublicKey.")
    99  
   100  	_, err = ki.KeyImport(nil, &bccsp.ECDSAGoPublicKeyImportOpts{})
   101  	assert.Error(t, err)
   102  	assert.Contains(t, err.Error(), "Invalid raw. Cannot be nil.")
   103  }
   104  
   105  func TestX509PublicKeyImportOptsKeyImporter(t *testing.T) {
   106  	ki := currentBCCSP
   107  
   108  	_, err := ki.KeyImport("Hello World", &bccsp.X509PublicKeyImportOpts{})
   109  	assert.Error(t, err)
   110  	assert.Contains(t, err.Error(), "[X509PublicKeyImportOpts] Invalid raw material. Expected *x509.Certificate.")
   111  
   112  	_, err = ki.KeyImport(nil, &bccsp.X509PublicKeyImportOpts{})
   113  	assert.Error(t, err)
   114  	assert.Contains(t, err.Error(), "Invalid raw. Cannot be nil.")
   115  
   116  	cert := &x509.Certificate{}
   117  	cert.PublicKey = "Hello world"
   118  	_, err = ki.KeyImport(cert, &bccsp.X509PublicKeyImportOpts{})
   119  	assert.Error(t, err)
   120  	assert.Contains(t, err.Error(), "Certificate's public key type not recognized. Supported keys: [ECDSA, RSA]")
   121  }