Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 5 additions & 17 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,11 @@ jobs:
- name: Checks
run: make checks

- name: Legacy guard
run: |
# Fail if new files import dlog or weak-bb outside known locations.
# Known files are listed in docs/LEGACY_REMOVAL_CHECKLIST.md.
KNOWN_DLOG_FILES="bccsp/bccsp.go|bccsp/bccsp_test.go|bccsp/aries_test.go|bccsp/legacy_test.go|bccsp/perf_test.go|bccsp/smartcard_test.go|bccsp/handlers/nym.go|bccsp/handlers/nymsigner_test.go|bccsp/handlers/signer_test.go|bccsp/handlers/user_test.go|bccsp/keystore/kvsbased.go|bccsp/keystore/kvsbased_test.go|msp/idemixmsp.go|msp/idemixmsp_test.go|tools/idemixgen/main.go|tools/idemixgen/idemixca/idemixca.go|tools/idemixgen/idemixca/idemixca_test.go"
KNOWN_WEAKBB_FILES="bccsp/schemes/aries/revocation.go|bccsp/schemes/dlog/crypto/revocation_authority.go|bccsp/schemes/dlog/crypto/idemix_test.go"

NEW_DLOG=$(grep -rn "schemes/dlog" --include="*.go" . | grep -v "schemes/dlog/" | grep -v -E "$KNOWN_DLOG_FILES" | grep -v "_test.go:" || true)
NEW_WEAKBB=$(grep -rn "schemes/weak-bb" --include="*.go" . | grep -v "schemes/weak-bb/" | grep -v -E "$KNOWN_WEAKBB_FILES" || true)

if [ -n "$NEW_DLOG" ] || [ -n "$NEW_WEAKBB" ]; then
echo "❌ New legacy imports detected! Do not add new dlog/weak-bb imports."
echo "$NEW_DLOG"
echo "$NEW_WEAKBB"
exit 1
fi
echo "✅ No new legacy imports found."
- name: Lint
uses: golangci/golangci-lint-action@v6
with:
version: latest
args: --timeout=5m

- name: Unit Tests
run: make unit-tests
Expand Down
31 changes: 31 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
linters:
enable:
- errcheck
- gosimple
- govet
- ineffassign
- staticcheck
- unused

linters-settings:
errcheck:
check-blank: false
check-type-assertions: false
staticcheck:
checks:
- "all"
- "-SA1019" # Suppress deprecated usage — tracked for Phase 7

issues:
exclude-dirs:
- bccsp/types/mock
- common/flogging/mock
- common/flogging
exclude-rules:
- path: bccsp/bccsp\.go
linters:
- errcheck
text: "AddWrapper"
- path: _test\.go
linters:
- errcheck
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ checks: check-deps

.PHONY: unit-tests
unit-tests:
@go test ./...
@go test -count=1 ./...

.PHONY: unit-tests-race
unit-tests-race:
@export GORACE=history_size=7; go test -timeout 960s -race -cover $(shell go list ./...)
@export GORACE=history_size=7; go test -count=1 -timeout 960s -race -cover $(shell go list ./...)

.PHONY: check-deps
check-deps:
Expand Down
8 changes: 4 additions & 4 deletions bccsp/aries_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,17 @@ import (

idemix "github.com/IBM/idemix/bccsp"
"github.com/IBM/idemix/bccsp/schemes/aries"
"github.com/IBM/idemix/bccsp/schemes/dlog/crypto/translator/amcl"
bccsp "github.com/IBM/idemix/bccsp/types"
math "github.com/IBM/mathlib"
"github.com/golang/protobuf/proto"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)

var _ = Describe("Aries", testAries)

