private void AddManifest() { Log.Debug("Creating manifest"); var manifest = CreateManifest(); if (manifest.ManifestSpec == ManifestSpec.Cades && manifest.SignatureFileRef != null) { var signatureFile = SignatureCreator.Create(SignatureCertificate).CreateCadesSignatureFile(manifest); manifest.SignatureFileRef = signatureFile.SignatureFileRef; using (var signatureStream = new MemoryStream(signatureFile.Data.ToArray())) { var entry = Archive.CreateEntry(signatureFile.SignatureFileRef.FileName); using (var zipEntryStream = entry.Open()) { signatureStream.CopyTo(zipEntryStream); } } } using (var manifestStream = new MemoryStream(manifest.Data.ToArray())) { CreateEntry(manifestStream, new AsicePackageEntry(manifest.FileName, MimeType.ForString(AsiceConstants.ContentTypeXml), MessageDigestAlgorithm)); } Log.Debug("Manifest added to archive"); }
public async Task CreatedSignature_FromRequestWithHeaders_CanBeValidated() { var sut = new SignatureCreator(); IEnumerable <KeyValuePair <string, IEnumerable <string> > > headers = new List <KeyValuePair <string, IEnumerable <string> > > { new KeyValuePair <string, IEnumerable <string> >("X-Custom-Header", new List <string> { "blah123blah" }), new KeyValuePair <string, IEnumerable <string> >("X-Custom-Header-Two", new List <string> { "456qwerty" }) }; var signature = sut.Create(HttpMethod.Post, headers, _applicationUri, DateTime.UtcNow.ToTimeStamp(), new Nonce(), _requestPayload, _scope, _apiKey); var validator = new SignatureValidator(); var request = new HttpRequestMessage(HttpMethod.Post, _applicationUri) { Content = new StringContent(_requestPayload) }; foreach (var header in headers) { request.Headers.Add(header.Key, header.Value); } request.Headers.Add("Authorization", signature); (await validator.Validate(request, _scope, _apiKey)).ShouldBe(true); }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "requestinfocreator")] HttpRequest req, ILogger log, ExecutionContext context) { IConfigurationRoot config = new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .Build(); string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); dynamic data = JsonConvert.DeserializeObject(requestBody); try { string content = data.content; string secretkey = data.secretkey; string endpoint = data.endpoint; byte[] contentData = Encoding.UTF8.GetBytes(content); string now = DateTime.Now.ToString("O"); string contentMd5 = MessageCreator.CalculateMD5Hash(content); string message = MessageCreator.GenerateMessage(contentMd5, now, content, endpoint); string signature = SignatureCreator.GenerateSignature(secretkey, message); int contentLength = contentData.Length; var returnVal = new { contentMd5, signature, now, contentLength }; return((ActionResult) new OkObjectResult(JsonConvert.SerializeObject(returnVal))); } catch (Exception e) { return(new BadRequestObjectResult("Error in PostiviidakkoRequestInfoCreator: " + e.ToString())); } }
public async Task CreatedSignature_FromRequestWithNoContent_CanBeValidated() { var sut = new SignatureCreator(); IEnumerable <KeyValuePair <string, IEnumerable <string> > > headers = new List <KeyValuePair <string, IEnumerable <string> > >(); var signature = sut.CreateWithoutContent(HttpMethod.Get, headers, _applicationUri, DateTime.UtcNow.ToTimeStamp(), new Nonce(), _scope, _apiKey); var validator = new SignatureValidator(); var request = new HttpRequestMessage(HttpMethod.Get, _applicationUri) { Content = new StringContent(string.Empty) }; request.Headers.Add("Authorization", signature); (await validator.Validate(request, _scope, _apiKey)).ShouldBe(true); }