github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/pkg/crypto/scrypt_test.go (about)

     1  package crypto
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  var pass = []byte("This is secret")
    11  
    12  var oldhash = []byte("scrypt$16384$8$1$172721d78c4dc2d6$d74e5214536e31193b5300d6e162e2fdcb9f0c1bffc5be446b93edee65a0570d")
    13  var goodhash = []byte("scrypt$32768$8$1$bc39ced1a16922f626b7036edc2711a9$84a3e30dbde37dcb1b169365a8f7b88c5d0dde057d8b85e3a361fedf8a80d1ef")
    14  var badhash = []byte("scrypt$16384$8$1$3a371fe057cef0063d01fce866acb989$3228bf807f307badbadbadbadbadbadbadbad09fc011f5859ad6a1504de56455")
    15  
    16  func TestGenerateFromPassphrase(t *testing.T) {
    17  	val, err := GenerateFromPassphrase(pass)
    18  	assert.NoError(t, err)
    19  	assert.Equal(t, 5, bytes.Count(val, sep), "hash should have 6 parts")
    20  	algo := string(bytes.Split(val, sep)[0])
    21  	assert.Equal(t, "scrypt", algo, "hash should contain algo")
    22  }
    23  
    24  func TestCompareGoodHashAndPassphrase(t *testing.T) {
    25  	_, err := CompareHashAndPassphrase(goodhash, pass)
    26  	assert.NoError(t, err)
    27  }
    28  
    29  func TestCompareBadHashAndPassphrase(t *testing.T) {
    30  	_, err := CompareHashAndPassphrase(badhash, pass)
    31  	assert.Error(t, err)
    32  }
    33  
    34  func TestUpdateHashNoUpdate(t *testing.T) {
    35  	needUpdate, err := CompareHashAndPassphrase(goodhash, pass)
    36  	assert.NoError(t, err)
    37  	assert.False(t, needUpdate)
    38  }
    39  
    40  func TestUpdateHashNeedUpdate(t *testing.T) {
    41  	needUpdate, err := CompareHashAndPassphrase(oldhash, pass)
    42  	assert.NoError(t, err)
    43  	assert.True(t, needUpdate)
    44  }