aboutsummaryrefslogtreecommitdiff
path: root/.vim/plugin/openssl.vim
diff options
context:
space:
mode:
authorRyan Kavanagh <ryanakca@kubuntu.org>2011-08-14 17:16:55 -0400
committerRyan Kavanagh <ryanakca@kubuntu.org>2011-08-25 07:42:57 -0400
commit1c019761dfaf6be82de9284fa5e2b9dbfbdec27d (patch)
tree7ed6bd2f437d3a334bd7a81f62e6dfa63689272b /.vim/plugin/openssl.vim
Initial import
Diffstat (limited to '.vim/plugin/openssl.vim')
-rw-r--r--.vim/plugin/openssl.vim201
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
+