Exemplo n.º 1
0
        /// Always correct
        public IPaddingScheme GetPaddingScheme(SignatureSchemes sigMode, ISha sha, PssMaskTypes maskType = PssMaskTypes.None, IEntropyProvider entropyProvider = null, int saltLength = 0)
        {
            switch (sigMode)
            {
            case SignatureSchemes.Ansx931:
                return(new AnsxPadder(sha));

            case SignatureSchemes.Pkcs1v15:
                return(new PkcsPadder(sha));

            case SignatureSchemes.Pss:
                var mask = _maskFactory.GetMaskInstance(maskType, sha.HashFunction);
                return(new PssPadder(sha, mask, entropyProvider, saltLength));

            default:
                throw new ArgumentException("Invalid signature scheme");
            }
        }
Exemplo n.º 2
0
        public IMaskFunction GetMaskInstance(PssMaskTypes maskType, HashFunction hashFunction = null)
        {
            switch (maskType)
            {
            case PssMaskTypes.MGF1:
                var shaMgf = _shaFactory.GetShaInstance(hashFunction);
                return(new Mgf1Mask(shaMgf));

            case PssMaskTypes.SHAKE128:
                var shake128 = _shaFactory.GetShaInstance(new HashFunction(ModeValues.SHAKE, DigestSizes.d128));
                return(new ShakeMask(shake128));

            case PssMaskTypes.SHAKE256:
                var shake256 = _shaFactory.GetShaInstance(new HashFunction(ModeValues.SHAKE, DigestSizes.d256));
                return(new ShakeMask(shake256));

            default:
                throw new ArgumentException($"Invalid {nameof(maskType)} provided");
            }
        }
Exemplo n.º 3
0
        /// Could introduce errors
        public IPaddingScheme GetSigningPaddingScheme(SignatureSchemes sigMode, ISha sha, SignatureModifications errors, PssMaskTypes maskType = PssMaskTypes.None, IEntropyProvider entropyProvider = null, int saltLength = 0)
        {
            if (sigMode == SignatureSchemes.Ansx931)
            {
                switch (errors)
                {
                case SignatureModifications.None:
                    return(new AnsxPadder(sha));

                case SignatureModifications.E:
                    return(new AnsxPadderWithModifiedPublicExponent(sha));

                case SignatureModifications.Message:
                    return(new AnsxPadderWithModifiedMessage(sha));

                case SignatureModifications.ModifyTrailer:
                    return(new AnsxPadderWithModifiedTrailer(sha));

                case SignatureModifications.MoveIr:
                    return(new AnsxPadderWithMovedIr(sha));

                case SignatureModifications.Signature:
                    return(new AnsxPadderWithModifiedSignature(sha));

                default:
                    throw new ArgumentException("Signature modification does not exist for selected scheme");
                }
            }
            else if (sigMode == SignatureSchemes.Pkcs1v15)
            {
                switch (errors)
                {
                case SignatureModifications.None:
                    return(new PkcsPadder(sha));

                case SignatureModifications.E:
                    return(new PkcsPadderWithModifiedPublicExponent(sha));

                case SignatureModifications.Message:
                    return(new PkcsPadderWithModifiedMessage(sha));

                case SignatureModifications.ModifyTrailer:
                    return(new PkcsPadderWithModifiedTrailer(sha));

                case SignatureModifications.MoveIr:
                    return(new PkcsPadderWithMovedIr(sha));

                case SignatureModifications.Signature:
                    return(new PkcsPadderWithModifiedSignature(sha));

                default:
                    throw new ArgumentException("Signature modification does not exist for selected scheme");
                }
            }
            else if (sigMode == SignatureSchemes.Pss)
            {
                var mask = _maskFactory.GetMaskInstance(maskType, sha.HashFunction);

                switch (errors)
                {
                case SignatureModifications.None:
                    return(new PssPadder(sha, mask, entropyProvider, saltLength));

                case SignatureModifications.E:
                    return(new PssPadderWithModifiedPublicExponent(sha, mask, entropyProvider, saltLength));

                case SignatureModifications.Message:
                    return(new PssPadderWithModifiedMessage(sha, mask, entropyProvider, saltLength));

                case SignatureModifications.ModifyTrailer:
                    return(new PssPadderWithModifiedTrailer(sha, mask, entropyProvider, saltLength));

                case SignatureModifications.MoveIr:
                    return(new PssPadderWithMovedIr(sha, mask, entropyProvider, saltLength));

                case SignatureModifications.Signature:
                    return(new PssPadderWithModifiedSignature(sha, mask, entropyProvider, saltLength));

                default:
                    throw new ArgumentException("Signature modification does not exist for selected scheme");
                }
            }

            throw new ArgumentException("Invalid signature scheme");
        }