ParseDigest parses a Digest from its string representation. A Digest string is of the form typeString:hexValue. The string is expected to be non-empty, If not, an error is returned. This reverses Digest.String(). Returns an error of type *bufparse.ParseError if the string could not be parsed.
(s string)
| 135 | // |
| 136 | // Returns an error of type *bufparse.ParseError if the string could not be parsed. |
| 137 | func ParseDigest(s string) (Digest, error) { |
| 138 | if s == "" { |
| 139 | // This should be considered a system error. |
| 140 | return nil, errors.New("empty string passed to ParseDigest") |
| 141 | } |
| 142 | digestTypeString, hexValue, ok := strings.Cut(s, ":") |
| 143 | if !ok { |
| 144 | return nil, bufparse.NewParseError( |
| 145 | "module digest", |
| 146 | s, |
| 147 | errors.New(`must in the form "digest_type:digest_hex_value"`), |
| 148 | ) |
| 149 | } |
| 150 | digestType, err := ParseDigestType(digestTypeString) |
| 151 | if err != nil { |
| 152 | return nil, bufparse.NewParseError( |
| 153 | "module digest", |
| 154 | s, |
| 155 | err, |
| 156 | ) |
| 157 | } |
| 158 | value, err := hex.DecodeString(hexValue) |
| 159 | if err != nil { |
| 160 | return nil, bufparse.NewParseError( |
| 161 | "module digest", |
| 162 | s, |
| 163 | errors.New(`could not parse hex: must in the form "digest_type:digest_hex_value"`), |
| 164 | ) |
| 165 | } |
| 166 | switch digestType { |
| 167 | case DigestTypeB4, DigestTypeB5: |
| 168 | casDigest, err := cas.NewDigest(cas.DigestTypeShake256, value) |
| 169 | if err != nil { |
| 170 | return nil, err |
| 171 | } |
| 172 | return NewDigest(digestType, casDigest) |
| 173 | default: |
| 174 | return nil, syserror.Newf("unknown DigestType: %v", digestType) |
| 175 | } |
| 176 | } |
| 177 | |
| 178 | // DigestEqual returns true if the given Digests are considered equal. |
| 179 | // |
searching dependent graphs…