Documentation ¶
Overview ¶
Package bbs provides implementations of BBS+ key management and primitives.
The functionality of BBS+ signatures/proofs is represented as a pair of primitives (interfaces):
Signer for signing a list of messages with a private key
Verifier for verifying a signature against a list of messages, deriving a proof from a signature for a given set of sub messages and verifying such derived proof.
Example:
package main import ( "bytes" "github.com/google/tink/go/keyset" "github.com/hyperledger/aries-framework-go/pkg/crypto/tinkcrypto/primitive/bbs" ) func main() { // create signer keyset handle kh, err := keyset.NewHandle(bbs.BLS12381G2KeyTemplate()) if err != nil { //handle error } // extract signer public keyset handle and key for signature verification and proof derivation/verification verKH, err := kh.Public() if err != nil { //handle error } // finally get the BBS+ signing primitive from the private key handle created above s:= bbs.NewSigner(kh) // create a message to be signed messages := [][]byte{[]byte("message 1"), []byte("message 2"), []byte("message 3"), []byte("message 4")} // and now sign using s sig, err = s.Sign(messages) if err != nil { // handle error } // to verify, get the BBS+ verification primitive from the public key handle created earlier above v := bbs.NewVerifier(verKH) // and verify signature err = v.Verify(messages, sig) if err != nil { // handle error } // to derive a proof from the bbs signature, create the indices of the messages to be revealed by the proof revealedIndexes := []int{0, 2} // and a nonce nonce := make([]byte, 10) _, err = rand.Read(nonce) if err != nil { // handle error } // then derive a proof for messages at index 0 and 2 as follows proof, err := verifier.DeriveProof(messages, sig, nonce, revealedIndexes) if err != nil { // handle error } // create a copy of the revealed messages to the party that should only access messages at index 0 and 2 revealedMsgs := [][]byte{messages[0], messages[2]} // finally to verify the proof's authenticity for revealedMsgs, do the following err = verifier.VerifyProof(revealedMsgs, proof, nonce) if err != nil { // handle error } }
Index ¶
- func BLS12381G2KeyTemplate() *tinkpb.KeyTemplate
- func NewSigner(h *keyset.Handle) (bbsapi.Signer, error)
- func NewSignerWithKeyManager(h *keyset.Handle, km registry.KeyManager) (bbsapi.Signer, error)
- func NewVerifier(h *keyset.Handle) (bbsapi.Verifier, error)
- func NewVerifierWithKeyManager(h *keyset.Handle, km registry.KeyManager) (bbsapi.Verifier, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func BLS12381G2KeyTemplate ¶
func BLS12381G2KeyTemplate() *tinkpb.KeyTemplate
BLS12381G2KeyTemplate creates a Tink key template for BBS+ on BLS12-381 curve with G2 group.
func NewSignerWithKeyManager ¶
NewSignerWithKeyManager returns a BBS Signer primitive from the given keyset handle and custom key manager.
func NewVerifier ¶
NewVerifier returns a Verifier primitive from the given keyset handle.
func NewVerifierWithKeyManager ¶
NewVerifierWithKeyManager returns a Verifier primitive from the given keyset handle and custom key manager.
Types ¶
This section is empty.