diff options
author | Ryan Kavanagh <ryanakca@kubuntu.org> | 2011-08-14 17:16:55 -0400 |
---|---|---|
committer | Ryan Kavanagh <ryanakca@kubuntu.org> | 2011-08-25 07:42:57 -0400 |
commit | 1c019761dfaf6be82de9284fa5e2b9dbfbdec27d (patch) | |
tree | 7ed6bd2f437d3a334bd7a81f62e6dfa63689272b /.vim/plugin/openssl.vim |
Initial import
Diffstat (limited to '.vim/plugin/openssl.vim')
-rw-r--r-- | .vim/plugin/openssl.vim | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/.vim/plugin/openssl.vim b/.vim/plugin/openssl.vim new file mode 100644 index 0000000..2e2db44 --- /dev/null +++ b/.vim/plugin/openssl.vim @@ -0,0 +1,201 @@ +" openssl.vim version 3.2 2008 Noah Spurrier <noah@noah.org> +" +" == Edit OpenSSL encrypted files and turn Vim into a Password Safe! == +" +" This plugin enables reading and writing of files encrypted using OpenSSL. +" The file must have the extension of one of the ciphers used by OpenSSL. For +" example: +" +" .des3 .aes .bf .bfa .idea .cast .rc2 .rc4 .rc5 (.bfa is base64 ASCII +" encoded blowfish.) +" +" This will turn off the swap file and the .viminfo log. The `openssl` command +" line tool must be in the path. +" +" == Install == +" +" Put this in your plugin directory and Vim will automatically load it: +" +" ~/.vim/plugin/openssl.vim +" +" You can start by editing an empty unencrypted file. Give it one of the +" extensions above. When you write the file you will be asked to give it a new +" password. +" +" == Simple Vim Password Safe == +" +" If you edit any file named '.auth.bfa' (that's the full name, not just the +" extension) then this plugin will add folding features and an automatic quit +" timeout. +" +" Vim will quit automatically after 5 minutes of no typing activity (unless +" the file has been changed). +" +" This plugin will fold on wiki-style headlines in the following format: +" +" == This is a headline == +" +" Any notes under the headline will be inside the fold until the next headline +" is reached. The SPACE key will toggle a fold open and closed. The q key will +" quit Vim. Create the following example file named ~/.auth.bfa: +" +" == Colo server == +" +" username: maryjane password: esydpm +" +" == Office server == +" +" username: peter password: 4m4z1ng +" +" Then create this bash alias: +" +" alias auth='view ~/.auth.bfa' +" +" Now you can view your password safe by typing 'auth'. When Vim starts all +" the password information will be hidden under the headlines. To view the +" password information put the cursor on the headline and press SPACE. When +" you write an encrypted file a backup will automatically be made. +" +" This plugin can also make a backup of an encrypted file before writing +" changes. This helps guard against the situation where you may edit a file +" and write changes with the wrong password. You can still go back to the +" previous backup version. The backup file will have the same name as the +" original file with .bak before the original extension. For example: +" +" .auth.bfa --> .auth.bak.bfa +" +" To turn on backups put the following global definition in your .vimrc file: +" +" let g:openssl_backup = 1 +" +" Thanks to Tom Purl for the original des3 tip. +" +" I release all copyright claims. This code is in the public domain. +" Permission is granted to use, copy modify, distribute, and sell this +" software for any purpose. I make no guarantee about the suitability of this +" software for any purpose and I am not liable for any damages resulting from +" its use. Further, I am under no obligation to maintain or extend this +" software. It is provided on an 'as is' basis without any expressed or +" implied warranty. +" +" $Id: openssl.vim 189 2008-01-28 20:44:44Z root $ + +augroup openssl_encrypted +if exists("openssl_encrypted_loaded") + finish +endif +let openssl_encrypted_loaded = 1 +autocmd! + +function! s:OpenSSLReadPre() + set cmdheight=3 + set viminfo= + set noswapfile + set shell=/bin/sh + set bin +endfunction + +function! s:OpenSSLReadPost() + let l:cipher = expand("%:e") + if l:cipher == "aes" + let l:cipher = "aes-256-cbc" + endif + if l:cipher == "bfa" + let l:cipher = "bf" + let l:expr = "0,$!openssl " . l:cipher . " -d -a -salt" + else + let l:expr = "0,$!openssl " . l:cipher . " -d -salt" + endif + + silent! execute l:expr + if v:shell_error + silent! 0,$y + silent! undo + echo "COULD NOT DECRYPT USING EXPRESSION: " . expr + echo "Note that your version of openssl may not have the given cipher engine built-in" + echo "even though the engine may be documented in the openssl man pages." + echo "ERROR FROM OPENSSL:" + echo @" + echo "COULD NOT DECRYPT" + return + endif + set nobin + set cmdheight& + set shell& + execute ":doautocmd BufReadPost ".expand("%:r") + redraw! +endfunction + +function! s:OpenSSLWritePre() + set cmdheight=3 + set shell=/bin/sh + set bin + + if !exists("g:openssl_backup") + let g:openssl_backup=0 + endif + if (g:openssl_backup) + silent! execute '!cp % %:r.bak.%:e' + endif + + let l:cipher = expand("<afile>:e") + if l:cipher == "aes" + let l:cipher = "aes-256-cbc" + endif + if l:cipher == "bfa" + let l:cipher = "bf" + let l:expr = "0,$!openssl " . l:cipher . " -e -a -salt" + else + let l:expr = "0,$!openssl " . l:cipher . " -e -salt" + endif + + silent! execute l:expr + if v:shell_error + silent! 0,$y + silent! undo + echo "COULD NOT ENCRYPT USING EXPRESSION: " . expr + echo "Note that your version of openssl may not have the given cipher engine built in" + echo "even though the engine may be documented in the openssl man pages." + echo "ERROR FROM OPENSSL:" + echo @" + echo "COULD NOT ENCRYPT" + return + endif +endfunction + +function! s:OpenSSLWritePost() + silent! undo + set nobin + set shell& + set cmdheight& + redraw! +endfunction + +autocmd BufReadPre,FileReadPre *.des3,*.des,*.bf,*.bfa,*.aes,*.idea,*.cast,*.rc2,*.rc4,*.rc5,*.desx call s:OpenSSLReadPre() +autocmd BufReadPost,FileReadPost *.des3,*.des,*.bf,*.bfa,*.aes,*.idea,*.cast,*.rc2,*.rc4,*.rc5,*.desx call s:OpenSSLReadPost() +autocmd BufWritePre,FileWritePre *.des3,*.des,*.bf,*.bfa,*.aes,*.idea,*.cast,*.rc2,*.rc4,*.rc5,*.desx call s:OpenSSLWritePre() +autocmd BufWritePost,FileWritePost *.des3,*.des,*.bf,*.bfa,*.aes,*.idea,*.cast,*.rc2,*.rc4,*.rc5,*.desx call s:OpenSSLWritePost() + +" The following implements a simple password safe for any file named +" '.auth.bfa'. The file is encrypted with Blowfish and base64 encoded. +" Folding is supported for == headlines == style lines. + +function! HeadlineDelimiterExpression(lnum) + if a:lnum == 1 + return ">1" + endif + return (getline(a:lnum)=~"^\\s*==.*==\\s*$") ? ">1" : "=" +endfunction +autocmd BufReadPost,FileReadPost .auth.bfa set foldexpr=HeadlineDelimiterExpression(v:lnum) +autocmd BufReadPost,FileReadPost .auth.bfa set foldlevel=0 +autocmd BufReadPost,FileReadPost .auth.bfa set foldcolumn=0 +autocmd BufReadPost,FileReadPost .auth.bfa set foldmethod=expr +autocmd BufReadPost,FileReadPost .auth.bfa set foldtext=getline(v:foldstart) +autocmd BufReadPost,FileReadPost .auth.bfa nnoremap <silent><space> :exe 'silent! normal! za'.(foldlevel('.')?'':'l')<CR> +autocmd BufReadPost,FileReadPost .auth.bfa nnoremap <silent>q :q<CR> +autocmd BufReadPost,FileReadPost .auth.bfa highlight Folded ctermbg=red ctermfg=black +autocmd BufReadPost,FileReadPost .auth.bfa set updatetime=300000 +autocmd CursorHold .auth.bfa quit + +augroup END + |