1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
" Tests for encryption.
source check.vim
CheckFeature cryptv
func Common_head_only(text)
" This was crashing Vim
split Xtest.txt
call setline(1, a:text)
wq
call feedkeys(":split Xtest.txt\<CR>foobar\<CR>", "tx")
call delete('Xtest.txt')
call assert_match('VimCrypt', getline(1))
bwipe!
endfunc
func Test_head_only_2()
call Common_head_only('VimCrypt~02!abc')
endfunc
func Test_head_only_3()
call Common_head_only('VimCrypt~03!abc')
endfunc
func Crypt_uncrypt(method)
exe "set cryptmethod=" . a:method
" If the blowfish test fails 'cryptmethod' will be 'zip' now.
call assert_equal(a:method, &cryptmethod)
split Xtest.txt
let text = ['01234567890123456789012345678901234567',
\ 'line 2 foo bar blah',
\ 'line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx']
call setline(1, text)
call feedkeys(":X\<CR>foobar\<CR>foobar\<CR>", 'xt')
call assert_equal('*****', &key)
w!
bwipe!
call feedkeys(":split Xtest.txt\<CR>foobar\<CR>", 'xt')
call assert_equal(text, getline(1, 3))
set key= cryptmethod&
bwipe!
call delete('Xtest.txt')
endfunc
func Test_crypt_zip()
call Crypt_uncrypt('zip')
endfunc
func Test_crypt_blowfish()
call Crypt_uncrypt('blowfish')
endfunc
func Test_crypt_blowfish2()
call Crypt_uncrypt('blowfish2')
endfunc
func Uncrypt_stable(method, crypted_text, key, uncrypted_text)
split Xtest.txt
set bin noeol key= fenc=latin1
exe "set cryptmethod=" . a:method
call setline(1, a:crypted_text)
w!
bwipe!
set nobin
call feedkeys(":split Xtest.txt\<CR>" . a:key . "\<CR>", 'xt')
call assert_equal(a:uncrypted_text, getline(1, len(a:uncrypted_text)))
bwipe!
call delete('Xtest.txt')
set key=
endfunc
func Test_uncrypt_zip()
call Uncrypt_stable('zip', "VimCrypt~01!\u0006\u001clV'\u00de}Mg\u00a0\u00ea\u00a3V\u00a9\u00e7\u0007E#3\u008e2U\u00e9\u0097", "foofoo", ["1234567890", "aábbccddeëff"])
endfunc
func Test_uncrypt_blowfish()
call Uncrypt_stable('blowfish', "VimCrypt~02!k)\u00be\u0017\u0097#\u0016\u00ddS\u009c\u00f5=\u00ba\u00e0\u00c8#\u00a5M\u00b4\u0086J\u00c3A\u00cd\u00a5M\u00b4\u0086!\u0080\u0015\u009b\u00f5\u000f\u00e1\u00d2\u0019\u0082\u0016\u0098\u00f7\u000d\u00da", "barbar", ["asdfasdfasdf", "0001112223333"])
endfunc
func Test_uncrypt_blowfish2()
call Uncrypt_stable('blowfish', "VimCrypt~03!\u001e\u00d1N\u00e3;\u00d3\u00c0\u00a0^C)\u0004\u00f7\u007f.\u00b6\u00abF\u000eS\u0019\u00e0\u008b6\u00d2[T\u00cb\u00a7\u0085\u00d8\u00be9\u000b\u00812\u000bQ\u00b3\u00cc@\u0097\u000f\u00df\u009a\u00adIv\u00aa.\u00d8\u00c9\u00ee\u009e`\u00bd$\u00af%\u00d0", "barburp", ["abcdefghijklmnopqrstuvwxyz", "!@#$%^&*()_+=-`~"])
endfunc
func Test_uncrypt_unknown_method()
split Xuncrypt_unknown.txt
set bin noeol key= fenc=latin1
call setline(1, "VimCrypt~93!\u001e\u00d1")
w!
bwipe!
set nobin
call assert_fails(":split Xuncrypt_unknown.txt", 'E821:')
bwipe!
call delete('Xuncrypt_unknown.txt')
set key=
endfunc
func Test_crypt_key_mismatch()
set cryptmethod=blowfish
split Xtest.txt
call setline(1, 'nothing')
call feedkeys(":X\<CR>foobar\<CR>nothing\<CR>", 'xt')
call assert_match("Keys don't match!", execute(':2messages'))
call assert_equal('', &key)
call feedkeys("\<CR>\<CR>", 'xt')
set cryptmethod&
bwipe!
endfunc
func Test_crypt_set_key_changes_buffer()
new Xtest1.txt
call setline(1, 'nothing')
set cryptmethod=blowfish2
call feedkeys(":X\<CR>foobar\<CR>foobar\<CR>", 'xt')
call assert_fails(":q", "E37:")
w
set key=anotherkey
call assert_fails(":bw")
w
call feedkeys(":X\<CR>foobar\<CR>foobar\<CR>", 'xt')
call assert_fails(":bw")
w
let winnr = winnr()
wincmd p
call setwinvar(winnr, '&key', 'yetanotherkey')
wincmd p
call assert_fails(":bw")
w
set cryptmethod&
set key=
bwipe!
call delete('Xtest1.txt')
endfunc
" vim: shiftwidth=2 sts=2 expandtab
|