func testAries() {
curve := math.Curves[math.BLS12_381_BBS]
translator := &amcl.Gurvy{C: curve}

Describe("setting up the environment with one issuer and one user with curve", func() {
var (
Expand Down Expand Up @@ -55,7 +55,7 @@ func testAries() {
rootDir, err = ioutil.TempDir(os.TempDir(), "idemixtest")
Expect(err).NotTo(HaveOccurred())

CSP, err = idemix.NewAries(NewDummyKeyStore(), curve, translator, true)
CSP, err = idemix.NewAries(NewDummyKeyStore(), curve, true)
Expect(err).NotTo(HaveOccurred())

// Issuer
Expand Down Expand Up @@ -1623,7 +1623,7 @@ func testAries() {

BeforeEach(func() {
var err error
CSP, err = idemix.NewAries(NewDummyKeyStore(), curve, translator, true)
CSP, err = idemix.NewAries(NewDummyKeyStore(), curve, true)
Expect(err).NotTo(HaveOccurred())

// Issuer
Expand Down
170 changes: 6 additions & 164 deletions bccsp/bccsp.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import (
"github.com/IBM/idemix/bbs"
"github.com/IBM/idemix/bccsp/handlers"
"github.com/IBM/idemix/bccsp/schemes/aries"
"github.com/IBM/idemix/bccsp/schemes/dlog/bridge"
idemix "github.com/IBM/idemix/bccsp/schemes/dlog/crypto"
bccsp "github.com/IBM/idemix/bccsp/types"
math "github.com/IBM/mathlib"
"github.com/pkg/errors"
Expand All @@ -22,162 +20,7 @@ type csp struct {
*CSP
}

func New(keyStore bccsp.KeyStore, curve *math.Curve, translator idemix.Translator, exportable bool) (*csp, error) {
base, err := NewImpl(keyStore)
if err != nil {
return nil, errors.Wrap(err, "failed instantiating base bccsp")
}

csp := &csp{CSP: base}

idmx := &idemix.Idemix{
Curve: curve,
Translator: translator,
}

// key generators
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixIssuerKeyGenOpts{}),
&handlers.IssuerKeyGen{
Exportable: exportable,
Issuer: &bridge.Issuer{
Idemix: idmx, Translator: translator,
},
})
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixUserSecretKeyGenOpts{}),
&handlers.UserKeyGen{
Exportable: exportable,
User: &bridge.User{
Idemix: idmx, Translator: translator,
},
})
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixRevocationKeyGenOpts{}),
&handlers.RevocationKeyGen{
Exportable: exportable,
Revocation: &bridge.Revocation{
Idemix: idmx, Translator: translator,
},
})

// key derivers
base.AddWrapper(reflect.TypeOf(handlers.NewUserSecretKey(nil, true)),
&handlers.NymKeyDerivation{
Exportable: exportable,
Translator: translator,
User: &bridge.User{
Idemix: idmx, Translator: translator,
},
})

// signers
base.AddWrapper(reflect.TypeOf(handlers.NewUserSecretKey(nil, true)),
&userSecreKeySignerMultiplexer{
signer: &handlers.Signer{
SignatureScheme: &bridge.SignatureScheme{
Idemix: idmx, Translator: translator,
}},
nymSigner: &handlers.NymSigner{
NymSignatureScheme: &bridge.NymSignatureScheme{
Idemix: idmx, Translator: translator,
}},
credentialRequestSigner: &handlers.CredentialRequestSigner{
CredRequest: &bridge.CredRequest{
Idemix: idmx, Translator: translator,
}},
})
base.AddWrapper(reflect.TypeOf(handlers.NewIssuerSecretKey(nil, true)),
&handlers.CredentialSigner{
Credential: &bridge.Credential{
Idemix: idmx, Translator: translator,
},
})
base.AddWrapper(reflect.TypeOf(handlers.NewRevocationSecretKey(nil, true)),
&handlers.CriSigner{
Revocation: &bridge.Revocation{
Idemix: idmx, Translator: translator,
},
})

// verifiers
base.AddWrapper(reflect.TypeOf(handlers.NewIssuerPublicKey(nil)),
&issuerPublicKeyVerifierMultiplexer{
verifier: &handlers.Verifier{
SignatureScheme: &bridge.SignatureScheme{
Idemix: idmx, Translator: translator,
}},
credentialRequestVerifier: &handlers.CredentialRequestVerifier{
CredRequest: &bridge.CredRequest{
Idemix: idmx, Translator: translator,
}},
})
base.AddWrapper(reflect.TypeOf(handlers.NewNymPublicKey(nil, translator)),
&handlers.NymVerifier{
NymSignatureScheme: &bridge.NymSignatureScheme{
Idemix: idmx, Translator: translator,
},
})
base.AddWrapper(reflect.TypeOf(handlers.NewUserSecretKey(nil, true)),
&handlers.CredentialVerifier{
Credential: &bridge.Credential{
Idemix: idmx, Translator: translator,
},
})
base.AddWrapper(reflect.TypeOf(handlers.NewRevocationPublicKey(nil)),
&handlers.CriVerifier{
Revocation: &bridge.Revocation{
Idemix: idmx, Translator: translator,
},
})

// importers
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixUserSecretKeyImportOpts{}),
&handlers.UserKeyImporter{
Exportable: exportable,
User: &bridge.User{
Idemix: idmx, Translator: translator,
},
})
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixIssuerPublicKeyImportOpts{}),
&handlers.IssuerPublicKeyImporter{
Issuer: &bridge.Issuer{
Idemix: idmx, Translator: translator,
},
})
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixIssuerKeyImportOpts{}),
&handlers.IssuerKeyImporter{
Exportable: exportable,
Issuer: &bridge.Issuer{
Idemix: idmx, Translator: translator,
},
})
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixNymPublicKeyImportOpts{}),
&handlers.NymPublicKeyImporter{
User: &bridge.User{
Idemix: idmx, Translator: translator,
},
Translator: translator,
})
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixNymKeyImportOpts{}),
&handlers.NymKeyImporter{
Exportable: exportable,
User: &bridge.User{
Idemix: idmx, Translator: translator,
},
Translator: translator,
})
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixRevocationPublicKeyImportOpts{}),
&handlers.RevocationPublicKeyImporter{})
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixRevocationKeyImportOpts{}),
&handlers.RevocationKeyImporter{
Exportable: exportable,
Revocation: &bridge.Revocation{
Idemix: idmx, Translator: translator,
},
})

