Skip to content
  1. Jun 22, 2017
  2. May 12, 2014
    • 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
  3. Jun 29, 2011
  4. 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
  5. Apr 28, 2011
  6. Apr 25, 2011
  7. Apr 24, 2011
  8. Apr 23, 2011
  9. Apr 21, 2011
  10. Apr 20, 2011
  11. Apr 19, 2011