예제 #1
0
        public Tests()
        {
            _now = DateTimeOffset.Now;

            _setKeyId = signature => signature.KeyId = new KeyId("test");
            _options  = new VerifyOptions {
                Message = HttpMessageGenerator
                          .GenerateMessage("rsa-signed-request", _now)
                          .ToServerSideHttpRequest().GetAwaiter().GetResult(),
                PublicKey             = "rsa.pub",
                Headers               = "host,digest",
                KeyType               = "rsa",
                ModifyParsedSignature = (request, signature) => {
                    _setKeyId(signature);
                    return(Task.CompletedTask);
                }
            };
        }
예제 #2
0
        public static async Task <bool> Run(VerifyOptions options)
        {
            ISignatureAlgorithm signatureAlgorithm;

            if (string.IsNullOrEmpty(options.KeyType) || options.KeyType.Equals("RSA", StringComparison.OrdinalIgnoreCase))
            {
                signatureAlgorithm = RSASignatureAlgorithm.CreateForVerification(HashAlgorithmName.SHA512, KeyReader.ReadRSA(options.PublicKey));
            }
            else if (options.KeyType.Equals("P256", StringComparison.OrdinalIgnoreCase) || options.KeyType.Equals("ECDSA", StringComparison.OrdinalIgnoreCase))
            {
                signatureAlgorithm = ECDsaSignatureAlgorithm.CreateForVerification(HashAlgorithmName.SHA512, KeyReader.ReadECDsaPublic(options.PublicKey));
            }
            else if (options.KeyType.Equals("HMAC", StringComparison.OrdinalIgnoreCase))
            {
                signatureAlgorithm = SignatureAlgorithm.CreateForVerification(options.PublicKey, HashAlgorithmName.SHA512);
            }
            else
            {
                throw new NotSupportedException("The specified key type is not supported.");
            }

            var serviceProvider = new ServiceCollection()
                                  .AddHttpMessageSignatureVerification(provider => {
                var clientStore = new InMemoryClientStore();
                clientStore.Register(new Client(
                                         new KeyId("test"),
                                         "ConformanceClient",
                                         signatureAlgorithm,
                                         TimeSpan.FromSeconds(30),
                                         TimeSpan.FromMinutes(1)));
                return(clientStore);
            })
                                  .BuildServiceProvider();

            var verifier = serviceProvider.GetRequiredService <IRequestSignatureVerifier>();

            var verificationResult = await verifier.VerifySignature(options.Message, new SignedRequestAuthenticationOptions {
                OnSignatureParsed = options.ModifyParsedSignature
            });

            return(verificationResult is RequestSignatureVerificationResultSuccess);
        }