Skip to content
  1. Jun 22, 2017
  2. Jun 04, 2017
  3. Jul 28, 2015
  4. Apr 25, 2015
  5. Apr 24, 2015
  6. Apr 21, 2015
  7. Apr 20, 2015
  8. Aug 09, 2014
  9. May 12, 2014
    • Dmitry Chestnykh's avatar
      31461913
    • Dmitry Chestnykh's avatar
      Generate captcha representations deterministically. · 90158fbe
      Dmitry Chestnykh authored
      WARNING: introduces API incompatibility!
      
      This package generates captcha representations on-the-fly; for instance,
      if captcha solution was "123456", every call to NewImage() using this
      sequence of digits would generate a different random image containing
      "123456"; similarly, NewAudio() would generate a different audio
      pronouncing the same sequence: 1, 2, 3, 4, 5, 6.
      
      If a user, instead of storing generated outputs, exposes this
      functionality from their server, which is the default and recommended
      behaviour, an attacker could try loading the same image or audio over
      and over again in attempt to arrive at the most correct optical/voice
      recognition result.
      
      Instead of using a global non-deterministic pseudorandom number
      generator to distort images and audio, this commit introduces a
      deterministic PRNG for each image/audio. This PRNG uses a combination of
      a global secret key (generated once during initialization from a system
      CSPRNG) and captcha id and solution to produce pseudorandom numbers for
      each representation deterministically. Thus, calling NewImage() with the
      same captcha id and solution at different times will result in the same
      image (ditto for NewAudio).
      
      To make results unique not only for different solutions, but also for
      ids, these incompatible changes to public API have been introduced:
      
      NewImage and NewAudio changed from:
      
        func NewImage(digits []byte, width, height int) *Image
        func NewAudio(digits []byte, lang string) *Audio
      
      to:
      
        func NewImage(id string, digits []byte, width, height int) *Image
        func NewAudio(id string, digits []byte, lang string) *Audio
      
      That is, they now accept an additional captcha `id` argument.
      No other interfaces changed.
      
      Described changes also improved performance of generating captchas.
      90158fbe
  10. Jan 10, 2014
  11. Dec 11, 2013
  12. Dec 04, 2013
  13. Dec 03, 2013
  14. Oct 13, 2012
  15. Mar 11, 2012
  16. Feb 09, 2012
  17. Jan 16, 2012
  18. Oct 17, 2011
  19. Aug 21, 2011
  20. Jun 29, 2011
  21. Jun 06, 2011
  22. May 24, 2011
    • Dmitry Chestnykh's avatar
      Add copyright headers. · d7cb604d
      Dmitry Chestnykh authored
      sounds.go doesn't have a copyright header, because the file is generated
      by a program. I don't want to make it output the copyright header,
      because users can generate sounds themselves, and the copyright status
      of such generated files can be different.
      d7cb604d
  23. May 12, 2011