[vim] Add ssl plugin

This commit is contained in:
Mathieu Maret 2012-12-03 11:02:00 +01:00 committed by Mathieu Maret
parent 164b69dc0c
commit 1033d1aa5c
2 changed files with 267 additions and 0 deletions

66
.vim/doc/openssl.txt Normal file
View File

@ -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.

201
.vim/plugin/openssl.vim Normal file
View File

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