| File: Signing\Timestamp\MessageImprint.cs | Web Access |
| Project: src\nuget-client\src\NuGet.Core\NuGet.Packaging\NuGet.Packaging.csproj (NuGet.Packaging) |
// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Security.Cryptography; using NuGet.Packaging.Signing.DerEncoding; namespace NuGet.Packaging.Signing { /* From RFC 3161 (https://tools.ietf.org/html/rfc3161#section-2.4.2): MessageImprint ::= SEQUENCE { hashAlgorithm AlgorithmIdentifier, hashedMessage OCTET STRING } */ /// <remarks>This is public only to facilitate testing.</remarks> public sealed class MessageImprint { public AlgorithmIdentifier HashAlgorithm { get; } public byte[] HashedMessage { get; } private MessageImprint( AlgorithmIdentifier hashAlgorithm, byte[] hashedMessage) { HashAlgorithm = hashAlgorithm; HashedMessage = hashedMessage; } public static MessageImprint Read(byte[] bytes) { var reader = DerSequenceReader.CreateForPayload(bytes); return Read(reader); } internal static MessageImprint Read(DerSequenceReader reader) { var imprintReader = reader.ReadSequence(); var hashAlgorithm = AlgorithmIdentifier.Read(imprintReader); var hashedMessage = imprintReader.ReadOctetString(); if (hashedMessage == null || hashedMessage.Length == 0) { throw new CryptographicException(Strings.InvalidAsn1); } if (imprintReader.HasData) { throw new CryptographicException(Strings.InvalidAsn1); } return new MessageImprint(hashAlgorithm, hashedMessage); } } }