github.com/zcqzcg/fabric-ca@v2.0.0-alpha.0.20200416163940-d878ee6db75a+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 }