[#3] signature: Add buffer pool
Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
73fde0e37c
commit
ec0d0274fa
5 changed files with 67 additions and 58 deletions
|
@ -16,12 +16,6 @@ type signatureProvider interface {
|
|||
GetOriginSignature() *refs.Signature
|
||||
}
|
||||
|
||||
type buffers struct {
|
||||
Body []byte
|
||||
Meta []byte
|
||||
Header []byte
|
||||
}
|
||||
|
||||
// VerifyServiceMessage verifies service message.
|
||||
func VerifyServiceMessage(msg interface{}) error {
|
||||
switch v := msg.(type) {
|
||||
|
@ -40,23 +34,14 @@ func verifyServiceRequest(v serviceRequest) error {
|
|||
meta := v.GetMetaHeader()
|
||||
verificationHeader := v.GetVerificationHeader()
|
||||
body := serviceMessageBody(v)
|
||||
buffers := createBuffers(body.StableSize(), meta.StableSize(), verificationHeader.StableSize())
|
||||
return verifyServiceRequestRecursive(body, meta, verificationHeader, buffers)
|
||||
return verifyServiceRequestRecursive(body, meta, verificationHeader)
|
||||
}
|
||||
|
||||
func createBuffers(bodySize, metaSize, headerSize int) *buffers {
|
||||
return &buffers{
|
||||
Body: make([]byte, 0, bodySize),
|
||||
Meta: make([]byte, 0, metaSize),
|
||||
Header: make([]byte, 0, headerSize),
|
||||
}
|
||||
}
|
||||
|
||||
func verifyServiceRequestRecursive(body stableMarshaler, meta *session.RequestMetaHeader, verify *session.RequestVerificationHeader, buffers *buffers) error {
|
||||
func verifyServiceRequestRecursive(body stableMarshaler, meta *session.RequestMetaHeader, verify *session.RequestVerificationHeader) error {
|
||||
verificationHeaderOrigin := verify.GetOrigin()
|
||||
metaOrigin := meta.GetOrigin()
|
||||
|
||||
stop, err := verifyMessageParts(body, meta, verificationHeaderOrigin, verificationHeaderOrigin != nil, verify, buffers)
|
||||
stop, err := verifyMessageParts(body, meta, verificationHeaderOrigin, verificationHeaderOrigin != nil, verify)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -64,21 +49,21 @@ func verifyServiceRequestRecursive(body stableMarshaler, meta *session.RequestMe
|
|||
return nil
|
||||
}
|
||||
|
||||
return verifyServiceRequestRecursive(body, metaOrigin, verificationHeaderOrigin, buffers)
|
||||
return verifyServiceRequestRecursive(body, metaOrigin, verificationHeaderOrigin)
|
||||
}
|
||||
|
||||
func verifyMessageParts(body, meta, originHeader stableMarshaler, hasOriginHeader bool, sigProvider signatureProvider, buffers *buffers) (stop bool, err error) {
|
||||
func verifyMessageParts(body, meta, originHeader stableMarshaler, hasOriginHeader bool, sigProvider signatureProvider) (stop bool, err error) {
|
||||
eg := &errgroup.Group{}
|
||||
|
||||
eg.Go(func() error {
|
||||
if err := verifyServiceMessagePart(meta, sigProvider.GetMetaSignature, buffers.Meta); err != nil {
|
||||
if err := verifyServiceMessagePart(meta, sigProvider.GetMetaSignature); err != nil {
|
||||
return fmt.Errorf("could not verify meta header: %w", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
eg.Go(func() error {
|
||||
if err := verifyServiceMessagePart(originHeader, sigProvider.GetOriginSignature, buffers.Header); err != nil {
|
||||
if err := verifyServiceMessagePart(originHeader, sigProvider.GetOriginSignature); err != nil {
|
||||
return fmt.Errorf("could not verify origin of verification header: %w", err)
|
||||
}
|
||||
return nil
|
||||
|
@ -86,7 +71,7 @@ func verifyMessageParts(body, meta, originHeader stableMarshaler, hasOriginHeade
|
|||
|
||||
if !hasOriginHeader {
|
||||
eg.Go(func() error {
|
||||
if err := verifyServiceMessagePart(body, sigProvider.GetBodySignature, buffers.Body); err != nil {
|
||||
if err := verifyServiceMessagePart(body, sigProvider.GetBodySignature); err != nil {
|
||||
return fmt.Errorf("could not verify body: %w", err)
|
||||
}
|
||||
return nil
|
||||
|
@ -112,15 +97,14 @@ func verifyServiceResponse(v serviceResponse) error {
|
|||
meta := v.GetMetaHeader()
|
||||
verificationHeader := v.GetVerificationHeader()
|
||||
body := serviceMessageBody(v)
|
||||
buffers := createBuffers(body.StableSize(), meta.StableSize(), verificationHeader.StableSize())
|
||||
return verifyServiceResponseRecursive(body, meta, verificationHeader, buffers)
|
||||
return verifyServiceResponseRecursive(body, meta, verificationHeader)
|
||||
}
|
||||
|
||||
func verifyServiceResponseRecursive(body stableMarshaler, meta *session.ResponseMetaHeader, verify *session.ResponseVerificationHeader, buffers *buffers) error {
|
||||
func verifyServiceResponseRecursive(body stableMarshaler, meta *session.ResponseMetaHeader, verify *session.ResponseVerificationHeader) error {
|
||||
verificationHeaderOrigin := verify.GetOrigin()
|
||||
metaOrigin := meta.GetOrigin()
|
||||
|
||||
stop, err := verifyMessageParts(body, meta, verificationHeaderOrigin, verificationHeaderOrigin != nil, verify, buffers)
|
||||
stop, err := verifyMessageParts(body, meta, verificationHeaderOrigin, verificationHeaderOrigin != nil, verify)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -128,13 +112,16 @@ func verifyServiceResponseRecursive(body stableMarshaler, meta *session.Response
|
|||
return nil
|
||||
}
|
||||
|
||||
return verifyServiceResponseRecursive(body, metaOrigin, verificationHeaderOrigin, buffers)
|
||||
return verifyServiceResponseRecursive(body, metaOrigin, verificationHeaderOrigin)
|
||||
}
|
||||
|
||||
func verifyServiceMessagePart(part stableMarshaler, sigRdr func() *refs.Signature, buf []byte) error {
|
||||
func verifyServiceMessagePart(part stableMarshaler, sigRdr func() *refs.Signature) error {
|
||||
wrapper := StableMarshalerWrapper{
|
||||
SM: part,
|
||||
}
|
||||
|
||||
return signature.VerifyDataWithSource(
|
||||
&StableMarshalerWrapper{part},
|
||||
wrapper,
|
||||
sigRdr,
|
||||
signature.WithBuffer(buf),
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue