コード例 #1
0
        public KdfHmac(IHmacFactory hmacFactory, IShaFactory shaFactory, KdaOneStepAuxFunction auxFunction, bool useCounter)
        {
            UseCounter = useCounter;

            HashFunction hashFunction = null;

            switch (auxFunction)
            {
            case KdaOneStepAuxFunction.HMAC_SHA1:
                hashFunction = new HashFunction(ModeValues.SHA1, DigestSizes.d160);
                break;

            case KdaOneStepAuxFunction.HMAC_SHA2_D224:
                hashFunction = new HashFunction(ModeValues.SHA2, DigestSizes.d224);
                break;

            case KdaOneStepAuxFunction.HMAC_SHA2_D256:
                hashFunction = new HashFunction(ModeValues.SHA2, DigestSizes.d256);
                break;

            case KdaOneStepAuxFunction.HMAC_SHA2_D384:
                hashFunction = new HashFunction(ModeValues.SHA2, DigestSizes.d384);
                break;

            case KdaOneStepAuxFunction.HMAC_SHA2_D512:
                hashFunction = new HashFunction(ModeValues.SHA2, DigestSizes.d512);
                break;

            case KdaOneStepAuxFunction.HMAC_SHA2_D512_T224:
                hashFunction = new HashFunction(ModeValues.SHA2, DigestSizes.d512t224);
                break;

            case KdaOneStepAuxFunction.HMAC_SHA2_D512_T256:
                hashFunction = new HashFunction(ModeValues.SHA2, DigestSizes.d512t256);
                break;

            case KdaOneStepAuxFunction.HMAC_SHA3_D224:
                hashFunction = new HashFunction(ModeValues.SHA3, DigestSizes.d224);
                break;

            case KdaOneStepAuxFunction.HMAC_SHA3_D256:
                hashFunction = new HashFunction(ModeValues.SHA3, DigestSizes.d256);
                break;

            case KdaOneStepAuxFunction.HMAC_SHA3_D384:
                hashFunction = new HashFunction(ModeValues.SHA3, DigestSizes.d384);
                break;

            case KdaOneStepAuxFunction.HMAC_SHA3_D512:
                hashFunction = new HashFunction(ModeValues.SHA3, DigestSizes.d512);
                break;

            default:
                throw new ArgumentException(nameof(auxFunction));
            }

            _hmac = hmacFactory.GetHmacInstance(hashFunction);
            _sha  = shaFactory.GetShaInstance(hashFunction);
        }
コード例 #2
0
 public NoKeyConfirmationHmac(
     INoKeyConfirmationMacDataCreator macDataCreator,
     INoKeyConfirmationParameters noKeyConfirmationParameters,
     IHmac algo)
     : base(macDataCreator, noKeyConfirmationParameters)
 {
     Algo = algo;
 }
コード例 #3
0
 public KeyConfirmationHmac(
     IKeyConfirmationMacDataCreator macDataCreator,
     IKeyConfirmationParameters keyConfirmationParameters,
     IHmac iHmac)
     : base(macDataCreator, keyConfirmationParameters)
 {
     _iHmac = iHmac;
     _keyConfirmationParameters = keyConfirmationParameters;
 }
コード例 #4
0
        public IEccNonceProvider GetNonceProvider(NonceProviderTypes nonceTypes, IHmac hmac, IEntropyProvider entropyProvider)
        {
            switch (nonceTypes)
            {
            case NonceProviderTypes.Deterministic:
                return(new DeterministicNonceProvider(hmac));

            case NonceProviderTypes.Random:
                return(new RandomNonceProvider(entropyProvider));
            }

            throw new ArgumentException("Invalid nonce type provided");
        }
コード例 #5
0
        /// <summary>
        /// Compute a Hmac hash for all the properties tagged with
        /// `HmacAttribute`
        /// </summary>
        /// <remarks>Uses reflection and a naive cache to figure out what
        /// properties to include in the hash.</remarks>
        /// <param name="obj"></param>
        /// <param name="secret">uses type name by default</param>
        /// <returns></returns>
        public static string ComputeHash(this IHmac obj, string secret = null)
        {
            var type = obj.GetType();
            var keys = HmacProperties
                       .Ensure(type, FindHmacProperties)
                       .Select(m => m.Invoke(obj, null));
            var hash = ComputeHash(secret ?? type.FullName, keys.ToArray());

            if (obj.Hash == null)
            {
                obj.Hash = hash;
            }
            return(hash);
        }
コード例 #6
0
        /// <summary>
        /// Recompute the hash and check it
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="secret">uses type name by default</param>
        /// <returns></returns>
        public static bool ValidateHash(this IHmac obj, string secret = null)
        {
            if (obj == null)
            {
                throw new ArgumentNullException("obj");
            }
            if (string.IsNullOrEmpty(obj.Hash))
            {
                throw new ArgumentOutOfRangeException("obj.Hash",
                                                      "the object mush have a hash already");
            }

            return(obj.Hash == ComputeHash(obj, secret));
        }
