| File: Signing\Signatures\CommitmentTypeQualifier.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 5126 (https://tools.ietf.org/html/rfc5126.html#section-5.11.1): CommitmentTypeQualifier ::= SEQUENCE { commitmentTypeIdentifier CommitmentTypeIdentifier, qualifier ANY DEFINED BY commitmentTypeIdentifier } CommitmentTypeIdentifier ::= OBJECT IDENTIFIER */ /// <remarks>This is public only to facilitate testing.</remarks> public sealed class CommitmentTypeQualifier { public Oid CommitmentTypeIdentifier { get; } public byte[]? Qualifier { get; } private CommitmentTypeQualifier(Oid commitmentTypeIdentifier, byte[]? qualifier) { CommitmentTypeIdentifier = commitmentTypeIdentifier; Qualifier = qualifier; } public static CommitmentTypeQualifier Read(byte[] bytes) { var reader = DerSequenceReader.CreateForPayload(bytes); return Read(reader); } internal static CommitmentTypeQualifier Read(DerSequenceReader reader) { var commitmentTypeQualifierReader = reader.ReadSequence(); var commitmentTypeIdentifier = commitmentTypeQualifierReader.ReadOid(); byte[]? qualifier = null; if (commitmentTypeQualifierReader.HasData) { qualifier = commitmentTypeQualifierReader.ReadNextEncodedValue(); if (commitmentTypeQualifierReader.HasData) { throw new SignatureException(Strings.InvalidAsn1); } } return new CommitmentTypeQualifier(commitmentTypeIdentifier, qualifier); } internal byte[] Encode() { return DerEncoder.ConstructSequence(DerEncoder.SegmentedEncodeOid(CommitmentTypeIdentifier)); } } }