220 lines
4.4 KiB
Go
220 lines
4.4 KiB
Go
/*
|
|
Copyright IBM Corp. 2017 All Rights Reserved.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package mocks
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto"
|
|
"errors"
|
|
"hash"
|
|
"reflect"
|
|
|
|
"github.com/hyperledger/fabric/bccsp"
|
|
)
|
|
|
|
type MockBCCSP struct {
|
|
SignArgKey bccsp.Key
|
|
SignDigestArg []byte
|
|
SignOptsArg bccsp.SignerOpts
|
|
|
|
SignValue []byte
|
|
SignErr error
|
|
|
|
VerifyValue bool
|
|
VerifyErr error
|
|
|
|
ExpectedSig []byte
|
|
|
|
KeyImportValue bccsp.Key
|
|
KeyImportErr error
|
|
|
|
EncryptError error
|
|
DecryptError error
|
|
|
|
HashVal []byte
|
|
HashErr error
|
|
}
|
|
|
|
func (*MockBCCSP) KeyGen(opts bccsp.KeyGenOpts) (bccsp.Key, error) {
|
|
panic("Not yet implemented")
|
|
}
|
|
|
|
func (*MockBCCSP) KeyDeriv(k bccsp.Key, opts bccsp.KeyDerivOpts) (bccsp.Key, error) {
|
|
panic("Not yet implemented")
|
|
}
|
|
|
|
func (m *MockBCCSP) KeyImport(raw interface{}, opts bccsp.KeyImportOpts) (bccsp.Key, error) {
|
|
return m.KeyImportValue, m.KeyImportErr
|
|
}
|
|
|
|
func (*MockBCCSP) GetKey(ski []byte) (bccsp.Key, error) {
|
|
panic("Not yet implemented")
|
|
}
|
|
|
|
func (m *MockBCCSP) Hash(msg []byte, opts bccsp.HashOpts) ([]byte, error) {
|
|
return m.HashVal, m.HashErr
|
|
}
|
|
|
|
func (*MockBCCSP) GetHash(opts bccsp.HashOpts) (hash.Hash, error) {
|
|
panic("Not yet implemented")
|
|
}
|
|
|
|
func (b *MockBCCSP) Sign(k bccsp.Key, digest []byte, opts bccsp.SignerOpts) ([]byte, error) {
|
|
if !reflect.DeepEqual(b.SignArgKey, k) {
|
|
return nil, errors.New("invalid key")
|
|
}
|
|
if !reflect.DeepEqual(b.SignDigestArg, digest) {
|
|
return nil, errors.New("invalid digest")
|
|
}
|
|
if !reflect.DeepEqual(b.SignOptsArg, opts) {
|
|
return nil, errors.New("invalid opts")
|
|
}
|
|
|
|
return b.SignValue, b.SignErr
|
|
}
|
|
|
|
func (b *MockBCCSP) Verify(k bccsp.Key, signature, digest []byte, opts bccsp.SignerOpts) (bool, error) {
|
|
// we want to mock a success
|
|
if b.VerifyValue {
|
|
return b.VerifyValue, nil
|
|
}
|
|
|
|
// we want to mock a failure because of an error
|
|
if b.VerifyErr != nil {
|
|
return b.VerifyValue, b.VerifyErr
|
|
}
|
|
|
|
// in neither case, compare the signature with the expected one
|
|
return bytes.Equal(b.ExpectedSig, signature), nil
|
|
}
|
|
|
|
func (m *MockBCCSP) Encrypt(k bccsp.Key, plaintext []byte, opts bccsp.EncrypterOpts) ([]byte, error) {
|
|
if m.EncryptError == nil {
|
|
return plaintext, nil
|
|
} else {
|
|
return nil, m.EncryptError
|
|
}
|
|
}
|
|
|
|
func (m *MockBCCSP) Decrypt(k bccsp.Key, ciphertext []byte, opts bccsp.DecrypterOpts) ([]byte, error) {
|
|
if m.DecryptError == nil {
|
|
return ciphertext, nil
|
|
} else {
|
|
return nil, m.DecryptError
|
|
}
|
|
}
|
|
|
|
type MockKey struct {
|
|
BytesValue []byte
|
|
BytesErr error
|
|
Symm bool
|
|
PK bccsp.Key
|
|
PKErr error
|
|
Pvt bool
|
|
}
|
|
|
|
func (m *MockKey) Bytes() ([]byte, error) {
|
|
return m.BytesValue, m.BytesErr
|
|
}
|
|
|
|
func (*MockKey) SKI() []byte {
|
|
panic("Not yet implemented")
|
|
}
|
|
|
|
func (m *MockKey) Symmetric() bool {
|
|
return m.Symm
|
|
}
|
|
|
|
func (m *MockKey) Private() bool {
|
|
return m.Pvt
|
|
}
|
|
|
|
func (m *MockKey) PublicKey() (bccsp.Key, error) {
|
|
return m.PK, m.PKErr
|
|
}
|
|
|
|
type SignerOpts struct {
|
|
HashFuncValue crypto.Hash
|
|
}
|
|
|
|
func (o *SignerOpts) HashFunc() crypto.Hash {
|
|
return o.HashFuncValue
|
|
}
|
|
|
|
type KeyGenOpts struct {
|
|
EphemeralValue bool
|
|
}
|
|
|
|
func (*KeyGenOpts) Algorithm() string {
|
|
return "Mock KeyGenOpts"
|
|
}
|
|
|
|
func (o *KeyGenOpts) Ephemeral() bool {
|
|
return o.EphemeralValue
|
|
}
|
|
|
|
type KeyStore struct {
|
|
GetKeyValue bccsp.Key
|
|
GetKeyErr error
|
|
StoreKeyErr error
|
|
}
|
|
|
|
func (*KeyStore) ReadOnly() bool {
|
|
panic("Not yet implemented")
|
|
}
|
|
|
|
func (ks *KeyStore) GetKey(ski []byte) (bccsp.Key, error) {
|
|
return ks.GetKeyValue, ks.GetKeyErr
|
|
}
|
|
|
|
func (ks *KeyStore) StoreKey(k bccsp.Key) error {
|
|
return ks.StoreKeyErr
|
|
}
|
|
|
|
type KeyImportOpts struct{}
|
|
|
|
func (*KeyImportOpts) Algorithm() string {
|
|
return "Mock KeyImportOpts"
|
|
}
|
|
|
|
func (*KeyImportOpts) Ephemeral() bool {
|
|
panic("Not yet implemented")
|
|
}
|
|
|
|
type (
|
|
EncrypterOpts struct{}
|
|
DecrypterOpts struct{}
|
|
)
|
|
|
|
type HashOpts struct{}
|
|
|
|
func (HashOpts) Algorithm() string {
|
|
return "Mock HashOpts"
|
|
}
|
|
|
|
type KeyDerivOpts struct {
|
|
EphemeralValue bool
|
|
}
|
|
|
|
func (*KeyDerivOpts) Algorithm() string {
|
|
return "Mock KeyDerivOpts"
|
|
}
|
|
|
|
func (o *KeyDerivOpts) Ephemeral() bool {
|
|
return o.EphemeralValue
|
|
}
|