Documentation ¶
Index ¶
- Variables
- func SetLogger(l Logger)
- type CredRequest
- func (m *CredRequest) Check(ipk *IssuerPublicKey, curve *math.Curve, tr Translator) error
- func (*CredRequest) Descriptor() ([]byte, []int)
- func (m *CredRequest) GetIssuerNonce() []byte
- func (m *CredRequest) GetNym() *amcl.ECP
- func (m *CredRequest) GetProofC() []byte
- func (m *CredRequest) GetProofS() []byte
- func (*CredRequest) ProtoMessage()
- func (m *CredRequest) Reset()
- func (m *CredRequest) String() string
- func (m *CredRequest) XXX_DiscardUnknown()
- func (m *CredRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *CredRequest) XXX_Merge(src proto.Message)
- func (m *CredRequest) XXX_Size() int
- func (m *CredRequest) XXX_Unmarshal(b []byte) error
- type Credential
- func (*Credential) Descriptor() ([]byte, []int)
- func (m *Credential) GetA() *amcl.ECP
- func (m *Credential) GetAttrs() [][]byte
- func (m *Credential) GetB() *amcl.ECP
- func (m *Credential) GetE() []byte
- func (m *Credential) GetS() []byte
- func (*Credential) ProtoMessage()
- func (m *Credential) Reset()
- func (m *Credential) String() string
- func (cred *Credential) Ver(sk *math.Zr, ipk *IssuerPublicKey, curve *math.Curve, t Translator) error
- func (m *Credential) XXX_DiscardUnknown()
- func (m *Credential) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Credential) XXX_Merge(src proto.Message)
- func (m *Credential) XXX_Size() int
- func (m *Credential) XXX_Unmarshal(b []byte) error
- type CredentialRevocationInformation
- func (*CredentialRevocationInformation) Descriptor() ([]byte, []int)
- func (m *CredentialRevocationInformation) GetEpoch() int64
- func (m *CredentialRevocationInformation) GetEpochPk() *amcl.ECP2
- func (m *CredentialRevocationInformation) GetEpochPkSig() []byte
- func (m *CredentialRevocationInformation) GetRevocationAlg() int32
- func (m *CredentialRevocationInformation) GetRevocationData() []byte
- func (*CredentialRevocationInformation) ProtoMessage()
- func (m *CredentialRevocationInformation) Reset()
- func (m *CredentialRevocationInformation) String() string
- func (m *CredentialRevocationInformation) XXX_DiscardUnknown()
- func (m *CredentialRevocationInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *CredentialRevocationInformation) XXX_Merge(src proto.Message)
- func (m *CredentialRevocationInformation) XXX_Size() int
- func (m *CredentialRevocationInformation) XXX_Unmarshal(b []byte) error
- type EIDNym
- func (*EIDNym) Descriptor() ([]byte, []int)
- func (m *EIDNym) GetNym() *amcl.ECP
- func (m *EIDNym) GetProofSEid() []byte
- func (*EIDNym) ProtoMessage()
- func (m *EIDNym) Reset()
- func (m *EIDNym) String() string
- func (m *EIDNym) XXX_DiscardUnknown()
- func (m *EIDNym) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *EIDNym) XXX_Merge(src proto.Message)
- func (m *EIDNym) XXX_Size() int
- func (m *EIDNym) XXX_Unmarshal(b []byte) error
- type Idemix
- func (i *Idemix) CreateCRI(key *ecdsa.PrivateKey, unrevokedHandles []*math.Zr, epoch int, ...) (*CredentialRevocationInformation, error)
- func (i *Idemix) GenerateLongTermRevocationKey() (*ecdsa.PrivateKey, error)
- func (i *Idemix) LongTermRevocationKeyFromBytes(raw []byte) (*ecdsa.PrivateKey, error)
- func (i *Idemix) MakeNym(sk *math.Zr, IPk *IssuerPublicKey, rng io.Reader, t Translator) (*math.G1, *math.Zr, error)
- func (i *Idemix) MakeNymFromBytes(raw []byte) (*math.G1, *math.Zr, error)
- func (i *Idemix) NewCredRequest(sk *math.Zr, IssuerNonce []byte, ipk *IssuerPublicKey, rng io.Reader, ...) (*CredRequest, error)
- func (i *Idemix) NewCredential(key *IssuerKey, m *CredRequest, attrs []*math.Zr, rng io.Reader, t Translator) (*Credential, error)
- func (i *Idemix) NewIssuerKey(AttributeNames []string, rng io.Reader, t Translator) (*IssuerKey, error)
- func (i *Idemix) NewIssuerKeyFromBytes(raw []byte) (*IssuerKey, error)
- func (i *Idemix) NewNymSignature(sk *math.Zr, Nym *math.G1, RNym *math.Zr, ipk *IssuerPublicKey, msg []byte, ...) (*NymSignature, error)
- func (i *Idemix) NewSignature(cred *Credential, sk *math.Zr, Nym *math.G1, RNym *math.Zr, ...) (*Signature, *opts.IdemixSignerMetadata, error)
- func (i *Idemix) VerifyEpochPK(pk *ecdsa.PublicKey, epochPK *amcl.ECP2, epochPkSig []byte, epoch int, ...) error
- type IssuerKey
- func (*IssuerKey) Descriptor() ([]byte, []int)
- func (m *IssuerKey) GetIpk() *IssuerPublicKey
- func (m *IssuerKey) GetIsk() []byte
- func (*IssuerKey) ProtoMessage()
- func (m *IssuerKey) Reset()
- func (m *IssuerKey) String() string
- func (m *IssuerKey) XXX_DiscardUnknown()
- func (m *IssuerKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *IssuerKey) XXX_Merge(src proto.Message)
- func (m *IssuerKey) XXX_Size() int
- func (m *IssuerKey) XXX_Unmarshal(b []byte) error
- type IssuerPublicKey
- func (IPk *IssuerPublicKey) Check(curve *math.Curve, t Translator) error
- func (*IssuerPublicKey) Descriptor() ([]byte, []int)
- func (m *IssuerPublicKey) GetAttributeNames() []string
- func (m *IssuerPublicKey) GetBarG1() *amcl.ECP
- func (m *IssuerPublicKey) GetBarG2() *amcl.ECP
- func (m *IssuerPublicKey) GetHAttrs() []*amcl.ECP
- func (m *IssuerPublicKey) GetHRand() *amcl.ECP
- func (m *IssuerPublicKey) GetHSk() *amcl.ECP
- func (m *IssuerPublicKey) GetHash() []byte
- func (m *IssuerPublicKey) GetProofC() []byte
- func (m *IssuerPublicKey) GetProofS() []byte
- func (m *IssuerPublicKey) GetW() *amcl.ECP2
- func (*IssuerPublicKey) ProtoMessage()
- func (m *IssuerPublicKey) Reset()
- func (IPk *IssuerPublicKey) SetHash(curve *math.Curve) error
- func (m *IssuerPublicKey) String() string
- func (m *IssuerPublicKey) XXX_DiscardUnknown()
- func (m *IssuerPublicKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *IssuerPublicKey) XXX_Merge(src proto.Message)
- func (m *IssuerPublicKey) XXX_Size() int
- func (m *IssuerPublicKey) XXX_Unmarshal(b []byte) error
- type LogFunc
- type Logger
- type NonRevocationProof
- func (*NonRevocationProof) Descriptor() ([]byte, []int)
- func (m *NonRevocationProof) GetNonRevocationProof() []byte
- func (m *NonRevocationProof) GetRevocationAlg() int32
- func (*NonRevocationProof) ProtoMessage()
- func (m *NonRevocationProof) Reset()
- func (m *NonRevocationProof) String() string
- func (m *NonRevocationProof) XXX_DiscardUnknown()
- func (m *NonRevocationProof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *NonRevocationProof) XXX_Merge(src proto.Message)
- func (m *NonRevocationProof) XXX_Size() int
- func (m *NonRevocationProof) XXX_Unmarshal(b []byte) error
- type NymEID
- type NymRH
- type NymSignature
- func (*NymSignature) Descriptor() ([]byte, []int)
- func (m *NymSignature) GetNonce() []byte
- func (m *NymSignature) GetProofC() []byte
- func (m *NymSignature) GetProofSRNym() []byte
- func (m *NymSignature) GetProofSSk() []byte
- func (*NymSignature) ProtoMessage()
- func (m *NymSignature) Reset()
- func (m *NymSignature) String() string
- func (sig *NymSignature) Ver(nym *math.G1, ipk *IssuerPublicKey, msg []byte, curve *math.Curve, ...) error
- func (m *NymSignature) XXX_DiscardUnknown()
- func (m *NymSignature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *NymSignature) XXX_Merge(src proto.Message)
- func (m *NymSignature) XXX_Size() int
- func (m *NymSignature) XXX_Unmarshal(b []byte) error
- type RHNym
- func (*RHNym) Descriptor() ([]byte, []int)
- func (m *RHNym) GetNym() *amcl.ECP
- func (m *RHNym) GetProofSRh() []byte
- func (*RHNym) ProtoMessage()
- func (m *RHNym) Reset()
- func (m *RHNym) String() string
- func (m *RHNym) XXX_DiscardUnknown()
- func (m *RHNym) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *RHNym) XXX_Merge(src proto.Message)
- func (m *RHNym) XXX_Size() int
- func (m *RHNym) XXX_Unmarshal(b []byte) error
- type RevocationAlgorithm
- type Signature
- func (sig *Signature) AuditNymEid(ipk *IssuerPublicKey, eidAttr *math.Zr, eidIndex int, RNymEid *math.Zr, ...) error
- func (sig *Signature) AuditNymRh(ipk *IssuerPublicKey, rhAttr *math.Zr, rhIndex int, RNymRh *math.Zr, ...) error
- func (*Signature) Descriptor() ([]byte, []int)
- func (m *Signature) GetABar() *amcl.ECP
- func (m *Signature) GetAPrime() *amcl.ECP
- func (m *Signature) GetBPrime() *amcl.ECP
- func (m *Signature) GetEidNym() *EIDNym
- func (m *Signature) GetEpoch() int64
- func (m *Signature) GetNonRevocationProof() *NonRevocationProof
- func (m *Signature) GetNonce() []byte
- func (m *Signature) GetNym() *amcl.ECP
- func (m *Signature) GetProofC() []byte
- func (m *Signature) GetProofSAttrs() [][]byte
- func (m *Signature) GetProofSE() []byte
- func (m *Signature) GetProofSR2() []byte
- func (m *Signature) GetProofSR3() []byte
- func (m *Signature) GetProofSRNym() []byte
- func (m *Signature) GetProofSSPrime() []byte
- func (m *Signature) GetProofSSk() []byte
- func (m *Signature) GetRevocationEpochPk() *amcl.ECP2
- func (m *Signature) GetRevocationPkSig() []byte
- func (m *Signature) GetRhNym() *RHNym
- func (*Signature) ProtoMessage()
- func (m *Signature) Reset()
- func (m *Signature) String() string
- func (sig *Signature) Ver(Disclosure []byte, ipk *IssuerPublicKey, msg []byte, ...) error
- func (m *Signature) XXX_DiscardUnknown()
- func (m *Signature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Signature) XXX_Merge(src proto.Message)
- func (m *Signature) XXX_Size() int
- func (m *Signature) XXX_Unmarshal(b []byte) error
- type Translator
Constants ¶
This section is empty.
Variables ¶
var ProofBytes = map[RevocationAlgorithm]int{ ALG_NO_REVOCATION: 0, }
Functions ¶
func SetLogger ¶
func SetLogger(l Logger)
SetLogger sets the logger instance used for debug and error reporting. The logger reference is not mutex-protected so this must be set before calling any other library functions.
If a custom logger is not defined, the global logger from the standard library's log package is used.
Types ¶
type CredRequest ¶
type CredRequest struct { Nym *amcl.ECP `protobuf:"bytes,1,opt,name=nym,proto3" json:"nym,omitempty"` IssuerNonce []byte `protobuf:"bytes,2,opt,name=issuer_nonce,json=issuerNonce,proto3" json:"issuer_nonce,omitempty"` ProofC []byte `protobuf:"bytes,3,opt,name=proof_c,json=proofC,proto3" json:"proof_c,omitempty"` ProofS []byte `protobuf:"bytes,4,opt,name=proof_s,json=proofS,proto3" json:"proof_s,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
CredRequest specifies a credential request object that consists of nym - a pseudonym, which is a commitment to the user secret issuer_nonce - a random nonce provided by the issuer proof_c, proof_s - a zero-knowledge proof of knowledge of the user secret inside Nym
func (*CredRequest) Check ¶
func (m *CredRequest) Check(ipk *IssuerPublicKey, curve *math.Curve, tr Translator) error
Check cryptographically verifies the credential request
func (*CredRequest) Descriptor ¶
func (*CredRequest) Descriptor() ([]byte, []int)
func (*CredRequest) GetIssuerNonce ¶
func (m *CredRequest) GetIssuerNonce() []byte
func (*CredRequest) GetNym ¶
func (m *CredRequest) GetNym() *amcl.ECP
func (*CredRequest) GetProofC ¶
func (m *CredRequest) GetProofC() []byte
func (*CredRequest) GetProofS ¶
func (m *CredRequest) GetProofS() []byte
func (*CredRequest) ProtoMessage ¶
func (*CredRequest) ProtoMessage()
func (*CredRequest) Reset ¶
func (m *CredRequest) Reset()
func (*CredRequest) String ¶
func (m *CredRequest) String() string
func (*CredRequest) XXX_DiscardUnknown ¶
func (m *CredRequest) XXX_DiscardUnknown()
func (*CredRequest) XXX_Marshal ¶
func (m *CredRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*CredRequest) XXX_Merge ¶
func (m *CredRequest) XXX_Merge(src proto.Message)
func (*CredRequest) XXX_Size ¶
func (m *CredRequest) XXX_Size() int
func (*CredRequest) XXX_Unmarshal ¶
func (m *CredRequest) XXX_Unmarshal(b []byte) error
type Credential ¶
type Credential struct { A *amcl.ECP `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` B *amcl.ECP `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` E []byte `protobuf:"bytes,3,opt,name=e,proto3" json:"e,omitempty"` S []byte `protobuf:"bytes,4,opt,name=s,proto3" json:"s,omitempty"` Attrs [][]byte `protobuf:"bytes,5,rep,name=attrs,proto3" json:"attrs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
Credential specifies a credential object that consists of a, b, e, s - signature value attrs - attribute values
func (*Credential) Descriptor ¶
func (*Credential) Descriptor() ([]byte, []int)
func (*Credential) GetA ¶
func (m *Credential) GetA() *amcl.ECP
func (*Credential) GetAttrs ¶
func (m *Credential) GetAttrs() [][]byte
func (*Credential) GetB ¶
func (m *Credential) GetB() *amcl.ECP
func (*Credential) GetE ¶
func (m *Credential) GetE() []byte
func (*Credential) GetS ¶
func (m *Credential) GetS() []byte
func (*Credential) ProtoMessage ¶
func (*Credential) ProtoMessage()
func (*Credential) Reset ¶
func (m *Credential) Reset()
func (*Credential) String ¶
func (m *Credential) String() string
func (*Credential) Ver ¶
func (cred *Credential) Ver(sk *math.Zr, ipk *IssuerPublicKey, curve *math.Curve, t Translator) error
Ver cryptographically verifies the credential by verifying the signature on the attribute values and user's secret key
func (*Credential) XXX_DiscardUnknown ¶
func (m *Credential) XXX_DiscardUnknown()
func (*Credential) XXX_Marshal ¶
func (m *Credential) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*Credential) XXX_Merge ¶
func (m *Credential) XXX_Merge(src proto.Message)
func (*Credential) XXX_Size ¶
func (m *Credential) XXX_Size() int
func (*Credential) XXX_Unmarshal ¶
func (m *Credential) XXX_Unmarshal(b []byte) error
type CredentialRevocationInformation ¶
type CredentialRevocationInformation struct { // epoch contains the epoch (time window) in which this CRI is valid Epoch int64 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` // epoch_pk is the public key that is used by the revocation authority in this epoch EpochPk *amcl.ECP2 `protobuf:"bytes,2,opt,name=epoch_pk,json=epochPk,proto3" json:"epoch_pk,omitempty"` // epoch_pk_sig is a signature on the EpochPK valid under the revocation authority's long term key EpochPkSig []byte `protobuf:"bytes,3,opt,name=epoch_pk_sig,json=epochPkSig,proto3" json:"epoch_pk_sig,omitempty"` // revocation_alg denotes which revocation algorithm is used RevocationAlg int32 `protobuf:"varint,4,opt,name=revocation_alg,json=revocationAlg,proto3" json:"revocation_alg,omitempty"` // revocation_data contains data specific to the revocation algorithm used RevocationData []byte `protobuf:"bytes,5,opt,name=revocation_data,json=revocationData,proto3" json:"revocation_data,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
func (*CredentialRevocationInformation) Descriptor ¶
func (*CredentialRevocationInformation) Descriptor() ([]byte, []int)
func (*CredentialRevocationInformation) GetEpoch ¶
func (m *CredentialRevocationInformation) GetEpoch() int64
func (*CredentialRevocationInformation) GetEpochPk ¶
func (m *CredentialRevocationInformation) GetEpochPk() *amcl.ECP2
func (*CredentialRevocationInformation) GetEpochPkSig ¶
func (m *CredentialRevocationInformation) GetEpochPkSig() []byte
func (*CredentialRevocationInformation) GetRevocationAlg ¶
func (m *CredentialRevocationInformation) GetRevocationAlg() int32
func (*CredentialRevocationInformation) GetRevocationData ¶
func (m *CredentialRevocationInformation) GetRevocationData() []byte
func (*CredentialRevocationInformation) ProtoMessage ¶
func (*CredentialRevocationInformation) ProtoMessage()
func (*CredentialRevocationInformation) Reset ¶
func (m *CredentialRevocationInformation) Reset()
func (*CredentialRevocationInformation) String ¶
func (m *CredentialRevocationInformation) String() string
func (*CredentialRevocationInformation) XXX_DiscardUnknown ¶
func (m *CredentialRevocationInformation) XXX_DiscardUnknown()
func (*CredentialRevocationInformation) XXX_Marshal ¶
func (m *CredentialRevocationInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*CredentialRevocationInformation) XXX_Merge ¶
func (m *CredentialRevocationInformation) XXX_Merge(src proto.Message)
func (*CredentialRevocationInformation) XXX_Size ¶
func (m *CredentialRevocationInformation) XXX_Size() int
func (*CredentialRevocationInformation) XXX_Unmarshal ¶
func (m *CredentialRevocationInformation) XXX_Unmarshal(b []byte) error
type EIDNym ¶
type EIDNym struct { Nym *amcl.ECP `protobuf:"bytes,1,opt,name=nym,proto3" json:"nym,omitempty"` ProofSEid []byte `protobuf:"bytes,2,opt,name=proof_s_eid,json=proofSEid,proto3" json:"proof_s_eid,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
EIDNym specifies a pseudonymous enrollment id object that consists of nym - pseudonymous enrollment id s_eid - field element
func (*EIDNym) Descriptor ¶
func (*EIDNym) GetProofSEid ¶
func (*EIDNym) ProtoMessage ¶
func (*EIDNym) ProtoMessage()
func (*EIDNym) XXX_DiscardUnknown ¶
func (m *EIDNym) XXX_DiscardUnknown()
func (*EIDNym) XXX_Marshal ¶
func (*EIDNym) XXX_Unmarshal ¶
type Idemix ¶
type Idemix struct { Curve *math.Curve Translator Translator }
func (*Idemix) CreateCRI ¶
func (i *Idemix) CreateCRI(key *ecdsa.PrivateKey, unrevokedHandles []*math.Zr, epoch int, alg RevocationAlgorithm, rng io.Reader, t Translator) (*CredentialRevocationInformation, error)
CreateCRI creates the Credential Revocation Information for a certain time period (epoch). Users can use the CRI to prove that they are not revoked. Note that when not using revocation (i.e., alg = ALG_NO_REVOCATION), the entered unrevokedHandles are not used, and the resulting CRI can be used by any signer.
func (*Idemix) GenerateLongTermRevocationKey ¶
func (i *Idemix) GenerateLongTermRevocationKey() (*ecdsa.PrivateKey, error)
GenerateLongTermRevocationKey generates a long term signing key that will be used for revocation
func (*Idemix) LongTermRevocationKeyFromBytes ¶
func (i *Idemix) LongTermRevocationKeyFromBytes(raw []byte) (*ecdsa.PrivateKey, error)
GenerateLongTermRevocationKey generates a long term signing key that will be used for revocation
func (*Idemix) MakeNym ¶
func (i *Idemix) MakeNym(sk *math.Zr, IPk *IssuerPublicKey, rng io.Reader, t Translator) (*math.G1, *math.Zr, error)
MakeNym creates a new unlinkable pseudonym
func (*Idemix) MakeNymFromBytes ¶
func (*Idemix) NewCredRequest ¶
func (i *Idemix) NewCredRequest(sk *math.Zr, IssuerNonce []byte, ipk *IssuerPublicKey, rng io.Reader, tr Translator) (*CredRequest, error)
NewCredRequest creates a new Credential Request, the first message of the interactive credential issuance protocol (from user to issuer)
func (*Idemix) NewCredential ¶
func (i *Idemix) NewCredential(key *IssuerKey, m *CredRequest, attrs []*math.Zr, rng io.Reader, t Translator) (*Credential, error)
NewCredential issues a new credential, which is the last step of the interactive issuance protocol All attribute values are added by the issuer at this step and then signed together with a commitment to the user's secret key from a credential request
func (*Idemix) NewIssuerKey ¶
func (i *Idemix) NewIssuerKey(AttributeNames []string, rng io.Reader, t Translator) (*IssuerKey, error)
NewIssuerKey creates a new issuer key pair taking an array of attribute names that will be contained in credentials certified by this issuer (a credential specification) See http://eprint.iacr.org/2016/663.pdf Sec. 4.3, for references.
func (*Idemix) NewIssuerKeyFromBytes ¶
func (*Idemix) NewNymSignature ¶
func (i *Idemix) NewNymSignature(sk *math.Zr, Nym *math.G1, RNym *math.Zr, ipk *IssuerPublicKey, msg []byte, rng io.Reader, tr Translator) (*NymSignature, error)
NewSignature creates a new idemix pseudonym signature
func (*Idemix) NewSignature ¶
func (i *Idemix) NewSignature( cred *Credential, sk *math.Zr, Nym *math.G1, RNym *math.Zr, ipk *IssuerPublicKey, Disclosure, msg []byte, rhIndex, eidIndex int, cri *CredentialRevocationInformation, rng io.Reader, tr Translator, sigType opts.SignatureType, metadata *opts.IdemixSignerMetadata, ) (*Signature, *opts.IdemixSignerMetadata, error)
NewSignature creates a new idemix signature (Schnorr-type signature) The []byte Disclosure steers which attributes are disclosed: if Disclosure[i] == 0 then attribute i remains hidden and otherwise it is disclosed. We require the revocation handle to remain undisclosed (i.e., Disclosure[rhIndex] == 0). We use the zero-knowledge proof by http://eprint.iacr.org/2016/663.pdf, Sec. 4.5 to prove knowledge of a BBS+ signature
func (*Idemix) VerifyEpochPK ¶
func (i *Idemix) VerifyEpochPK(pk *ecdsa.PublicKey, epochPK *amcl.ECP2, epochPkSig []byte, epoch int, alg RevocationAlgorithm) error
VerifyEpochPK verifies that the revocation PK for a certain epoch is valid, by checking that it was signed with the long term revocation key. Note that even if we use no revocation (i.e., alg = ALG_NO_REVOCATION), we need to verify the signature to make sure the issuer indeed signed that no revocation is used in this epoch.
type IssuerKey ¶
type IssuerKey struct { Isk []byte `protobuf:"bytes,1,opt,name=isk,proto3" json:"isk,omitempty"` Ipk *IssuerPublicKey `protobuf:"bytes,2,opt,name=ipk,proto3" json:"ipk,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
IssuerKey specifies an issuer key pair that consists of ISk - the issuer secret key and IssuerPublicKey - the issuer public key
func (*IssuerKey) Descriptor ¶
func (*IssuerKey) GetIpk ¶
func (m *IssuerKey) GetIpk() *IssuerPublicKey
func (*IssuerKey) ProtoMessage ¶
func (*IssuerKey) ProtoMessage()
func (*IssuerKey) XXX_DiscardUnknown ¶
func (m *IssuerKey) XXX_DiscardUnknown()
func (*IssuerKey) XXX_Marshal ¶
func (*IssuerKey) XXX_Unmarshal ¶
type IssuerPublicKey ¶
type IssuerPublicKey struct { AttributeNames []string `protobuf:"bytes,1,rep,name=attribute_names,json=attributeNames,proto3" json:"attribute_names,omitempty"` HSk *amcl.ECP `protobuf:"bytes,2,opt,name=h_sk,json=hSk,proto3" json:"h_sk,omitempty"` HRand *amcl.ECP `protobuf:"bytes,3,opt,name=h_rand,json=hRand,proto3" json:"h_rand,omitempty"` HAttrs []*amcl.ECP `protobuf:"bytes,4,rep,name=h_attrs,json=hAttrs,proto3" json:"h_attrs,omitempty"` W *amcl.ECP2 `protobuf:"bytes,5,opt,name=w,proto3" json:"w,omitempty"` BarG1 *amcl.ECP `protobuf:"bytes,6,opt,name=bar_g1,json=barG1,proto3" json:"bar_g1,omitempty"` BarG2 *amcl.ECP `protobuf:"bytes,7,opt,name=bar_g2,json=barG2,proto3" json:"bar_g2,omitempty"` ProofC []byte `protobuf:"bytes,8,opt,name=proof_c,json=proofC,proto3" json:"proof_c,omitempty"` ProofS []byte `protobuf:"bytes,9,opt,name=proof_s,json=proofS,proto3" json:"proof_s,omitempty"` Hash []byte `protobuf:"bytes,10,opt,name=hash,proto3" json:"hash,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
IssuerPublicKey specifies an issuer public key that consists of attribute_names - a list of the attribute names of a credential issued by the issuer h_sk, h_rand, h_attrs, w, bar_g1, bar_g2 - group elements corresponding to the signing key, randomness, and attributes proof_c, proof_s compose a zero-knowledge proof of knowledge of the secret key hash is a hash of the public key appended to it
func (*IssuerPublicKey) Check ¶
func (IPk *IssuerPublicKey) Check(curve *math.Curve, t Translator) error
Check checks that this issuer public key is valid, i.e. that all components are present and a ZK proofs verifies
func (*IssuerPublicKey) Descriptor ¶
func (*IssuerPublicKey) Descriptor() ([]byte, []int)
func (*IssuerPublicKey) GetAttributeNames ¶
func (m *IssuerPublicKey) GetAttributeNames() []string
func (*IssuerPublicKey) GetBarG1 ¶
func (m *IssuerPublicKey) GetBarG1() *amcl.ECP
func (*IssuerPublicKey) GetBarG2 ¶
func (m *IssuerPublicKey) GetBarG2() *amcl.ECP
func (*IssuerPublicKey) GetHAttrs ¶
func (m *IssuerPublicKey) GetHAttrs() []*amcl.ECP
func (*IssuerPublicKey) GetHRand ¶
func (m *IssuerPublicKey) GetHRand() *amcl.ECP
func (*IssuerPublicKey) GetHSk ¶
func (m *IssuerPublicKey) GetHSk() *amcl.ECP
func (*IssuerPublicKey) GetHash ¶
func (m *IssuerPublicKey) GetHash() []byte
func (*IssuerPublicKey) GetProofC ¶
func (m *IssuerPublicKey) GetProofC() []byte
func (*IssuerPublicKey) GetProofS ¶
func (m *IssuerPublicKey) GetProofS() []byte
func (*IssuerPublicKey) GetW ¶
func (m *IssuerPublicKey) GetW() *amcl.ECP2
func (*IssuerPublicKey) ProtoMessage ¶
func (*IssuerPublicKey) ProtoMessage()
func (*IssuerPublicKey) Reset ¶
func (m *IssuerPublicKey) Reset()
func (*IssuerPublicKey) SetHash ¶
func (IPk *IssuerPublicKey) SetHash(curve *math.Curve) error
SetHash appends a hash of a serialized public key
func (*IssuerPublicKey) String ¶
func (m *IssuerPublicKey) String() string
func (*IssuerPublicKey) XXX_DiscardUnknown ¶
func (m *IssuerPublicKey) XXX_DiscardUnknown()
func (*IssuerPublicKey) XXX_Marshal ¶
func (m *IssuerPublicKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*IssuerPublicKey) XXX_Merge ¶
func (m *IssuerPublicKey) XXX_Merge(src proto.Message)
func (*IssuerPublicKey) XXX_Size ¶
func (m *IssuerPublicKey) XXX_Size() int
func (*IssuerPublicKey) XXX_Unmarshal ¶
func (m *IssuerPublicKey) XXX_Unmarshal(b []byte) error
type LogFunc ¶
type LogFunc func(format string, a ...interface{})
LogFunc is a function adapter for logging.
type Logger ¶
type Logger interface {
Printf(format string, a ...interface{})
}
Logger defines the contract for logging. This interface is explicitly defined to be compatible with the logger in the standard library log package.
type NonRevocationProof ¶
type NonRevocationProof struct { RevocationAlg int32 `protobuf:"varint,1,opt,name=revocation_alg,json=revocationAlg,proto3" json:"revocation_alg,omitempty"` NonRevocationProof []byte `protobuf:"bytes,2,opt,name=non_revocation_proof,json=nonRevocationProof,proto3" json:"non_revocation_proof,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
NonRevocationProof contains proof that the credential is not revoked
func (*NonRevocationProof) Descriptor ¶
func (*NonRevocationProof) Descriptor() ([]byte, []int)
func (*NonRevocationProof) GetNonRevocationProof ¶
func (m *NonRevocationProof) GetNonRevocationProof() []byte
func (*NonRevocationProof) GetRevocationAlg ¶
func (m *NonRevocationProof) GetRevocationAlg() int32
func (*NonRevocationProof) ProtoMessage ¶
func (*NonRevocationProof) ProtoMessage()
func (*NonRevocationProof) Reset ¶
func (m *NonRevocationProof) Reset()
func (*NonRevocationProof) String ¶
func (m *NonRevocationProof) String() string
func (*NonRevocationProof) XXX_DiscardUnknown ¶
func (m *NonRevocationProof) XXX_DiscardUnknown()
func (*NonRevocationProof) XXX_Marshal ¶
func (m *NonRevocationProof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*NonRevocationProof) XXX_Merge ¶
func (m *NonRevocationProof) XXX_Merge(src proto.Message)
func (*NonRevocationProof) XXX_Size ¶
func (m *NonRevocationProof) XXX_Size() int
func (*NonRevocationProof) XXX_Unmarshal ¶
func (m *NonRevocationProof) XXX_Unmarshal(b []byte) error
type NymSignature ¶
type NymSignature struct { // proof_c is the Fiat-Shamir challenge of the ZKP ProofC []byte `protobuf:"bytes,1,opt,name=proof_c,json=proofC,proto3" json:"proof_c,omitempty"` // proof_s_sk is the s-value proving knowledge of the user secret key ProofSSk []byte `protobuf:"bytes,2,opt,name=proof_s_sk,json=proofSSk,proto3" json:"proof_s_sk,omitempty"` // proof_s_r_nym is the s-value proving knowledge of the pseudonym secret ProofSRNym []byte `protobuf:"bytes,3,opt,name=proof_s_r_nym,json=proofSRNym,proto3" json:"proof_s_r_nym,omitempty"` // nonce is a fresh nonce used for the signature Nonce []byte `protobuf:"bytes,4,opt,name=nonce,proto3" json:"nonce,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
NymSignature specifies a signature object that signs a message with respect to a pseudonym. It differs from the standard idemix.signature in the fact that the standard signature object also proves that the pseudonym is based on a secret certified by a CA (issuer), whereas NymSignature only proves that the the owner of the pseudonym signed the message
func (*NymSignature) Descriptor ¶
func (*NymSignature) Descriptor() ([]byte, []int)
func (*NymSignature) GetNonce ¶
func (m *NymSignature) GetNonce() []byte
func (*NymSignature) GetProofC ¶
func (m *NymSignature) GetProofC() []byte
func (*NymSignature) GetProofSRNym ¶
func (m *NymSignature) GetProofSRNym() []byte
func (*NymSignature) GetProofSSk ¶
func (m *NymSignature) GetProofSSk() []byte
func (*NymSignature) ProtoMessage ¶
func (*NymSignature) ProtoMessage()
func (*NymSignature) Reset ¶
func (m *NymSignature) Reset()
func (*NymSignature) String ¶
func (m *NymSignature) String() string
func (*NymSignature) Ver ¶
func (sig *NymSignature) Ver(nym *math.G1, ipk *IssuerPublicKey, msg []byte, curve *math.Curve, tr Translator) error
Ver verifies an idemix NymSignature
func (*NymSignature) XXX_DiscardUnknown ¶
func (m *NymSignature) XXX_DiscardUnknown()
func (*NymSignature) XXX_Marshal ¶
func (m *NymSignature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*NymSignature) XXX_Merge ¶
func (m *NymSignature) XXX_Merge(src proto.Message)
func (*NymSignature) XXX_Size ¶
func (m *NymSignature) XXX_Size() int
func (*NymSignature) XXX_Unmarshal ¶
func (m *NymSignature) XXX_Unmarshal(b []byte) error
type RHNym ¶
type RHNym struct { Nym *amcl.ECP `protobuf:"bytes,1,opt,name=nym,proto3" json:"nym,omitempty"` ProofSRh []byte `protobuf:"bytes,2,opt,name=proof_s_rh,json=proofSRh,proto3" json:"proof_s_rh,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
RHNym specifies a pseudonymous revocation handle object that consists of nym - pseudonymous revocation handle s_rh - field element
func (*RHNym) Descriptor ¶
func (*RHNym) GetProofSRh ¶
func (*RHNym) ProtoMessage ¶
func (*RHNym) ProtoMessage()
func (*RHNym) XXX_DiscardUnknown ¶
func (m *RHNym) XXX_DiscardUnknown()
func (*RHNym) XXX_Marshal ¶
func (*RHNym) XXX_Unmarshal ¶
type RevocationAlgorithm ¶
type RevocationAlgorithm int32
const (
ALG_NO_REVOCATION RevocationAlgorithm = iota
)
type Signature ¶
type Signature struct { APrime *amcl.ECP `protobuf:"bytes,1,opt,name=a_prime,json=aPrime,proto3" json:"a_prime,omitempty"` ABar *amcl.ECP `protobuf:"bytes,2,opt,name=a_bar,json=aBar,proto3" json:"a_bar,omitempty"` BPrime *amcl.ECP `protobuf:"bytes,3,opt,name=b_prime,json=bPrime,proto3" json:"b_prime,omitempty"` ProofC []byte `protobuf:"bytes,4,opt,name=proof_c,json=proofC,proto3" json:"proof_c,omitempty"` ProofSSk []byte `protobuf:"bytes,5,opt,name=proof_s_sk,json=proofSSk,proto3" json:"proof_s_sk,omitempty"` ProofSE []byte `protobuf:"bytes,6,opt,name=proof_s_e,json=proofSE,proto3" json:"proof_s_e,omitempty"` ProofSR2 []byte `protobuf:"bytes,7,opt,name=proof_s_r2,json=proofSR2,proto3" json:"proof_s_r2,omitempty"` ProofSR3 []byte `protobuf:"bytes,8,opt,name=proof_s_r3,json=proofSR3,proto3" json:"proof_s_r3,omitempty"` ProofSSPrime []byte `protobuf:"bytes,9,opt,name=proof_s_s_prime,json=proofSSPrime,proto3" json:"proof_s_s_prime,omitempty"` ProofSAttrs [][]byte `protobuf:"bytes,10,rep,name=proof_s_attrs,json=proofSAttrs,proto3" json:"proof_s_attrs,omitempty"` Nonce []byte `protobuf:"bytes,11,opt,name=nonce,proto3" json:"nonce,omitempty"` Nym *amcl.ECP `protobuf:"bytes,12,opt,name=nym,proto3" json:"nym,omitempty"` ProofSRNym []byte `protobuf:"bytes,13,opt,name=proof_s_r_nym,json=proofSRNym,proto3" json:"proof_s_r_nym,omitempty"` RevocationEpochPk *amcl.ECP2 `protobuf:"bytes,14,opt,name=revocation_epoch_pk,json=revocationEpochPk,proto3" json:"revocation_epoch_pk,omitempty"` RevocationPkSig []byte `protobuf:"bytes,15,opt,name=revocation_pk_sig,json=revocationPkSig,proto3" json:"revocation_pk_sig,omitempty"` Epoch int64 `protobuf:"varint,16,opt,name=epoch,proto3" json:"epoch,omitempty"` NonRevocationProof *NonRevocationProof `protobuf:"bytes,17,opt,name=non_revocation_proof,json=nonRevocationProof,proto3" json:"non_revocation_proof,omitempty"` EidNym *EIDNym `protobuf:"bytes,18,opt,name=eid_nym,json=eidNym,proto3" json:"eid_nym,omitempty"` RhNym *RHNym `protobuf:"bytes,19,opt,name=rh_nym,json=rhNym,proto3" json:"rh_nym,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
Signature specifies a signature object that consists of a_prime, a_bar, b_prime, proof_* - randomized credential signature values and a zero-knowledge proof of knowledge of a credential and the corresponding user secret together with the attribute values nonce - a fresh nonce used for the signature nym - a fresh pseudonym (a commitment to to the user secret)
func (*Signature) AuditNymEid ¶
func (*Signature) AuditNymRh ¶
func (*Signature) Descriptor ¶
func (*Signature) GetNonRevocationProof ¶
func (m *Signature) GetNonRevocationProof() *NonRevocationProof
func (*Signature) GetProofSAttrs ¶
func (*Signature) GetProofSE ¶
func (*Signature) GetProofSR2 ¶
func (*Signature) GetProofSR3 ¶
func (*Signature) GetProofSRNym ¶
func (*Signature) GetProofSSPrime ¶
func (*Signature) GetProofSSk ¶
func (*Signature) GetRevocationEpochPk ¶
func (*Signature) GetRevocationPkSig ¶
func (*Signature) ProtoMessage ¶
func (*Signature) ProtoMessage()
func (*Signature) Ver ¶
func (sig *Signature) Ver( Disclosure []byte, ipk *IssuerPublicKey, msg []byte, attributeValues []*math.Zr, rhIndex, eidIndex int, revPk *ecdsa.PublicKey, epoch int, curve *math.Curve, t Translator, verType opts.VerificationType, meta *opts.IdemixSignerMetadata, ) error
Ver verifies an idemix signature Disclosure steers which attributes it expects to be disclosed attributeValues contains the desired attribute values. This function will check that if attribute i is disclosed, the i-th attribute equals attributeValues[i].
func (*Signature) XXX_DiscardUnknown ¶
func (m *Signature) XXX_DiscardUnknown()