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",
|
ContactInfo: "Geen",
|
||||||
Date: time.Now().Local(),
|
Date: time.Now().Local(),
|
||||||
},
|
},
|
||||||
CertType: 2,
|
CertType: sign.CertificationSignature,
|
||||||
Approval: false,
|
DocMDPPerm: sign.AllowFillingExistingFormFieldsAndSignatures,
|
||||||
},
|
},
|
||||||
Signer: pkey,
|
Signer: pkey,
|
||||||
Certificate: cert,
|
Certificate: cert,
|
||||||
|
@@ -30,24 +30,25 @@ func (context *SignContext) createCatalog() (catalog string, err error) {
|
|||||||
catalog += " /AcroForm <<"
|
catalog += " /AcroForm <<"
|
||||||
catalog += " /Fields [" + strconv.Itoa(int(context.VisualSignData.ObjectId)) + " 0 R]"
|
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"
|
catalog += " /NeedAppearances false"
|
||||||
}
|
}
|
||||||
|
|
||||||
if context.SignData.Signature.CertType > 0 {
|
switch context.SignData.Signature.CertType {
|
||||||
|
case CertificationSignature:
|
||||||
catalog += " /SigFlags 3"
|
catalog += " /SigFlags 3"
|
||||||
} else {
|
case UsageRightsSignature:
|
||||||
catalog += " /SigFlags 1"
|
catalog += " /SigFlags 1"
|
||||||
}
|
}
|
||||||
|
|
||||||
catalog += " >>"
|
catalog += " >>"
|
||||||
|
|
||||||
if !context.SignData.Signature.Approval {
|
switch context.SignData.Signature.CertType {
|
||||||
if context.SignData.Signature.CertType > 0 {
|
case CertificationSignature:
|
||||||
catalog += " /Perms << /DocMDP " + strconv.Itoa(int(context.SignData.ObjectId)) + " 0 R >>"
|
catalog += " /Perms << /DocMDP " + strconv.Itoa(int(context.SignData.ObjectId)) + " 0 R >>"
|
||||||
} else {
|
case UsageRightsSignature:
|
||||||
catalog += " /Perms << /UR3 " + strconv.Itoa(int(context.SignData.ObjectId)) + " 0 R >>"
|
catalog += " /Perms << /UR3 " + strconv.Itoa(int(context.SignData.ObjectId)) + " 0 R >>"
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
catalog += " >>"
|
catalog += " >>"
|
||||||
|
@@ -4,8 +4,9 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"bitbucket.org/digitorus/pdf"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"bitbucket.org/digitorus/pdf"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCreateInfoEmpty(t *testing.T) {
|
func TestCreateInfoEmpty(t *testing.T) {
|
||||||
@@ -37,8 +38,8 @@ func TestCreateInfoEmpty(t *testing.T) {
|
|||||||
ContactInfo: "Geen",
|
ContactInfo: "Geen",
|
||||||
Date: time.Now().Local(),
|
Date: time.Now().Local(),
|
||||||
},
|
},
|
||||||
CertType: 2,
|
CertType: CertificationSignature,
|
||||||
Approval: false,
|
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,8 +102,8 @@ func TestCreateInfo(t *testing.T) {
|
|||||||
ContactInfo: "Geen",
|
ContactInfo: "Geen",
|
||||||
Date: time.Now().Local(),
|
Date: time.Now().Local(),
|
||||||
},
|
},
|
||||||
CertType: 2,
|
CertType: CertificationSignature,
|
||||||
Approval: false,
|
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.Write(bytes.Repeat([]byte("0"), int(context.SignatureMaxLength)))
|
||||||
signature_buffer.WriteString(">")
|
signature_buffer.WriteString(">")
|
||||||
|
|
||||||
if !context.SignData.Signature.Approval {
|
switch context.SignData.Signature.CertType {
|
||||||
signature_buffer.WriteString(" /Reference [") // array of signature reference dictionaries
|
case CertificationSignature, UsageRightsSignature:
|
||||||
|
signature_buffer.WriteString(" /Reference [") // start array of signature reference dictionaries
|
||||||
signature_buffer.WriteString(" << /Type /SigRef")
|
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(" >>") // close TransformParams
|
||||||
signature_buffer.WriteString(" >>")
|
signature_buffer.WriteString(" >>")
|
||||||
signature_buffer.WriteString(" ]") // end of reference
|
signature_buffer.WriteString(" ]") // end of reference
|
||||||
|
@@ -40,8 +40,8 @@ func TestCreateSignature(t *testing.T) {
|
|||||||
ContactInfo: "Geen",
|
ContactInfo: "Geen",
|
||||||
Date: now,
|
Date: now,
|
||||||
},
|
},
|
||||||
CertType: 2,
|
CertType: CertificationSignature,
|
||||||
Approval: false,
|
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -40,8 +40,8 @@ func TestVisualSignature(t *testing.T) {
|
|||||||
ContactInfo: "Geen",
|
ContactInfo: "Geen",
|
||||||
Date: now,
|
Date: now,
|
||||||
},
|
},
|
||||||
CertType: 2,
|
CertType: CertificationSignature,
|
||||||
Approval: false,
|
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
sign/sign.go
23
sign/sign.go
@@ -50,11 +50,23 @@ type InfoData struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SignDataSignature struct {
|
type SignDataSignature struct {
|
||||||
Approval bool
|
CertType uint
|
||||||
CertType uint
|
DocMDPPerm uint
|
||||||
Info SignDataSignatureInfo
|
Info SignDataSignatureInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
ApprovalSignature = iota
|
||||||
|
CertificationSignature
|
||||||
|
UsageRightsSignature
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
DoNotAllowAnyChangesPerms = iota + 1
|
||||||
|
AllowFillingExistingFormFieldsAndSignatures
|
||||||
|
AllowFillingExistingFormFieldsAndSignaturesAndCRUDAnnotations
|
||||||
|
)
|
||||||
|
|
||||||
type SignDataSignatureInfo struct {
|
type SignDataSignatureInfo struct {
|
||||||
Name string
|
Name string
|
||||||
Location 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 {
|
func (context *SignContext) SignPDF() error {
|
||||||
|
// set defaults
|
||||||
|
if context.SignData.Signature.DocMDPPerm == 0 {
|
||||||
|
context.SignData.Signature.DocMDPPerm = 1
|
||||||
|
}
|
||||||
|
|
||||||
context.OutputBuffer = filebuffer.New([]byte{})
|
context.OutputBuffer = filebuffer.New([]byte{})
|
||||||
|
|
||||||
// Copy old file into new file.
|
// Copy old file into new file.
|
||||||
|
@@ -180,8 +180,8 @@ func TestSignPDF(t *testing.T) {
|
|||||||
ContactInfo: "Geen",
|
ContactInfo: "Geen",
|
||||||
Date: time.Now().Local(),
|
Date: time.Now().Local(),
|
||||||
},
|
},
|
||||||
CertType: 2,
|
CertType: CertificationSignature,
|
||||||
Approval: false,
|
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
|
||||||
},
|
},
|
||||||
Signer: pkey,
|
Signer: pkey,
|
||||||
Certificate: cert,
|
Certificate: cert,
|
||||||
@@ -253,8 +253,8 @@ func TestSignPDFFile(t *testing.T) {
|
|||||||
ContactInfo: "Geen",
|
ContactInfo: "Geen",
|
||||||
Date: time.Now().Local(),
|
Date: time.Now().Local(),
|
||||||
},
|
},
|
||||||
CertType: 2,
|
CertType: CertificationSignature,
|
||||||
Approval: false,
|
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
|
||||||
},
|
},
|
||||||
Signer: pkey,
|
Signer: pkey,
|
||||||
Certificate: cert,
|
Certificate: cert,
|
||||||
@@ -332,8 +332,8 @@ func BenchmarkSignPDF(b *testing.B) {
|
|||||||
ContactInfo: "Geen",
|
ContactInfo: "Geen",
|
||||||
Date: time.Now().Local(),
|
Date: time.Now().Local(),
|
||||||
},
|
},
|
||||||
CertType: 2,
|
CertType: CertificationSignature,
|
||||||
Approval: false,
|
DocMDPPerm: AllowFillingExistingFormFieldsAndSignatures,
|
||||||
},
|
},
|
||||||
Signer: pkey,
|
Signer: pkey,
|
||||||
Certificate: cert,
|
Certificate: cert,
|
||||||
|
Reference in New Issue
Block a user