public void VerifySignOneFileSha1() { PgpVerifyClearTextSignatureInput input = new PgpVerifyClearTextSignatureInput { InputFile = _signature, PublicKeyFile = _publicKeyPath, OutputFile = _output, }; PgpVerifyClearTextSignatureResult resultObject = PgpTasks.VerifyFileClearTextSignature(input); Assert.That(resultObject.Verified); }
/// <summary> /// Verifies clear text PGP signature. See documentation at https://github.com/CommunityHiQ/Frends.Community.PgpVerifyClearTextSignature Returns: Object {string FilePath, Boolean Verified} /// </summary> public static PgpVerifyClearTextSignatureResult VerifyFileClearTextSignature(PgpVerifyClearTextSignatureInput input) { using (var inStr = File.OpenRead(input.InputFile)) using (var outStr = File.Create(input.OutputFile)) using (var keyStr = PgpUtilities.GetDecoderStream(File.OpenRead(input.PublicKeyFile))) { var aInputStr = new ArmoredInputStream(inStr); // // write out signed section using the local line separator. // note: trailing white space needs to be removed from the end of // each line RFC 4880 Section 7.1 // var lineOut = new MemoryStream(); var lookAhead = PgpServices.VerifyClearTextSignatureReadInputLine(lineOut, aInputStr); var lineSep = Encoding.ASCII.GetBytes(Environment.NewLine); if (lookAhead != -1 && aInputStr.IsClearText()) { var line = lineOut.ToArray(); outStr.Write(line, 0, PgpServices.GetLengthWithoutSeparatorOrTrailingWhitespace(line)); outStr.Write(lineSep, 0, lineSep.Length); while (lookAhead != -1 && aInputStr.IsClearText()) { lookAhead = PgpServices.VerifyClearTextSignatureReadInputLine(lineOut, lookAhead, aInputStr); line = lineOut.ToArray(); outStr.Write(line, 0, PgpServices.GetLengthWithoutSeparatorOrTrailingWhitespace(line)); outStr.Write(lineSep, 0, lineSep.Length); } } else { // a single line file if (lookAhead != -1) { var line = lineOut.ToArray(); outStr.Write(line, 0, PgpServices.GetLengthWithoutSeparatorOrTrailingWhitespace(line)); outStr.Write(lineSep, 0, lineSep.Length); } } outStr.Close(); var pgpRings = new PgpPublicKeyRingBundle(keyStr); var pgpFact = new PgpObjectFactory(aInputStr); var p3 = (PgpSignatureList)pgpFact.NextPgpObject(); var sig = p3[0]; inStr.Close(); sig.InitVerify(pgpRings.GetPublicKey(sig.KeyId)); // read the input, making sure we ignore the last newline. bool verified; using (var sigIn = File.OpenRead(input.OutputFile)) { lookAhead = PgpServices.VerifyClearTextSignatureReadInputLine(lineOut, sigIn); PgpServices.ProcessLine(sig, lineOut.ToArray()); while (lookAhead != -1) { lookAhead = PgpServices.VerifyClearTextSignatureReadInputLine(lineOut, lookAhead, sigIn); sig.Update((byte)'\r'); sig.Update((byte)'\n'); PgpServices.ProcessLine(sig, lineOut.ToArray()); } verified = sig.Verify(); sigIn.Close(); } var ret = new PgpVerifyClearTextSignatureResult { FilePath = input.OutputFile, Verified = verified }; return(ret); } }