/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/DataProtection/Cryptography.Internal/test/UnsafeBufferUtilTests.cs
159 строк
4 KB
Shreyas Jejurkar
chore : Remove unwanted `using` statement (#39176)
02 янв 2022, 17:39
Не верифицирован
02 янв 2022, 17:39
c85baf8
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using Microsoft.AspNetCore.Cryptography.SafeHandles; using Xunit; namespace Microsoft.AspNetCore.Cryptography; public unsafe class UnsafeBufferUtilTests { [Fact] public void BlockCopy_PtrToPtr_IntLength() { // Arrange long x = 0x0123456789ABCDEF; long y = 0; // Act UnsafeBufferUtil.BlockCopy(from: &x, to: &y, byteCount: (int)sizeof(long)); // Assert Assert.Equal(x, y); } [Fact] public void BlockCopy_PtrToPtr_UIntLength() { // Arrange long x = 0x0123456789ABCDEF; long y = 0; // Act UnsafeBufferUtil.BlockCopy(from: &x, to: &y, byteCount: (uint)sizeof(long)); // Assert Assert.Equal(x, y); } [Fact] public void BlockCopy_HandleToHandle() { // Arrange const string expected = "Hello there!"; int cbExpected = expected.Length * sizeof(char); var controlHandle = LocalAlloc(cbExpected); for (int i = 0; i < expected.Length; i++) { ((char*)controlHandle.DangerousGetHandle())[i] = expected[i]; } var testHandle = LocalAlloc(cbExpected); // Act UnsafeBufferUtil.BlockCopy(from: controlHandle, to: testHandle, length: (IntPtr)cbExpected); // Assert string actual = new string((char*)testHandle.DangerousGetHandle(), 0, expected.Length); GC.KeepAlive(testHandle); Assert.Equal(expected, actual); } [Fact] public void BlockCopy_HandleToPtr() { // Arrange const string expected = "Hello there!"; int cbExpected = expected.Length * sizeof(char); var controlHandle = LocalAlloc(cbExpected); for (int i = 0; i < expected.Length; i++) { ((char*)controlHandle.DangerousGetHandle())[i] = expected[i]; } char* dest = stackalloc char[expected.Length]; // Act UnsafeBufferUtil.BlockCopy(from: controlHandle, to: dest, byteCount: (uint)cbExpected); // Assert string actual = new string(dest, 0, expected.Length); Assert.Equal(expected, actual); } [Fact] public void BlockCopy_PtrToHandle() { // Arrange const string expected = "Hello there!"; int cbExpected = expected.Length * sizeof(char); var testHandle = LocalAlloc(cbExpected); // Act fixed (char* pExpected = expected) { UnsafeBufferUtil.BlockCopy(from: pExpected, to: testHandle, byteCount: (uint)cbExpected); } // Assert string actual = new string((char*)testHandle.DangerousGetHandle(), 0, expected.Length); GC.KeepAlive(testHandle); Assert.Equal(expected, actual); } [Fact] public void SecureZeroMemory_IntLength() { // Arrange long x = 0x0123456789ABCDEF; // Act UnsafeBufferUtil.SecureZeroMemory((byte*)&x, byteCount: (int)sizeof(long)); // Assert Assert.Equal(0, x); } [Fact] public void SecureZeroMemory_UIntLength() { // Arrange long x = 0x0123456789ABCDEF; // Act UnsafeBufferUtil.SecureZeroMemory((byte*)&x, byteCount: (uint)sizeof(long)); // Assert Assert.Equal(0, x); } [Fact] public void SecureZeroMemory_ULongLength() { // Arrange long x = 0x0123456789ABCDEF; // Act UnsafeBufferUtil.SecureZeroMemory((byte*)&x, byteCount: (ulong)sizeof(long)); // Assert Assert.Equal(0, x); } [Fact] public void SecureZeroMemory_IntPtrLength() { // Arrange long x = 0x0123456789ABCDEF; // Act UnsafeBufferUtil.SecureZeroMemory((byte*)&x, length: (IntPtr)sizeof(long)); // Assert Assert.Equal(0, x); } private static LocalAllocHandle LocalAlloc(int cb) { return SecureLocalAllocHandle.Allocate((IntPtr)cb); } }