aboutsummaryrefslogtreecommitdiff
path: root/nix/libutil/gcrypt-hash.hh
blob: 11f061159f0aefea16b3240a3ab966d63266ec67 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* GNU Guix --- Functional package management for GNU
   Copyright (C) 2012, 2013  Ludovic Courtès <ludo@gnu.org>

   This file is part of GNU Guix.

   GNU Guix is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or (at
   your option) any later version.

   GNU Guix is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.  */

/* An OpenSSL-like interface to GNU libgcrypt cryptographic hash
   functions.  */

#pragma once
#include <gcrypt.h>
#include <unistd.h>

struct guix_hash_context
{
  /* This copy constructor is needed in 'HashSink::currentHash()' where we
     expect the copy of a 'Ctx' object to yield a truly different context.  */
  guix_hash_context (guix_hash_context &ref)
  {
    if (ref.md_handle == NULL)
      md_handle = NULL;
    else
      gcry_md_copy (&md_handle, ref.md_handle);
  }

  /* Make sure 'md_handle' is always initialized.  */
  guix_hash_context (): md_handle (NULL) { };

  gcry_md_hd_t md_handle;
};

extern "C" {
extern void guix_hash_init (struct guix_hash_context *ctx, int algo);
extern void guix_hash_update (struct guix_hash_context *ctx, const void *buffer,
			      size_t len);
extern void guix_hash_final (void *resbuf, struct guix_hash_context *ctx,
			     int algo);
}
mmit/?id=281e882d27ace48c5c415f19292e2590dd4473dc'>fix `reduce_vars` on catch variable (#1794)Alex Lam S.L Improved catch handling in `figure_out_scope()` means special case treatment of IE8 is no longer valid in `reset_opt_flags()`. Also fixed recursive assignment in variable definition. 2017-04-07fix incorrect context in variable substitution (#1791)Alex Lam S.L `AST_Node.optimize()` is context-aware, so don't cache its results to be used elsewhere. Also fixed a few cases of AST corruption and beef up safety of `pure_getters`. 2017-04-07enable `inline_script` by default (#1793)Alex Lam S.L 2017-04-06improve `pure_getters` (#1786)Alex Lam S.L - property access to `null` & `undefined` always has side effects - utilise `reduce_vars` to determine safe property access - may-be cases treated as side effects unless `unsafe` 2017-04-05implement delayed resolution for `reduce_vars` (#1788)Alex Lam S.L Although it would be nice to enforce `AST_Node` cloning during transformation, that ship has sailed a long time ago. We now get the assigned value when resolving `AST_SymbolRef` instead of `reset_opt_flags()`, which has the added advantage of improved compressor efficiency. fixes #1787 2017-04-04optimise `do{...}while(false)` (#1785)Alex Lam S.L - better heuristics to avoid issues like #1532 - fix `TreeWalker.loopcontrol_target()` - `continue` cannot refer to `switch` blocks 2017-04-04remove `--mangle-props` from fuzzing (#1777)Alex Lam S.L The inherently unsafe nature makes this feature unsuitable to be tested this way. fixes #1774 2017-04-04exclude mangling of special property names (#1779)Alex Lam S.L - `null` - `true` - `false` - numeric literals 2017-04-03fix `mangleProperties` on identifiers (#1776)Alex Lam S.L - fix handling of "-Infinity" - add test case for "-0" reverts #1481 2017-04-03workaround Node.js bugs (#1775)Alex Lam S.L Wrap test code in IIFE before passing to `vm` fixes #1768 fixes #1771 2017-04-03fix mangleProperties of `undefined` & `Infinity` (#1772)Alex Lam S.L `NaN` already works by the happy accident of `Number.NaN` fixes #1770 2017-04-03extend `test/ufuzz.js` (#1769)Alex Lam S.L New expressions: - property access - array literal - object literal Miscellaneous: - reduce execution timeout - test `toplevel` and `mangleProperties` 2017-04-02v2.8.21Alex Lam S.L 2017-04-02fix corner case in `switch` (#1765)Alex Lam S.L 2017-04-02avoid confusion of `NaN` & `Infinity` with `catch` symbol of the same name ↵Alex Lam S.L (#1763) fixes #1760 fixes #1761 2017-04-02fix corner cases in switch and undefined (#1762)Alex Lam S.L - fix side effects in switch condition for singular blocks - fix `undefined` confusion with local variable - gate `OPT(AST_Switch)` with `switches` fixes #1758 fixes #1759 2017-04-02speed up fuzzer code generation (#1757)Alex Lam S.L - only output one top-level function or statement block - reduce `rng()` granularity from 2^32 to 65536 - fix overflow in `rng()` - track `canThrow` during `typeof` creation 2017-04-02minor tweaks to `test/ufuzz.js` (#1756)Alex Lam S.L - count iterations from `1` instead of `0` - remove `unsafe` from default set of `minify()` tests - improve usability of help 2017-04-02upgrade fuzzer (#1754)Alex Lam S.L - configurable set of `minify()` options - test and report suspects upon failure - continue after failure if infinite iterations is specified 2017-04-02fuzz regexp literals, more constant numbers, typeof expression (#1755)kzc 2017-04-01fix switch branch elimination (#1752)Alex Lam S.L Merge unreachable case body with previous fallthrough case fixes #1750 2017-04-01minor tweaks to fuzzer (#1751)Alex Lam S.L - remove `let` as variable name - employ `crypto.randomBytes()` 2017-04-01implement `test/sandbox.js` (#1749)Alex Lam S.L - `test/run-tests.js` and `test/ufuzz.js` now shares the same `run_code()` and `same_stdout()` - re-enable fuzzer to generate top-level `NaN`, `Infinity` & `undefined` - attempt to show beautified output only when `run_code()` output is preserved 2017-04-01improve compression of undefined, NaN & Infinitiy (#1748)Alex Lam S.L - migrate transformation logic from `OutputStream` to `Compressor` - always turn `undefined` into `void 0` (unless `unsafe`) - always keep `NaN` except when avoiding local variable redefinition - introduce `keep_infinity` to suppress `1/0` transform, except when avoiding local variable redefinition supersedes #1723 fixes #1730 2017-03-31combine rules for binary boolean operations (#1744)Alex Lam S.L 2017-03-31Massive extension of the fuzzer (#1697)Peter van der Zee Fix bug where a `throw` was generated without expression Reenable try/catch/finally and fix them up Skip serialization errors Allow function decl in other funcs but not in blocks etc Rename function to be more appropriate Fix global functions not getting certain names Make the canaries more likely to appear as expressions Add a silly rounding edge case Add a new canary, `c`, which should only ever be incremented Refactoring Fix (another) iife not actually being invoked When a statement hits recursion max return an expression instead of `;` When a expression hits recursion max also inc `c` Generate global code as well as function code Also fixes some argument juggling related bugs. No longer reduces the recursion max when generating sub functions. Generates a function arg. Add used names to var name pool while in that scope This is a little wonky, possibly a hack, but since it's synchronous code I think it's alright to do this. The alternative is to slice the varnames array and juggle them through almost all the generator functions and there are various reasons why this patch is a better alternative. Minify generated code, not beautified code. Prevents beautifier bias. Prevent unnecessary duplication Remove serialization protection because I think it got handled elsewhere Abstract toplevel code generation Add example line of running test case Add poor man options parser, and some options Reindent to 4 spaces Lower chance of `default` generation Comment example of testing a case and output improvement Enable `default` clause appearing at any clause index Removing some training wheels; dont add parens where we dont absolutely need them Support `-s1` and `-s2` to force specific statements being generated at that recursion level Add round number to output when failing. For stats and fun and profit. Solidify statement depth counting. The argument juggling is real. Renamed option to something long. -scf was ugly and probably confusing. Fix missing arguments causing `canThrow` to be truthy, generating crashing code Generate more binary nested expressions Add black and white list cli options for statement generation Allows you to explicitly require or forbid certain statements from/to being made. ``` node test/ufuzz.js --without-stmt switch,try -t 5 -r 5 -V ``` ``` node test/ufuzz.js --only-stmt ifelse,expr -t 5 -r 5 -V ``` Similar granularity for expression may be added later. There can be no comma between names; it just does a split on that arg. Trim down the binary expression generator Prevent scoping issues in nodejs by preventing certain names in global space Oh this list was incomplete? Allow bin-expr to generate assignments too. More vigilant with storing and reusing vars. Add more global builtin names Update wrapper code Also patch Function valueOf 2017-03-31sort options in alphabetical order (#1743)Alex Lam S.L They started off as functional groups I guess, but given the sheer number of options this is becoming too difficult to read. 2017-03-31v2.8.20Alex Lam S.L 2017-03-31fix missing preamble when shebang is absent (#1742)Alex Lam S.L 2017-03-31v2.8.19Alex Lam S.L 2017-03-31fix catch symbol mangling (#1734)Alex Lam S.L Only need to look up the immediate non-block/catch scope for the same-name special case. fixes #1733 2017-03-30remove paranthesis for `-(x*y)` (#1732)Alex Lam S.L 2017-03-30optimize try-catch-finally (#1731)Alex Lam S.L - eliminate empty blocks - flatten out if try-block does not throw 2017-03-30improve tests from #1726 (#1729)Alex Lam S.L 2017-03-29speed up IIFE elimination (#1728)Alex Lam S.L - `side_effects` will clean up inner statements, so checking for an empty function body should suffice - drop side effects when dropping `return` from statement 2017-03-29speed up `equivalent_to()` and `AST_Switch` (#1727)Alex Lam S.L 2017-03-29fix missing parentheses around NaN/Infinity shorthands (#1726)Alex Lam S.L fixes #1724 fixes #1725 2017-03-29output optimal representations of NaN & Infinity (#1723)Alex Lam S.L - move these optimisations out from `Compressor` to `OutputStream` - fixes behaviour inconsistency when running uglified code from global or module levels due to redefinition 2017-03-29improve beautified output of switch blocks (#1721)Alex Lam S.L 2017-03-29v2.8.18Alex Lam S.L 2017-03-29remove UGLIFY_DEBUG (#1720)Alex Lam S.L fixes #1719