github.com/adecaro/fabric-ca@v2.0.0-alpha+incompatible/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  	"crypto/ecdsa"
    11  
    12  	"github.com/hyperledger/fabric-amcl/amcl"
    13  	fp256bn "github.com/hyperledger/fabric-amcl/amcl/FP256BN"
    14  	"github.com/hyperledger/fabric/idemix"
    15  	"github.com/pkg/errors"
    16  )
    17  
    18  // Lib represents idemix library
    19  type Lib interface {
    20  	NewIssuerKey(AttributeNames []string, rng *amcl.RAND) (ik *idemix.IssuerKey, err error)
    21  	NewCredential(key *idemix.IssuerKey, m *idemix.CredRequest, attrs []*fp256bn.BIG, rng *amcl.RAND) (cred *idemix.Credential, err error)
    22  	CreateCRI(key *ecdsa.PrivateKey, unrevokedHandles []*fp256bn.BIG, epoch int, alg idemix.RevocationAlgorithm, rng *amcl.RAND) (cri *idemix.CredentialRevocationInformation, err error)
    23  	GenerateLongTermRevocationKey() (pk *ecdsa.PrivateKey, err error)
    24  	GetRand() (rand *amcl.RAND, err error)
    25  	RandModOrder(rng *amcl.RAND) (big *fp256bn.BIG, err error)
    26  }
    27  
    28  // libImpl is adapter for idemix library. It implements Lib interface
    29  type libImpl struct{}
    30  
    31  // NewLib returns an instance of an object that implements Lib interface
    32  func NewLib() Lib {
    33  	return &libImpl{}
    34  }
    35  
    36  func (i *libImpl) GetRand() (rand *amcl.RAND, err error) {
    37  	defer func() {
    38  		r := recover()
    39  		if r != nil {
    40  			err = errors.Errorf("failure: %s", r)
    41  		}
    42  	}()
    43  	return idemix.GetRand()
    44  }
    45  func (i *libImpl) NewCredential(key *idemix.IssuerKey, m *idemix.CredRequest, attrs []*fp256bn.BIG, rng *amcl.RAND) (cred *idemix.Credential, err error) {
    46  	defer func() {
    47  		r := recover()
    48  		if r != nil {
    49  			err = errors.Errorf("failure: %s", r)
    50  		}
    51  	}()
    52  	return idemix.NewCredential(key, m, attrs, rng)
    53  }
    54  func (i *libImpl) RandModOrder(rng *amcl.RAND) (big *fp256bn.BIG, err error) {
    55  	defer func() {
    56  		r := recover()
    57  		if r != nil {
    58  			err = errors.Errorf("failure: %s", r)
    59  		}
    60  	}()
    61  	return idemix.RandModOrder(rng), nil
    62  }
    63  func (i *libImpl) NewIssuerKey(AttributeNames []string, rng *amcl.RAND) (ik *idemix.IssuerKey, err error) {
    64  	defer func() {
    65  		r := recover()
    66  		if r != nil {
    67  			err = errors.Errorf("failure: %s", r)
    68  		}
    69  	}()
    70  	return idemix.NewIssuerKey(AttributeNames, rng)
    71  }
    72  func (i *libImpl) CreateCRI(key *ecdsa.PrivateKey, unrevokedHandles []*fp256bn.BIG, epoch int, alg idemix.RevocationAlgorithm, rng *amcl.RAND) (cri *idemix.CredentialRevocationInformation, err error) {
    73  	defer func() {
    74  		r := recover()
    75  		if r != nil {
    76  			err = errors.Errorf("failure: %s", r)
    77  		}
    78  	}()
    79  	return idemix.CreateCRI(key, unrevokedHandles, epoch, alg, rng)
    80  }
    81  func (i *libImpl) GenerateLongTermRevocationKey() (pk *ecdsa.PrivateKey, err error) {
    82  	defer func() {
    83  		r := recover()
    84  		if r != nil {
    85  			err = errors.Errorf("failure: %s", r)
    86  		}
    87  	}()
    88  	return idemix.GenerateLongTermRevocationKey()
    89  }