mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-04-06 09:57:29 +00:00
* simv2: wip * simulation: exec adapter start/stop * simulation: add node status to exec adapter * simulation: initial simulation code * simulation: exec adapter, configure path to executable * simulation: initial docker adapter * simulation: wip kubernetes adapter * simulation: kubernetes adapter proxy * simulation: implement GetAll/StartAll/StopAll * simulation: kuberentes adapter - set env vars and resource limits * simulation: discovery test * simulation: remove port definitions within docker adapter * simulation: simplify wait for healthy loop * simulation: get nat ip addr from interface * simulation: pull docker images automatically * simulation: NodeStatus -> NodeInfo * simulation: move discovery test to example dir * simulation: example snapshot usage * simulation: add goclient specific simulation * simulation: add peer connections to snapshot * simulation: close rpc client * simulation: don't export kubernetes proxy server * simulation: merge simulation code * simulation: don't export nodemap * simulation: rename SimulationSnapshot -> Snapshot * simulation: linting fixes * simulation: add k8s available helper func * simulation: vendor * simulation: fix 'no non-test Go files' when building * simulation: remove errors from interface methods where non were returned * simulation: run getHealthInfo check in parallel
102 lines
3.9 KiB
Markdown
102 lines
3.9 KiB
Markdown
# go-digest
|
|
|
|
[](https://godoc.org/github.com/opencontainers/go-digest) [](https://goreportcard.com/report/github.com/opencontainers/go-digest) [](https://travis-ci.org/opencontainers/go-digest)
|
|
|
|
Common digest package used across the container ecosystem.
|
|
|
|
Please see the [godoc](https://godoc.org/github.com/opencontainers/go-digest) for more information.
|
|
|
|
# What is a digest?
|
|
|
|
A digest is just a hash.
|
|
|
|
The most common use case for a digest is to create a content
|
|
identifier for use in [Content Addressable Storage](https://en.wikipedia.org/wiki/Content-addressable_storage)
|
|
systems:
|
|
|
|
```go
|
|
id := digest.FromBytes([]byte("my content"))
|
|
```
|
|
|
|
In the example above, the id can be used to uniquely identify
|
|
the byte slice "my content". This allows two disparate applications
|
|
to agree on a verifiable identifier without having to trust one
|
|
another.
|
|
|
|
An identifying digest can be verified, as follows:
|
|
|
|
```go
|
|
if id != digest.FromBytes([]byte("my content")) {
|
|
return errors.New("the content has changed!")
|
|
}
|
|
```
|
|
|
|
A `Verifier` type can be used to handle cases where an `io.Reader`
|
|
makes more sense:
|
|
|
|
```go
|
|
rd := getContent()
|
|
verifier := id.Verifier()
|
|
io.Copy(verifier, rd)
|
|
|
|
if !verifier.Verified() {
|
|
return errors.New("the content has changed!")
|
|
}
|
|
```
|
|
|
|
Using [Merkle DAGs](https://en.wikipedia.org/wiki/Merkle_tree), this
|
|
can power a rich, safe, content distribution system.
|
|
|
|
# Usage
|
|
|
|
While the [godoc](https://godoc.org/github.com/opencontainers/go-digest) is
|
|
considered the best resource, a few important items need to be called
|
|
out when using this package.
|
|
|
|
1. Make sure to import the hash implementations into your application
|
|
or the package will panic. You should have something like the
|
|
following in the main (or other entrypoint) of your application:
|
|
|
|
```go
|
|
import (
|
|
_ "crypto/sha256"
|
|
_ "crypto/sha512"
|
|
)
|
|
```
|
|
This may seem inconvenient but it allows you replace the hash
|
|
implementations with others, such as https://github.com/stevvooe/resumable.
|
|
|
|
2. Even though `digest.Digest` may be assemable as a string, _always_
|
|
verify your input with `digest.Parse` or use `Digest.Validate`
|
|
when accepting untrusted input. While there are measures to
|
|
avoid common problems, this will ensure you have valid digests
|
|
in the rest of your application.
|
|
|
|
# Stability
|
|
|
|
The Go API, at this stage, is considered stable, unless otherwise noted.
|
|
|
|
As always, before using a package export, read the [godoc](https://godoc.org/github.com/opencontainers/go-digest).
|
|
|
|
# Contributing
|
|
|
|
This package is considered fairly complete. It has been in production
|
|
in thousands (millions?) of deployments and is fairly battle-hardened.
|
|
New additions will be met with skepticism. If you think there is a
|
|
missing feature, please file a bug clearly describing the problem and
|
|
the alternatives you tried before submitting a PR.
|
|
|
|
## Code of Conduct
|
|
|
|
Participation in the OpenContainers community is governed by [OpenContainer's Code of Conduct][code-of-conduct].
|
|
|
|
## Security
|
|
|
|
If you find an issue, please follow the [security][security] protocol to report it.
|
|
|
|
# Copyright and license
|
|
|
|
Copyright © 2016 Docker, Inc. All rights reserved, except as follows. Code is released under the [Apache 2.0 license](LICENSE). This `README.md` file and the [`CONTRIBUTING.md`](CONTRIBUTING.md) file are licensed under the Creative Commons Attribution 4.0 International License under the terms and conditions set forth in the file [`LICENSE.docs`](LICENSE.docs). You may obtain a duplicate copy of the same license, titled CC BY-SA 4.0, at http://creativecommons.org/licenses/by-sa/4.0/.
|
|
|
|
[security]: https://github.com/opencontainers/org/blob/master/security
|
|
[code-of-conduct]: https://github.com/opencontainers/org/blob/master/CODE_OF_CONDUCT.md
|