)]}'
{
  "log": [
    {
      "commit": "7acba5f3a6ff10f1424c309d0d34d2b713233019",
      "tree": "268d6fc5498f71f907466b66b6fe8312e954f5e3",
      "parents": [
        "13fcb9e63892f18de043e8308bc645ae5baf4aa4"
      ],
      "author": {
        "name": "Wouter Bolsterlee",
        "email": "uws@xs4all.nl",
        "time": "Fri Jun 20 20:07:46 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 07:12:24 2014"
      },
      "message": "Increase attempts for recovering RSA (p,q) from (n,e,d)\n\nBump the maximum number of iterations to recover (p,q) given (n,e,d) to\nincrease the chance that the algorithm succeeds. The algorithm used is a\nprobabilistic one with a 1/2 chance of finding the right value in each\niteration, so it\u0027s likely that only a few iterations are needed.\n\nHowever, in some extreme cases this may still fail. Bumping the maximum\nnumber allow the algorithm to correctly find the right values for these\ncases. This changes bumps the number of iterations from 50 to 500 (the\nvalue \u0027a\u0027 is increased by 2 in each step), and hence reduces the chance\nof failure from 2**-50 to 2**-500.\n\nNote that this change does *not* result in a performance degradation.\n"
    },
    {
      "commit": "13fcb9e63892f18de043e8308bc645ae5baf4aa4",
      "tree": "8b94157dff74dabfad2023861606e8ed331637ca",
      "parents": [
        "9e2b6af8c34efba80d141490b48b82a3c2185ae5"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Tue May 13 06:19:55 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 06:47:53 2014"
      },
      "message": "Realign V tables dynamically\n"
    },
    {
      "commit": "9e2b6af8c34efba80d141490b48b82a3c2185ae5",
      "tree": "937e96e8b2d1f229b1b152f87b2db977e2776510",
      "parents": [
        "fc266f4ae9138022df4808e19c579c8a5c60f24b"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sat Apr 26 07:10:19 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 06:47:53 2014"
      },
      "message": "Make Cipher.galois module private\n"
    },
    {
      "commit": "fc266f4ae9138022df4808e19c579c8a5c60f24b",
      "tree": "6dbfe606129f562cbc6820e23cb823a29e1c1ade",
      "parents": [
        "947b554d85012cf35185ded38ef3484de010d2cf"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 06:47:49 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 06:47:49 2014"
      },
      "message": "Update configure script from configure.ac\n"
    },
    {
      "commit": "947b554d85012cf35185ded38ef3484de010d2cf",
      "tree": "8f1d16cc5a980d59dd7fadb70c1886009219ce5a",
      "parents": [
        "0782d68840d0ebf850516e606e398b8a5396eb64"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sun Mar 23 17:46:55 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 06:38:31 2014"
      },
      "message": "Make GHASH more robust against timing attacks.\n\nIn order to speed up as much as possible the GHASH,\nthe current implementation expands the 16 byte hash key\n(H) into a table of 64 KBytes. However, that is sensitive\nto cache-based timing attacks.\n\nIf we assume that access to data inside the same cache line\nis constant-time (likely), fitting a table item into a cache\nline may help against the attacks.\n\nThis patch reduce the pre-computed table from 64K to 4K\nand aligns every item to a 32 byte boundary (since most modern\nCPUs have cache line of that size or larger).\n\nThis patch will reduce the overall performance.\n\nThis patch also reverts commit 965871a727 (\"GCM mode:\nOptimize key setup for GCM mode\") since I actually\ngot conflicting benchmark results.\n"
    },
    {
      "commit": "0782d68840d0ebf850516e606e398b8a5396eb64",
      "tree": "6359b6f7e320b50f2b2f07f6b148467ddaa80944",
      "parents": [
        "f49fd0e1b57071e52200806d095679753fe36e17"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Fri Dec 27 22:44:38 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 06:30:26 2014"
      },
      "message": "Add side-channel countermeasures to DSA.\n\nThis patch strenghten the DSA signing code against\nside-channel attacks.\n\nThe DSA signing formulae:\n\nr \u003d (g^{k} mod p) mod q\ns \u003d k^{-1} * (H(m) + r*x) mod q\n\nbecomes:\n\nb \u003d random in [1..q)\nr \u003d (g^{k} mod p) mod q\ns \u003d (b * k)^{-1} * (b*H(m) + r*(b*x)) mod q\n\nIn this way we avoid that the secret (x) gets multiplied\nby a random factor (r) which is immediately disclosed\nto an attacker (which we assume can both collect (r) and\nalso monitor the side-channel produced by the multiplication).\n\nSee also attack DSA_2 in:\n\n\"Minimum Requirements for Evaluating Side-Channel Attack Resistance\nof RSA, DSA and Diffie-Hellman Key Exchange Implementations\", BSI\n"
    },
    {
      "commit": "f49fd0e1b57071e52200806d095679753fe36e17",
      "tree": "a908ae9a87dedeb3663dbb0a625345a228f8c4e3",
      "parents": [
        "58de28a5d32bc10e15766e5a59f41b07397cc6cb"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Wed May 07 10:20:46 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 04:28:37 2014"
      },
      "message": "Extended fix for the RSA boundary check\n"
    },
    {
      "commit": "58de28a5d32bc10e15766e5a59f41b07397cc6cb",
      "tree": "17cb7060a70ed01244aca3b62c9cd72453e9031e",
      "parents": [
        "629c26c21857f205b08211d7b1333eb5580c525d"
      ],
      "author": {
        "name": "Richard Mitchell",
        "email": "richard.j.mitchell@gmail.com",
        "time": "Mon Apr 28 15:58:27 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 04:08:32 2014"
      },
      "message": "Fix speedtest run for ECB modes.\n"
    },
    {
      "commit": "629c26c21857f205b08211d7b1333eb5580c525d",
      "tree": "5e187804055203acce77ce6eb452031cdb88aaa3",
      "parents": [
        "7d6db864ea3f1d6e29cb5214cbfcc894d6091512"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Tue Mar 04 21:04:34 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:42:00 2014"
      },
      "message": "Remove a few custom exception types.\n\nThe following custom exceptions are replaced with ValueError:\n* Crypto.Util.PaddingError\n* Crypto.PublicKey.KeyFormatError\n\nThe custom Crypto.Util.asn1.NoDerElementError is now private to the\nmodule.\n\nSome white spaces have been removed.\n"
    },
    {
      "commit": "7d6db864ea3f1d6e29cb5214cbfcc894d6091512",
      "tree": "3d1fa65ed359ba5dbb254d2f82b0f20080990d68",
      "parents": [
        "e2e21d74b9b8607a84e612475a4141e2864875cc"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 01:30:34 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:17:48 2014"
      },
      "message": "tox.ini: We don\u0027t support pypy; tox no longer supports Python 2.5; add comment\n"
    },
    {
      "commit": "e2e21d74b9b8607a84e612475a4141e2864875cc",
      "tree": "321898a8c94365087f710c60c72f8369b0b368b3",
      "parents": [
        "f070adf984c6bb3ef72a3bf3d05648ea304eaa61"
      ],
      "author": {
        "name": "Marc Abramowitz",
        "email": "marc@marc-abramowitz.com",
        "time": "Sun Nov 10 16:10:30 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:17:48 2014"
      },
      "message": "Add support for tox\n"
    },
    {
      "commit": "f070adf984c6bb3ef72a3bf3d05648ea304eaa61",
      "tree": "3ca2aa7a4be3bc10a7b70385445ebf7e970d8298",
      "parents": [
        "9e171b794f102f5745076051202997df9eac254a"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:17:45 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:17:45 2014"
      },
      "message": "Fix tobytes() broken by previous commit.\n\nPython 2.1 str objects don\u0027t have a .decode() method.\n"
    },
    {
      "commit": "9e171b794f102f5745076051202997df9eac254a",
      "tree": "905358f99a2bb285083f1cf821abfc806b629349",
      "parents": [
        "de67e51324fc7ecfb553046938b2f734e48ce9e7"
      ],
      "author": {
        "name": "Richard Mitchell",
        "email": "richard.j.mitchell@gmail.com",
        "time": "Tue Apr 29 13:55:26 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:16:05 2014"
      },
      "message": "Get rid of catch-all exceptions. LP#1178485.\n"
    },
    {
      "commit": "de67e51324fc7ecfb553046938b2f734e48ce9e7",
      "tree": "014b569f4dbe757b474fe0cc8bbc5d050ad0f6aa",
      "parents": [
        "33859d41784c85a64da5b6cf8856f086b2c77b8f",
        "780eb557aedd3de7689aa215b3f13082dc60e2e1"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:11:46 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:15:21 2014"
      },
      "message": "Upgrade libtomcrypt 1.16 -\u003e 1.17 (LP#1264130)\n\nThis should fix a FreeBSD build issue:\nhttps://bugs.launchpad.net/pycrypto/+bug/1264130\n\nThanks to Richard Mitchell \u003crichard.j.mitchell@gmail.com\u003e for suggesting\nhow to fix this.\n"
    },
    {
      "commit": "780eb557aedd3de7689aa215b3f13082dc60e2e1",
      "tree": "7b3a187f2f19caad7ebfa446b67b7f688f53516f",
      "parents": [
        "696b31bc95cb98dc17e1bc6daad196cff64af29b"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:05:02 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:10:24 2014"
      },
      "message": "PyCrypto customizations: Declare things static so that we don\u0027t leak symbols\n"
    },
    {
      "commit": "696b31bc95cb98dc17e1bc6daad196cff64af29b",
      "tree": "56e7e7f98727aa1c0035628cf4dd9c11088ba23f",
      "parents": [],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:09:49 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 03:09:49 2014"
      },
      "message": "Pristine files from libtomcrypt-1.17\n\nOriginal tarball downloaded from:\n\n    http://libtom.org/files/crypt-1.17.tar.bz2\n    http://libtom.org/files/crypt-1.17.tar.bz2.sig\n\nSHA256 sums:\n\n    e33b47d77a495091c8703175a25c8228aff043140b2554c08a3c3cd71f79d116 *crypt-1.17.tar.bz2\n    8f52ddfb17656f7a2e510d92a26c8b33e0c1f431af7febd9cf1298a77b5fd932 *crypt-1.17.tar.bz2.sig\n\nlibtomcrypt-1.17/LICENSE says:\n\n    LibTomCrypt is public domain.  As should all quality software be.\n\n    Tom St Denis\n"
    },
    {
      "commit": "33859d41784c85a64da5b6cf8856f086b2c77b8f",
      "tree": "bf419f08a68a007ae7d6826ea2dab70b1f302159",
      "parents": [
        "8271a21c3eda83f425f9cc5ec26c825c25771af7"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 02:50:22 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 02:50:22 2014"
      },
      "message": "DES3: Move \"Two-key 3DES\" support into DES.c instead of customizing tomcrypt_des.c\n"
    },
    {
      "commit": "8271a21c3eda83f425f9cc5ec26c825c25771af7",
      "tree": "d080d85fd9f45fd035a7ce303f60705e7830808a",
      "parents": [
        "2549c4dc2d47309a7635b85341e8450ce3eab9c6"
      ],
      "author": {
        "name": "Richard Mitchell",
        "email": "richard.j.mitchell@gmail.com",
        "time": "Mon Apr 28 17:50:37 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 00:26:54 2014"
      },
      "message": "Clearer wording on Linux installation dependencies. One doesn\u0027t just require them if the build fails with a specific error. LP:1270996.\n"
    },
    {
      "commit": "2549c4dc2d47309a7635b85341e8450ce3eab9c6",
      "tree": "62d8b423d01285b57e407d00893fbd4f0d03f81e",
      "parents": [
        "8dcd95ed3ce3bcf799c2da66d9650ba24e875763"
      ],
      "author": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Wed Nov 06 16:24:19 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 00:26:16 2014"
      },
      "message": "Workaround missing bit_AES defines\n\nclang provides the same constant as bit_AESNI in some versions, and doesn\u0027t\nprovide it at all in others.\n\nSigned-off-by: Sebastian Ramacher \u003csebastian+dev@ramacher.at\u003e\n"
    },
    {
      "commit": "8dcd95ed3ce3bcf799c2da66d9650ba24e875763",
      "tree": "10664f0f1a95308aa21c08a42b3bd8360c4ed246",
      "parents": [
        "0bf79348351d9f505458325be0fd69a8f0ce4641"
      ],
      "author": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Tue Nov 05 12:44:57 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 00:26:16 2014"
      },
      "message": "Fix compilation with clang-3.3\n\nclang-3.3 is stricter regarding the second argument of _mm_shuffle_epi32.\n\nSigned-off-by: Sebastian Ramacher \u003csebastian+dev@ramacher.at\u003e\n"
    },
    {
      "commit": "0bf79348351d9f505458325be0fd69a8f0ce4641",
      "tree": "512818611fb4a1a4408ea7e47b5fdc8040c79f75",
      "parents": [
        "a6fa8e838f9d1322a951d7a560153d723c590227"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 00:13:01 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jun 23 00:13:01 2014"
      },
      "message": "Remove 16-year-old .bzrignore file\n"
    },
    {
      "commit": "a6fa8e838f9d1322a951d7a560153d723c590227",
      "tree": "bd8462738711b15e71829d8a9010b6ca21b3af81",
      "parents": [
        "b15dd2db216e25b404e1f9209a054f9704f35c0b"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Jun 22 23:46:31 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Jun 22 23:46:31 2014"
      },
      "message": "Bugs are now tracked on GitHub\n"
    },
    {
      "commit": "b15dd2db216e25b404e1f9209a054f9704f35c0b",
      "tree": "57662049a777dfc2457ab9a3bf0fa9c2fc7d6d3c",
      "parents": [
        "54f2bc5b81124bfff8fa7f1b7cd6287a1fee1152"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Jun 22 23:21:40 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Jun 22 23:21:40 2014"
      },
      "message": "Update .travis.yml to test against most Python versions we support (Linux only)\n"
    },
    {
      "commit": "54f2bc5b81124bfff8fa7f1b7cd6287a1fee1152",
      "tree": "177d23b85d97835c8a7ba90598b8b7d5557e100d",
      "parents": [
        "0ac94701bb52fef566f96ce43eb8db6befee9b60"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Jun 22 10:32:46 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Jun 22 11:07:24 2014"
      },
      "message": "Fix tests when running under \"python -OO\" (PYTHONOPTIMIZE set to 1 or 2)\n"
    },
    {
      "commit": "0ac94701bb52fef566f96ce43eb8db6befee9b60",
      "tree": "cf99cd3ce278d02631a4bb9cecbbf4c6589f9fdb",
      "parents": [
        "453f45c494d21dac7b08b49e81963f7eb4c33e0f"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Jun 22 10:06:01 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Jun 22 11:07:24 2014"
      },
      "message": "Fix BytesWarning when running with \"python3 -bb\"\n"
    },
    {
      "commit": "453f45c494d21dac7b08b49e81963f7eb4c33e0f",
      "tree": "82cccbc8ae90cd706584e76072653812912baebc",
      "parents": [
        "2d1aecd731f91f7367ef2a4069d305e2a1b488c0"
      ],
      "author": {
        "name": "Lucas Garron",
        "email": "lucasg@gmx.de",
        "time": "Sat Oct 12 21:58:26 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Jun 22 11:07:24 2014"
      },
      "message": "Travis CI config file.\n"
    },
    {
      "commit": "2d1aecd731f91f7367ef2a4069d305e2a1b488c0",
      "tree": "4e9f8c58c8ce19f78f59df36f1c73c64f38712cf",
      "parents": [
        "c007f6e77336a9c7cc3f6cf7340895782bb67235",
        "6e16b1720f31e8803658aedd793b27929b04dc8f"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 23:04:38 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 23:04:38 2014"
      },
      "message": "Merge branch \u0027fix-aesni-aligned-malloc\u0027\n"
    },
    {
      "commit": "6e16b1720f31e8803658aedd793b27929b04dc8f",
      "tree": "f3e3976d49a592f3b283415c1a69aa80036a63a5",
      "parents": [
        "a159be91e140b3e8c80baa016034d2f9a228312f"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 23:04:18 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 23:04:21 2014"
      },
      "message": "AESNI: Fix order of alignment \u0026 size args in _aligned_malloc\n"
    },
    {
      "commit": "c007f6e77336a9c7cc3f6cf7340895782bb67235",
      "tree": "1a9ed0bcf5c60252dbf2ed4e2d6204cbafa1ba66",
      "parents": [
        "aa8bb89a2006d930082f5b88bfa8ee574e4d82b4"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 22:45:37 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 22:48:25 2014"
      },
      "message": "Fix tools/create-pythons.sh building Python on Linux 3.x or later (sys.platform should be \"linux2\", not \"linux3\")\n"
    },
    {
      "commit": "aa8bb89a2006d930082f5b88bfa8ee574e4d82b4",
      "tree": "c243386ea9a1fadc0b9f18e891382aca25646121",
      "parents": [
        "6a504279a5af1867c0900fb81e22d624142f9bb2"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 22:22:45 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 22:22:45 2014"
      },
      "message": "Oops.  Actually build Python 3.4.0rc1 in tools/create-pythons.sh\n"
    },
    {
      "commit": "6a504279a5af1867c0900fb81e22d624142f9bb2",
      "tree": "7cce22f0c46b6bbabbdf3e51666f2b0475ce372f",
      "parents": [
        "1eca1898d3a6e0a97c98ede822d89a917b2cd53e"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 21:45:06 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 21:45:06 2014"
      },
      "message": "Add Python 3.4.0rc1 to tools/create-pythons.sh\n"
    },
    {
      "commit": "1eca1898d3a6e0a97c98ede822d89a917b2cd53e",
      "tree": "c5a5340e8df26a53a42574509e168b20d5ade3b9",
      "parents": [
        "a159be91e140b3e8c80baa016034d2f9a228312f"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 21:34:35 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 21:34:35 2014"
      },
      "message": "Regenerate autoconf files\n"
    },
    {
      "commit": "a159be91e140b3e8c80baa016034d2f9a228312f",
      "tree": "eb0764fcc0be504041b6e0cbea98f1ecea84e907",
      "parents": [
        "0e8471c22c5ede986be4c1d226d1e16b157cb0b5"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 21:29:10 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 21:33:18 2014"
      },
      "message": "Clean up AESNI aligned malloc() wrappers\n\n- Set errno properly when using posix_memalign\n- Rename to aligned_malloc_wrapper / aligned_free_wrapper\n- Use a single set of #if blocks, to avoid the possibility of\n  mismatching them.\n"
    },
    {
      "commit": "0e8471c22c5ede986be4c1d226d1e16b157cb0b5",
      "tree": "7bff3671b8c4897fc4c0679eb632fa643588809a",
      "parents": [
        "87280f4419c8befffcdd153468aba4582493dcc4",
        "6a3bd8bef9522f0df7cb259cccc0fdec917e2da8"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 21:32:25 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 21:32:25 2014"
      },
      "message": "Merge pull request #62 (Fixes AESNI alignment bug)\n"
    },
    {
      "commit": "87280f4419c8befffcdd153468aba4582493dcc4",
      "tree": "7e3069412b1fee27503ff8d102250ffb60c3fd48",
      "parents": [
        "eb51036c9b8de72b53bcd2f0754c698d2ad40380"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 21:02:07 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 21:08:45 2014"
      },
      "message": "Fix handle_fastmath_import_error (broken due to incorrect path in the previous commit)\n\nTested on py21-py33 by force-uninstalling libgmp10 after building.\n"
    },
    {
      "commit": "eb51036c9b8de72b53bcd2f0754c698d2ad40380",
      "tree": "ded3d471c9c15b6b1a1401d3f41bf1164e775918",
      "parents": [
        "5dc0db200952fe4ea65e4100f4e0c1a2bb79b9f2"
      ],
      "author": {
        "name": "Marc Abramowitz",
        "email": "marc@marc-abramowitz.com",
        "time": "Mon Nov 11 22:45:42 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 20:40:25 2014"
      },
      "message": "Refactor 3 places handling fastmath ImportError\n\nso that they call `Crypto.SelfTest.st_common.handle_fastmath_import_error`,\nthereby eliminiating duplicate code.\n"
    },
    {
      "commit": "5dc0db200952fe4ea65e4100f4e0c1a2bb79b9f2",
      "tree": "bfd62a98b2afcaf5e96be2ad016725e61959ec78",
      "parents": [
        "da8b67318c657af432001c1b425fd8ab5e5879ab"
      ],
      "author": {
        "name": "Marc Abramowitz",
        "email": "marc@marc-abramowitz.com",
        "time": "Mon Nov 11 21:57:06 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 20:40:25 2014"
      },
      "message": "Use different method for getting ext_suffix\n\n```\next_suffix \u003d get_config_var(\"EXT_SUFFIX\") or get_config_var(\"SO\")\n```\n\nbecause `get_config_var(\"SO\")` returns None in Python 3.4.0a4 because the \"SO\"\nvariable is deprecated and \"EXT_SUFFIX\" is the new way to get this information\n(see: http://bugs.python.org/issue19555)\n\nThis fixes `TypeError: Can\u0027t convert \u0027NoneType\u0027 object to str implicitly`\nerrors when running the tests on Python 3.4.0a4.\n"
    },
    {
      "commit": "6a3bd8bef9522f0df7cb259cccc0fdec917e2da8",
      "tree": "0d3ca9366af1a99dd9e565cf117ad4e57e25d0cd",
      "parents": [
        "85c2ac670937bbe5c369e6f205213453515e37c1"
      ],
      "author": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Sat Feb 22 16:08:47 2014"
      },
      "committer": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Sat Feb 22 16:08:47 2014"
      },
      "message": "Prefer C11\u0027s aligned_alloc if it is available\n\nSigned-off-by: Sebastian Ramacher \u003csebastian+dev@ramacher.at\u003e\n"
    },
    {
      "commit": "85c2ac670937bbe5c369e6f205213453515e37c1",
      "tree": "d7ddeead03a2e93229f4badef1193f486b112301",
      "parents": [
        "694f536eb05c5dea85ad0488fedef122bb124237"
      ],
      "author": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Sat Feb 22 16:08:13 2014"
      },
      "committer": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Sat Feb 22 16:08:13 2014"
      },
      "message": "Check return value of posix_memalign\n\nSigned-off-by: Sebastian Ramacher \u003csebastian+dev@ramacher.at\u003e\n"
    },
    {
      "commit": "694f536eb05c5dea85ad0488fedef122bb124237",
      "tree": "3463a3ce56c735137d446a376ae11b3fbbc461f3",
      "parents": [
        "7d16bb41592155949a711815da2a39202052b423"
      ],
      "author": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Sat Feb 22 16:07:50 2014"
      },
      "committer": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Sat Feb 22 16:07:50 2014"
      },
      "message": "Add wrapper for free\n\nFor _aligned_malloc calling free is illegal. We need to use_aligned_free\ninstead.\n\nSigned-off-by: Sebastian Ramacher \u003csebastian+dev@ramacher.at\u003e\n"
    },
    {
      "commit": "da8b67318c657af432001c1b425fd8ab5e5879ab",
      "tree": "cf47772358078c66a8145ddda21e71e9916d3680",
      "parents": [
        "7c5a1ebb9944b957094207e2f49b37c3063d192a"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 08:04:58 2014"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 08:04:58 2014"
      },
      "message": "Fix typo in error string\n"
    },
    {
      "commit": "7c5a1ebb9944b957094207e2f49b37c3063d192a",
      "tree": "c1229d9ae0233a436a875f1b13c5fc730dbb4fcd",
      "parents": [
        "74efe78ac1c82fb09d4d390093d4c9597167d3ec"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Tue Dec 17 21:09:22 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 07:59:53 2014"
      },
      "message": "Fixed sentence in CCM example\n"
    },
    {
      "commit": "74efe78ac1c82fb09d4d390093d4c9597167d3ec",
      "tree": "d420cc0f80209c0c13470f96ff6a46a38b226581",
      "parents": [
        "b08530a098a045e949fae6ec87cb9a5e25d446b3"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Tue Dec 17 21:05:57 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 07:59:53 2014"
      },
      "message": "Better example (with nonce) for Counter object\n"
    },
    {
      "commit": "b08530a098a045e949fae6ec87cb9a5e25d446b3",
      "tree": "5c0ded987e49b4204c3024224779937d212c1c91",
      "parents": [
        "8dbe0dc3eea5c689d4f76b37b93fe216cf1f00d4"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Tue Dec 17 21:00:33 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 07:59:53 2014"
      },
      "message": "Fix exception string for incorrect key length (DES)\n"
    },
    {
      "commit": "8dbe0dc3eea5c689d4f76b37b93fe216cf1f00d4",
      "tree": "26838a55707ebba81f6fedce36bb64ae1bd4959e",
      "parents": [
        "860523d288793d0ebc4867ea0d5234712562bc32"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sun Dec 22 21:24:46 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sat Feb 22 07:43:06 2014"
      },
      "message": "Throw exception when IV is used with ECB or CTR\n\nThe IV parameter is currently ignored when initializing\na cipher in ECB or CTR mode.\n\nFor CTR mode, it is confusing: it takes some time to see\nthat a different parameter is needed (the counter).\n\nFor ECB mode, it is outright dangerous.\n\nThis patch forces an exception to be raised.\n"
    },
    {
      "commit": "860523d288793d0ebc4867ea0d5234712562bc32",
      "tree": "f7b4622af5bd39aee2958baffaa479cbe7f08d7e",
      "parents": [
        "af058ee6f5da391a05275470ab4a4a96aa22b350"
      ],
      "author": {
        "name": "W. Trevor King",
        "email": "wking@tremily.us",
        "time": "Tue Dec 24 00:23:32 2013"
      },
      "committer": {
        "name": "W. Trevor King",
        "email": "wking@tremily.us",
        "time": "Tue Dec 24 00:23:32 2013"
      },
      "message": "Sign the hash in the the PKCS1_PSS doctest, not the key\n\nAs it stood before this commit, the hash was never used in the signing\nprocess.  It looks like the bug was introduced by e053629 (Restructure\nboth PKCS#1 signature schemes as objects, 2011-10-16), which changed:\n\n-    \u003e\u003e\u003e signature \u003d PKCS1_PSS.sign(h, key)\n+    \u003e\u003e\u003e signer \u003d PKCS1_PSS.new(key)\n+    \u003e\u003e\u003e signature \u003d PKCS1_PSS.sign(key)\n"
    },
    {
      "commit": "7d16bb41592155949a711815da2a39202052b423",
      "tree": "fae6f0b5db2a4b1cf254e06edaaac23700041725",
      "parents": [
        "8b68505248a54477f7cb81b30e33520d9c5d1083"
      ],
      "author": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Mon Oct 28 20:44:35 2013"
      },
      "committer": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Mon Oct 28 20:44:35 2013"
      },
      "message": "Add a wrapper for posix_memalign and friends\n\nThis also fixes the order of arguments passed to _aligned_malloc.\n\nSigned-off-by: Sebastian Ramacher \u003csebastian+dev@ramacher.at\u003e\n"
    },
    {
      "commit": "8b68505248a54477f7cb81b30e33520d9c5d1083",
      "tree": "d7c3f7b766ffa99f8edf4105d3ae8f907edde473",
      "parents": [
        "8cde8b9893819e9586bde2ce9be84f24689ff0d9"
      ],
      "author": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Mon Oct 28 01:52:39 2013"
      },
      "committer": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Mon Oct 28 16:57:36 2013"
      },
      "message": "Make sure that ek and dk are aligned at 16 byte boundaries\n\nek and dk are used as operands in instructions that require 16 byte alignment.\n\nThanks to Greg Price for finding this issue.\n\nSigned-off-by: Sebastian Ramacher \u003csebastian+dev@ramacher.at\u003e\n"
    },
    {
      "commit": "8cde8b9893819e9586bde2ce9be84f24689ff0d9",
      "tree": "b0ad65ded19ca599e66f5f80fc220eb7e8980e34",
      "parents": [
        "4b2a15fef3e9f0ca3809a54ae2a18109dae4ae01"
      ],
      "author": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Mon Oct 28 01:47:48 2013"
      },
      "committer": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Mon Oct 28 16:24:20 2013"
      },
      "message": "Add block_finalize to clean up block_state from ALGdealloc\n\nThis is the counterpart to block_init which is called from ALGnew.\n\nSigned-off-by: Sebastian Ramacher \u003csebastian+dev@ramacher.at\u003e\n"
    },
    {
      "commit": "4b2a15fef3e9f0ca3809a54ae2a18109dae4ae01",
      "tree": "fa86d9354f53ec66f0c332cb4b0f4bc7f2b22731",
      "parents": [
        "af058ee6f5da391a05275470ab4a4a96aa22b350"
      ],
      "author": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Mon Oct 28 01:36:19 2013"
      },
      "committer": {
        "name": "Sebastian Ramacher",
        "email": "sebastian+dev@ramacher.at",
        "time": "Mon Oct 28 01:36:19 2013"
      },
      "message": "Be more consistent with spaces and tabs\n\nSigned-off-by: Sebastian Ramacher \u003csebastian+dev@ramacher.at\u003e\n"
    },
    {
      "commit": "af058ee6f5da391a05275470ab4a4a96aa22b350",
      "tree": "053e0ec003aff73373a0c6cd6f7c732e73dc0b73",
      "parents": [
        "c09de2524e6160a9eafe9e8fdcaf3dd42ab3681d"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 21 18:23:43 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 21 18:23:43 2013"
      },
      "message": "Release v2.7a1\n"
    },
    {
      "commit": "c09de2524e6160a9eafe9e8fdcaf3dd42ab3681d",
      "tree": "b3c52909a262ee621284d2fd603574d396132618",
      "parents": [
        "7bb217aedd421fc89120baf98b719bf49c4f5fb7"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 21 18:22:50 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 21 18:22:50 2013"
      },
      "message": "Update ChangeLog\n"
    },
    {
      "commit": "7bb217aedd421fc89120baf98b719bf49c4f5fb7",
      "tree": "a48788bf16521a2b9331b4847f7e681aae38cb99",
      "parents": [
        "141eee1093bc9adbbdc3b3b3e90bde868d46eeec"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 21 00:46:14 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 21 00:48:54 2013"
      },
      "message": "Rename S2V -\u003e _S2V until we come up with a real PRF API\n"
    },
    {
      "commit": "141eee1093bc9adbbdc3b3b3e90bde868d46eeec",
      "tree": "dc52fb9933535df3f2bc46148357d392c8103743",
      "parents": [
        "1fc5c01f197e2bec97b43020ebd0c3176a2acc95"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Sep 30 00:41:13 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 21 00:36:06 2013"
      },
      "message": "hexverify: Fix handling unicode strings on Python 3.2\n\nWe were getting this error on Python 3.2:\n\n    ERROR: runTest (Crypto.SelfTest.Hash.common.MACSelfTest)\n    CMAC #17: NIST SP 800 38B D.7 Example 17\n    ----------------------------------------------------------------------\n    Traceback (most recent call last):\n      File \"build/lib.linux-x86_64-3.2/Crypto/SelfTest/Hash/common.py\", line 199, in runTest\n        self.assertRaises(ValueError, h.hexverify, \"4556\")\n      File \"/home/dwon/py/pythons/python3.2/lib/python3.2/unittest/case.py\", line 557, in assertRaises\n        callableObj(*args, **kwargs)\n      File \"build/lib.linux-x86_64-3.2/Crypto/Hash/CMAC.py\", line 323, in hexverify\n        self.verify(unhexlify(hex_mac_tag))\n    TypeError: \u0027str\u0027 does not support the buffer interface\n"
    },
    {
      "commit": "1fc5c01f197e2bec97b43020ebd0c3176a2acc95",
      "tree": "ea732f3c7a3171d08829e9402867216d35b3c833",
      "parents": [
        "ff9009abb830741b94d39c0bc8f98a15dbf464e2"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Sep 30 00:18:54 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:22 2013"
      },
      "message": "block_template: Fix compiler warning (%i -\u003e %zi)\n\nThis fixes this warning:\n\n    In file included from src/CAST.c:453:0:\n    src/block_template.c: In function ‘ALG_Encrypt’:\n    src/block_template.c:426:12: warning: format ‘%i’ expects argument of\n    type ‘int’, but argument 3 has type ‘Py_ssize_t’ [-Wformat\u003d]\n                ctr-\u003ebuf_size, BLOCK_SIZE);\n                ^\n"
    },
    {
      "commit": "ff9009abb830741b94d39c0bc8f98a15dbf464e2",
      "tree": "cdfb149a63779495f13c86b41a0b3bd508f40b88",
      "parents": [
        "acbd4dedc88325c4799d5f4df8a2f8bc0a040479"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Sep 29 21:55:26 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:22 2013"
      },
      "message": "Make MODE_OPENPGP accept uppercase \u0027IV\u0027 parameter.\n\nThis is for consistency with the rest of PyCrypto.\n\nCloses: https://bugs.launchpad.net/pycrypto/+bug/1132550\n"
    },
    {
      "commit": "acbd4dedc88325c4799d5f4df8a2f8bc0a040479",
      "tree": "014e1f6bbcb6aab30b9712fde7f36122cf24106f",
      "parents": [
        "0ae375d573ab5e2186664e08f9da179dbe078552"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Sep 29 10:01:28 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:22 2013"
      },
      "message": "More ValueError -\u003e TypeError\n"
    },
    {
      "commit": "0ae375d573ab5e2186664e08f9da179dbe078552",
      "tree": "310c5aba33939e7a13b599e826efc133a7beffc7",
      "parents": [
        "3e706bfc6a65efe71ea592decda651e5fd452b70"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Sep 29 05:06:12 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:22 2013"
      },
      "message": "CMAC: raise TypeError instead of ValueError when ciphermod is missing or unusable\n\nThis makes the CMAC module behave more like most Python functions do\nwhen a required argument is missing, and reserves ValueError for a MAC\nfailure.\n"
    },
    {
      "commit": "3e706bfc6a65efe71ea592decda651e5fd452b70",
      "tree": "0d516cef9a68c6f5e84022a06c296fd56ff9bbe7",
      "parents": [
        "2062e5f843fa54d9da45e5d53652f3fb5dbbd97e"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Sep 29 21:48:19 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:22 2013"
      },
      "message": "_CBCMAC: Rename ignite() -\u003e _ignite()\n\nI don\u0027t want to make this a public API just yet.\n"
    },
    {
      "commit": "2062e5f843fa54d9da45e5d53652f3fb5dbbd97e",
      "tree": "46251d5d19d1a2c8563f42eed95905416e134043",
      "parents": [
        "965871a72773457d73fda6a1a2970a4279dcbe6f"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sun Aug 18 21:07:32 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:22 2013"
      },
      "message": "Add encrypt_and_digest() and decrypt_and_verify()\n\nThis patch adds encrypt_and_digest() and decrypt_and_verify()\nmethods to a cipher object.\n\nIn most cases they are just shortcuts to the existing functions.\nFor SIV mode, decrypt_and_verify() replaces decrypt().\n\n[dlitz@dlitz.net: Squashed with bugfix commit:]\n\nBug in encrypt_and_digest() (all AEAD modes)\n\ndecrypt() was being called instead of encrypt().\nAdded also a unit test to validate that composition\nof encrypt_and_digest() and decrypt_and_verify()\nis the identity function.\n\n[dlitz@dlitz.net: Included changes from the following commit from the author\u0027s pull request:]\n- [9c13f9c] Rename \u0027IV\u0027 parameter to \u0027nonce\u0027 for AEAD modes.\n[dlitz@dlitz.net: Whitespace fixed with \"git rebase --whitespace\u003dfix\"]\n[dlitz@dlitz.net: Replaced MacMismatchError with ValueError]\n[dlitz@dlitz.net: Replaced ApiUsageError with TypeError]\n"
    },
    {
      "commit": "965871a72773457d73fda6a1a2970a4279dcbe6f",
      "tree": "be1042cfe897159ae7eefba94e51cb9feb23c596",
      "parents": [
        "c5787d70f52dc9e78b8e859bd4cae8e75ce2cf41"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sat Jun 29 16:35:49 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:22 2013"
      },
      "message": "GCM mode: Optimize key setup for GCM mode.\n\nGCM mode requires GHASH for 2 different operations: one for\nthe data (AD + ciphertext) and one for the IV.\n\nConstruction of tables to speed-up GHASH is very expensive\nand it is worth doing only for the data, not for the IV.\n\nThis patch ensures that the GHASH for the IV does not\nuse tables, with a ~40% faster key setup.\n\n[dlitz@dlitz.net: Whitespace fixed with \"git rebase --whitespace\u003dfix\"]\n"
    },
    {
      "commit": "c5787d70f52dc9e78b8e859bd4cae8e75ce2cf41",
      "tree": "a5bba3a1f7ae318693dd97b1a3625a1583474116",
      "parents": [
        "35be87837d1280688da72f294498c09af7f3e7e7"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sun Jun 09 09:30:27 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:22 2013"
      },
      "message": "GCM mode: Optimize GCM speed with pre-computed tables.\n\nTables take 64KByte per each key.\n\nEncryption performance is more than doubled\n(29 MBps vs 8MBps for AES128).\n\nAs a drawback, key setup is much slower (1300 key/s\non the same machine).\n\n[dlitz@dlitz.net: Replaced MacMismatchError with ValueError]\n[dlitz@dlitz.net: Replaced ApiUsageError with TypeError]\n[dlitz@dlitz.net: Included changes from the following commits from the author\u0027s pull request:]\n- [9c13f9c] Rename \u0027IV\u0027 parameter to \u0027nonce\u0027 for AEAD modes.\n- [ca460a7] Made blockalgo.py more PEP-8 compliant; The second parameter\n            of the _GHASH constructor is now the length of the block\n            (block_size) and not the full module.\n[dlitz@dlitz.net: Whitespace fixed with \"git rebase --whitespace\u003dfix\"]\n"
    },
    {
      "commit": "35be87837d1280688da72f294498c09af7f3e7e7",
      "tree": "19cdb492f7b307d19b7927b441221bb78e6c5c57",
      "parents": [
        "5d7ab24c513fb43a604ad23b23d040a53069c4db"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sun Jun 09 14:44:27 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Add key setup speed benchmark for all AEAD modes.\n"
    },
    {
      "commit": "5d7ab24c513fb43a604ad23b23d040a53069c4db",
      "tree": "b024034c16e14454e94756690c88b9acb52e0422",
      "parents": [
        "199a9741a1849066d070b114333fcf90bc73c55a"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Tue May 28 21:57:56 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Add support for GCM mode (AES only).\n\nThe main change done by this commit is adding support\nfor MODE_GCM (NIST SP 800 38D). Test vectors are included.\n\nThe mode uses a C extension (Crypto.Util.galois._ghash)\nto compute the GHASH step. The C implementation is the most\nbasic one and it is still significantly (5x times) slower than CTR.\nOptimizations can be introduced using tables (CPU/memory trade-off)\nor even AES NI instructions on newer x86 CPUs.\n\nThis patch also simplifies Crypto.Cipher.blockalgo.py by:\n * removing duplicated code previously shared by digest() and verify().\n * removing duplicated code previously shared by Crypto.Hash.CMAC\n   and Crypto.Cipher.block_algo (management of internal buffers\n   for MACs that can only operate on block aligned data, like\n   CMAC, CBCMAC, and now also GHASH).\n\n[dlitz@dlitz.net: Included changes from the following commits from the author\u0027s pull request:]\n- [9c13f9c] Rename \u0027IV\u0027 parameter to \u0027nonce\u0027 for AEAD modes.\n- [ca460a7] Made blockalgo.py more PEP-8 compliant;\n            The second parameter of the _GHASH constructor\n            is now the length of the block (block_size)\n            and not the full module.\n[dlitz@dlitz.net: Replaced MacMismatchError with ValueError]\n[dlitz@dlitz.net: Replaced ApiUsageError with TypeError]\n[dlitz@dlitz.net: Replaced renamed variable `ht` with original `h`]\n[dlitz@dlitz.net: Whitespace fixed with \"git rebase --whitespace\u003dfix\"]\n"
    },
    {
      "commit": "199a9741a1849066d070b114333fcf90bc73c55a",
      "tree": "c2330517d32c7fcdf654605a079e6bb4c0854ad0",
      "parents": [
        "8bdbdb8168511018d44ef014ae21da619ae73c24"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Wed May 22 20:18:35 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Add support for SIV (Synthetic IV) mode\n\nThis patch add supports for SIV, an AEAD block cipher\nmode defined in RFC5297. SIV is only valid for AES.\n\nThe PRF of SIV (S2V) is factored out in the Protocol.KDF module.\n\nSee the following example to get a feeling of the API (slightly\ndifferent than other AEAD mode, during decryption).\n\nEncryption (Python 2):\n\n\t\u003e\u003e\u003e from Crypto.Cipher import AES\n\t\u003e\u003e\u003e key \u003d b\u00270\u0027*32\n\t\u003e\u003e\u003e siv \u003d AES.new(key, AES.MODE_SIV)\n\t\u003e\u003e\u003e ct  \u003d siv.encrypt(b\u0027Message\u0027)\n\t\u003e\u003e\u003e mac \u003d siv.digest()\n\nDecryption (Python 2):\n\n\t\u003e\u003e\u003e from Crypto.Cipher import AES, MacMismatchError\n\t\u003e\u003e\u003e key \u003d b\u00270\u0027*32\n\t\u003e\u003e\u003e siv \u003d AES.new(key, AES.MODE_SIV)\n\t\u003e\u003e\u003e pt  \u003d siv.decrypt(ct + mac)\n\t\u003e\u003e\u003e try:\n\t\u003e\u003e\u003e\tsiv.verify(mac)\n\t\u003e\u003e\u003e\tprint \"Plaintext\", pt\n\t\u003e\u003e\u003e except MacMismatchError:\n\t\u003e\u003e\u003e     print \"Error\"\n\nThis change also fixes the description/design of AEAD API.\n\nWith SIV (RFC5297), decryption can only start when the MAC is known.\nThe original AEAD API did not support that.\n\nFor SIV the MAC is now exceptionally passed together with the ciphertext\nto the decrypt() method.\n\n[dlitz@dlitz.net: Included changes from the following commits from the author\u0027s pull request:]\n- [9c13f9c] Rename \u0027IV\u0027 parameter to \u0027nonce\u0027 for AEAD modes.\n- [d7727fb] Fix description/design of AEAD API.\n- [fb62fae] ApiUsageError becomes TypeError [whitespace]\n- [4ec64d8] Removed last references to ApiUsageError [whitespace]\n- [ee46922] Removed most \u0027import *\u0027 statements\n- [ca460a7] Made blockalgo.py more PEP-8 compliant;\n            The second parameter of the _GHASH constructor\n            is now the length of the block (block_size)\n            and not the full module.\n[dlitz@dlitz.net: A conflict that was not resolved in the previous\n                  commit was originally resolved here.  Moved the\n                  resolution to the previous commit.]\n[dlitz@dlitz.net: Replaced MacMismatchError with ValueError]\n[dlitz@dlitz.net: Replaced ApiUsageError with TypeError]\n[dlitz@dlitz.net: Whitespace fixed with \"git rebase --whitespace\u003dfix\"]\n"
    },
    {
      "commit": "8bdbdb8168511018d44ef014ae21da619ae73c24",
      "tree": "75d7a4c60d07dc0bb960705e71ac5f551d8631a9",
      "parents": [
        "57104488faa9fc386ea1aee249bafb6e2a529a57"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Mon May 20 10:43:44 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Add EAX authenticated encryption mode\n\n[dlitz@dlitz.net: Included changes from the following commits from the author\u0027s pull request:]\n- [9c13f9c] Rename \u0027IV\u0027 parameter to \u0027nonce\u0027 for AEAD modes.\n- [ca460a7] Made blockalgo.py more PEP-8 compliant; The second parameter\n            of the _GHASH constructor is now the length of the block\n            (block_size) and not the full module.\n[dlitz@dlitz.net: Fixed unresolved conflict in lib/Crypto/Cipher/blockalgo.py]\n"
    },
    {
      "commit": "57104488faa9fc386ea1aee249bafb6e2a529a57",
      "tree": "c9f2245c097fbf4a0b00b29356c95dab2c3841aa",
      "parents": [
        "da79b781af41ff815b812c49d9be434f5de52aa4"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Wed Jan 23 21:37:53 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Add support for CCM mode (AES only).\n\n[dlitz@dlitz.net: Included changes from the following commits from the author\u0027s pull request:]\n- [5306cf3] Added support for CCM mode (AES cipher only)\n- [9abe301] Added CCM tests\n- [f0c1395] Add MacMismatchError and ApiUsageError\n- [fb62fae] ApiUsageError becomes TypeError\n- [9c13f9c] Rename \u0027IV\u0027 parameter to \u0027nonce\u0027 for AEAD modes.\n- [4ec64d8] Removed last references to ApiUsageError\n- [80bfd35] Corrected AES-CCM examples\n[dlitz@dlitz.net: Removed unrelated documentation change]\n[dlitz@dlitz.net: Renamed \u0027targs\u0027 back to \u0027args\u0027]\n[dlitz@dlitz.net: Whitespace fixed with \"git rebase --whitespace\u003dfix\"]\n"
    },
    {
      "commit": "da79b781af41ff815b812c49d9be434f5de52aa4",
      "tree": "16c3d6251bfafaeb7bd96743d2be3e5d4fbec439",
      "parents": [
        "92fea1b6065c6ca75381b465f846843494372c4d"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Mon May 13 06:40:46 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Add support for CMAC\n\nThis patch adds support for CMAC (RFC4493, NIST SP800-38B).\n\n[dlitz@dlitz.net: Replaced MacMismatchError with ValueError]\n[dlitz@dlitz.net: Whitespace fixed with \"git rebase --whitespace\u003dfix\"]\n"
    },
    {
      "commit": "92fea1b6065c6ca75381b465f846843494372c4d",
      "tree": "5975f38481d4a7aec173bdb2cedefdfcedeef325",
      "parents": [
        "7214ce9929afeb98b1a54735d83881f4337cd8b8"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Wed Jun 05 22:10:48 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Add CTR mode benchmark\n"
    },
    {
      "commit": "7214ce9929afeb98b1a54735d83881f4337cd8b8",
      "tree": "e463bb72235b9554b5302cee23e1f0dbf2303a73",
      "parents": [
        "9a5faf9642660eab16d13d55ae539b41a711e5c9"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Tue Sep 10 05:43:50 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Removed most \u0027import *\u0027 statements\n\n[dlitz@dlitz.net: Re-ordered commits; so don\u0027t import S2V yet]\n[dlitz@dlitz.net: Included an additional \u0027import *\u0027 change from the following commit:]\n    commit 4ec64d8eaaa4965889eb8e3b801fc77aa84e0a4e\n    Author: Legrandin \u003chelderijs@gmail.com\u003e\n    Date:   Tue Sep 10 07:28:08 2013 +0200\n\n        Removed last references to ApiUsageError\n\n[dlitz@dlitz.net: Removed unrelated whitespace changes]\n"
    },
    {
      "commit": "9a5faf9642660eab16d13d55ae539b41a711e5c9",
      "tree": "dbdb7f8b8f90ae289a022c8749de6a51b2f3845c",
      "parents": [
        "5ca4c71c04e68a8fdbf7ef18a719e606793c55dd"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Tue Sep 10 05:26:23 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Added KDF unit tests to suite\n"
    },
    {
      "commit": "5ca4c71c04e68a8fdbf7ef18a719e606793c55dd",
      "tree": "60108e8e695c08f3e7038d1514e9404d93baad7c",
      "parents": [
        "ba46e8640f1964f3e747674064ac9ed19ca8e640"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Wed Jan 23 21:37:53 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "blockalgo: Fix MODE_OPENPGP comment\n\n[dlitz@dlitz.net: Extracted from the following commit:]\n    commit 5306cf38ba060a70e5397ec48a5cea00c2bf0203\n    Author: Legrandin \u003chelderijs@gmail.com\u003e\n    Date:   Wed Jan 23 22:37:53 2013 +0100\n\n        Added support for CCM mode (AES cipher only)\n"
    },
    {
      "commit": "ba46e8640f1964f3e747674064ac9ed19ca8e640",
      "tree": "4db1f42129e356e93fa5d27012359ed951ce5a69",
      "parents": [
        "af392459f6a1962e676830ddf81e7b6d2667aa8b"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sun Feb 03 23:11:45 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Clarify message about incorrect length in the counter block.\n\nWhen the counter function returns an incorrect counter block to\nthe cipher in CTR mode, the error message includes both the required and\nthe provided amount of data (in bytes).\n"
    },
    {
      "commit": "af392459f6a1962e676830ddf81e7b6d2667aa8b",
      "tree": "9bf22471870cc83be083cfd333a472493b88ebc1",
      "parents": [
        "77b0b9123c32b181f7f7a0072b2baa6312620f66"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Thu May 16 21:09:27 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "MAC unit tests become independent of hashes\n\nThe MAC unit tests assume that the MAC algorithm is\nbased on hash functions (HMAC).\nAdditionally, a single test vector is quite complex\nin that it includes result for multiple tests (each\nperformed on the same data, but with different\nhashes).\n\nThis patch simplifies the MAC unit test so that it does\nnot depend on hashes and a test vector is simply made up by:\n* 1 input\n* 1 result\n* All parameters to pass to the new() function\n\n[dlitz@dlitz.net: Replaced custom MacMismatchError with ValueError.]\n[dlitz@dlitz.net: Replaced \u0027import *\u0027 with appropriate imports.]\n[dlitz@dlitz.net: Whitespace fixed with \"git rebase --whitespace\u003dfix\"]\n"
    },
    {
      "commit": "77b0b9123c32b181f7f7a0072b2baa6312620f66",
      "tree": "b808b1809304a161ec73586736146c8dec9027c8",
      "parents": [
        "661f2a1f6ed02b5b2f21e340845361e70610ff3f"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Tue May 14 17:00:43 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Add HMAC.verify() and HMAC.hexverify() with constant-time comparison\n\nIn the current implementation, it is left up to the caller\nto assess if the locally computed MAC matches the MAC associated\nto the received message.\n\nHowever, the most natural way to do that (use \u003d\u003d operator)\nis also deepy unsecure, see here:\n\nhttp://seb.dbzteam.org/crypto/python-oauth-timing-hmac.pdf\n\nWith this patch, the new HMAC.verify() method accepts\nthe given MAC and perform the check on behalf of the caller.\nThe method will use constant-time code (still dependent on the length\nof the MAC, but not on the actual content).\n\n[dlitz@dlitz.net: Modified commit message subject line.]\n[dlitz@dlitz.net: Whitespace fixed with \"git rebase --whitespace\u003dfix\"]\n"
    },
    {
      "commit": "661f2a1f6ed02b5b2f21e340845361e70610ff3f",
      "tree": "5c4e258fffafd1aa2c133975e4805d1c290e8303",
      "parents": [
        "8766da37a2612ebcea13c7451a2157d175f29a41"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sun Aug 04 20:46:06 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "Made blockalgo.py more PEP-8 compliant (pre-AEAD)\n\n[dlitz@dlitz.net: Original commit was:]\n\ncommit ca460a79aecdbf6e5973e99f8bdbf3888b6d34d2\nAuthor: Legrandin \u003chelderijs@gmail.com\u003e\nDate:   Sun Aug 4 22:46:06 2013 +0200\n\n    Made blockalgo.py more PEP-8 compliant\n\n    The second parameter of the _GHASH constructor\n    is now the length of the block (block_size)\n    and not the full module.\n\n[dlitz@dlitz.net: Included only style-related changes that apply cleanly to the master branch (pre-AEAD)]\n[dlitz@dlitz.net: Omitted functional changes that were made in the author\u0027s original commit.]\n[dlitz@dlitz.net: Omitted some changes that broke exception messages onto multiple lines.]\n[dlitz@dlitz.net: Omitted some changes that broke arithmetic expressions onto multiple lines.]\n"
    },
    {
      "commit": "8766da37a2612ebcea13c7451a2157d175f29a41",
      "tree": "1b7571a13e04473efde5975916527134832d84e7",
      "parents": [
        "d044a478332682c253c379db87d444b056e4ab37"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sun Aug 04 20:46:06 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:30:21 2013"
      },
      "message": "whitespace changes (pre-AEAD)\n\n[dlitz@dlitz.net: Whitespace changes extracted from the author\u0027s pull request:]\n- [9c13f9c] Rename \u0027IV\u0027 parameter to \u0027nonce\u0027 for AEAD modes.\n- [4ec64d8] Removed last references to ApiUsageError\n- [ee46922] Removed most \u0027import *\u0027 statements\n"
    },
    {
      "commit": "d044a478332682c253c379db87d444b056e4ab37",
      "tree": "a72a64c0e89c926a23cd8ffb8400b84189ff12d5",
      "parents": [
        "f9a0fc77e1c8847c1a17503e5a1b86a409b8cb2d",
        "7fd528d03b5eae58eef6fd219af5d9ac9c83fa50"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:28:46 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Sun Oct 20 20:28:46 2013"
      },
      "message": "Merge tag \u0027v2.6.1\u0027 (fix CVE-2013-1445)\n\nThis is the PyCrypto 2.6.1 release.\n\nDwayne Litzenberger (4):\n      Random: Make Crypto.Random.atfork() set last_reseed\u003dNone (CVE-2013-1445)\n      Fortuna: Add comments for reseed_interval and min_pool_size to FortunaAccumulator\n      Update the ChangeLog\n      Release v2.6.1\n"
    },
    {
      "commit": "7fd528d03b5eae58eef6fd219af5d9ac9c83fa50",
      "tree": "efd99c8c792b06e4a8b5556c2621579f13553ecb",
      "parents": [
        "b37ffc0308cdf1c80a470e4a90b8f7cc82ab4a8e"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 14 21:37:38 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 14 21:37:38 2013"
      },
      "message": "Release v2.6.1\n\nThis release is identical to PyCrypto v2.6, except it fixes the\nCrypto.Random race condition (CVE-2013-1445) and adds a few related\ncomments.\n"
    },
    {
      "commit": "b37ffc0308cdf1c80a470e4a90b8f7cc82ab4a8e",
      "tree": "9f75a8e169a9e80b3f9e7b51db6944a3bb16ad4e",
      "parents": [
        "fa06af7feaf37e7dc2d66a1e028fe9afc8ffd585"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 14 21:37:37 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 14 21:37:37 2013"
      },
      "message": "Update the ChangeLog\n"
    },
    {
      "commit": "fa06af7feaf37e7dc2d66a1e028fe9afc8ffd585",
      "tree": "2bb813abf58bd90535f3fefb705fcf4e535f8ba8",
      "parents": [
        "19dcf7b15d61b7dc1a125a367151de40df6ef175"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 14 21:37:36 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 14 21:37:36 2013"
      },
      "message": "Fortuna: Add comments for reseed_interval and min_pool_size to FortunaAccumulator\n"
    },
    {
      "commit": "19dcf7b15d61b7dc1a125a367151de40df6ef175",
      "tree": "514d79094c1befde0567273ccd9a8750d5570d21",
      "parents": [
        "373ea760f21701b162e8c4912a66928ee30d401a"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 14 21:37:35 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Oct 14 21:37:35 2013"
      },
      "message": "Random: Make Crypto.Random.atfork() set last_reseed\u003dNone (CVE-2013-1445)\n\n\u003d\u003d Summary \u003d\u003d\n\nIn PyCrypto before v2.6.1, the Crypto.Random pseudo-random number\ngenerator (PRNG) exhibits a race condition that may cause it to generate\nthe same \u0027random\u0027 output in multiple processes that are forked from each\nother.  Depending on the application, this could reveal sensitive\ninformation or cryptographic keys to remote attackers.\n\nAn application may be affected if, within 100 milliseconds, it performs\nthe following steps (which may be summarized as \"read-fork-read-read\"):\n\n1. Read from the Crypto.Random PRNG, causing an internal reseed;\n2. Fork the process and invoke Crypto.Random.atfork() in the child;\n3. Read from the Crypto.Random PRNG again, in at least two different\n   processes (parent and child, or multiple children).\n\nOnly applications that invoke Crypto.Random.atfork() and perform the\nabove steps are affected by this issue.  Other applications are\nunaffected.\n\nNote: Some PyCrypto functions, such as key generation and PKCS#1-related\nfunctions, implicitly read from the Crypto.Random PRNG.\n\n\u003d\u003d Technical details \u003d\u003d\n\nCrypto.Random uses Fortuna[1] to generate random numbers.  The flow of\nentropy looks something like this:\n\n    /dev/urandom  -\\\n                    +-\u003e \"accumulator\" --\u003e \"generator\" --\u003e output\n    other sources -/   (entropy pools)     (AES-CTR)\n\n- The \"accumulator\" maintains several pools that collect entropy from\n  the environment.\n\n- The \"generator\" is a deterministic PRNG that is reseeded by the\n  accumulator.  Reseeding normally occurs during each request for random\n  numbers, but never more than once every 100 ms (the \"minimum reseed\n  interval\").\n\nWhen a process is forked, the parent\u0027s state is duplicated in the child.\nIn order to continue using the PRNG, the child process must invoke\nCrypto.Random.atfork(), which collects new entropy from /dev/urandom and\nadds it to the accumulator.  When new PRNG output is subsequently\nrequested, some of the new entropy in the accumulator is used to reseed\nthe generator, causing the output of the child to diverge from its\nparent.\n\nHowever, in previous versions of PyCrypto, Crypto.Random.atfork() did\nnot explicitly reset the child\u0027s rate-limiter, so if the child requested\nPRNG output before the minimum reseed interval of 100 ms had elapsed, it\nwould generate its output using state inherited from its parent.\n\nThis created a race condition between the parent process and its forked\nchildren that could cause them to produce identical PRNG output for the\nduration of the 100 ms minimum reseed interval.\n\n\u003d\u003d Demonstration \u003d\u003d\n\nHere is some sample code that illustrates the problem:\n\n    from binascii import hexlify\n    import multiprocessing, pprint, time\n    import Crypto.Random\n\n    def task_main(arg):\n        a \u003d Crypto.Random.get_random_bytes(8)\n        time.sleep(0.1)\n        b \u003d Crypto.Random.get_random_bytes(8)\n        rdy, ack \u003d arg\n        rdy.set()\n        ack.wait()\n        return \"%s,%s\" % (hexlify(a).decode(),\n                          hexlify(b).decode())\n\n    n_procs \u003d 4\n    manager \u003d multiprocessing.Manager()\n    rdys \u003d [manager.Event() for i in range(n_procs)]\n    acks \u003d [manager.Event() for i in range(n_procs)]\n    Crypto.Random.get_random_bytes(1)\n    pool \u003d multiprocessing.Pool(processes\u003dn_procs,\n                                initializer\u003dCrypto.Random.atfork)\n    res_async \u003d pool.map_async(task_main, zip(rdys, acks))\n    pool.close()\n    [rdy.wait() for rdy in rdys]\n    [ack.set() for ack in acks]\n    res \u003d res_async.get()\n    pprint.pprint(sorted(res))\n    pool.join()\n\nThe output should be random, but it looked like this:\n\n    [\u0027c607803ae01aa8c0,2e4de6457a304b34\u0027,\n     \u0027c607803ae01aa8c0,af80d08942b4c987\u0027,\n     \u0027c607803ae01aa8c0,b0e4c0853de927c4\u0027,\n     \u0027c607803ae01aa8c0,f0362585b3fceba4\u0027]\n\n\u003d\u003d Solution \u003d\u003d\n\nThe solution is to upgrade to PyCrypto v2.6.1 or later, which properly\nresets the rate-limiter when Crypto.Random.atfork() is invoked in the\nchild.\n\n\u003d\u003d References \u003d\u003d\n\n[1] N. Ferguson and B. Schneier, _Practical Cryptography_,\n    Indianapolis: Wiley, 2003, pp. 155-184.\n"
    },
    {
      "commit": "f9a0fc77e1c8847c1a17503e5a1b86a409b8cb2d",
      "tree": "1c80cc33e42668d5d1989171374dc3ff3e7f718f",
      "parents": [
        "134e164ac04ff25670b14ada8a0c5c41317fb1fa"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sun Jun 16 09:47:16 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 06:08:47 2013"
      },
      "message": "FIX #1191411: RSA export example\n\nCloses: https://bugs.launchpad.net/pycrypto/+bug/1191411\n"
    },
    {
      "commit": "134e164ac04ff25670b14ada8a0c5c41317fb1fa",
      "tree": "f887e3a4f8248df2955035a531897f42a8ca7ca6",
      "parents": [
        "e39e1c62027d69153d041863ee9fdac707ab2850"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sun May 12 16:39:58 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 06:08:47 2013"
      },
      "message": "A set of small changes to documentation.\n\n* Add table to Crypto.Util package docs\n* Clarify that PKCS#1v1.5 encryption only works on byte strings\n* Clarify that padding is ignored by Cipher classes\n* Clarify that block encrypt() and decrypt() do not respectively\n  add and remove any padding.\n* Clarify what the \u0027overflow\u0027 parameter does (that is, nothing)\n  to the Crypto.Util.Counter class.\n"
    },
    {
      "commit": "e39e1c62027d69153d041863ee9fdac707ab2850",
      "tree": "90f178f04aab8b2c25e34def72674709022ddde5",
      "parents": [
        "f73d0a11697e2be0a3a1819fdb91a5dadc4e6af8"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Mon May 13 20:59:54 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 06:08:47 2013"
      },
      "message": "FIX #1096857. Update reference to FIPS 180-4.\n\nCloses: https://bugs.launchpad.net/pycrypto/+bug/1096857\n"
    },
    {
      "commit": "f73d0a11697e2be0a3a1819fdb91a5dadc4e6af8",
      "tree": "b2b20789531b033a650ab6c9b920d521db920e3b",
      "parents": [
        "74bd74f490f4eadbfa9a3d750645b21e46679317"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Mon May 13 05:56:15 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 06:08:47 2013"
      },
      "message": "FIX #1093446. Description of allow_wraparound was incorrect.\n\nIn addition to fixing the problem, the patch also\nimproves readibility of other sentences a little.\n\nCloses: https://bugs.launchpad.net/pycrypto/+bug/1093446\n"
    },
    {
      "commit": "74bd74f490f4eadbfa9a3d750645b21e46679317",
      "tree": "9351f33a1c48a7bac0a8eeef13dccb1146d5afb5",
      "parents": [
        "7636f5052bfb631ff9436d8cb2fe8ac01ea8ca01"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Wed May 08 05:27:03 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 06:08:47 2013"
      },
      "message": "FIX #1177614. Clarify that RSA OAEP only works on byte strings\n\nCloses: https://bugs.launchpad.net/pycrypto/+bug/1177614\n"
    },
    {
      "commit": "7636f5052bfb631ff9436d8cb2fe8ac01ea8ca01",
      "tree": "32ef30ef5ad11b63abbc71e014abe8aba7627b3a",
      "parents": [
        "546c192d61ad3494433281432c0274ef6d638466"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Fri Feb 15 13:11:34 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 06:08:47 2013"
      },
      "message": "Added unit tests for bugfix #1119552\n"
    },
    {
      "commit": "546c192d61ad3494433281432c0274ef6d638466",
      "tree": "327a71e16fc73d3d4e8b3b190ee7cfbc297b03b9",
      "parents": [
        "d7cc92168a1cb0cac0f3e13a6160497c5770767e"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Fri Feb 15 08:21:22 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 06:07:48 2013"
      },
      "message": "Bugfix #1119552: PKCS#1v1.5 has to accept signatures without NULL parameters\n\nThe digest AlgorithmIdentifier has optional (NULL) parameters; the\nverification function should not reject a signature if they are omitted.\n\nWith this fix, either case is acceptable (parameters present with value NULL\nor not present).\n\nAs an exception, signatures based on old MD2/MD5 must always have NULL\nparameters.\n\nSee Appendix B.1 of RFC 3447 and Section 2.1 of RFC 4055.\n\nCloses: https://bugs.launchpad.net/pycrypto/+bug/1119552\n[dlitz: Rebased and updated to use refactored asn1 API, text OIDs, \u0026 to fix Python 2.1.]\n"
    },
    {
      "commit": "d7cc92168a1cb0cac0f3e13a6160497c5770767e",
      "tree": "f20b1755ddc742d9802466e9525a11be808ff635",
      "parents": [
        "791cfaa255b002a65a57bb29a1f3b8ea23e132b8"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 05:09:52 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 05:11:54 2013"
      },
      "message": "Fix unhexlify in Python 3.2\n\nUnder Python 3.2, unhexlify expects to receive a `bytes` object.\nPassing it a (unicodr) `str` object causes it to raise the following\nexception:\n\n    TypeError: \u0027str\u0027 does not support the buffer interface\n"
    },
    {
      "commit": "791cfaa255b002a65a57bb29a1f3b8ea23e132b8",
      "tree": "65749acefd2b1096c83c8a1778ef2994dc563b6c",
      "parents": [
        "90d6d3dbcfb02fc441edafe6fafe6e6800009e35"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Mon Jul 01 20:30:45 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 04:16:46 2013"
      },
      "message": "Add support for import/export of DSA keys\n\nThis patch adds methods importKey() to DSA module\nand exportKey() to _DSAobj object.\n\nPublic and private keys can be imported/exported\nin a variety of formats:\n\n* DER vs PEM\n* PKCS#8 vs OpenSSL vs OpenSSH/OpenSSL\n* Encrypted vs clear\n"
    },
    {
      "commit": "90d6d3dbcfb02fc441edafe6fafe6e6800009e35",
      "tree": "a47b22eea2560392a673d8cba675579459452482",
      "parents": [
        "5a0ee14e9904335cb90c0dd7a4e10f1523435c52"
      ],
      "author": {
        "name": "Legrandin",
        "email": "helderijs@gmail.com",
        "time": "Sat Jun 15 21:25:49 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 04:16:46 2013"
      },
      "message": "Added support for PKCS#8-encrypted private keys.\n\nThe patch contains the following changes:\n\n- Private RSA keys can be imported/exported in encrypted form,\n  protected according to PKCS#8 and:\n\n  * PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC.\n  * PBKDF2WithHMAC-SHA1AndAES128-CBC\n  * PBKDF2WithHMAC-SHA1AndAES192-CBC\n  * PBKDF2WithHMAC-SHA1AndAES256-CBC\n\n  In addition to that, it is possible to import keys i the\n  following weak formats:\n\n  * pbeWithMD5AndDES-CBC\n  * pbeWithSHA1AndRC2-CBC\n  * pbeWithMD5AndRC2-CBC\n  * pbeWithSHA1AndDES-CBC\n\n- The following new module (and 1 new package) are added:\n\n  * Crypto.Util.Padding for simple padding/unpadding logic\n  * Crypto.IO._PBES for PBE-related PKCS#5 logic\n  * Crypto.IO.PEM for PEM wrapping/unwrapping\n  * Crypto.IO.PKCS8 for PKCS#8 wrapping/unwrapping\n\n- All Object ID (OIDs) are now in dotted form to increase\n  readability.\n\n- Add AES support to PEM format (decode only).\n  The PEM module can decrypt messages protected with AES-CBC.\n\n- Update RSA import test cases.\n\n- Updated to PKCS8 test cases\n"
    },
    {
      "commit": "5a0ee14e9904335cb90c0dd7a4e10f1523435c52",
      "tree": "e4f4c2e8b07b6bccb955912bb3e8a302e5ccaf0a",
      "parents": [
        "af9b41cc4b0a58dd87f56e334a8d478f238f074d"
      ],
      "author": {
        "name": "Legrandin",
        "email": "gooksankoo@hoiptorrow.mailexpire.com",
        "time": "Tue Jun 05 17:58:19 2012"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 04:16:46 2013"
      },
      "message": "Refactoring of the asn1 module\n\nThe following changes are included:\n\n- Decoding is a much simpler operation. The internal\n  logic is based on stream of binary data, and not\n  on string indexing anymore. Additionally,\n  decoding used to look like this:\n\n     bitmap \u003d DerObject()\n     bitmap.decode(input_buffer, True)\n     if bitmap.isType(\u0027BIT STRING\u0027):\n        ... proceed with parsing ...\n     else:\n        ... error ...\n\n  Whereas now, it is cleaner and more compact:\n\n     bitmap \u003d DerBitString()\n     bitmap.decode(input_buffer)\n\n  Any error condition will lead to an exception.\n\n- isType() method has been removed because of the above.\n- Added examples and documentation\n- Added support IMPLICIT tags\n- Added support for negative INTEGERs\n- Added DerSetOf ASN.1 class\n- DerObjectID can be initialized from the dotted representation of\n  the Object ID.\n- DerBitString has a new member \u0027value\u0027 to hold the binary\n  string. The member \u0027payload\u0027 should not be accessed anymore.\n- DerObjectID has a new member \u0027value\u0027 to hold the dotted representation\n  of the Object ID string. The member \u0027payload\u0027 should not be accessed\n  anymore.\n- Added operator +\u003d to DER SEQUENCE. Now it is possible to do:\n\n      my_str \u003d DerOctetString(b\u0027ZYZ\u0027)\n      seq \u003d DerSequence()\n      seq +\u003d 0\n      seq +\u003d my_str.encode()\n- Update to test cases\n"
    },
    {
      "commit": "af9b41cc4b0a58dd87f56e334a8d478f238f074d",
      "tree": "fde9398d5ecd2c484f7fa29d56cb07b5bd1bbfeb",
      "parents": [
        "c82be67c1ed9e02bb248cd0db455d8c8c49335bd"
      ],
      "author": {
        "name": "dev-jjc",
        "email": "dev.jjc@gmail.com",
        "time": "Fri Oct 19 15:50:10 2012"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 04:14:17 2013"
      },
      "message": "Fixed MODE_OFB requiring padding\n\nCloses: https://bugs.launchpad.net/pycrypto/+bug/996193\nCloses: https://github.com/dlitz/pycrypto/pull/26\n[dlitz: Squashed and fixed whitespace.]\n"
    },
    {
      "commit": "c82be67c1ed9e02bb248cd0db455d8c8c49335bd",
      "tree": "187f3a64b7d10ac165ed06cb3a944f08af63442d",
      "parents": [
        "63bc0fb0aa463a70a0d115fad21219b896683c8d"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 03:29:52 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 03:29:52 2013"
      },
      "message": "Update RIPEMD documentation (deprecated; see RIPEMD160)\n"
    },
    {
      "commit": "63bc0fb0aa463a70a0d115fad21219b896683c8d",
      "tree": "1e1542325314e7af8df6c85d44cb3015f9f206e6",
      "parents": [
        "103bf3ecccf7f5d048385b0494081f140df71cc4"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 03:26:53 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 03:26:53 2013"
      },
      "message": "Improve C extension autodocs\n\n- Add __all__ to C cipher \u0026 hash modules\n- Update hash module docstrings to document the block_size and\n  digest_size variables.\n\nCloses: https://bugs.launchpad.net/pycrypto/+bug/1179255\n"
    },
    {
      "commit": "103bf3ecccf7f5d048385b0494081f140df71cc4",
      "tree": "e4f42593f0e9cb29c3aa08c1eeed1a2dfd3c127e",
      "parents": [
        "6fbddf912294b96a66f0e18b32c9312c67455ad5"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 02:09:09 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 02:20:43 2013"
      },
      "message": "Py3k cleanup: bytes/string -\u003e bytestring in error messages\n"
    },
    {
      "commit": "6fbddf912294b96a66f0e18b32c9312c67455ad5",
      "tree": "ff318d3c01a831344c7ba16f14d5d7f2632622f5",
      "parents": [
        "385830424043c81945a21ca14e051e3b4c282829"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 02:06:58 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 02:20:43 2013"
      },
      "message": "Py3k cleanup: Module initialization\n"
    },
    {
      "commit": "385830424043c81945a21ca14e051e3b4c282829",
      "tree": "8f7e9a1bb2dbaeff926026002b4aee83701f52c7",
      "parents": [
        "f5a862ea2db39dbebe27ba7f8e17a2bcbbd18ef2"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 01:48:59 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 02:14:35 2013"
      },
      "message": "Py3k cleanup: Remove PyModule_GetDict\n\nAlso rename _fastmath_module -\u003e m for consistency\n"
    },
    {
      "commit": "f5a862ea2db39dbebe27ba7f8e17a2bcbbd18ef2",
      "tree": "77f7e80a84f4932b47422d72af18838dd33ca6d7",
      "parents": [
        "27ef33b36779bc19b89dd77b976e5500cfabc144"
      ],
      "author": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 01:14:32 2013"
      },
      "committer": {
        "name": "Dwayne Litzenberger",
        "email": "dlitz@dlitz.net",
        "time": "Mon Jul 15 02:14:35 2013"
      },
      "message": "Py3k cleanup: PyBytesObject\n"
    }
  ],
  "next": "27ef33b36779bc19b89dd77b976e5500cfabc144"
}
