public static BlobIdentifier Random(HashType hashType = HashType.Vso0) { var randomBlob = new byte[32]; ThreadSafeRandom.Generator.NextBytes(randomBlob); return(CreateFromAlgorithmResult(randomBlob, AlgorithmIdLookup.Find(hashType))); }
/// <nodoc /> public static bool IsHashTagValid(ContentHash contentHash) { bool isValid = true; var hashTag = contentHash[contentHash.ByteLength - 1]; switch (contentHash.HashType) { case HashType.Vso0: isValid = hashTag == AlgorithmIdLookup.Find(HashType.Vso0); break; case HashType.DedupNodeOrChunk: isValid = hashTag == AlgorithmIdLookup.Find(HashType.DedupNode) || hashTag == AlgorithmIdLookup.Find(HashType.DedupChunk); break; case HashType.Murmur: isValid = hashTag == AlgorithmIdLookup.Find(HashType.Murmur); break; default: throw new ArgumentException($"{contentHash.HashType} is not a tagged hash."); } return(isValid); }
/// <nodoc /> public static NodeDedupIdentifier GetNodeIdentifier(this DedupNode node, HashType hashType) { if (node.Type != DedupNode.NodeType.InnerNode) { throw new ArgumentException($"The given hash does not represent a {nameof(NodeDedupIdentifier)}"); } return(new NodeDedupIdentifier(node.Hash, (NodeAlgorithmId)AlgorithmIdLookup.Find(hashType))); }
/// <nodoc /> public static bool IsHashTagValid(ContentHash contentHash) { var hashTag = contentHash[contentHash.ByteLength - 1]; return(contentHash.HashType switch { HashType.Vso0 => hashTag == AlgorithmIdLookup.Find(HashType.Vso0), HashType.DedupNodeOrChunk => hashTag == AlgorithmIdLookup.Find(HashType.DedupNode) || hashTag == AlgorithmIdLookup.Find(HashType.DedupChunk), HashType.Murmur => hashTag == AlgorithmIdLookup.Find(HashType.Murmur), _ => throw new ArgumentException($"{contentHash.HashType} is not a tagged hash.") });