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 + | 
