From 1033d1aa5c0e754d2b40e2ad70e50cf5aa910c71 Mon Sep 17 00:00:00 2001 From: Mathieu Maret Date: Mon, 3 Dec 2012 11:02:00 +0100 Subject: [PATCH] [vim] Add ssl plugin --- .vim/doc/openssl.txt | 66 +++++++++++++ .vim/plugin/openssl.vim | 201 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 267 insertions(+) create mode 100644 .vim/doc/openssl.txt create mode 100644 .vim/plugin/openssl.vim diff --git a/.vim/doc/openssl.txt b/.vim/doc/openssl.txt new file mode 100644 index 0000000..fada350 --- /dev/null +++ b/.vim/doc/openssl.txt @@ -0,0 +1,66 @@ +This is a mirror of http://www.vim.org/scripts/script.php?script_id=2012 + +== 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 + +This will turn off the swap file and .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.des3: + + == Colo server == + + username: maryjane password: esydpm + + == Office server == + + username: peter password: 4m4z1ng + +Then create this bash alias: + + alias auth='view ~/.auth.des3' + +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. + +Thanks to Tom Purl for the 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. + 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 +" +" == 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(":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 :exe 'silent! normal! za'.(foldlevel('.')?'':'l') +autocmd BufReadPost,FileReadPost .auth.bfa nnoremap q :q +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 +