var ( ErrInvalidSuite = errors.New("invalid suite") ErrInvalidMode = errors.New("invalid mode") ErrDeriveKeyPairError = errors.New("key pair derivation failed") ErrInvalidInput = errors.New("invalid input") ErrInvalidInfo = errors.New("invalid info") ErrInvalidProof = errors.New("proof verification failed") ErrInverseZero = errors.New("inverting a zero value") ErrNoKey = errors.New("must provide a key") )
type Blind = group.Scalar
type Blinded = group.Element
type Client struct {
// contains filtered or unexported fields
}
func NewClient(s Suite) Client
func (c Client) Blind(inputs [][]byte) (*FinalizeData, *EvaluationRequest, error)
func (c Client) DeterministicBlind(inputs [][]byte, blinds []Blind) (*FinalizeData, *EvaluationRequest, error)
func (c Client) Finalize(f *FinalizeData, e *Evaluation) (outputs [][]byte, err error)
type Evaluated = group.Element
Evaluation contains a list of elements produced during server's evaluation, and for verifiable modes it also includes a proof.
type Evaluation struct { Elements []Evaluated Proof *dleq.Proof }
EvaluationRequest contains the blinded elements to be evaluated by the Server.
type EvaluationRequest struct { Elements []Blinded }
FinalizeData encapsulates data needed for Finalize step.
type FinalizeData struct {
// contains filtered or unexported fields
}
func (f FinalizeData) CopyBlinds() []Blind
CopyBlinds copies the serialized blinds to use when deterministically invoking DeterministicBlind.
type Mode = uint8
const ( BaseMode Mode = 0x00 VerifiableMode Mode = 0x01 PartialObliviousMode Mode = 0x02 )
type PartialObliviousClient struct {
// contains filtered or unexported fields
}
func NewPartialObliviousClient(s Suite, server *PublicKey) PartialObliviousClient
func (c PartialObliviousClient) Blind(inputs [][]byte) (*FinalizeData, *EvaluationRequest, error)
func (c PartialObliviousClient) DeterministicBlind(inputs [][]byte, blinds []Blind) (*FinalizeData, *EvaluationRequest, error)
func (c PartialObliviousClient) Finalize(f *FinalizeData, e *Evaluation, info []byte) (outputs [][]byte, err error)
type PartialObliviousServer struct {
// contains filtered or unexported fields
}
func NewPartialObliviousServer(s Suite, key *PrivateKey) PartialObliviousServer
func (s PartialObliviousServer) Evaluate(req *EvaluationRequest, info []byte) (*Evaluation, error)
func (s PartialObliviousServer) FullEvaluate(input, info []byte) (output []byte, err error)
func (s PartialObliviousServer) PublicKey() *PublicKey
func (s PartialObliviousServer) VerifyFinalize(input, info, expectedOutput []byte) bool
type PrivateKey struct {
// contains filtered or unexported fields
}
func DeriveKey(s Suite, mode Mode, seed, info []byte) (*PrivateKey, error)
DeriveKey generates a private key from a given seed and optional info string.
func GenerateKey(s Suite, rnd io.Reader) (*PrivateKey, error)
GenerateKey generates a private key compatible with the suite.
func (k *PrivateKey) MarshalBinary() ([]byte, error)
func (k *PrivateKey) Public() *PublicKey
func (k *PrivateKey) UnmarshalBinary(s Suite, data []byte) error
type PublicKey struct {
// contains filtered or unexported fields
}
func (k *PublicKey) MarshalBinary() ([]byte, error)
func (k *PublicKey) UnmarshalBinary(s Suite, data []byte) error
type Server struct {
// contains filtered or unexported fields
}
func NewServer(s Suite, key *PrivateKey) Server
func (s Server) Evaluate(req *EvaluationRequest) (*Evaluation, error)
func (s Server) FullEvaluate(input []byte) (output []byte, err error)
func (s Server) PublicKey() *PublicKey
func (s Server) VerifyFinalize(input, expectedOutput []byte) bool
type Suite interface { Identifier() string Group() group.Group Hash() crypto.Hash // contains filtered or unexported methods }
var ( // SuiteRistretto255 represents the OPRF with Ristretto255 and SHA-512 SuiteRistretto255 Suite = params{/* contains filtered or unexported fields */} // SuiteP256 represents the OPRF with P-256 and SHA-256. SuiteP256 Suite = params{/* contains filtered or unexported fields */} // SuiteP384 represents the OPRF with P-384 and SHA-384. SuiteP384 Suite = params{/* contains filtered or unexported fields */} // SuiteP521 represents the OPRF with P-521 and SHA-512. SuiteP521 Suite = params{/* contains filtered or unexported fields */} )
func GetSuite(identifier string) (Suite, error)
type VerifiableClient struct {
// contains filtered or unexported fields
}
func NewVerifiableClient(s Suite, server *PublicKey) VerifiableClient
func (c VerifiableClient) Blind(inputs [][]byte) (*FinalizeData, *EvaluationRequest, error)
func (c VerifiableClient) DeterministicBlind(inputs [][]byte, blinds []Blind) (*FinalizeData, *EvaluationRequest, error)
func (c VerifiableClient) Finalize(f *FinalizeData, e *Evaluation) (outputs [][]byte, err error)
type VerifiableServer struct {
// contains filtered or unexported fields
}
func NewVerifiableServer(s Suite, key *PrivateKey) VerifiableServer
func (s VerifiableServer) Evaluate(req *EvaluationRequest) (*Evaluation, error)
func (s VerifiableServer) FullEvaluate(input []byte) (output []byte, err error)
func (s VerifiableServer) PublicKey() *PublicKey
func (s VerifiableServer) VerifyFinalize(input, expectedOutput []byte) bool