github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/kbfs/kbfscrypto/signature_test.go (about)

     1  // Copyright 2016 Keybase Inc. All rights reserved.
     2  // Use of this source code is governed by a BSD
     3  // license that can be found in the LICENSE file.
     4  
     5  package kbfscrypto
     6  
     7  import (
     8  	"testing"
     9  
    10  	"github.com/keybase/client/go/kbcrypto"
    11  	"github.com/keybase/client/go/libkb"
    12  	"github.com/pkg/errors"
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  // Test that Verify() rejects various types of bad signatures.
    17  func TestVerifyFailures(t *testing.T) {
    18  	signingKey := MakeFakeSigningKeyOrBust("client sign")
    19  
    20  	msg := []byte("message")
    21  	sigInfo := signingKey.Sign(msg)
    22  
    23  	// Wrong version.
    24  
    25  	sigInfoWrongVersion := sigInfo.DeepCopy()
    26  	sigInfoWrongVersion.Version = 0
    27  	err := Verify(msg, sigInfoWrongVersion)
    28  	assert.Equal(t, UnknownSigVer{Ver: sigInfoWrongVersion.Version},
    29  		errors.Cause(err))
    30  
    31  	// Corrupt key.
    32  
    33  	sigInfoCorruptKey := sigInfo.DeepCopy()
    34  	sigInfoCorruptKey.VerifyingKey = MakeVerifyingKey("")
    35  	err = Verify(msg, sigInfoCorruptKey)
    36  	assert.Equal(t, libkb.KeyCannotVerifyError{}, errors.Cause(err))
    37  
    38  	// Wrong sizes.
    39  
    40  	shortSigInfo := sigInfo.DeepCopy()
    41  	shortSigInfo.Signature = shortSigInfo.Signature[:len(shortSigInfo.Signature)-1]
    42  	err = Verify(msg, shortSigInfo)
    43  	assert.Equal(t, kbcrypto.VerificationError{}, errors.Cause(err))
    44  
    45  	longSigInfo := sigInfo.DeepCopy()
    46  	longSigInfo.Signature = append(longSigInfo.Signature, byte(0))
    47  	err = Verify(msg, longSigInfo)
    48  	assert.Equal(t, kbcrypto.VerificationError{}, errors.Cause(err))
    49  
    50  	// Corrupt signature.
    51  
    52  	corruptSigInfo := sigInfo.DeepCopy()
    53  	corruptSigInfo.Signature[0] = ^sigInfo.Signature[0]
    54  	err = Verify(msg, corruptSigInfo)
    55  	assert.Equal(t, kbcrypto.VerificationError{}, errors.Cause(err))
    56  
    57  	// Wrong key.
    58  
    59  	sigInfoWrongKey := sigInfo.DeepCopy()
    60  	sigInfoWrongKey.VerifyingKey = MakeFakeVerifyingKeyOrBust("wrong key")
    61  	err = Verify(msg, sigInfoWrongKey)
    62  	assert.Equal(t, kbcrypto.VerificationError{}, errors.Cause(err))
    63  
    64  	// Corrupt message.
    65  
    66  	corruptMsg := msg
    67  	corruptMsg = append(corruptMsg, []byte("corruption")...)
    68  	err = Verify(corruptMsg, sigInfo)
    69  	assert.Equal(t, kbcrypto.VerificationError{}, errors.Cause(err))
    70  }