WIP - use another API for signing

This commit is contained in:
tigp
2018-06-29 18:12:49 +02:00
parent af18f0bd57
commit 6b914d1698
8 changed files with 68 additions and 43 deletions

View File

@@ -123,8 +123,8 @@ func main() {
ContactInfo: "Geen",
Date: time.Now().Local(),
},
CertType: 2,
Approval: false,
CertType: sign.CertificationSignature,
DocMDPPerm: sign.AllowFillingExistingFormFieldsAndSignatures,
},
Signer: pkey,
Certificate: cert,

View File

@@ -30,24 +30,25 @@ func (context *SignContext) createCatalog() (catalog string, err error) {
catalog += " /AcroForm <<"
catalog += " /Fields [" + strconv.Itoa(int(context.VisualSignData.ObjectId)) + " 0 R]"
if !context.SignData.Signature.Approval {
switch context.SignData.Signature.CertType {
case CertificationSignature, UsageRightsSignature:
catalog += " /NeedAppearances false"
}
if context.SignData.Signature.CertType > 0 {
switch context.SignData.Signature.CertType {
case CertificationSignature:
catalog += " /SigFlags 3"
} else {
case UsageRightsSignature:
catalog += " /SigFlags 1"
}
catalog += " >>"
if !context.SignData.Signature.Approval {
if context.SignData.Signature.CertType > 0 {
catalog += " /Perms << /DocMDP " + strconv.Itoa(int(context.SignData.ObjectId)) + " 0 R >>"
} else {
catalog += " /Perms << /UR3 " + strconv.Itoa(int(context.SignData.ObjectId)) + " 0 R >>"
}
switch context.SignData.Signature.CertType {
case CertificationSignature:
catalog += " /Perms << /DocMDP " + strconv.Itoa(int(context.SignData.ObjectId)) + " 0 R >>"
case UsageRightsSignature:
catalog += " /Perms << /UR3 " + strconv.Itoa(int(context.SignData.ObjectId)) + " 0 R >>"
}
catalog += " >>"

View File

@@ -4,8 +4,9 @@ import (
"os"
"testing"
"bitbucket.org/digitorus/pdf"
"time"
"bitbucket.org/digitorus/pdf"
)
func TestCreateInfoEmpty(t *testing.T) {
@@ -37,8 +38,8 @@ func TestCreateInfoEmpty(t *testing.T) {
ContactInfo: "Geen",
Date: time.Now().Local(),
},
CertType: 2,
Approval: false,
CertType: CertificationSignature,
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
},
}
@@ -101,8 +102,8 @@ func TestCreateInfo(t *testing.T) {
ContactInfo: "Geen",
Date: time.Now().Local(),
},
CertType: 2,
Approval: false,
CertType: CertificationSignature,
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
},
}

View File

@@ -49,22 +49,28 @@ func (context *SignContext) createSignaturePlaceholder() (dssd string, byte_rang
signature_buffer.Write(bytes.Repeat([]byte("0"), int(context.SignatureMaxLength)))
signature_buffer.WriteString(">")
if !context.SignData.Signature.Approval {
signature_buffer.WriteString(" /Reference [") // array of signature reference dictionaries
switch context.SignData.Signature.CertType {
case CertificationSignature, UsageRightsSignature:
signature_buffer.WriteString(" /Reference [") // start array of signature reference dictionaries
signature_buffer.WriteString(" << /Type /SigRef")
if context.SignData.Signature.CertType > 0 {
signature_buffer.WriteString(" /TransformMethod /DocMDP")
signature_buffer.WriteString(" /TransformParams <<")
signature_buffer.WriteString(" /Type /TransformParams")
signature_buffer.WriteString(" /P " + strconv.Itoa(int(context.SignData.Signature.CertType)))
signature_buffer.WriteString(" /V /1.2")
} else {
signature_buffer.WriteString(" /TransformMethod /UR3")
signature_buffer.WriteString(" /TransformParams <<")
signature_buffer.WriteString(" /Type /TransformParams")
signature_buffer.WriteString(" /V /2.2")
}
}
switch context.SignData.Signature.CertType {
case CertificationSignature:
signature_buffer.WriteString(" /TransformMethod /DocMDP")
signature_buffer.WriteString(" /TransformParams <<")
signature_buffer.WriteString(" /Type /TransformParams")
signature_buffer.WriteString(" /P " + strconv.Itoa(int(context.SignData.Signature.DocMDPPerm)))
signature_buffer.WriteString(" /V /1.2")
case UsageRightsSignature:
signature_buffer.WriteString(" /TransformMethod /UR3")
signature_buffer.WriteString(" /TransformParams <<")
signature_buffer.WriteString(" /Type /TransformParams")
signature_buffer.WriteString(" /V /2.2")
}
switch context.SignData.Signature.CertType {
case CertificationSignature, UsageRightsSignature:
signature_buffer.WriteString(" >>") // close TransformParams
signature_buffer.WriteString(" >>")
signature_buffer.WriteString(" ]") // end of reference

View File

@@ -40,8 +40,8 @@ func TestCreateSignature(t *testing.T) {
ContactInfo: "Geen",
Date: now,
},
CertType: 2,
Approval: false,
CertType: CertificationSignature,
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
},
}

View File

@@ -40,8 +40,8 @@ func TestVisualSignature(t *testing.T) {
ContactInfo: "Geen",
Date: now,
},
CertType: 2,
Approval: false,
CertType: CertificationSignature,
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
},
}

View File

@@ -50,11 +50,23 @@ type InfoData struct {
}
type SignDataSignature struct {
Approval bool
CertType uint
Info SignDataSignatureInfo
CertType uint
DocMDPPerm uint
Info SignDataSignatureInfo
}
const (
ApprovalSignature = iota
CertificationSignature
UsageRightsSignature
)
const (
DoNotAllowAnyChangesPerms = iota + 1
AllowFillingExistingFormFieldsAndSignatures
AllowFillingExistingFormFieldsAndSignaturesAndCRUDAnnotations
)
type SignDataSignatureInfo struct {
Name string
Location string
@@ -137,6 +149,11 @@ func Sign(input io.ReadSeeker, output io.Writer, rdr *pdf.Reader, size int64, si
}
func (context *SignContext) SignPDF() error {
// set defaults
if context.SignData.Signature.DocMDPPerm == 0 {
context.SignData.Signature.DocMDPPerm = 1
}
context.OutputBuffer = filebuffer.New([]byte{})
// Copy old file into new file.

View File

@@ -180,8 +180,8 @@ func TestSignPDF(t *testing.T) {
ContactInfo: "Geen",
Date: time.Now().Local(),
},
CertType: 2,
Approval: false,
CertType: CertificationSignature,
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
},
Signer: pkey,
Certificate: cert,
@@ -253,8 +253,8 @@ func TestSignPDFFile(t *testing.T) {
ContactInfo: "Geen",
Date: time.Now().Local(),
},
CertType: 2,
Approval: false,
CertType: CertificationSignature,
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
},
Signer: pkey,
Certificate: cert,
@@ -332,8 +332,8 @@ func BenchmarkSignPDF(b *testing.B) {
ContactInfo: "Geen",
Date: time.Now().Local(),
},
CertType: 2,
Approval: false,
CertType: CertificationSignature,
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
},
Signer: pkey,
Certificate: cert,