Walter.Cypher 2024.3.26.1111

The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved
dotnet add package Walter.Cypher --version 2024.3.26.1111
NuGet\Install-Package Walter.Cypher -Version 2024.3.26.1111
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Walter.Cypher" Version="2024.3.26.1111" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Walter.Cypher --version 2024.3.26.1111
#r "nuget: Walter.Cypher, 2024.3.26.1111"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Walter.Cypher as a Cake Addin
#addin nuget:?package=Walter.Cypher&version=2024.3.26.1111

// Install Walter.Cypher as a Cake Tool
#tool nuget:?package=Walter.Cypher&version=2024.3.26.1111

WALTER

Introducing the WALTER Framework: Workable Algorithms for Location-aware Transmission, Encryption Response. Designed for modern developers, WALTER is a groundbreaking suite of NuGet packages crafted for excellence in .NET Standard 2.0, 2.1, Core 3.1, and .NET 6, 7, 8, as well as C++ environments. Emphasizing 100% AoT support and reflection-free operations, this framework is the epitome of performance and stability.

Whether you're tackling networking, encryption, or secure communication, WALTER offers unparalleled efficiency and precision in processing, making it an essential tool for developers who prioritize speed and memory management in their applications.

About the Walter.Cypher Nuget Package

The cypher package for hashing data in a convenient and secure way as well as symmetric and asymmetric cross platform encryption methods. You can find On-line documentation at https://cypherapi.asp-waf.com as well as using the sample code found at https://github.com/ASP-WAF/Cypher

Cypher ICON Walter.Cypher

This repository shows how you can use the Walter.Cypher NuGet package in your code using little code snippets.

Walter.Web.CypherTests sample code

This sample code shows the use of

  1. Fixed cypher using a password to protect your code.
  2. Generating checksum for tamper detection.
  3. PGP using various key strengths to protect data
  4. The use of Numeric encryption that can be used to defeat base64 scanning tools to detect cyphered constants for password probing as values can be stored in int64 type values

Get Started

Show how to cipher large amounts of text using the Crypto class


[TestMethod()]
public void CipherZip()
{
    var sb = new StringBuilder();
    for (var i = 0; i < 1024; i++)
    {
        sb.Append(DateTime.Now.ToString());
    }
    var test = sb.ToString();

    var cypkered = Crypto.Zip(test);
    var expect = Crypto.UnZip(cypkered);
    Assert.AreEqual(test, expect);
}

Alternatively you can use the extension method

[TestMethod()]
public void CypherExtesnionTest()
{
    var testpw = "65654616540546546";
    var cypher = Environment.MachineName.Encrypt(testpw);
    var clear = cypher.Decrypt(testpw);

    Assert.AreEqual(Environment.MachineName, clear);
}

The extension method for cypher also allow encryption using public/private key encryption using certificates for text of any length

[TestMethod]
public void TestSmallStringAsBytes()
{
    using X509Certificate2 encryptCertificate = GetCert(".cer");
    using X509Certificate2 decryptCertificate = GetCert(".pfx", "01234456");

    var certCypher = Environment.MachineName.AsEncryptedBytes(encryptCertificate);
    var clearBytes = certCypher.AsDecryptFromBytes(decryptCertificate);

    Assert.AreEqual(Environment.MachineName, UTF8Encoding.UTF8.GetString(clearBytes));

    // helper method load embedded test certificate resource from assembly
    static X509Certificate2 GetCert(string extension, string password = null)
    {
        var asam = Assembly.GetExecutingAssembly();
        using (var memory = new MemoryStream())
        using (var stream = asam.GetManifestResourceStream(asam.GetManifestResourceNames().First(f => f.EndsWith(extension))))
        {
            stream.CopyTo(memory);
            return new X509Certificate2(memory.ToArray(), password);
        }
    }
}

[TestMethod]
public void TestLargeStringAsBytes()
{
    using X509Certificate2 encryptCertificate = GetCert(".cer");
    using X509Certificate2 cecryptCertificate = GetCert(".pfx","01234456");

    var sb = new StringBuilder();
    for (int i = 0; i < 100; i++)
    {
        sb.Append(Guid.NewGuid());
    }
    var text = sb.ToString();

    var certCypher = text.AsEncryptedBytes(encryptCertificate);
    Assert.AreNotEqual(certCypher.Length, text.Length);

    var clearBytes = certCypher.AsDecryptFromBytes(cecryptCertificate);
    Assert.AreEqual(text, UTF8Encoding.UTF8.GetString(clearBytes));

    X509Certificate2 GetCert(string extension, string password = null)
    {
        var asam = Assembly.GetExecutingAssembly();
        using (var memory = new MemoryStream())
        using (var stream = asam.GetManifestResourceStream(asam.GetManifestResourceNames().First(f => f.EndsWith(extension))))
        {
            stream!.CopyTo(memory);
            return new X509Certificate2(memory.ToArray(), password);
        }
    }
}


You also have the possibility to encrypt and decrypt persisted text based on the hosting machine, user executing the application, the application or process name this feature works on all platforms that support where that support the concept of users, processes and machine names in .NET and is ideal for storing secure data in memory that should not be possible to access when creating an application dump file but should survive a reboot.

There are some limitations on some IOT devices that might prevent you from using these features

public void RoundTrip_EncryptionScope_Process()
{
    var sb = new StringBuilder();
    for (int i = 0; i < 100; i++)
    {
        sb.Append(Guid.NewGuid());
    }
    var text = sb.ToString();

    var certCypher = text.AsEncryptedBytes(scope: EncryptionScope.Process);
    Assert.AreNotEqual(certCypher.Length, text.Length);

    var clearText = certCypher.AsDecryptFromBytes(scope: EncryptionScope.Process);
    Assert.AreEqual(text, clearText);

}

[TestMethod()]
public void RoundTrip_EncryptionScope_User()
{
    var sb = new StringBuilder();
    for (int i = 0; i < 100; i++)
    {
        sb.Append(Guid.NewGuid());
    }
    var text = sb.ToString();

    var certCypher = text.AsEncryptedBytes(scope: EncryptionScope.User);
    Assert.AreNotEqual(certCypher.Length, text.Length);

    var clearText = certCypher.AsDecryptFromBytes(scope: EncryptionScope.User);
    Assert.AreEqual(text, clearText);
}

[TestMethod()]
public void RoundTrip_EncryptionScope_Machine()
{
    var sb = new StringBuilder();
    for (int i = 0; i < 100; i++)
    {
        sb.Append(Guid.NewGuid());
    }
    var text = sb.ToString();

    var certCypher = text.AsEncryptedBytes(scope: EncryptionScope.Machine);
    Assert.AreNotEqual(certCypher.Length, text.Length);

    var clearText = certCypher.AsDecryptFromBytes(scope: EncryptionScope.Machine);
    Assert.AreEqual(text, clearText);
}

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 is compatible. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Walter.Cypher:

Package Downloads
Walter.BOM The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

