public void Find_Success_LabelsWithHyphenSpace(string label)
        {
            string    content = $"-----BEGIN {label}-----\nZm9v\n-----END {label}-----";
            PemFields fields  = FindPem(content);

            Assert.Equal(label, content[fields.Label]);
        }
Пример #2
0
        public static void ImportEncryptedPem <TPass>(
            ReadOnlySpan <char> input,
            ReadOnlySpan <TPass> password,
            ImportEncryptedKeyAction <TPass> importAction)
        {
            bool                foundEncryptedPem = false;
            PemFields           foundFields       = default;
            ReadOnlySpan <char> foundSlice        = default;

            ReadOnlySpan <char> pem = input;

            while (PemEncoding.TryFind(pem, out PemFields fields))
            {
                ReadOnlySpan <char> label = pem[fields.Label];

                if (label.SequenceEqual(PemLabels.EncryptedPkcs8PrivateKey))
                {
                    if (foundEncryptedPem)
                    {
                        throw new ArgumentException(SR.Argument_PemImport_AmbiguousPem, nameof(input));
                    }

                    foundEncryptedPem = true;
                    foundFields       = fields;
                    foundSlice        = pem;
                }

                Index offset = fields.Location.End;
                pem = pem[offset..];
        public void Find_Success_DecodeSize(string base64, int expectedSize)
        {
            string    content = $"-----BEGIN TEST-----\n{base64}\n-----END TEST-----";
            PemFields fields  = FindPem(content);

            Assert.Equal(expectedSize, fields.DecodedDataLength);
            Assert.Equal(base64, content[fields.Base64Data]);
        }
 public void Find_Success_Base64SurroundingWhiteSpaceStripped()
 {
     string    content = $"-----BEGIN A-----\r\n Zm9v\n\r \t-----END A-----";
     PemFields fields  = AssertPemFound(content,
                                        expectedLocation: 0..43,
                                        expectedBase64: 20..24,
                                        expectedLabel: 11..12);
 }
 public void Find_Success_WhiteSpaceAfterPpostebSeparatesFromSubsequentContent(string whiteSpace)
 {
     string    content = $"-----BEGIN TEST-----\nZn9v\n-----END TEST-----{whiteSpace}blah";
     PemFields fields  = AssertPemFound(content,
                                        expectedLocation: 0..44,
                                        expectedBase64: 21..25,
                                        expectedLabel: 11..15);
 }
 public void Find_Success_WhiteSpaceBeforePreebSeparatesFromPriorContent(string whiteSpace)
 {
     string    content = $"blah{whiteSpace}-----BEGIN TEST-----\nZn9v\n-----END TEST-----";
     PemFields fields  = AssertPemFound(content,
                                        expectedLocation: 5..49,
                                        expectedBase64: 26..30,
                                        expectedLabel: 16..20);
 }
 public void Find_Success_LabelCharacterBoundaries()
 {
     string    content = $"-----BEGIN !PANIC~~~-----\nAHHH\n-----END !PANIC~~~-----";
     PemFields fields  = AssertPemFound(content,
                                        expectedLocation: 0..54,
                                        expectedBase64: 26..30,
                                        expectedLabel: 11..20);
 }
        public void Find_Success_Minimum()
        {
            string    content = "-----BEGIN ----------END -----";
            PemFields fields  = AssertPemFound(content,
                                               expectedLocation: 0..30,
                                               expectedBase64: 16..16,
                                               expectedLabel: 11..11);

            Assert.Equal(0, fields.DecodedDataLength);
        }
        public void Find_Success_CompletePreebPrefixedSameLabel()
        {
            string    content = "-----BEGIN TEST----- -----BEGIN TEST-----\nZm9v\n-----END TEST-----";
            PemFields fields  = AssertPemFound(content,
                                               expectedLocation: 21..65,
                                               expectedBase64: 42..46,
                                               expectedLabel: 32..36);

            Assert.Equal("TEST", content[fields.Label]);
        }
Пример #10
0
        public void Find_Success_EmptyContent_OneLine()
        {
            string    content = "-----BEGIN EMPTY----------END EMPTY-----";
            PemFields fields  = AssertPemFound(content,
                                               expectedLocation: 0..40,
                                               expectedBase64: 21..21,
                                               expectedLabel: 11..16);

            Assert.Equal(0, fields.DecodedDataLength);
        }
Пример #11
0
        public void Find_Success_EmptyContent_ManyLinesOfWhitespace()
        {
            string    content = "-----BEGIN EMPTY-----\n\t\n\t\n\t  \n-----END EMPTY-----";
            PemFields fields  = AssertPemFound(content,
                                               expectedLocation: 0..49,
                                               expectedBase64: 30..30,
                                               expectedLabel: 11..16);

            Assert.Equal(0, fields.DecodedDataLength);
        }
Пример #12
0
        public void Find_Success_LargeLabel()
        {
            string    label   = new string('A', 275);
            string    content = $"-----BEGIN {label}-----\nZm9v\n-----END {label}-----";
            PemFields fields  = AssertPemFound(content,
                                               expectedLocation: 0..586,
                                               expectedBase64: 292..296,
                                               expectedLabel: 11..286);

            Assert.Equal(label, content[fields.Label]);
        }
Пример #13
0
        public void Find_Success_PreebEndingOverlap()
        {
            string    content = "-----BEGIN TEST -----BEGIN TEST-----\nZm9v\n-----END TEST-----";
            PemFields fields  = AssertPemFound(content,
                                               expectedLocation: 16..60,
                                               expectedBase64: 37..41,
                                               expectedLabel: 27..31);

            Assert.Equal("TEST", content[fields.Label]);
            Assert.Equal(3, fields.DecodedDataLength);
        }
Пример #14
0
        public void Find_Success_Simple()
        {
            string    content = "-----BEGIN TEST-----\nZm9v\n-----END TEST-----";
            PemFields fields  = AssertPemFound(content,
                                               expectedLocation: 0..44,
                                               expectedBase64: 21..25,
                                               expectedLabel: 11..15);

            Assert.Equal("TEST", content[fields.Label]);
            Assert.Equal(content, content[fields.Location]);
            Assert.Equal("Zm9v", content[fields.Base64Data]);
            Assert.Equal(3, fields.DecodedDataLength);
        }
Пример #15
0
        private PemFields AssertPemFound(
            ReadOnlySpan <char> input,
            Range expectedLocation,
            Range expectedBase64,
            Range expectedLabel)
        {
            PemFields fields = FindPem(input);

            Assert.Equal(expectedBase64, fields.Base64Data);
            Assert.Equal(expectedLocation, fields.Location);
            Assert.Equal(expectedLabel, fields.Label);

            return(fields);
        }
Пример #16
0
        public void Find_Success_FindsPemAfterPemWithInvalidBase64()
        {
            string    content = @"
-----BEGIN TEST-----
$$$$
-----END TEST-----
-----BEGIN TEST2-----
Zm9v
-----END TEST2-----";
            PemFields fields  = FindPem(content);

            Assert.Equal("TEST2", content[fields.Label]);
            Assert.Equal("Zm9v", content[fields.Base64Data]);
        }
Пример #17
0
 public void Deconstruct(out ReadOnlySpan <char> contents, out PemFields pemFields)
 {
     contents  = _contents;
     pemFields = _pemFields;
 }
Пример #18
0
 public PemFieldItem(ReadOnlySpan <char> contents, PemFields pemFields)
 {
     _contents  = contents;
     _pemFields = pemFields;
 }
Пример #19
0
 public Enumerator(ReadOnlySpan <char> contents)
 {
     _contents  = contents;
     _pemFields = default;
 }