MCPcopy
hub / github.com/qax-os/excelize / TestEncrypt

Function TestEncrypt

crypt_test.go:27–193  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

25)
26
27func TestEncrypt(t *testing.T) {
28 // Test decrypt spreadsheet with incorrect password
29 _, err := OpenFile(filepath.Join("test", "encryptSHA1.xlsx"), Options{Password: "passwd"})
30 assert.EqualError(t, err, ErrWorkbookPassword.Error())
31 // Test decrypt spreadsheet with password
32 f, err := OpenFile(filepath.Join("test", "encryptSHA1.xlsx"), Options{Password: "password"})
33 assert.NoError(t, err)
34 cell, err := f.GetCellValue("Sheet1", "A1")
35 assert.NoError(t, err)
36 assert.Equal(t, "SECRET", cell)
37 assert.NoError(t, f.Close())
38 // Test decrypt spreadsheet with unsupported encrypt mechanism
39 raw, err := os.ReadFile(filepath.Join("test", "encryptAES.xlsx"))
40 assert.NoError(t, err)
41 raw[2050] = 3
42 _, err = Decrypt(raw, &Options{Password: "password"})
43 assert.Equal(t, ErrUnsupportedEncryptMechanism, err)
44
45 // Test encrypt spreadsheet with invalid password
46 assert.EqualError(t, f.SaveAs(filepath.Join("test", "Encryption.xlsx"), Options{Password: strings.Repeat("*", MaxFieldLength+1)}), ErrPasswordLengthInvalid.Error())
47 // Test encrypt spreadsheet with new password
48 assert.NoError(t, f.SaveAs(filepath.Join("test", "Encryption.xlsx"), Options{Password: "passwd"}))
49 assert.NoError(t, f.Close())
50 f, err = OpenFile(filepath.Join("test", "Encryption.xlsx"), Options{Password: "passwd"})
51 assert.NoError(t, err)
52 cell, err = f.GetCellValue("Sheet1", "A1")
53 assert.NoError(t, err)
54 assert.Equal(t, "SECRET", cell)
55 // Test remove password by save workbook with options
56 assert.NoError(t, f.Save(Options{Password: ""}))
57 assert.NoError(t, f.Close())
58
59 doc, err := mscfb.New(bytes.NewReader(raw))
60 assert.NoError(t, err)
61 encryptionInfoBuf, encryptedPackageBuf, err := extractPart(doc)
62 assert.NoError(t, err)
63 binary.LittleEndian.PutUint64(encryptionInfoBuf[20:32], uint64(0))
64 _, err = standardDecrypt(encryptionInfoBuf, encryptedPackageBuf, &Options{Password: "password"})
65 assert.NoError(t, err)
66 _, err = decrypt(nil, nil, nil)
67 assert.EqualError(t, err, "crypto/aes: invalid key size 0")
68 _, err = agileDecrypt(encryptionInfoBuf, MacintoshCyrillicCharset, &Options{Password: "password"})
69 assert.EqualError(t, err, "XML syntax error on line 1: invalid character entity &0 (no semicolon)")
70 _, err = convertPasswdToKey("password", nil, Encryption{
71 KeyEncryptors: KeyEncryptors{KeyEncryptor: []KeyEncryptor{
72 {EncryptedKey: EncryptedKey{KeyData: KeyData{SaltValue: "=="}}},
73 }},
74 })
75 assert.EqualError(t, err, "illegal base64 data at input byte 0")
76 _, err = createIV([]byte{0}, Encryption{KeyData: KeyData{SaltValue: "=="}})
77 assert.EqualError(t, err, "illegal base64 data at input byte 0")
78 // Test error handling for EncryptionInfo parse failure
79 compoundFile := &cfb{
80 paths: []string{"Root Entry/"},
81 sectors: []sector{{name: "Root Entry", typeID: 5}},
82 }
83 compoundFile.put("EncryptionInfo", []byte{})
84 _, err = OpenReader(bytes.NewReader(compoundFile.write()))

Callers

nothing calls this directly

Calls 15

putMethod · 0.95
writeMethod · 0.95
compareMethod · 0.95
prepareMethod · 0.95
locateMethod · 0.95
writeDirectoryEntryMethod · 0.95
OpenFileFunction · 0.85
DecryptFunction · 0.85
extractPartFunction · 0.85
standardDecryptFunction · 0.85
decryptFunction · 0.85
agileDecryptFunction · 0.85

Tested by

no test coverage detected