コード例 #7
0
ファイル: HmacTests.cs プロジェクト: usnistgov/ACVP-Server
        public void ShouldHmacCorrectly(string label, ModeValues mode, DigestSizes digestSize, int keyByteSize, int additionToIndexInKey, BitString expectedHmac, int macLength)
        {
            var hashFunction = new HashFunction(mode, digestSize);
            var factory      = new HmacFactory(new NativeShaFactory());

            _subject = factory.GetHmacInstance(hashFunction);

            var key     = GenKey(keyByteSize, additionToIndexInKey);
            var message = GetBitStringFromString(label);

            var result = _subject.Generate(key, message, macLength);

            Assert.AreEqual(expectedHmac.ToHex(), result.Mac.ToHex());
        }
コード例 #8
0
        private BitString HmacPrf(IHmac hmac, BitString secret, BitString seed, int outputLength)
        {
            var hmacLen   = hmac.OutputLength;
            var numBlocks = outputLength.CeilingDivide(hmacLen);

            var A      = seed.GetDeepCopy();
            var output = new BitString(0);

            for (var i = 0; i < numBlocks; i++)
            {
                A      = hmac.Generate(secret, A).Mac;
                output = output.ConcatenateBits(hmac.Generate(secret, A.ConcatenateBits(seed)).Mac);
            }

            return(output);
        }
コード例 #9
0
ファイル: HmacTests.cs プロジェクト: usnistgov/ACVP-Server
        public void IsoIec9797Tests(ModeValues mode, DigestSizes digestSize, int macLength, string ascii, int count, string keyHex, string expectedHex)
        {
            var sha = _shaFactory.GetShaInstance(new HashFunction(mode, digestSize));

            _subject = new NativeHmac(sha);
            var       key = new BitString(keyHex);
            BitString message;

            if (count == 0)
            {
                message = new BitString(Encoding.ASCII.GetBytes(ascii));
            }
            else
            {
                message = new BitString(Encoding.ASCII.GetBytes(ascii), count * 8);
            }

            var result = _subject.Generate(key, message, macLength);

            var expected = new BitString(expectedHex, macLength);

            Assert.AreEqual(expected.ToHex(), result.Mac.ToHex());
        }
コード例 #10
0
 public PskIkeV1(IHmac hmac) : base(hmac)
 {
 }
コード例 #11
0
 public TlsKdfv12(IHmac hmac)
 {
     _hmac = hmac;
 }
コード例 #12
0
ファイル: DsaIkeV1.cs プロジェクト: usnistgov/ACVP-Server
 public DsaIkeV1(IHmac hmac) : base(hmac)
 {
 }
コード例 #13
0
 public TlsKdfv12_ExtendedMasterSecret(IHmac hmac) : base(hmac)
 {
 }
コード例 #14
0
 public DrbgHmac(IEntropyProvider entropyProvider, IHmac hmac, DrbgParameters drbgParameters) : base(entropyProvider, drbgParameters)
 {
     _hmac          = hmac;
     HashAttributes = DrbgAttributesHelper.GetHashDrbgAttributes(drbgParameters.Mode);
 }
コード例 #15
0
 protected IkeV1Base(IHmac hmac)
 {
     Hmac = hmac;
 }
コード例 #16
0
ファイル: Tpm.cs プロジェクト: usnistgov/ACVP-Server
 public Tpm(IHmac hmac)
 {
     _hmac = hmac;
 }
コード例 #17
0
 public TlsKdfv10v11(IHmac shaHmac, IHmac md5Hmac)
 {
     _shaHmac = shaHmac;
     _md5Hmac = md5Hmac;
 }
コード例 #18
0
ファイル: PkeIkeV1.cs プロジェクト: usnistgov/ACVP-Server
 public PkeIkeV1(IHmac hmac, ISha sha)
     : base(hmac)
 {
     _sha = sha;
 }
コード例 #19
0
ファイル: IkeV2.cs プロジェクト: usnistgov/ACVP-Server
 public IkeV2(IHmac hmac)
 {
     _hmac = hmac;
 }
コード例 #20
0
ファイル: Hkdf.cs プロジェクト: usnistgov/ACVP-Server
 public Hkdf(IHmac hmac)
 {
     _hmac = hmac;
 }
コード例 #21
0
        private readonly BitString _01bits = new BitString("01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101");    // Maximum possible length (512 bits)

        public DeterministicNonceProvider(IHmac hmac)
        {
            _hmac = hmac;
        }
コード例 #22
0
 public PbKdf(IHmac hmac)
 {
     _hmac = hmac;
 }