| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // Copyright (C) 2016 The Protocol Authors.
- package protocol
- import "fmt"
- type HashAlgorithm int
- const (
- SHA256 HashAlgorithm = iota
- )
- func (h HashAlgorithm) String() string {
- switch h {
- case SHA256:
- return "sha256"
- default:
- return "unknown"
- }
- }
- // FlagBits returns the bits that we should or into the folder flag field to
- // indicate the hash algorithm.
- func (h HashAlgorithm) FlagBits() uint32 {
- switch h {
- case SHA256:
- return FolderHashSHA256 << FolderHashShiftBits
- default:
- panic("unknown hash algorithm")
- }
- }
- func (h *HashAlgorithm) UnmarshalText(bs []byte) error {
- switch string(bs) {
- case "sha256":
- *h = SHA256
- return nil
- }
- return fmt.Errorf("Unknown hash algorithm %q", string(bs))
- }
- func (h *HashAlgorithm) MarshalText() ([]byte, error) {
- return []byte(h.String()), nil
- }
- func HashAlgorithmFromFlagBits(flags uint32) (HashAlgorithm, error) {
- algo := flags >> FolderHashShiftBits & FolderHashMask
- switch algo {
- case FolderHashSHA256:
- return SHA256, nil
- default:
- return 0, fmt.Errorf("Unknown hash algorithm %d", algo)
- }
- }
|