public SignerOutput Sign(QrData qrData) { var input = new ATrustSignerInput(Credentials.Password, qrData); var responseBody = HttpClient.PostJson( operation: "Sign/JWS", requestBody: JsonConvert.SerializeObject(input) ); var response = JsonConvert.DeserializeObject <ATrustSignerResponse>(responseBody); return(new SignerOutput(new JwsRepresentation(response.JwsRepresentation), input.QrData)); }
public SignerOutput Sign(QrData qrData) { //// This is a manual JWS implementation as RKSV does not use standard signature format. Do not migrate to jose-jwt var jwsHeaderBase64Url = Base64UrlEncoder.Encode("{\"alg\":\"ES256\"}"); // Fixed value for RKSV var jwsPayloadBase64Url = Base64UrlEncoder.Encode(qrData.Value); var jwsDataToBeSigned = jwsHeaderBase64Url + "." + jwsPayloadBase64Url; var bytes = Certificate.GetECDsaPrivateKey().SignData(Encoding.UTF8.GetBytes(jwsDataToBeSigned), HashAlgorithmName.SHA256); var jwsSignatureBase64Url = Base64UrlEncoder.Encode(bytes); var jwsRepresentation = $"{jwsHeaderBase64Url}.{jwsPayloadBase64Url}.{jwsSignatureBase64Url}"; return(new SignerOutput(new JwsRepresentation(jwsRepresentation), qrData)); }
static void Main(string[] args) { var normalData = new QrData { Header = new QrHeader(), CdtrInf = new QrCdtrInf { IBAN = "CH8300700114000048160", Cdtr = new QrCdtr { Name = "Pascal Lüscher", StrtNm = "Bernstrasse", BldgNb = "159", PstCd = "4852", TwnNm = "Rothrist", City = "CH" } }, CcyAmtDate = new QrCcyAmtDate { Amt = 123456789.12654655m, Ccy = QrCcyAmtDate.CurrencySelection.CHF, ReqdExctnDt = DateTime.Today.AddDays(30) }, RmtInf = new QrRmtInf { Tp = QrRmtInf.TpSelection.NON, Ref = "", Ustrd = "" } }; QrCodeGenerator.Generate(normalData, "E:\\temp\\outputNormal.png"); normalData.RmtInf.Tp = QrRmtInf.TpSelection.QRR; normalData.RmtInf.Ref = "210000000003139471430009017"; normalData.RmtInf.Ustrd = "uftrag vom15.09.2019##S5.09.2019##S1/01/20170309/11/10201409/20/14000000/22/36958/30/CH106017086/40/1020/41/3010"; QrCodeGenerator.Generate(normalData, "E:\\temp\\outputRef.png"); }
public ATrustSignerInput(string password, QrData qrData) : this(password, qrData.ToString()) { QrData = qrData; }
/// <summary> /// Draws a qr code with swisscross based on qr data to output path, format: png /// </summary> /// <param name="data">the iso 20022 data</param> /// <param name="outputPath">the location for the file</param> public static void Generate(QrData data, string outputPath) { var codeSizeInch = (codeSizeMm / 10) / cmInchFactor; var codeSizePixel = (int)(dpi * codeSizeInch); var encoder = new QrEncoder(ErrorCorrectionLevel.M); encoder.TryEncode(data.ToString(), out QrCode qrCode); #region fiddle for svg //var dark = new MyGColor(Color.Black); //var light = new MyGColor(Color.White); //SVGRenderer svgRenderer = new SVGRenderer( // new FixedModuleSize(50, QuietZoneModules.Zero), // dark, light); //var filePath = "E:\\temp\\output.svg"; //File.WriteAllText(filePath, svgRenderer.WriteToString(qrCode.Matrix, false)); //var svgDocument = SvgDocument.Open(filePath); //var bmp = svgDocument.Draw((int)(dpi * codeSizeInch), (int)(dpi * codeSizeInch)); //bmp.SetResolution(dpi, dpi); //bmp.Save("E:\\temp\\output_fromSVG.png", ImageFormat.Png); //var bytes = Encoding.UTF8.GetBytes(svgRenderer.WriteToString(qrCode.Matrix)); //using (var stream = new MemoryStream(bytes)) //{ // var svgDocument = SvgDocument.Open<SvgDocument>(stream); // var codeSizeInch = codeSizeMm / cmInchFactor; // var bmp = svgDocument.Draw();// (int)(dpi * codeSizeInch), (int)(dpi * codeSizeInch)); // bmp.SetResolution(dpi, dpi); // bmp.Save("E:\\temp\\output_fromSVG.png", ImageFormat.Png); //} //var bmp = svgDoc.Draw((int)(dpi * codeSizeInch), (int)(dpi * codeSizeInch)); //var width = bmp.Width; //bmp.Save("E:\\temp\\output_FromSvg.png", ImageFormat.Png); #endregion GraphicsRenderer gRenderer = new GraphicsRenderer( new FixedModuleSize(100, QuietZoneModules.Zero), Brushes.Black, Brushes.White); MemoryStream ms = new MemoryStream(); gRenderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, ms); var bmpCode = new Bitmap(ms); Bitmap finalImage = new Bitmap(codeSizePixel, codeSizePixel); finalImage.SetResolution(dpi, dpi); using (var g = Graphics.FromImage(finalImage)) { g.DrawImage(bmpCode, new Rectangle(0, 0, codeSizePixel, codeSizePixel)); var crossLocationCM = ((codeSizeMm - crossSizeMm) / 10) / 2; var crossLocationInch = crossLocationCM / cmInchFactor; var crossLocationPx = (int)(crossLocationInch * dpi); var crossWidthInch = (crossSizeMm / 10) / cmInchFactor; var crossWidthPixel = (int)(crossWidthInch * dpi); g.DrawImage(Properties.Resources.CH_Kreuz_7mm, new Rectangle( new Point(crossLocationPx, crossLocationPx), new Size(crossWidthPixel, crossWidthPixel) )); } finalImage.Save(outputPath, ImageFormat.Png); }