コード例 #1
0
        // derives a subkey from ctx and srcKey. ctx should be hardcoded,
        // globally unique, and application-specific. A good format for ctx strings is:
        //
        // [application] [commit timestamp] [purpose]
        //
        // e.g.:
        //
        // example.com 2019-12-25 16:18:03 session tokens v1
        //
        // The purpose of these requirements is to ensure that an attacker cannot trick
        // two different applications into using the same context string.
        internal unsafe PBKDF_Blake3NotBuiltInAdapter(byte[] srcKey, byte[] ctx)
        {
            if (srcKey == null)
            {
                throw new ArgumentNullHashLibException(nameof(srcKey));
            }
            if (ctx == null)
            {
                throw new ArgumentNullHashLibException(nameof(ctx));
            }

            SrcKey = srcKey.DeepCopy();

            UInt32[] ivWords = Blake3.IV.DeepCopy();

            // construct the derivation Hasher and get the derivationIV
            var derivationIv = new Blake3(derivationIVLen, ivWords, flagDeriveKeyContext)
                               .ComputeBytes(ctx).GetBytes();

            fixed(byte *srcPtr = derivationIv)
            {
                fixed(UInt32 *destPtr = ivWords)
                {
                    Converters.le32_copy((IntPtr)srcPtr, 0, (IntPtr)destPtr, 0, Blake3.KeyLengthInBytes);
                }
            }

            Xof = new Blake3XOF(32, ivWords, flagDeriveKeyMaterial);
        } // end cctr
コード例 #2
0
        // derives a subkey from ctx and srcKey. ctx should be hardcoded,
        // globally unique, and application-specific. A good format for ctx strings is:
        //
        // [application] [commit timestamp] [purpose]
        //
        // e.g.:
        //
        // example.com 2019-12-25 16:18:03 session tokens v1
        //
        // The purpose of these requirements is to ensure that an attacker cannot trick
        // two different applications into using the same context string.
        internal unsafe PBKDFBlake3NotBuiltIn(byte[] srcKey, byte[] ctx)
        {
            if (srcKey == null)
            {
                throw new ArgumentNullException(nameof(srcKey));
            }
            if (ctx == null)
            {
                throw new ArgumentNullException(nameof(ctx));
            }

            _srcKey = ArrayUtils.Clone(srcKey);

            var ivWords = ArrayUtils.Clone(Blake3.IV);

            // construct the derivation Hasher and get the derivationIV
            var derivationIv = new Blake3(derivationIVLen, ivWords, flagDeriveKeyContext)
                               .ComputeBytes(ctx).GetBytes();

            fixed(byte *srcPtr = derivationIv)
            {
                fixed(uint *destPtr = ivWords)
                {
                    Converters.le32_copy(srcPtr, 0, destPtr, 0, Blake3.KeyLengthInBytes);
                }
            }

            _xof = new Blake3XOF(32, ivWords, flagDeriveKeyMaterial);
        }
コード例 #3
0
        public string GetStringHash(string str)
        {
            Blake3 blake3 = new Blake3();

            byte[] hash = blake3.ComputeHash(Encoding.UTF8.GetBytes(str));

            return(Convert.ToBase64String(hash));
        }
コード例 #4
0
        double BenchmarkHashingThroughput(int trial, TimeSpan duration)
        {
            Console.Write($"Run {trial}: ");
            var data      = CreateTestData(TestDataSize);
            var elapsed   = TimeSpan.Zero;
            var totalData = 0;

            do
            {
                var hasher    = new Blake3();
                var stopwatch = Stopwatch.StartNew();
                hasher.ComputeHash(data);
                stopwatch.Stop();
                elapsed   += stopwatch.Elapsed;
                totalData += data.Length;
            } while(elapsed < duration);

            var mbps = ToMegabytes(totalData / elapsed.TotalSeconds);

            Console.WriteLine($"{mbps:N3}MB/second");
            return(mbps);
        }
コード例 #5
0
 public static IHash CreateBlake3_256(byte[] a_Key) => Blake3.CreateBlake3(HashSizeEnum.HashSize256, a_Key);
コード例 #6
0
 void CanCreateBlake3()
 {
     var hash = new Blake3();
 }
