github.com/tw-bc-group/fabric-ca-gm@v0.0.0-20201218004200-3b690512bd5a/lib/server/idemix/idemixlib.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package idemix
     8  
     9  import (
    10  	"github.com/Hyperledger-TWGC/tjfoc-gm/sm2"
    11  	"github.com/hyperledger/fabric-amcl/amcl"
    12  	fp256bn "github.com/hyperledger/fabric-amcl/amcl/FP256BN"
    13  	"github.com/pkg/errors"
    14  	"github.com/tw-bc-group/fabric-gm/idemix"
    15  )
    16  
    17  // Lib represents idemix library
    18  type Lib interface {
    19  	NewIssuerKey(AttributeNames []string, rng *amcl.RAND) (ik *idemix.IssuerKey, err error)
    20  	NewCredential(key *idemix.IssuerKey, m *idemix.CredRequest, attrs []*fp256bn.BIG, rng *amcl.RAND) (cred *idemix.Credential, err error)
    21  	CreateCRI(key *sm2.PrivateKey, unrevokedHandles []*fp256bn.BIG, epoch int, alg idemix.RevocationAlgorithm, rng *amcl.RAND) (cri *idemix.CredentialRevocationInformation, err error)
    22  	GenerateLongTermRevocationKey() (pk *sm2.PrivateKey, err error)
    23  	GetRand() (rand *amcl.RAND, err error)
    24  	RandModOrder(rng *amcl.RAND) (big *fp256bn.BIG, err error)
    25  }
    26  
    27  // libImpl is adapter for idemix library. It implements Lib interface
    28  type libImpl struct{}
    29  
    30  // NewLib returns an instance of an object that implements Lib interface
    31  func NewLib() Lib {
    32  	return &libImpl{}
    33  }
    34  
    35  func (i *libImpl) GetRand() (rand *amcl.RAND, err error) {
    36  	defer func() {
    37  		r := recover()
    38  		if r != nil {
    39  			err = errors.Errorf("failure: %s", r)
    40  		}
    41  	}()
    42  	return idemix.GetRand()
    43  }
    44  func (i *libImpl) NewCredential(key *idemix.IssuerKey, m *idemix.CredRequest, attrs []*fp256bn.BIG, rng *amcl.RAND) (cred *idemix.Credential, err error) {
    45  	defer func() {
    46  		r := recover()
    47  		if r != nil {
    48  			err = errors.Errorf("failure: %s", r)
    49  		}
    50  	}()
    51  	return idemix.NewCredential(key, m, attrs, rng)
    52  }
    53  func (i *libImpl) RandModOrder(rng *amcl.RAND) (big *fp256bn.BIG, err error) {
    54  	defer func() {
    55  		r := recover()
    56  		if r != nil {
    57  			err = errors.Errorf("failure: %s", r)
    58  		}
    59  	}()
    60  	return idemix.RandModOrder(rng), nil
    61  }
    62  func (i *libImpl) NewIssuerKey(AttributeNames []string, rng *amcl.RAND) (ik *idemix.IssuerKey, err error) {
    63  	defer func() {
    64  		r := recover()
    65  		if r != nil {
    66  			err = errors.Errorf("failure: %s", r)
    67  		}
    68  	}()
    69  	return idemix.NewIssuerKey(AttributeNames, rng)
    70  }
    71  func (i *libImpl) CreateCRI(key *sm2.PrivateKey, unrevokedHandles []*fp256bn.BIG, epoch int, alg idemix.RevocationAlgorithm, rng *amcl.RAND) (cri *idemix.CredentialRevocationInformation, err error) {
    72  	defer func() {
    73  		r := recover()
    74  		if r != nil {
    75  			err = errors.Errorf("failure: %s", r)
    76  		}
    77  	}()
    78  	return idemix.CreateCRI(key, unrevokedHandles, epoch, alg, rng)
    79  }
    80  func (i *libImpl) GenerateLongTermRevocationKey() (pk *sm2.PrivateKey, err error) {
    81  	defer func() {
    82  		r := recover()
    83  		if r != nil {
    84  			err = errors.Errorf("failure: %s", r)
    85  		}
    86  	}()
    87  	return idemix.GenerateLongTermRevocationKey()
    88  }