public ISignatureFactory <A> CreateSignatureFactory <A>(A algorithmDetails) where A : IParameters <Algorithm>
            {
                General.Utils.ApprovedModeCheck("service", algorithmDetails.Algorithm);
                General.Sphincs.SignatureParameters sigParams = algorithmDetails as General.Sphincs.SignatureParameters;

                AsymmetricSphincsKey key = (AsymmetricSphincsKey)privateKey;

                return((ISignatureFactory <A>) new SignatureFactory <General.Sphincs.SignatureParameters>(new General.Sphincs.SignatureParameters(sigParams, key.TreeDigestAlgorithm), new General.Sphincs.SignerProvider(sigParams, key)));
            }
Esempio n. 2
0
            public IVerifierFactory <A> CreateVerifierFactory <A>(A algorithmDetails) where A : IParameters <Algorithm>
            {
                General.Utils.ApprovedModeCheck("service", algorithmDetails.Algorithm);
                General.Sphincs.SignatureParameters algDets = algorithmDetails as General.Sphincs.SignatureParameters;

                if (algDets.DigestAlgorithm == FipsShs.Sha512 && publicKey.TreeDigestAlgorithm != FipsShs.Sha512_256)
                {
                    throw new ArgumentException("public key not generated with compatible tree hash");
                }
                if (algDets.DigestAlgorithm == FipsShs.Sha3_512 && publicKey.TreeDigestAlgorithm != FipsShs.Sha3_256)
                {
                    throw new ArgumentException("public key not generated with compatible tree hash");
                }
                return((IVerifierFactory <A>) new VerifierFactory <General.Sphincs.SignatureParameters>(algDets, new General.Sphincs.SignerProvider(algDets, publicKey)));
            }