change visibility
This commit is contained in:
6
dkim.go
6
dkim.go
@@ -161,8 +161,8 @@ func Sign(email *[]byte, options sigOptions) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get dkim header base
|
// Get dkim header base
|
||||||
dkimHeader := NewDkimHeaderBySigOptions(options)
|
dkimHeader := newDkimHeaderBySigOptions(options)
|
||||||
dHeader := dkimHeader.GetHeaderBaseForSigning(bodyHash)
|
dHeader := dkimHeader.getHeaderBaseForSigning(bodyHash)
|
||||||
|
|
||||||
canonicalizations := strings.Split(options.Canonicalization, "/")
|
canonicalizations := strings.Split(options.Canonicalization, "/")
|
||||||
dHeaderCanonicalized, err := canonicalizeHeader(dHeader, canonicalizations[0])
|
dHeaderCanonicalized, err := canonicalizeHeader(dHeader, canonicalizations[0])
|
||||||
@@ -198,7 +198,7 @@ func Sign(email *[]byte, options sigOptions) error {
|
|||||||
// error: if an error occurs during verification
|
// error: if an error occurs during verification
|
||||||
func Verify(email *[]byte) (verifyOutput, error) {
|
func Verify(email *[]byte) (verifyOutput, error) {
|
||||||
// parse email
|
// parse email
|
||||||
dkimHeader, err := NewFromEmail(email)
|
dkimHeader, err := newDkimHeaderFromEmail(email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == ErrDkimHeaderNotFound {
|
if err == ErrDkimHeaderNotFound {
|
||||||
return NOTSIGNED, ErrDkimHeaderNotFound
|
return NOTSIGNED, ErrDkimHeaderNotFound
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type DkimHeader struct {
|
type dkimHeader struct {
|
||||||
// Version This tag defines the version of DKIM
|
// Version This tag defines the version of DKIM
|
||||||
// specification that applies to the signature record.
|
// specification that applies to the signature record.
|
||||||
// tag v
|
// tag v
|
||||||
@@ -197,8 +197,8 @@ type DkimHeader struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewDkimHeaderBySigOptions return a new DkimHeader initioalized with sigOptions value
|
// NewDkimHeaderBySigOptions return a new DkimHeader initioalized with sigOptions value
|
||||||
func NewDkimHeaderBySigOptions(options sigOptions) *DkimHeader {
|
func newDkimHeaderBySigOptions(options sigOptions) *dkimHeader {
|
||||||
h := new(DkimHeader)
|
h := new(dkimHeader)
|
||||||
h.Version = "1"
|
h.Version = "1"
|
||||||
h.Algorithm = options.Algo
|
h.Algorithm = options.Algo
|
||||||
h.MessageCanonicalization = options.Canonicalization
|
h.MessageCanonicalization = options.Canonicalization
|
||||||
@@ -221,7 +221,7 @@ func NewDkimHeaderBySigOptions(options sigOptions) *DkimHeader {
|
|||||||
// NewFromEmail return a new DkimHeader by parsing an email
|
// NewFromEmail return a new DkimHeader by parsing an email
|
||||||
// Note: according to RFC 6376 an email can have multiple DKIM Header
|
// Note: according to RFC 6376 an email can have multiple DKIM Header
|
||||||
// in this case we return the last inserted or the last with d== mail from
|
// in this case we return the last inserted or the last with d== mail from
|
||||||
func NewFromEmail(email *[]byte) (*DkimHeader, error) {
|
func newDkimHeaderFromEmail(email *[]byte) (*dkimHeader, error) {
|
||||||
m, err := mail.ReadMessage(bytes.NewReader(*email))
|
m, err := mail.ReadMessage(bytes.NewReader(*email))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -265,7 +265,7 @@ func NewFromEmail(email *[]byte) (*DkimHeader, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var keep *DkimHeader
|
var keep *dkimHeader
|
||||||
var keepErr error
|
var keepErr error
|
||||||
//for _, dk := range m.Header[textproto.CanonicalMIMEHeaderKey("DKIM-Signature")] {
|
//for _, dk := range m.Header[textproto.CanonicalMIMEHeaderKey("DKIM-Signature")] {
|
||||||
for _, h := range dkHeaders {
|
for _, h := range dkHeaders {
|
||||||
@@ -291,8 +291,8 @@ func NewFromEmail(email *[]byte) (*DkimHeader, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// parseDkHeader parse raw dkim header
|
// parseDkHeader parse raw dkim header
|
||||||
func parseDkHeader(header string) (dkh *DkimHeader, err error) {
|
func parseDkHeader(header string) (dkh *dkimHeader, err error) {
|
||||||
dkh = new(DkimHeader)
|
dkh = new(dkimHeader)
|
||||||
|
|
||||||
keyVal := strings.SplitN(header, ":", 2)
|
keyVal := strings.SplitN(header, ":", 2)
|
||||||
|
|
||||||
@@ -434,7 +434,7 @@ func parseDkHeader(header string) (dkh *DkimHeader, err error) {
|
|||||||
|
|
||||||
// GetHeaderBase return base header for signers
|
// GetHeaderBase return base header for signers
|
||||||
// Todo: some refactoring needed...
|
// Todo: some refactoring needed...
|
||||||
func (d *DkimHeader) GetHeaderBaseForSigning(bodyHash string) string {
|
func (d *dkimHeader) getHeaderBaseForSigning(bodyHash string) string {
|
||||||
h := "DKIM-Signature: v=" + d.Version + "; a=" + d.Algorithm + "; q=" + strings.Join(d.QueryMethods, ":") + "; c=" + d.MessageCanonicalization + ";" + CRLF + TAB
|
h := "DKIM-Signature: v=" + d.Version + "; a=" + d.Algorithm + "; q=" + strings.Join(d.QueryMethods, ":") + "; c=" + d.MessageCanonicalization + ";" + CRLF + TAB
|
||||||
subh := "s=" + d.Selector + ";"
|
subh := "s=" + d.Selector + ";"
|
||||||
if len(subh)+len(d.Domain)+4 > MaxHeaderLineLength {
|
if len(subh)+len(d.Domain)+4 > MaxHeaderLineLength {
|
||||||
|
|||||||
Reference in New Issue
Block a user