return csp, nil
}

func NewAries(keyStore bccsp.KeyStore, curve *math.Curve, _translator idemix.Translator, exportable bool) (*csp, error) {
func NewAries(keyStore bccsp.KeyStore, curve *math.Curve, exportable bool) (*csp, error) {
base, err := NewImpl(keyStore)
if err != nil {
return nil, errors.Wrap(err, "failed instantiating base bccsp")
Expand Down Expand Up @@ -219,7 +62,7 @@ func NewAries(keyStore bccsp.KeyStore, curve *math.Curve, _translator idemix.Tra
base.AddWrapper(reflect.TypeOf(handlers.NewUserSecretKey(nil, true)),
&handlers.NymKeyDerivation{
Exportable: exportable,
Translator: _translator,
Curve: curve,
User: &aries.User{
Curve: curve,
Rng: rng,
Expand All @@ -246,7 +89,7 @@ func NewAries(keyStore bccsp.KeyStore, curve *math.Curve, _translator idemix.Tra
CredRequest: &aries.CredRequest{
Curve: curve,
}},
credentialRequestSigner: nil, // aries does not implement this approach
credentialRequestSigner: nil,
})
base.AddWrapper(reflect.TypeOf(handlers.NewIssuerSecretKey(nil, true)),
&handlers.CredentialSigner{
Expand Down Expand Up @@ -275,9 +118,9 @@ func NewAries(keyStore bccsp.KeyStore, curve *math.Curve, _translator idemix.Tra
CredRequest: &aries.CredRequest{
Curve: curve,
}},
credentialRequestVerifier: nil, // aries does not implement this type of issuance
credentialRequestVerifier: nil,
})
base.AddWrapper(reflect.TypeOf(handlers.NewNymPublicKey(nil, _translator)),
base.AddWrapper(reflect.TypeOf(handlers.NewNymPublicKey(nil)),
&handlers.NymVerifier{
SmartcardNymSignatureScheme: &aries.SmartcardIdemixBackend{
Curve: curve,
Expand Down Expand Up @@ -330,7 +173,6 @@ func NewAries(keyStore bccsp.KeyStore, curve *math.Curve, _translator idemix.Tra
Curve: curve,
Rng: rng,
},
Translator: _translator,
})
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixNymKeyImportOpts{}),
&handlers.NymKeyImporter{
Expand All @@ -339,7 +181,7 @@ func NewAries(keyStore bccsp.KeyStore, curve *math.Curve, _translator idemix.Tra
Curve: curve,
Rng: rng,
},
Translator: _translator,
Curve: curve,
})
base.AddWrapper(reflect.TypeOf(&bccsp.IdemixRevocationPublicKeyImportOpts{}),
&handlers.RevocationPublicKeyImporter{})
Expand Down
Loading
Loading