コード例 #7
0
        private static IHash Core(string hash_string)
        {
            string hash = Strip(hash_string);

            switch (hash)
            {
                #region NullDigest
            case "nulldigest":
                return(new NullDigest());

                #endregion

                #region Checksum
            case "crc16":
            case "crcbuypass":
            case "crc16buypass":
                return(new CRC16_BUYPASS());

            case "crc32":
            case "crcpkzip":
            case "crc32pkzip":
                return(new CRC32_PKZIP());

            case "crccastagnoli":
            case "crc32castagnoli":
                return(new CRC32_CASTAGNOLI());

            case "crc64":
            case "crcecma":
            case "crc64ecma":
            case "crc64ecma182":
                return(new CRC64_ECMA_182());

            case "adler":
            case "adler32":
                return(new Adler32());

                #endregion

                #region Crypto
            case "has160":
                return(new HAS160());

            case "panama":
                return(new Panama());

            case "whirlpool":
                return(new WhirlPool());

                #region Gost Hash Family
            case "gost":
                return(new Gost());

            case "gost256":
            case "gost2012":
            case "gost2012256":
            case "gost2562012":
            case "gost34112012256":
                return(new GOST3411_2012_256());

            case "gost512":
            case "gost2012512":
            case "gost5122012":
            case "gost34112012512":
                return(new GOST3411_2012_512());

                #endregion

                #region Haval Hash Family
            case "haval3128":
                return(new Haval_3_128());

            case "haval4128":
                return(new Haval_4_128());

            case "haval5128":
                return(new Haval_5_128());

            case "haval3160":
                return(new Haval_3_160());

            case "haval4160":
                return(new Haval_4_160());

            case "haval5160":
                return(new Haval_5_160());

            case "haval3192":
                return(new Haval_3_192());

            case "haval4192":
                return(new Haval_4_192());

            case "haval5192":
                return(new Haval_5_192());

            case "haval3224":
                return(new Haval_3_224());

            case "haval4224":
                return(new Haval_4_224());

            case "haval5224":
                return(new Haval_5_224());

            case "haval3256":
                return(new Haval_3_256());

            case "haval4256":
                return(new Haval_4_256());

            case "haval5256":
                return(new Haval_5_256());

                #endregion

                #region RadioGatun Hash Family
            case "radiogatun":
            case "radiogatun32":
                return(new RadioGatun32());

            case "radiogatun64":
                return(new RadioGatun64());

                #endregion

                #region Grindahl Hash Family
            case "Grindahl":
            case "Grindahl256":
                return(new Grindahl256());

            case "grindahl512":
                return(new Grindahl512());

                #endregion

                #region RIPEMD Hash Family
            case "ripemd":
                return(new RIPEMD());

            case "ripemd128":
                return(new RIPEMD128());

            case "ripemd160":
                return(new RIPEMD160());

            case "ripemd256":
                return(new RIPEMD256());

            case "ripemd320":
                return(new RIPEMD320());

                #endregion

                #region Snefru Hash Family
            case "Snefru":
            case "Snefru8128":
                return(new Snefru(8, 128));

            case "Snefru8256":
                return(new Snefru(8, 256));

                #endregion

                #region MD Hash Family
            case "md2":
                return(new MD2());

            case "md4":
                return(new MD4());

            case "md5":
                return(new MD5());

                #endregion

                #region SHA Hash Family
            case "sha0":
                return(new SHA0());

            case "sha1":
                return(new SHA1());

            case "sha2224":
                return(new SHA2_224());

            case "sha2256":
                return(new SHA2_256());

            case "sha2384":
                return(new SHA2_384());

            case "sha2512":
                return(new SHA2_512());

            case "sha2512224":
                return(new SHA2_512_224());

            case "sha2512256":
                return(new SHA2_512_256());

            case "sha3224":
                return(new SHA3_224());

            case "sha3256":
                return(new SHA3_256());

            case "sha3384":
                return(new SHA3_384());

            case "sha3512":
                return(new SHA3_512());

            case "keccak224":
                return(new Keccak_224());

            case "keccak256":
                return(new Keccak_256());

            case "keccak288":
                return(new Keccak_288());

            case "keccak384":
                return(new Keccak_384());

            case "keccak512":
                return(new Keccak_512());

                #endregion

                #region Blake Hash Family
            case "blake2b":
                return(new Blake2B(new Blake2BConfig(), null));

            case "blake2b160":
                return(new Blake2B(new Blake2BConfig(HashSizeEnum.HashSize160), null));

            case "blake2b256":
                return(new Blake2B(new Blake2BConfig(HashSizeEnum.HashSize256), null));

            case "blake2b384":
                return(new Blake2B(new Blake2BConfig(HashSizeEnum.HashSize384), null));

            case "blake2b512":
                return(new Blake2B(new Blake2BConfig(HashSizeEnum.HashSize512), null));

            case "blake2s":
                return(new Blake2S(new Blake2SConfig(), null));

            case "blake2s128":
                return(new Blake2S(new Blake2SConfig(HashSizeEnum.HashSize128), null));

            case "blake2s160":
                return(new Blake2S(new Blake2SConfig(HashSizeEnum.HashSize160), null));

            case "blake2s224":
                return(new Blake2S(new Blake2SConfig(HashSizeEnum.HashSize224), null));

            case "blake2s256":
                return(new Blake2S(new Blake2SConfig(HashSizeEnum.HashSize256), null));

            case "blake3":
                return(Blake3.CreateBlake3(HashSizeEnum.HashSize256, null));

            case "blake3256":
                return(Blake3.CreateBlake3(HashSizeEnum.HashSize256, null));

                #endregion

                #region Tiger Hash Family
            case "tiger3128":
                return(Tiger_128.CreateRound3());

            case "tiger3160":
                return(Tiger_160.CreateRound3());

            case "tiger3192":
                return(Tiger_192.CreateRound3());

            case "tiger4128":
                return(Tiger_128.CreateRound4());

            case "tiger4160":
                return(Tiger_160.CreateRound4());

            case "tiger4192":
                return(Tiger_192.CreateRound4());

            case "tiger5128":
                return(Tiger_128.CreateRound5());

            case "tiger5160":
                return(Tiger_160.CreateRound5());

            case "tiger5192":
                return(Tiger_192.CreateRound5());

                #endregion

                #region Tiger2 Hash Family
            case "tiger23128":
                return(Tiger2_128.CreateRound3());

            case "tiger23160":
                return(Tiger2_160.CreateRound3());

            case "tiger23192":
                return(Tiger2_192.CreateRound3());

            case "tiger24128":
                return(Tiger2_128.CreateRound4());

            case "tiger24160":
                return(Tiger2_160.CreateRound4());

            case "tiger24192":
                return(Tiger2_192.CreateRound4());

            case "tiger25128":
                return(Tiger2_128.CreateRound5());

            case "tiger25160":
                return(Tiger2_160.CreateRound5());

            case "tiger25192":
                return(Tiger2_192.CreateRound5());

                #endregion

                #endregion

                #region Hash32
            case "ap":
                return(new AP());

            case "bernstein":
                return(new Bernstein());

            case "bernstein1":
                return(new Bernstein1());

            case "bkdr":
                return(new BKDR());

            case "dek":
                return(new DEK());

            case "djb":
                return(new DJB());

            case "elf":
                return(new ELF());

            case "fnv":
                return(new FNV());

            case "fnv1a":
                return(new FNV1a());

            case "jenkins3":
                return(new Jenkins3());

            case "js":
                return(new JS());

            case "murmur2":
                return(new Murmur2());

            case "murmurhash332":
            case "murmurhash332x86":
            case "murmurhash3x8632":
                return(new MurmurHash3_x86_32());

            case "oneattime":
                return(new OneAtTime());

            case "pjw":
                return(new PJW());

            case "rotating":
                return(new Rotating());

            case "rs":
                return(new RS());

            case "sdbm":
                return(new SDBM());

            case "shiftandxor":
                return(new ShiftAndXor());

            case "superfast":
                return(new SuperFast());

            case "xxhash32":
                return(new XXHash32());

                #endregion

                #region Hash64
            case "fnv64":
                return(new FNV64());

            case "fnv1a64":
                return(new FNV1a64());

            case "murmur264":
                return(new Murmur2_64());

            case "siphash24":
                return(new SipHash2_4());

            case "xxhash64":
                return(new XXHash64());

                #endregion

                #region Hash128
            case "murmurhash3128":
            case "murmurhash3128x86":
            case "murmurhash3x86128":
                return(new MurmurHash3_x86_128());

            case "murmurhash3128x64":
            case "murmurhash3x64128":
                return(new MurmurHash3_x64_128());

                #endregion
            }

            throw new NotImplementedHashLibException($"Hash string: \"{hash_string}\" is unknown or not in correct format.");
        }
コード例 #8
0
ファイル: xs8.cs プロジェクト: Xxshark888xX/xs8Cipher
 public xs8()
 {
     blake3 = new Blake3();
     rng    = new RNGCryptoServiceProvider();
 }