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