hi michael,
same error file corrupted
please help
STEP1: creating the hash of the pdf file in the server
protected void Button1_Click(object sender, EventArgs e)
{
string _gstrFilePath =
Server.MapPath("~/NewFolder1/TRANSFER_[PROVISIONAL]_29_05_2014.pdf");
SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data1 = File.ReadAllBytes(_gstrFilePath);
byte[] hash1 = sha1.ComputeHash(data1);
hdnSignatureHash.Text = Convert.ToBase64String(hash1);
}
STEP2: getting the certificate and signed hash in the client side
javascript:
function fnGetCertificate() {
var obj = new ActiveXObject('PDFSIGNATURE.PDFSIG');
var cer = obj.PdfSignature("1A87CCE901002C24");
document.getElementById("FeaturedContent_hdnCertificate").value
= cer;
}
function fnGetSignature() {
var obj = new ActiveXObject('PDFSIGNATURE.PDFSIG');
var signedhash = obj.PdfSignedHash("1A87CCE901002C24",
document.getElementById("FeaturedContent_hdnSignatureHash").value);
document.getElementById("FeaturedContent_hdnSignature").value =
signedhash;
}
.net dll in the client side
public string PdfSignature(string SerialNumber)
{
bool Success = false;
byte[] extCert = null;
String strReturn = string.Empty;
try
{
System.Security.Cryptography.X509Certificates.X509Store
store = new System.Security.Cryptography.X509Certificates.X509Store("MY",
System.Security.Cryptography.X509Certificates.StoreLocation.CurrentUser);
store.Open(System.Security.Cryptography.X509Certificates.OpenFlags.ReadOnly
| System.Security.Cryptography.X509Certificates.OpenFlags.OpenExistingOnly);
//System.Security.Cryptography.X509Certificates.X509Certificate2Collection
sel =
System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollection(store.Certificates,
null, null,
System.Security.Cryptography.X509Certificates.X509SelectionFlag.SingleSelection);
System.Security.Cryptography.X509Certificates.X509Certificate2 cert =
store.Certificates.Find(System.Security.Cryptography.X509Certificates.X509FindType.FindBySerialNumber,
SerialNumber, false)[0];
//System.Security.Cryptography.X509Certificates.X509Certificate2 cert =
store.Certificates[0];
Org.BouncyCastle.X509.X509CertificateParser cp = new
Org.BouncyCastle.X509.X509CertificateParser();
Org.BouncyCastle.X509.X509Certificate[] chain = new
Org.BouncyCastle.X509.X509Certificate[] {
cp.ReadCertificate(cert.RawData)};
return
Convert.ToBase64String(cert.Export(System.Security.Cryptography.X509Certificates.X509ContentType.Cert,
"PASSWORD"));
}
catch (Exception ex)
{
strReturn = ex.Message;
return strReturn;
}
}
[ComVisible(true)]
public string PdfSignedHash(string SerialNumber,string hash)
{
bool Success = false;
byte[] signedhash = null;
String strReturn = string.Empty;
try
{
System.Security.Cryptography.X509Certificates.X509Store
store = new System.Security.Cryptography.X509Certificates.X509Store("MY",
System.Security.Cryptography.X509Certificates.StoreLocation.CurrentUser);
store.Open(System.Security.Cryptography.X509Certificates.OpenFlags.ReadOnly
| System.Security.Cryptography.X509Certificates.OpenFlags.OpenExistingOnly);
//System.Security.Cryptography.X509Certificates.X509Certificate2Collection
sel =
System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollection(store.Certificates,
null, null,
System.Security.Cryptography.X509Certificates.X509SelectionFlag.SingleSelection);
System.Security.Cryptography.X509Certificates.X509Certificate2 ocert =
store.Certificates.Find(System.Security.Cryptography.X509Certificates.X509FindType.FindBySerialNumber,
SerialNumber, false)[0];
System.Security.Cryptography.RSACryptoServiceProvider
privateKey =
(System.Security.Cryptography.RSACryptoServiceProvider)ocert.PrivateKey;
signedhash =
privateKey.SignHash(Convert.FromBase64String(hash), "SHA1");
return Convert.ToBase64String(signedhash);
}
catch (Exception ex)
{
strReturn = ex.Message;
return strReturn;
}
}
STEP 3: sign pdf by itextsharp in the server
protected void Button2_Click(object sender, EventArgs e)
{
string _gstrFilePath =
Server.MapPath("~/NewFolder1/TRANSFER_[PROVISIONAL]_29_05_2014.pdf");
System.Security.Cryptography.X509Certificates.X509Certificate2
oCert = new
System.Security.Cryptography.X509Certificates.X509Certificate2(Convert.FromBase64String(hdnCertificate.Text),
"PASSWORD");
Org.BouncyCastle.X509.X509CertificateParser cp = new
Org.BouncyCastle.X509.X509CertificateParser();
Org.BouncyCastle.X509.X509Certificate[] chain = new
Org.BouncyCastle.X509.X509Certificate[] {
cp.ReadCertificate(oCert.RawData)};
/*start verification*/
RSACryptoServiceProvider csp =
(RSACryptoServiceProvider)oCert.PublicKey.Key;
// Hash the data
SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data1 = File.ReadAllBytes(_gstrFilePath);
byte[] hash1 = sha1.ComputeHash(data1);
bool bln = csp.VerifyHash(hash1,
CryptoConfig.MapNameToOID("SHA1"),
Convert.FromBase64String(hdnSignature.Text));
/*end verification*/
ServerSignature externalSignature = new ServerSignature();
externalSignature.DigSign =
Convert.FromBase64String(hdnSignature.Text);
// reader and stamper
byte[] OwnerPassword =
System.Text.Encoding.ASCII.GetBytes("secret");
PdfReader reader = new PdfReader(_gstrFilePath, OwnerPassword);
bool isencrypted = reader.IsEncrypted();
bool hasuserPassword = false;
string OutputFilename =
Server.MapPath("~/NewFolder1/TRANSFER_[PROVISIONAL]_29_05_20141.pdf");
using (FileStream fout = new FileStream(OutputFilename,
FileMode.Create, FileAccess.ReadWrite))
{
using (PdfStamper stamper =
PdfStamper.CreateSignature(reader, fout, '\0'))
{
if (isencrypted)
stamper.SetEncryption(PdfWriter.STRENGTH128BITS,
null, "secret", PdfWriter.ALLOW_SCREENREADERS);
if (hasuserPassword)
stamper.SetEncryption(PdfWriter.STRENGTH128BITS,
null, "secret", PdfWriter.ALLOW_SCREENREADERS);
// appearance
PdfSignatureAppearance appearance =
stamper.SignatureAppearance;
//appearance.Image = new iTextSharp.text.pdf.PdfImage();
appearance.Reason = "Reason";
appearance.Location = "Location";
appearance.SetVisibleSignature(new
iTextSharp.text.Rectangle(36, 748, 244, 880), 2, "Secure-PDF");
//DateTime signatureDatetime = DateTime.Now;
//appearance.SignDate = signatureDatetime;
// digital signature
MakeSignature.SignDetached(appearance,
externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
stamper.Close();
stamper.Dispose();
}
}
reader.Close();
reader.Dispose();
}
serversignature class:
class ServerSignature : iTextSharp.text.pdf.security.IExternalSignature
{
public byte[] DigSign { get; set; }
string
iTextSharp.text.pdf.security.IExternalSignature.GetEncryptionAlgorithm()
{
return "RSA";
}
string
iTextSharp.text.pdf.security.IExternalSignature.GetHashAlgorithm()
{
return iTextSharp.text.pdf.security.DigestAlgorithms.SHA1;
}
byte[] iTextSharp.text.pdf.security.IExternalSignature.Sign(byte[]
message)
{
return DigSign;
}
}
}
signed pdf file
TRANSFER_[PROVISIONAL]_29_05_20141.pdf
<http://itext-general.2136553.n4.nabble.com/file/n4660339/TRANSFER_%5BPROVISIONAL%5D_29_05_20141.pdf>
--
View this message in context:
http://itext-general.2136553.n4.nabble.com/Sign-and-PDF-with-SmartCard-and-web-browser-only-tp4319344p4660339.html
Sent from the iText - General mailing list archive at Nabble.com.
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions
iText(R) is a registered trademark of 1T3XT BVBA.
Many questions posted to this list can (and will) be answered with a reference
to the iText book: http://www.itextpdf.com/book/
Please check the keywords list before you ask for examples:
http://itextpdf.com/themes/keywords.php