-
Notifications
You must be signed in to change notification settings - Fork 10.3k
Digital signatures in pdf.js #1076
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
There are currently no imminent plans to implement this feature. We haven't seen it come up much so it hasn't been a priority. We're always looking for more contributors though, so we'd welcome any patches to add this feature. If you're interested in adding it feel free to stop by our IRC channel(#pdfjs irc.mozilla.org) if you have questions. Brendan |
Hi what is the present state on the implementation of this feature? Thanks |
@fermo111 Not implemented yet, but I will be glad to coach somebody who is willing to take this task. |
@yurydelendik I'm interested in implementing the feature of presenting digital signatures of PDF files in pdf.js. How can I contact you? |
@wolvz please find me at IRC irc.mozilla.org channel #pdfjs (that's simplest) or join any of our public meetings to coordinate stuff. |
I'm trying to implement SigWidgetAnnotation (like TextAnnotation, LinkAnnotation), in annotation.js, for supporting digital signatures in pdf.js. var contentStreamPromise = this.pdfManager.ensure(this, 'getContentStream',[]); Can someone please enlighten me on what is the best way to get file contents in annotation.js? |
wolvz, |
@yurydelendik @wolvz |
I am confused. What i have to do in my pdf.js library to show digital signature pdf in pdfJS |
@mrpandya007, the digital signature doesn't show because the developers chose to hide it until they have signature verification feature working. |
@wolvz, Thanx for the response but its already commented. PLease look into this,, Crystal report's generated pdf signature is not showing but DevExpress generated pdf is showing it properly |
Please answer me .... what i have to do.. I can give you that pdf to test |
There is no good support for digital signatures yet, so this will have to be implemented. |
How many days it will take to fix this problem of digital signature because we are dependent on your lib. |
It might take a long time as this feature will have to be developed by someone and there are currently higher-priority issues. |
Hi, |
@softboy99 No, pdf.js doesn't have an API to sign a PDF file. And it doesn't display digital signatures because the team discovered it's difficult to verify the signature is valid. However, some people found out it's possible to display signatures nonetheless. What I'm interested in is the original idea: displaying valid, correctly signed signatures, and being able to detect fraud signatures. The code snippet provided by earthchie seems to point into this direction. But since I'm new to cryptography, I can't tell whether it can be used to verify the signature is valid. Does anybody following this discussion know? |
Hi, |
We do both sign and verify with https://verify.ink |
Hi, |
No, The document doesn’t leave the browser, the validation happens in browser, the signing happens in the browser, the encryption/decryption happens on the browser, the rendering happens in the browser, it’s all client side. |
If your computer cannot connect to https://verify.ink/viewer, what will happen? |
It’s possible to host the web component on ones own servers too. |
@softboy99 I'm not a member of the pdf.js team. I just maintain of fork of pdf.js for my own PDF viewer. However, what we can do is implement the feature in ngx-extended-pdf-viewer until it's mature. After that, we can offer the implementation to pdf.js. I can't do that alone (for lack of knowledge and lack of leisure time), so I'd appreciate help. Maybe even your help? |
Sorry for the late reply. The answer is no. If I understand correctly. There are two steps to verify a PDF signature.
but it is not as easy as it seems. In step 2, you'll need to slice some of the PDF content precisely, or else the hash will shift. Recently I also found a signed-PDF which signature is not in the 5-line format too. So the snippet I provided earlier might not work all the time. Please try this instead. (I know, the code is a mess lol. Please forgive me.) <form id="getPDFSignature">
<input type="file" name="pdf" accept="application/pdf" required>
<button>get Signatures</button>
</form> document.getElementById('getPDFSignature').onsubmit = function (e) {
e.preventDefault();
let FR = new FileReader();
FR.onload = function (e) {
let Signatures = getPDFSignature(e.target.result);
if(Signatures){
console.log(Signatures);
}else{
alert('This document does not contains any signature.');
}
}
FR.readAsText(this.pdf.files[0]);
return false;
}
function getPDFSignature(pdf){
return pdf.split(/endobj/).filter(l=>l.indexOf('adbe.pkcs7.detached')>-1).map(d=>{
let sig = {};
d = d.trim();
let date = d.match(/\/M\(D:(.*?)\)/)[1].replace("'",'').match(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(.{5})/);
let reason = d.match(/\/Reason\((.*?)\)\//);
let location = d.match(/\/Location\((.*?)\)\//);
sig.raw = d;
sig.header = d.match(/(\d) (\d) obj/)[0];
sig.ByteRange = d.match(/\/ByteRange.*?\[(.*?)\]/)[1].trim().split(' ').map(i=>+i);
sig.Date = new Date(`${date[1]}-${date[2]}-${date[3]}T${date[4]}:${date[5]}:${date[6]}${date[7]}`);
sig.Contents = d.match(/\/Contents *?\<(.*?)\>/)[1].replace(/(?:00)*$/, '');
sig.Signature = {Der: hex2str(sig.Contents)};
sig.Signature.ASN1 = forge.asn1.fromDer(sig.Signature.Der);
sig.Signature.message = forge.pkcs7.messageFromAsn1(sig.Signature.ASN1);
if(reason){
sig.Reason = reason[1];
}else{
sig.Reason = '';
}
if(location){
sig.Location = location[1];
}else{
sig.Location = '';
}
return sig;
});
}
function hex2str(str1){
var hex = str1.toString();
var str = '';
for (var n = 0; n < hex.length; n += 2) {
str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
}
return str;
} Will update ya later once I successfully validate the signature with PDF content. |
We are now displaying signatures (#13214), but we are not validating them yet. |
Closing since digital signatures are now displayed. Validation is tracked in issue #13351 now because this thread has become very large and hard to keep track of. |
@timvandermeij do you know which version specifically pdfjs started displaying digital signatures? We are currently still using a forked version with the code snippets in this thread to display them in our app - it would be nice to switch back to mainline. I tried scouring the releases and this thread but I do not see the related PR. Thanks! |
The PR is #13214 and it's released yet. |
This comment has been minimized.
This comment has been minimized.
@soa-x Sorry but who is "We" in comment #0 ? :) |
In pdf.js you can add an image or text to a PDF file, but are there any plans for a feature to add a graphic label for the electronic signature? in my software I sign documents, but I cannot place a graphic signature label. I thought, I would use pdf.js to let user point the place and put this signature connected with a real electronic signature. |
Hi! We are interested about when or if you´re going to implement the Signature Data View (Xades, Pades & Cades) in the PDF viewer (PDF.js)
Kind Regards
Alejandro Pinedo,
SOA-X
The text was updated successfully, but these errors were encountered: