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 }