)]}'
{
  "log": [
    {
      "commit": "9bc89cd82d6f88fb0ca39b30445c329a430fd66b",
      "tree": "7bd0e856abd359f84edea1bacfd1dd32edd93fbb",
      "parents": [
        "685784aaf3cd0e3ff5e36c7ecf6f441cdbf57f73"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Tue Jan 02 11:10:44 2007 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Fri Jul 13 08:06:14 2007 -0700"
      },
      "message": "async_tx: add the async_tx api\n\nThe async_tx api provides methods for describing a chain of asynchronous\nbulk memory transfers/transforms with support for inter-transactional\ndependencies.  It is implemented as a dmaengine client that smooths over\nthe details of different hardware offload engine implementations.  Code\nthat is written to the api can optimize for asynchronous operation and the\napi will fit the chain of operations to the available offload resources. \n \n\tI imagine that any piece of ADMA hardware would register with the\n\t\u0027async_*\u0027 subsystem, and a call to async_X would be routed as\n\tappropriate, or be run in-line. - Neil Brown\n\nasync_tx exploits the capabilities of struct dma_async_tx_descriptor to\nprovide an api of the following general format:\n\nstruct dma_async_tx_descriptor *\nasync_\u003coperation\u003e(..., struct dma_async_tx_descriptor *depend_tx,\n\t\t\tdma_async_tx_callback cb_fn, void *cb_param)\n{\n\tstruct dma_chan *chan \u003d async_tx_find_channel(depend_tx, \u003coperation\u003e);\n\tstruct dma_device *device \u003d chan ? chan-\u003edevice : NULL;\n\tint int_en \u003d cb_fn ? 1 : 0;\n\tstruct dma_async_tx_descriptor *tx \u003d device ?\n\t\tdevice-\u003edevice_prep_dma_\u003coperation\u003e(chan, len, int_en) : NULL;\n\n\tif (tx) { /* run \u003coperation\u003e asynchronously */\n\t\t...\n\t\ttx-\u003etx_set_dest(addr, tx, index);\n\t\t...\n\t\ttx-\u003etx_set_src(addr, tx, index);\n\t\t...\n\t\tasync_tx_submit(chan, tx, flags, depend_tx, cb_fn, cb_param);\n\t} else { /* run \u003coperation\u003e synchronously */\n\t\t...\n\t\t\u003coperation\u003e\n\t\t...\n\t\tasync_tx_sync_epilog(flags, depend_tx, cb_fn, cb_param);\n\t}\n\n\treturn tx;\n}\n\nasync_tx_find_channel() returns a capable channel from its pool.  The\nchannel pool is organized as a per-cpu array of channel pointers.  The\nasync_tx_rebalance() routine is tasked with managing these arrays.  In the\nuniprocessor case async_tx_rebalance() tries to spread responsibility\nevenly over channels of similar capabilities.  For example if there are two\ncopy+xor channels, one will handle copy operations and the other will\nhandle xor.  In the SMP case async_tx_rebalance() attempts to spread the\noperations evenly over the cpus, e.g. cpu0 gets copy channel0 and xor\nchannel0 while cpu1 gets copy channel 1 and xor channel 1.  When a\ndependency is specified async_tx_find_channel defaults to keeping the\noperation on the same channel.  A xor-\u003ecopy-\u003exor chain will stay on one\nchannel if it supports both operation types, otherwise the transaction will\ntransition between a copy and a xor resource.\n\nCurrently the raid5 implementation in the MD raid456 driver has been\nconverted to the async_tx api.  A driver for the offload engines on the\nIntel Xscale series of I/O processors, iop-adma, is provided in a later\ncommit.  With the iop-adma driver and async_tx, raid456 is able to offload\ncopy, xor, and xor-zero-sum operations to hardware engines.\n \nOn iop342 tiobench showed higher throughput for sequential writes (20 - 30%\nimprovement) and sequential reads to a degraded array (40 - 55%\nimprovement).  For the other cases performance was roughly equal, +/- a few\npercentage points.  On a x86-smp platform the performance of the async_tx\nimplementation (in synchronous mode) was also +/- a few percentage points\nof the original implementation.  According to \u0027top\u0027 on iop342 CPU\nutilization drops from ~50% to ~15% during a \u0027resync\u0027 while the speed\naccording to /proc/mdstat doubles from ~25 MB/s to ~50 MB/s.\n \nThe tiobench command line used for testing was: tiobench --size 2048\n--block 4096 --block 131072 --dir /mnt/raid --numruns 5\n* iop342 had 1GB of memory available\n\nDetails:\n* if CONFIG_DMA_ENGINE\u003dn the asynchronous path is compiled away by making\n  async_tx_find_channel a static inline routine that always returns NULL\n* when a callback is specified for a given transaction an interrupt will\n  fire at operation completion time and the callback will occur in a\n  tasklet.  if the the channel does not support interrupts then a live\n  polling wait will be performed\n* the api is written as a dmaengine client that requests all available\n  channels\n* In support of dependencies the api implicitly schedules channel-switch\n  interrupts.  The interrupt triggers the cleanup tasklet which causes\n  pending operations to be scheduled on the next channel\n* Xor engines treat an xor destination address differently than a software\n  xor routine.  To the software routine the destination address is an implied\n  source, whereas engines treat it as a write-only destination.  This patch\n  modifies the xor_blocks routine to take a an explicit destination address\n  to mirror the hardware.\n\nChangelog:\n* fixed a leftover debug print\n* don\u0027t allow callbacks in async_interrupt_cond\n* fixed xor_block changes\n* fixed usage of ASYNC_TX_XOR_DROP_DEST\n* drop dma mapping methods, suggested by Chris Leech\n* printk warning fixups from Andrew Morton\n* don\u0027t use inline in C files, Adrian Bunk\n* select the API when MD is enabled\n* BUG_ON xor source counts \u003c\u003d 1\n* implicitly handle hardware concerns like channel switching and\n  interrupts, Neil Brown\n* remove the per operation type list, and distribute operation capabilities\n  evenly amongst the available channels\n* simplify async_tx_find_channel to optimize the fast path\n* introduce the channel_table_initialized flag to prevent early calls to\n  the api\n* reorganize the code to mimic crypto\n* include mm.h as not all archs include it in dma-mapping.h\n* make the Kconfig options non-user visible, Adrian Bunk\n* move async_tx under crypto since it is meant as \u0027core\u0027 functionality, and\n  the two may share algorithms in the future\n* move large inline functions into c files\n* checkpatch.pl fixes\n* gpl v2 only correction\n\nCc: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\nAcked-By: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "685784aaf3cd0e3ff5e36c7ecf6f441cdbf57f73",
      "tree": "10f99829f7d877b87614fe69be77e363c026a8d7",
      "parents": [
        "d379b01e9087a582d58f4b678208a4f8d8376fe7"
      ],
      "author": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Mon Jul 09 11:56:42 2007 -0700"
      },
      "committer": {
        "name": "Dan Williams",
        "email": "dan.j.williams@intel.com",
        "time": "Fri Jul 13 08:06:14 2007 -0700"
      },
      "message": "xor: make \u0027xor_blocks\u0027 a library routine for use with async_tx\n\nThe async_tx api tries to use a dma engine for an operation, but will fall\nback to an optimized software routine otherwise.  Xor support is\nimplemented using the raid5 xor routines.  For organizational purposes this\nroutine is moved to a common area.\n\nThe following fixes are also made:\n* rename xor_block \u003d\u003e xor_blocks, suggested by Adrian Bunk\n* ensure that xor.o initializes before md.o in the built-in case\n* checkpatch.pl fixes\n* mark calibrate_xor_blocks __init, Adrian Bunk\n\nCc: Adrian Bunk \u003cbunk@stusta.de\u003e\nCc: NeilBrown \u003cneilb@suse.de\u003e\nCc: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n"
    },
    {
      "commit": "124b53d020622ffa24e27406f2373d5a3debd0d3",
      "tree": "e1a89ac6745ce9afea6fd2ea358ebd40e60abb76",
      "parents": [
        "a73e69965fa2647faa36caf40f4132b9c99d61fd"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Apr 16 20:49:20 2007 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed May 02 14:38:32 2007 +1000"
      },
      "message": "[CRYPTO] cryptd: Add software async crypto daemon\n\nThis patch adds the cryptd module which is a template that takes a\nsynchronous software crypto algorithm and converts it to an asynchronous\none by executing it in a kernel thread.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "b5b7f08869340aa8cfa23303f7d195f161479592",
      "tree": "dd1f3f00165e7ca31e29a52d64909439cdfab8fd",
      "parents": [
        "ebc610e5bc76df073221e64e86c3f7533a09ea40"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Apr 16 20:48:54 2007 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed May 02 14:38:31 2007 +1000"
      },
      "message": "[CRYPTO] api: Add async blkcipher type\n\nThis patch adds the mid-level interface for asynchronous block ciphers.\nIt also includes a generic queueing mechanism that can be used by other\nasynchronous crypto operations in future.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "d64beac050914de6fe6565741b39905ecd5994b7",
      "tree": "33fd4c0e4ad33a153d1cf60b991232e8a90cbc83",
      "parents": [
        "04ac7db3f23d98abe5d3c91d21b0e45fc09e74ea"
      ],
      "author": {
        "name": "Noriaki TAKAMIYA",
        "email": "takamiya@po.ntts.co.jp",
        "time": "Wed Jan 24 21:47:48 2007 +1100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Feb 07 09:21:03 2007 +1100"
      },
      "message": "[CRYPTO] camellia: added the code of Camellia cipher algorithm.\n\nThis patch adds the main code of Camellia cipher algorithm.\n\nSigned-off-by: Noriaki TAKAMIYA \u003ctakamiya@po.ntts.co.jp\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "90831639a65592d6d3dc888dc3341f54ebf932e6",
      "tree": "30f3c32f414ff69d76b2c733a71739229f00be97",
      "parents": [
        "91652be5d1b901673a8e926455f0ed146cfaa588"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Sat Dec 16 12:13:14 2006 +1100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Feb 07 09:20:59 2007 +1100"
      },
      "message": "[CRYPTO] fcrypt: Add FCrypt from RxRPC\n\nAdd a crypto module to provide FCrypt encryption as used by RxRPC.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "91652be5d1b901673a8e926455f0ed146cfaa588",
      "tree": "c7a7d3f48be35f64a918472f82ec1b94dc2bcbbd",
      "parents": [
        "a28091ae170cd06695bf461905c5b97a165633ba"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Sat Dec 16 12:09:02 2006 +1100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Feb 07 09:20:59 2007 +1100"
      },
      "message": "[CRYPTO] pcbc: Add Propagated CBC template\n\nAdd PCBC crypto template support as used by RxRPC.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "64470f1b8510699dc357a44004dc924bc139c917",
      "tree": "188d414266091c2220bae155651b2aacc2c6b9aa",
      "parents": [
        "c494e0705d670c51ac736c8c4d92750705fe3187"
      ],
      "author": {
        "name": "Rik Snel",
        "email": "rsnel@cube.dyndns.org",
        "time": "Sun Nov 26 09:43:10 2006 +1100"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Dec 06 18:38:56 2006 -0800"
      },
      "message": "[CRYPTO] lrw: Liskov Rivest Wagner, a tweakable narrow block cipher mode\n\nMain module, this implements the Liskov Rivest Wagner block cipher mode\nin the new blockcipher API. The implementation is based on ecb.c.\n\nThe LRW-32-AES specification I used can be found at:\nhttp://grouper.ieee.org/groups/1619/email/pdf00017.pdf\n\nIt implements the optimization specified as optional in the\nspecification, and in addition it uses optimized multiplication\nroutines from gf128mul.c.\n\nSince gf128mul.[ch] is not tested on bigendian, this cipher mode\nmay currently fail badly on bigendian machines.\n\nSigned-off-by: Rik Snel \u003crsnel@cube.dyndns.org\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "c494e0705d670c51ac736c8c4d92750705fe3187",
      "tree": "9f00826afc317f976c03ef4e77284b13204c0c9d",
      "parents": [
        "aec3694b987900de7ab789ea5749d673e0d634c4"
      ],
      "author": {
        "name": "Rik Snel",
        "email": "rsnel@cube.dyndns.org",
        "time": "Wed Nov 29 18:59:44 2006 +1100"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Dec 06 18:38:55 2006 -0800"
      },
      "message": "[CRYPTO] lib: table driven multiplications in GF(2^128)\n\nA lot of cypher modes need multiplications in GF(2^128). LRW, ABL, GCM...\nI use functions from this library in my LRW implementation and I will\nalso use them in my ABL (Arbitrary Block Length, an unencumbered (correct\nme if I am wrong, wide block cipher mode).\n\nElements of GF(2^128) must be presented as u128 *, it encourages automatic\nand proper alignment.\n\nThe library contains support for two different representations of GF(2^128),\nsee the comment in gf128mul.h. There different levels of optimization\n(memory/speed tradeoff).\n\nThe code is based on work by Dr Brian Gladman. Notable changes:\n- deletion of two optimization modes\n- change from u32 to u64 for faster handling on 64bit machines\n- support for \u0027bbe\u0027 representation in addition to the, already implemented,\n  \u0027lle\u0027 representation.\n- move \u0027inline void\u0027 functions from header to \u0027static void\u0027 in the\n  source file\n- update to use the linux coding style conventions\n\nThe original can be found at:\nhttp://fp.gladman.plus.com/AES/modes.vc8.19-06-06.zip\n\nThe copyright (and GPL statement) of the original author is preserved.\n\nSigned-off-by: Rik Snel \u003crsnel@cube.dyndns.org\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "333b0d7eeacbd47159daf23757aa81368470c409",
      "tree": "e05f1a3bed92833ab4d5f7c5dcc75ab8d8fcf245",
      "parents": [
        "45789328e5aa2de96d4467e4445418364e5378d7"
      ],
      "author": {
        "name": "Kazunori MIYAZAWA",
        "email": "miyazawa@linux-ipv6.org",
        "time": "Sat Oct 28 13:15:24 2006 +1000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Dec 06 18:38:49 2006 -0800"
      },
      "message": "[CRYPTO] xcbc: New algorithm\n\nThis is core code of XCBC.\n\nXCBC is an algorithm that forms a MAC algorithm out of a cipher algorithm.\nFor example, AES-XCBC-MAC is a MAC algorithm based on the AES cipher\nalgorithm.\n\nSigned-off-by: Kazunori MIYAZAWA \u003cmiyazawa@linux-ipv6.org\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "055bcee3102dc35f019b69df9c2618e9d6dd1c09",
      "tree": "3f7c68abbbb5041d570e4cb8588f3943530bc0b7",
      "parents": [
        "7226bc877a22244e8003924031435a4bffd52654"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Sat Aug 19 22:24:23 2006 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Sep 21 11:46:17 2006 +1000"
      },
      "message": "[CRYPTO] digest: Added user API for new hash type\n\nThe existing digest user interface is inadequate for support asynchronous\noperations.  For one it doesn\u0027t return a value to indicate success or\nfailure, nor does it take a per-operation descriptor which is essential\nfor the issuing of requests while other requests are still outstanding.\n\nThis patch is the first in a series of steps to remodel the interface\nfor asynchronous operations.\n\nFor the ease of transition the new interface will be known as \"hash\"\nwhile the old one will remain as \"digest\".\n\nThis patch also changes sg_next to allow chaining.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "db131ef9084110d9e82549c0a627e157e8bb99d7",
      "tree": "65330d3557a7dda47fa48876b7ea9cac1461301d",
      "parents": [
        "5cde0af2a9825dd1edaca233bd9590566579ef21"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Sep 21 11:44:08 2006 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Sep 21 11:44:08 2006 +1000"
      },
      "message": "[CRYPTO] cipher: Added block ciphers for CBC/ECB\n\nThis patch adds two block cipher algorithms, CBC and ECB.  These\nare implemented as templates on top of existing single-block cipher\nalgorithms.  They invoke the single-block cipher through the new\nencrypt_one/decrypt_one interface.\n\nThis also optimises the in-place encryption and decryption to remove\nthe cost of an IV copy each round.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "5cde0af2a9825dd1edaca233bd9590566579ef21",
      "tree": "e396297e3a2436d4a6ac77de63f95f2328c7a0fe",
      "parents": [
        "5c64097aa0f6dc4f27718ef47ca9a12538d62860"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Aug 22 00:07:53 2006 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Sep 21 11:41:52 2006 +1000"
      },
      "message": "[CRYPTO] cipher: Added block cipher type\n\nThis patch adds the new type of block ciphers.  Unlike current cipher\nalgorithms which operate on a single block at a time, block ciphers\noperate on an arbitrarily long linear area of data.  As it is block-based,\nit will skip any data remaining at the end which cannot form a block.\n\nThe block cipher has one major difference when compared to the existing\nblock cipher implementation.  The sg walking is now performed by the\nalgorithm rather than the cipher mid-layer.  This is needed for drivers\nthat directly support sg lists.  It also improves performance for all\nalgorithms as it reduces the total number of indirect calls by one.\n\nIn future the existing cipher algorithm will be converted to only have\na single-block interface.  This will be done after all existing users\nhave switched over to the new block cipher type.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "2b8c19dbdc692e81243a328725a02efb77b144a5",
      "tree": "f9256d5515cc315d54971f62e0e9812d5db572ba",
      "parents": [
        "2825982d9d66ebba4b532a07391dfbb357f71c5f"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Sep 21 11:31:44 2006 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Sep 21 11:31:44 2006 +1000"
      },
      "message": "[CRYPTO] api: Add cryptomgr\n\nThe cryptomgr module is a simple manager of crypto algorithm instances.\nIt ensures that parameterised algorithms of the type tmpl(alg) (e.g.,\ncbc(aes)) are always created.\n\nThis is meant to satisfy the needs for most users.  For more complex\ncases such as deeper combinations or multiple parameters, a netlink\nmodule will be created which allows arbitrary expressions to be parsed\nin user-space.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "cce9e06d100df19a327b19f23adad76e7bf63edd",
      "tree": "ce10f50679db9ed8db92912c104eef1f05efc3c5",
      "parents": [
        "9409f38a0c8773c04bff8dda8c552d7ea013d956"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Aug 21 21:08:13 2006 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Sep 21 11:16:30 2006 +1000"
      },
      "message": "[CRYPTO] api: Split out low-level API\n\nThe crypto API is made up of the part facing users such as IPsec and the\nlow-level part which is used by cryptographic entities such as algorithms.\nThis patch splits out the latter so that the two APIs are more clearly\ndelineated.  As a bonus the low-level API can now be modularised if all\nalgorithms are built as modules.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "2729bb427f686e47970406d6bde6b11892885f29",
      "tree": "6c17bab6970fc4bcc92c0de76d174e35d8043844",
      "parents": [
        "799111020c66c41aef621a3b53ad112543754124"
      ],
      "author": {
        "name": "Joachim Fritschi",
        "email": "jfritschi@freenet.de",
        "time": "Tue Jun 20 20:37:23 2006 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Sep 21 11:16:27 2006 +1000"
      },
      "message": "[CRYPTO] twofish: Split out common c code\n\nThis patch splits up the twofish crypto routine into a common part ( key\nsetup  ) which will be uses by all twofish crypto modules ( generic-c , i586\nassembler and x86_64 assembler ) and generic-c part. It also creates a new\nheader file which will be used by all 3 modules.\n\nThis eliminates all code duplication.\n\nCorrectness was verified with the tcrypt module and automated test scripts.\n\nSigned-off-by: Joachim Fritschi \u003cjfritschi@freenet.de\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
