Skip to content

Instantly share code, notes, and snippets.

Avatar
🏠
Working from home

Adam White AdamWhiteHat

🏠
Working from home
View GitHub Profile
View INotifyPropertyChangedEx.cs
namespace ComponentModelEx
{
public delegate void PropertyChangedExEventHandler(object sender, PropertyChangedExEventArgs e);
public interface INotifyPropertyChangedEx
{
event PropertyChangedExEventHandler PropertyChangedEx;
}
}
View DictionaryChangedEventArgs.cs
using System;
using System.Collections.Generic;
namespace ComponentModelEx
{
public class DictionaryChangedEventArgs<TKey, TValue> : EventArgs
{
public DictionaryChangedAction Action => _action;
public KeyValuePair<TKey, TValue> OldValue => _oldValue;
public KeyValuePair<TKey, TValue> NewValue => _newValue;
View IsValidIPv6Address.cs
public static bool IPv6Check(string input)
{
if (string.IsNullOrWhiteSpace(input))
{
return false;
}
if (input.IndexOf("::") != input.LastIndexOf("::")) // 'The "::" can only appear once in an address.'
{
return false;
@AdamWhiteHat
AdamWhiteHat / GenericArithmeticFactory.cs
Created Dec 22, 2020
Generic arithmetic operations with an example
View GenericArithmeticFactory.cs
public static class GenericArithmeticFactory<T>
{
private static Dictionary<ExpressionType, Func<T, T, T>> _binaryOperationDictionary;
private static Func<T, T> _sqrtOperation = null;
static GenericArithmeticFactory()
{
_binaryOperationDictionary = new Dictionary<ExpressionType, Func<T, T, T>>();
}
@AdamWhiteHat
AdamWhiteHat / PasswordHashing.cs
Created Dec 22, 2020
Don't use SHA256 to hash your passwords! Hash passwords the correct way, using BCrypt.
View PasswordHashing.cs
/// <summary>
/// Requires the BCrypt nuget package. Available here: https://www.nuget.org/packages/BCrypt.Net-Next
/// </summary>
public static class PasswordHashing
{
public static string HashPassword(string password, int workFactor)
{
return BCrypt.Net.BCrypt.HashPassword(password, workFactor);
}
@AdamWhiteHat
AdamWhiteHat / FastFactorial.cs
Created Dec 22, 2020
A fast factorial implementation using the divide and conquer method.
View FastFactorial.cs
public static class FastFactorial
{
public static BigInteger Factorial(BigInteger n)
{
return MultiplyRange(2, n);
}
private static BigInteger MultiplyRange(BigInteger from, BigInteger to)
{
var diff = to - from;
@AdamWhiteHat
AdamWhiteHat / NumberTheory.Maths.cs
Last active Jun 19, 2022
Number Theory functions: Legendre Symbol, Eulers Criterion, Tonelli-Shanks, Chinese Remainder Theorem, Modular Multiplicative Inverse, Primitive Root, Multiplicative Order, Discrete Logarithm, Discrete Root, Eulers Totient Phi, Carmichael Lambda, Exponentiation by Squaring, Factorial, Complex Gamma Function, Nth Root, Prime Factorization, LCM, GCD.
View NumberTheory.Maths.cs
using System;
using System.Linq;
using System.Numerics;
using System.Collections.Generic;
public static class Maths
{
/// <summary>
/// Legendre Symbol returns 1 for a (nonzero) quadratic residue mod p, -1 for a non-quadratic residue (non-residue), or 0 on zero.
/// </summary>
@AdamWhiteHat
AdamWhiteHat / CryptoRandomSingleton.cs
Last active Dec 22, 2020
Cryptographically secure random number generator. Safe, secure, & correct implementation. Numbers are evenly distributed across entire range; avoids modulo bias. Internal buffers always cleared after every value returned--leaves nothing in memory. Singleton intended to be instantiated only once. Remember to call Dispose.
View CryptoRandomSingleton.cs
/// <summary>
/// Cryptographically secure random number generator. Features a safe, secure, and correct implementation.
/// Numbers are evenly distributed across the whole range; avoids modulo bias.
/// Internal buffers always cleared after every value returned--leaves nothing in memory.
/// Singleton intended to be instantiated only once for the lifetime of the application.
/// Remember to call Dispose when no longer needed.
/// </summary>
public static class CryptoRandomSingleton
{
@AdamWhiteHat
AdamWhiteHat / ANS1PrivateKey.cs
Created Dec 22, 2020
ANS1 parser for a RSA PrivateKey. Can also create a private key from just a P and Q by calculating the D, DP, DQ, and InverseQ. Create real private keys from small primes for CTFs, factoring challenges or the lulz.
View ANS1PrivateKey.cs
public class ANS1PrivateKey : IDisposable
{
public BigInteger Modulus = BigInteger.MinusOne;
public BigInteger Exponent = BigInteger.MinusOne;
public BigInteger P = BigInteger.MinusOne;
public BigInteger Q = BigInteger.MinusOne;
public BigInteger D = BigInteger.MinusOne;
public BigInteger DP = BigInteger.MinusOne;
public BigInteger DQ = BigInteger.MinusOne;
public BigInteger InverseQ = BigInteger.MinusOne;
@AdamWhiteHat
AdamWhiteHat / Factorization.cs
Last active May 22, 2022
Prime Factorization class.
View Factorization.cs
using System.Numerics;
public static class Factorization
{
private static BigInteger _cacheCeiling;
private static List<BigInteger> _primeCache;
private static BigInteger _cacheLargestPrimeCurrently;
private static BigInteger[] _probablePrimeCheckBases;
static Factorization()