WIP - use another API for signing
This commit is contained in:
4
sign.go
4
sign.go
@@ -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,
|
||||
|
@@ -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 += " >>"
|
||||
|
@@ -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,
|
||||
},
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -40,8 +40,8 @@ func TestCreateSignature(t *testing.T) {
|
||||
ContactInfo: "Geen",
|
||||
Date: now,
|
||||
},
|
||||
CertType: 2,
|
||||
Approval: false,
|
||||
CertType: CertificationSignature,
|
||||
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
|
||||
},
|
||||
}
|
||||
|
||||
|
@@ -40,8 +40,8 @@ func TestVisualSignature(t *testing.T) {
|
||||
ContactInfo: "Geen",
|
||||
Date: now,
|
||||
},
|
||||
CertType: 2,
|
||||
Approval: false,
|
||||
CertType: CertificationSignature,
|
||||
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
|
||||
},
|
||||
}
|
||||
|
||||
|
23
sign/sign.go
23
sign/sign.go
@@ -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.
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user