dipp

package module
v1.0.1-0...-8588ebc Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 12, 2021 License: Apache-2.0 Imports: 4 Imported by: 0

README

StreamingFast Data Integrity Proof Protocol middleware in Go

reference License

Simple protocol to provide your users with irrefutable proofs of the output of your service, as pioneered by dfuse.io

Using the protocol

Have your users pass the:

X-Data-Integrity-Proof: true

header in requests to your service. The protocol then returns an X-Data-Integrity-Proof hash back in the response headers.

If any data integrity issues arise, bring the returned payload along with the proof to claim your bounty. This will provide us with irrefutable proof that we did serve the payload.

Note: this will not work on websocket streams.

Integrate the middleware

In a Go service, use:

router := http.NewServeMux()
// Add routes to router

secret := "this is a randomly generated secret that is at least 32 bytes long"

_ = http.ListenAndServe(":8080", dipp.NewProofMiddleware(secret, router))
Validation

When you receive report of faulty data, users can provide the proof you gave them, with the payload they received.

Use the provided dipp-checker tool to do validation, which you can install with:

go get github.com/streamingfast/dipp/cmd/dipp-checker

and run as:

dipp-checker \
    "this is a randomly generated secret that is at least 32 bytes long" \
    "the-proof-provided-by-the-user-in-hexadecimal" \
    ./path/to/payload.file

to validate integrity.

Initial work

The dfuse.io platform started this initiative alongside its Data Integrity Bounty Program.

See https://hackerone.com/dfuse for details.

Contributing

Issues and PR in this repo related strictly to the dipp library.

Report any protocol-specific issues in their respective repositories

Please first refer to the general StreamingFast contribution guide, if you wish to contribute to this code base.

This codebase uses unit tests extensively, please write and run tests.

License

Apache 2.0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func HashMac

func HashMac(secret string, payload []byte) string

func NewProofMiddleware

func NewProofMiddleware(secret string, handler http.Handler) http.Handler

func NewProofMiddlewareFunc

func NewProofMiddlewareFunc(secret string) func(http.Handler) http.Handler

Types

type ProofMiddleware

type ProofMiddleware struct {
	// contains filtered or unexported fields
}

ProofMiddleware will hash the response and add a header. NOTE that this middleware will break Trailers added by calling code, after their WriteHeader() call.

func (*ProofMiddleware) ServeHTTP

func (m *ProofMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request)

type ProofWriter

type ProofWriter struct {
	http.ResponseWriter
	// contains filtered or unexported fields
}

func (*ProofWriter) Write

func (w *ProofWriter) Write(data []byte) (int, error)

func (*ProofWriter) WriteHeader

func (w *ProofWriter) WriteHeader(code int)

Directories

Path Synopsis
cmd
dipp-checker command
dipp-demo command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL