| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.816 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.816 |
| Problem: Can't compute a hash. |
| Solution: Add the sha256() function. (Tyru, Hirohito Higashi) |
| Files: runtime/doc/eval.txt, src/eval.c, src/proto/sha256.pro, |
| src/sha256.c, src/testdir/test90.in, src/testdir/test90.ok, |
| src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak, |
| src/testdir/Make_ming.mak, src/testdir/Make_os2.mak, |
| src/testdir/Make_vms.mms, src/testdir/Makefile |
| |
| |
| |
| |
| *** 1920,1925 **** |
| --- 1931,1937 ---- |
| settabwinvar( {tabnr}, {winnr}, {varname}, {val}) set {varname} in window |
| {winnr} in tab page {tabnr} to {val} |
| setwinvar( {nr}, {varname}, {val}) set {varname} in window {nr} to {val} |
| + sha256( {string}) String SHA256 checksum of {string} |
| shellescape( {string} [, {special}]) |
| String escape {string} for use as shell |
| command argument |
| |
| *** 5312,5317 **** |
| --- 5337,5347 ---- |
| :call setwinvar(1, "&list", 0) |
| :call setwinvar(2, "myvar", "foobar") |
| |
| + sha256({string}) *sha256()* |
| + Returns a String with 64 hex charactes, which is the SHA256 |
| + checksum of {string}. |
| + {only available when compiled with the |+cryptv| feature} |
| + |
| shellescape({string} [, {special}]) *shellescape()* |
| Escape {string} for use as a shell command argument. |
| On MS-Windows and MS-DOS, when 'shellslash' is not set, it |
| |
| |
| |
| *** 688,693 **** |
| --- 688,696 ---- |
| static void f_settabvar __ARGS((typval_T *argvars, typval_T *rettv)); |
| static void f_settabwinvar __ARGS((typval_T *argvars, typval_T *rettv)); |
| static void f_setwinvar __ARGS((typval_T *argvars, typval_T *rettv)); |
| + #ifdef FEAT_CRYPT |
| + static void f_sha256 __ARGS((typval_T *argvars, typval_T *rettv)); |
| + #endif /* FEAT_CRYPT */ |
| static void f_shellescape __ARGS((typval_T *argvars, typval_T *rettv)); |
| static void f_shiftwidth __ARGS((typval_T *argvars, typval_T *rettv)); |
| static void f_simplify __ARGS((typval_T *argvars, typval_T *rettv)); |
| |
| *** 8055,8060 **** |
| --- 8058,8066 ---- |
| {"settabvar", 3, 3, f_settabvar}, |
| {"settabwinvar", 4, 4, f_settabwinvar}, |
| {"setwinvar", 3, 3, f_setwinvar}, |
| + #ifdef FEAT_CRYPT |
| + {"sha256", 1, 1, f_sha256}, |
| + #endif |
| {"shellescape", 1, 2, f_shellescape}, |
| {"shiftwidth", 0, 0, f_shiftwidth}, |
| {"simplify", 1, 1, f_simplify}, |
| |
| *** 16710,16715 **** |
| --- 16716,16739 ---- |
| } |
| } |
| |
| + #ifdef FEAT_CRYPT |
| + /* |
| + * "sha256({string})" function |
| + */ |
| + static void |
| + f_sha256(argvars, rettv) |
| + typval_T *argvars; |
| + typval_T *rettv; |
| + { |
| + char_u *p; |
| + |
| + p = get_tv_string(&argvars[0]); |
| + rettv->vval.v_string = vim_strsave( |
| + sha256_bytes(p, (int)STRLEN(p), NULL, 0)); |
| + rettv->v_type = VAR_STRING; |
| + } |
| + #endif /* FEAT_CRYPT */ |
| + |
| /* |
| * "shellescape({string})" function |
| */ |
| |
| |
| |
| *** 2,7 **** |
| --- 2,8 ---- |
| void sha256_start __ARGS((context_sha256_T *ctx)); |
| void sha256_update __ARGS((context_sha256_T *ctx, char_u *input, UINT32_T length)); |
| void sha256_finish __ARGS((context_sha256_T *ctx, char_u digest[32])); |
| + char_u *sha256_bytes __ARGS((char_u *buf, int buf_len, char_u *salt, int salt_len)); |
| char_u *sha256_key __ARGS((char_u *buf, char_u *salt, int salt_len)); |
| int sha256_self_test __ARGS((void)); |
| void sha2_seed __ARGS((char_u *header, int header_len, char_u *salt, int salt_len)); |
| |
| |
| |
| *** 273,286 **** |
| #endif /* FEAT_CRYPT || FEAT_PERSISTENT_UNDO */ |
| |
| #if defined(FEAT_CRYPT) || defined(PROTO) |
| - static char_u *sha256_bytes __ARGS((char_u *buf, int buf_len, char_u *salt, int salt_len)); |
| static unsigned int get_some_time __ARGS((void)); |
| |
| /* |
| * Returns hex digest of "buf[buf_len]" in a static array. |
| * if "salt" is not NULL also do "salt[salt_len]". |
| */ |
| ! static char_u * |
| sha256_bytes(buf, buf_len, salt, salt_len) |
| char_u *buf; |
| int buf_len; |
| --- 273,285 ---- |
| #endif /* FEAT_CRYPT || FEAT_PERSISTENT_UNDO */ |
| |
| #if defined(FEAT_CRYPT) || defined(PROTO) |
| static unsigned int get_some_time __ARGS((void)); |
| |
| /* |
| * Returns hex digest of "buf[buf_len]" in a static array. |
| * if "salt" is not NULL also do "salt[salt_len]". |
| */ |
| ! char_u * |
| sha256_bytes(buf, buf_len, salt, salt_len) |
| char_u *buf; |
| int buf_len; |
| |
| |
| |
| |
| --- 1,53 ---- |
| + Tests for sha256() function. vim: set ft=vim et ts=2 sw=2 : |
| + |
| + STARTTEST |
| + :so small.vim |
| + :if !has('cryptv') || !exists('*sha256') |
| + e! test.ok |
| + wq! test.out |
| + :endif |
| + :" |
| + :let testcase='test for empty string: ' |
| + :if sha256("") ==# 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' |
| + : let res='ok' |
| + :else |
| + : let res='ng' |
| + :endif |
| + :$put =testcase.res |
| + :" |
| + :let testcase='test for 1 char: ' |
| + :if sha256("a") ==# 'ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb' |
| + : let res='ok' |
| + :else |
| + : let res='ng' |
| + :endif |
| + :$put =testcase.res |
| + :" |
| + :let testcase='test for 3 chars: ' |
| + :if sha256("abc") ==# 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' |
| + : let res='ok' |
| + :else |
| + : let res='ng' |
| + :endif |
| + :$put =testcase.res |
| + :" |
| + :let testcase='test for contains meta char: ' |
| + :if sha256("foo\nbar") ==# '807eff6267f3f926a21d234f7b0cf867a86f47e07a532f15e8cc39ed110ca776' |
| + : let res='ok' |
| + :else |
| + : let res='ng' |
| + :endif |
| + :$put =testcase.res |
| + :" |
| + :let testcase='test for contains non-ascii char: ' |
| + :if sha256("\xde\xad\xbe\xef") ==# '5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953' |
| + : let res='ok' |
| + :else |
| + : let res='ng' |
| + :endif |
| + :$put =testcase.res |
| + " |
| + :/^start:/,$wq! test.out |
| + ENDTEST |
| + |
| + start: |
| |
| |
| |
| |
| --- 1,6 ---- |
| + start: |
| + test for empty string: ok |
| + test for 1 char: ok |
| + test for 3 chars: ok |
| + test for contains meta char: ok |
| + test for contains non-ascii char: ok |
| |
| |
| |
| *** 32,38 **** |
| test71.out test72.out test73.out test74.out test75.out \ |
| test76.out test77.out test78.out test79.out test80.out \ |
| test81.out test82.out test83.out test84.out test88.out \ |
| ! test89.out |
| |
| .SUFFIXES: .in .out |
| |
| --- 32,38 ---- |
| test71.out test72.out test73.out test74.out test75.out \ |
| test76.out test77.out test78.out test79.out test80.out \ |
| test81.out test82.out test83.out test84.out test88.out \ |
| ! test89.out test90.out |
| |
| .SUFFIXES: .in .out |
| |
| |
| *** 138,140 **** |
| --- 138,141 ---- |
| test84.out: test84.in |
| test88.out: test88.in |
| test89.out: test89.in |
| + test90.out: test90.in |
| |
| |
| |
| *** 31,37 **** |
| test74.out test75.out test76.out test77.out test78.out \ |
| test79.out test80.out test81.out test82.out test83.out \ |
| test84.out test85.out test86.out test87.out test88.out \ |
| ! test89.out |
| |
| SCRIPTS32 = test50.out test70.out |
| |
| --- 31,37 ---- |
| test74.out test75.out test76.out test77.out test78.out \ |
| test79.out test80.out test81.out test82.out test83.out \ |
| test84.out test85.out test86.out test87.out test88.out \ |
| ! test89.out test90.out |
| |
| SCRIPTS32 = test50.out test70.out |
| |
| |
| |
| |
| *** 51,57 **** |
| test74.out test75.out test76.out test77.out test78.out \ |
| test79.out test80.out test81.out test82.out test83.out \ |
| test84.out test85.out test86.out test87.out test88.out \ |
| ! test89.out |
| |
| SCRIPTS32 = test50.out test70.out |
| |
| --- 51,57 ---- |
| test74.out test75.out test76.out test77.out test78.out \ |
| test79.out test80.out test81.out test82.out test83.out \ |
| test84.out test85.out test86.out test87.out test88.out \ |
| ! test89.out test90.out |
| |
| SCRIPTS32 = test50.out test70.out |
| |
| |
| |
| |
| *** 32,38 **** |
| test71.out test72.out test73.out test74.out test75.out \ |
| test76.out test77.out test78.out test79.out test80.out \ |
| test81.out test82.out test83.out test84.out test88.out \ |
| ! test89.out |
| |
| .SUFFIXES: .in .out |
| |
| --- 32,38 ---- |
| test71.out test72.out test73.out test74.out test75.out \ |
| test76.out test77.out test78.out test79.out test80.out \ |
| test81.out test82.out test83.out test84.out test88.out \ |
| ! test89.out test90.out |
| |
| .SUFFIXES: .in .out |
| |
| |
| |
| |
| *** 4,10 **** |
| # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com> |
| # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu> |
| # |
| ! # Last change: 2012 Dec 05 |
| # |
| # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64. |
| # Edit the lines in the Configuration section below to select. |
| --- 4,10 ---- |
| # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com> |
| # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu> |
| # |
| ! # Last change: 2013 Feb 13 |
| # |
| # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64. |
| # Edit the lines in the Configuration section below to select. |
| |
| *** 76,82 **** |
| test66.out test67.out test68.out test69.out \ |
| test71.out test72.out test74.out test75.out test76.out \ |
| test77.out test78.out test79.out test80.out test81.out \ |
| ! test82.out test83.out test84.out test88.out test89.out |
| |
| # Known problems: |
| # Test 30: a problem around mac format - unknown reason |
| --- 76,83 ---- |
| test66.out test67.out test68.out test69.out \ |
| test71.out test72.out test74.out test75.out test76.out \ |
| test77.out test78.out test79.out test80.out test81.out \ |
| ! test82.out test83.out test84.out test88.out test89.out \ |
| ! test90.out |
| |
| # Known problems: |
| # Test 30: a problem around mac format - unknown reason |
| |
| |
| |
| *** 28,34 **** |
| test74.out test75.out test76.out test77.out test78.out \ |
| test79.out test80.out test81.out test82.out test83.out \ |
| test84.out test85.out test86.out test87.out test88.out \ |
| ! test89.out |
| |
| SCRIPTS_GUI = test16.out |
| |
| --- 28,34 ---- |
| test74.out test75.out test76.out test77.out test78.out \ |
| test79.out test80.out test81.out test82.out test83.out \ |
| test84.out test85.out test86.out test87.out test88.out \ |
| ! test89.out test90.out |
| |
| SCRIPTS_GUI = test16.out |
| |
| |
| |
| |
| *** 727,728 **** |
| --- 727,730 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 816, |
| /**/ |
| |
| -- |
| Another bucket of what can only be described as human ordure hits ARTHUR. |
| ARTHUR: ... Right! (to the KNIGHTS) That settles it! |
| "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |