-
Notifications
You must be signed in to change notification settings - Fork 60
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use a build flag to disable resumable digests.
Signed-off-by: Andy Goldstein <agoldste@redhat.com>
- Loading branch information
Andy Goldstein
committed
Apr 16, 2015
1 parent
03274b6
commit c1ecabf
Showing
2 changed files
with
68 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// +build !noresumabledigest | ||
|
||
package digest | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/jlhawn/go-crypto" | ||
// For ResumableHash | ||
_ "github.com/jlhawn/go-crypto/sha256" // For Resumable SHA256 | ||
_ "github.com/jlhawn/go-crypto/sha512" // For Resumable SHA384, SHA512 | ||
) | ||
|
||
// resumableDigester implements ResumableDigester. | ||
type resumableDigester struct { | ||
alg string | ||
crypto.ResumableHash | ||
} | ||
|
||
var resumableHashAlgs = map[string]crypto.Hash{ | ||
"sha256": crypto.SHA256, | ||
"sha384": crypto.SHA384, | ||
"sha512": crypto.SHA512, | ||
} | ||
|
||
// NewResumableDigester creates a new ResumableDigester with the given hashing | ||
// algorithm. | ||
func NewResumableDigester(alg string) (ResumableDigester, error) { | ||
hash, supported := resumableHashAlgs[alg] | ||
if !supported { | ||
return resumableDigester{}, fmt.Errorf("unsupported resumable hash algorithm: %s", alg) | ||
} | ||
|
||
return resumableDigester{ | ||
alg: alg, | ||
ResumableHash: hash.New(), | ||
}, nil | ||
} | ||
|
||
// NewCanonicalResumableDigester creates a ResumableDigester using the default | ||
// digest algorithm. | ||
func NewCanonicalResumableDigester() ResumableDigester { | ||
return resumableDigester{ | ||
alg: "sha256", | ||
ResumableHash: crypto.SHA256.New(), | ||
} | ||
} | ||
|
||
// Digest returns the current digest for this resumable digester. | ||
func (d resumableDigester) Digest() Digest { | ||
return NewDigest(d.alg, d.ResumableHash) | ||
} |