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. Feb 09, 2012
    • Dmitry Chestnykh's avatar
      Remove Makefiles. Rename example. · b1a07266
      Dmitry Chestnykh authored
      Go weekly 2012-02-07.
      
      Example is now capexample.
      To build helper tools:
      
         cd capexample && go install
         cd capgen && go install
      
      This will install tools capexample and cangen into $GOPATH/bin.
      b1a07266
  4. Jun 29, 2011
  5. 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
  6. May 04, 2011
  7. May 01, 2011
  8. Apr 28, 2011
  9. Apr 27, 2011
  10. Apr 26, 2011
  11. Apr 25, 2011