Internal NuGet package with business objects used by several ASP-WAF products Documentation available at https://firewallapi.asp-waf.com/?topic=html/N-Walter.BOM.htm

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2024.3.26.1111 107 3/26/2024
2024.3.19.2310 132 3/19/2024
2024.3.12.1022 137 3/12/2024
2024.3.7.836 155 3/7/2024
2024.3.6.1645 69 3/6/2024
2024.3.3.842 112 3/3/2024
2024.3.3.750 79 3/3/2024
2024.3.1.1143 96 3/1/2024
2024.2.27.1029 79 2/27/2024
2024.2.6.1959 72 2/6/2024
2023.10.12.1926 3,407 10/12/2023
2023.9.14.812 1,453 9/14/2023
2023.8.29.1040 8,049 8/29/2023
2023.8.17.903 1,568 8/17/2023
2023.8.9.1314 1,640 8/9/2023
2023.8.2.750 1,749 8/2/2023
2023.7.12.830 1,725 7/12/2023
2023.7.5.1419 1,822 7/6/2023
2023.6.14.1628 3,391 6/14/2023
2023.5.30.1640 2,212 5/30/2023
2023.5.4.1552 2,278 5/4/2023
2023.4.12.1236 6,282 4/12/2023
2023.3.14.1356 5,045 3/14/2023
2023.3.1.810 2,930 3/1/2023
2023.2.25.1185 799 2/25/2023
2023.2.22.27 5,174 2/22/2023
2023.2.15.1413 3,098 2/15/2023
2023.2.11.1628 3,116 2/11/2023
2023.1.11.534 3,390 1/11/2023
2022.12.14.648 12,034 12/14/2022
2022.11.27.1059 3,746 11/27/2022
2022.11.21.338 3,849 11/21/2022
2022.11.14.1819 4,041 11/14/2022
2022.11.14.1533 534 11/14/2022
2022.11.13.917 4,690 11/13/2022
2022.10.31.740 7,613 11/1/2022
2022.10.15.652 7,882 10/15/2022
2022.10.1.810 9,750 10/1/2022
2022.9.26.1444 10,488 9/26/2022
2022.9.14.809 9,130 9/14/2022
2022.9.8.1009 17,476 9/8/2022
2022.8.20.1007 9,321 8/20/2022
2022.8.1.1 9,601 7/31/2022
2022.7.15.841 18,132 7/15/2022
2022.7.1.1300 9,700 7/1/2022
2022.6.21.647 9,600 6/21/2022
2022.5.4.1010 35,057 5/4/2022
2022.4.10.828 28,257 4/10/2022
2022.3.26.1117 28,000 3/26/2022
2022.2.11.931 48,865 2/17/2022
2022.1.15.1312 20,157 1/17/2022
2022.1.10.537 19,253 1/10/2022
2022.1.7.1357 9,154 1/8/2022
2021.12.28.1452 10,604 12/28/2021
2021.12.15.911 9,865 12/16/2021
2021.11.19.850 36,571 11/19/2021
2021.11.11.1334 29,383 11/16/2021
2021.11.8.2109 8,516 11/9/2021
2021.11.8.1612 9,096 11/8/2021
2021.10.23.1310 50,174 10/25/2021
2021.10.13.1459 9,480 10/18/2021
2021.10.9.821 414 10/10/2021
2021.9.26.1913 63,581 9/26/2021
2021.9.17.1702 14,655 9/18/2021
2021.8.30.1319 93,025 8/30/2021
2021.8.14.1600 51,519 8/16/2021
2021.8.14.829 5,414 8/14/2021
2021.8.8.1612 17,873 8/8/2021
2021.8.8.1138 385 8/8/2021
2021.7.22.1044 61,394 7/23/2021
2021.7.15.1547 9,537 7/15/2021
2021.7.12.734 9,420 7/13/2021
2021.6.26.1753 35,865 6/27/2021
2021.6.23.734 18,640 6/24/2021
2021.6.19.803 10,025 6/20/2021
2021.6.11.1600 36,103 6/13/2021
2021.6.9.1120 9,708 6/9/2021
2021.6.7.1407 2,430 6/7/2021
2021.5.28.1533 18,162 5/31/2021
2021.5.28.1451 9,735 5/31/2021
2021.5.25.1732 8,575 5/25/2021
2021.5.12.929 31,206 5/12/2021
2021.5.12.914 361 5/12/2021
2021.5.12.637 5,308 5/12/2021
2021.5.5.1901 31,828 5/6/2021
2021.5.2.1617 9,332 5/4/2021
2021.5.1.1505 9,598 5/1/2021
2021.4.28.1505 9,361 4/28/2021
2021.4.5.1653 61,474 4/5/2021
2021.4.1.913 9,500 4/1/2021
2021.3.31.1630 9,426 4/1/2021
2021.3.18.1608 9,768 3/18/2021
2021.3.3.1295 441 3/3/2021
2021.3.3.835 453 3/3/2021
2021.3.1.1205 23,661 3/2/2021
2021.3.1.1 16,413 2/27/2021
2021.2.21.1 15,878 2/21/2021
2021.2.19.3 8,645 2/20/2021
2021.2.19.2 8,332 2/19/2021
2021.2.18.2 7,386 2/19/2021
2021.2.18.1 407 2/19/2021
2021.2.16.1 16,325 2/16/2021
2021.2.10.1 37,020 2/10/2021
2021.2.9.1 7,286 2/9/2021
2021.2.8.1 431 2/9/2021
2021.2.7.1 13,833 2/6/2021
2020.12.27.1 13,265 12/27/2020
2020.12.26.3 19,397 12/27/2020
2020.12.26.2 452 12/27/2020
2020.12.24.2 480 12/26/2020
2020.12.24.1 434 12/24/2020
2020.12.18.1 7,427 12/19/2020
2020.12.15.1 13,359 12/15/2020
2020.12.14.5 12,597 12/14/2020
2020.12.14.4 6,852 12/14/2020
2020.12.14.3 6,586 12/14/2020
2020.11.27.1 65,997 11/27/2020
2020.11.25.1 12,664 11/25/2020
2020.11.23.1 457 11/25/2020
2020.11.22.2 8,432 11/23/2020
2020.11.20.1 7,697 11/21/2020
2020.11.19.3 7,791 11/19/2020
2020.11.11.1 62,857 11/11/2020
2020.10.9.5 136,734 10/9/2020
2020.10.5.1 69,060 10/5/2020
2020.10.4.1 492 10/4/2020
2020.10.1.1 18,305 10/1/2020
2020.9.24.2 23,137 9/24/2020
2020.9.12.1 48,721 9/12/2020
2020.9.8 16,954 9/8/2020
2020.9.6.5 5,092 9/6/2020
2020.9.6.4 490 9/6/2020
2020.9.6.2 1,699 9/6/2020
2020.9.3.1 13,902 9/3/2020

7 March 2024
- Update to allow trimming and A0T compilation under .net 8

16 November 2023
- Update to add support for .net 8

14 September 2023
- SDK Service pack .net 6 and 7

9 August 2023
- Update to sevice packs of .net 6 and 7

2 Augusted  2023
- Update binaries