public void Ctor_Buffer_Success()
        {
            // Arrange
            var input = new byte[] { 0x20, 0x30, 0x40 };

            // Act
            var secret = new Secret(input);
            input[1] = 0xFF; // mutate original array - secret shouldn't be modified

            // Assert - length
            Assert.Equal(3, secret.Length);

            // Assert - managed buffer
            var outputSegment = new ArraySegment<byte>(new byte[7], 2, 3);
            secret.WriteSecretIntoBuffer(outputSegment);
            Assert.Equal(new byte[] { 0x20, 0x30, 0x40 }, outputSegment.AsStandaloneArray());

            // Assert - unmanaged buffer
            var outputBuffer = new byte[3];
            fixed (byte* pOutputBuffer = outputBuffer)
            {
                secret.WriteSecretIntoBuffer(pOutputBuffer, 3);
            }
            Assert.Equal(new byte[] { 0x20, 0x30, 0x40 }, outputBuffer);
        }
        public void Ctor_Buffer_ZeroLength_Success()
        {
            // Act
            var secret = new Secret(new byte[0]);

            // Assert - none of these methods should throw
            Assert.Equal(0, secret.Length);
            secret.WriteSecretIntoBuffer(new ArraySegment<byte>(new byte[0]));
            byte dummy;
            secret.WriteSecretIntoBuffer(&dummy, 0);
        }