1. 29 Jan, 2015 3 commits
  2. 28 Jan, 2015 25 commits
  3. 27 Jan, 2015 10 commits
    • Robert Griesemer's avatar
      math/big: various fixes, enable tests for 32bit platforms · f4a26177
      Robert Griesemer authored
      - fixed Float.Add, Float.Sub
      - fixed Float.PString to be platform independent
      - fixed Float.Uint64
      - fixed various test outputs
      
      TBR: adonovan
      
      Change-Id: I9d273b344d4786f1fed18862198b23285c358a39
      Reviewed-on: https://go-review.googlesource.com/3321Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      f4a26177
    • Dmitry Vyukov's avatar
      runtime: simplify code · 6d37c830
      Dmitry Vyukov authored
      The %61 hack was added when runtime was is in C.
      Now the Go compiler does the optimization.
      
      Change-Id: I79c3302ec4b931eaaaaffe75e7101c92bf287fc7
      Reviewed-on: https://go-review.googlesource.com/3289Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      6d37c830
    • Dmitry Vyukov's avatar
      net/http: add client benchmark · a66aa77c
      Dmitry Vyukov authored
      BenchmarkClient is intended for profiling
      the client without the HTTP server code.
      The server code runs in a subprocess.
      
      Change-Id: I9aa128604d0d4e94dc5c0372dc86f962282ed6e8
      Reviewed-on: https://go-review.googlesource.com/3164Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      a66aa77c
    • Robert Griesemer's avatar
      unsafe: fix doc strings · 3a523386
      Robert Griesemer authored
      Change-Id: I73a416291a2374dbb8ce8586f24059f8dce56529
      Reviewed-on: https://go-review.googlesource.com/3360Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      3a523386
    • Dmitry Vyukov's avatar
      cmd/gc: don't copy []byte during string concatenation · 205ae07c
      Dmitry Vyukov authored
      Consider the following code:
      
      s := "(" + string(byteSlice) + ")"
      
      Currently we allocate a new string during []byte->string conversion,
      and pass it to concatstrings. String allocation is unnecessary in
      this case, because concatstrings does memorize the strings for later use.
      This change uses slicebytetostringtmp to construct temp string directly
      from []byte buffer and passes it to concatstrings.
      
      I've found few such cases in std lib:
      
      	s += string(msg[off:off+c]) + "."
      	buf.WriteString("Sec-WebSocket-Accept: " + string(c.accept) + "\r\n")
      	bw.WriteString("Sec-WebSocket-Key: " + string(nonce) + "\r\n")
      	err = xml.Unmarshal([]byte("<Top>"+string(data)+"</Top>"), &logStruct)
      	d.err = d.syntaxError("invalid XML name: " + string(b))
      	return m, ProtocolError("malformed MIME header line: " + string(kv))
      
      But there are much more in our internal code base.
      
      Change-Id: I42f401f317131237ddd0cb9786b0940213af16fb
      Reviewed-on: https://go-review.googlesource.com/3163Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      205ae07c
    • Dmitry Vyukov's avatar
      cmd/gc: don't emit write barriers for *tmp if tmp=&PAUTO · a7bb3936
      Dmitry Vyukov authored
      This is another case where we can say that the address refers to stack.
      We create such temps for OSTRUCTLIT initialization.
      
      This eliminates a handful of write barriers today.
      But this come up a prerequisite for another change (capturing vars by value),
      otherwise we emit writebarriers in writebarrier itself when
      capture writebarrier arguments by value.
      
      Change-Id: Ibba93acd0f5431c5a4c3d90ef1e622cb9a7ff50e
      Reviewed-on: https://go-review.googlesource.com/3285Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      a7bb3936
    • Dmitry Vyukov's avatar
      cmd/gc: fix range typecheck order · 9a36beb2
      Dmitry Vyukov authored
      Typecheck for range variables before typechecking for range body.
      Body can refer to new vars declared in for range,
      so it is preferable to typecheck them before the body.
      Makes typecheck order consistent between ORANGE and OFOR.
      
      This come up during another change that computes some predicates
      on variables during typechecking.
      
      Change-Id: Ic975db61b1fd5b7f9ee78896d4cc7d93c593c532
      Reviewed-on: https://go-review.googlesource.com/3284Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      9a36beb2
    • Dmitry Vyukov's avatar
      runtime: fix wbshadow mode · d9419218
      Dmitry Vyukov authored
      Half of tests currently crash with GODEBUG=wbshadow.
      _PageSize is set to 8192. So data can be extended outside
      of actually mapped region during rounding. Which leads to crash
      during initial copying to shadow.
      Use _PhysPageSize instead.
      
      Change-Id: Iaa89992bd57f86dafa16b092b53fdc0606213acb
      Reviewed-on: https://go-review.googlesource.com/3286Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      d9419218
    • Dmitry Vyukov's avatar
      runtime: do not scan maps when k/v do not contain pointers · 85e7bee1
      Dmitry Vyukov authored
      Currently we scan maps even if k/v does not contain pointers.
      This is required because overflow buckets are hanging off the main table.
      This change introduces a separate array that contains pointers to all
      overflow buckets and keeps them alive. Buckets themselves are marked
      as containing no pointers and are not scanned by GC (if k/v does not
      contain pointers).
      
      This brings maps in line with slices and chans -- GC does not scan
      their contents if elements do not contain pointers.
      
      Currently scanning of a map[int]int with 2e8 entries (~8GB heap)
      takes ~8 seconds. With this change scanning takes negligible time.
      
      Update #9477.
      
      Change-Id: Id8a04066a53d2f743474cad406afb9f30f00eaae
      Reviewed-on: https://go-review.googlesource.com/3288Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      85e7bee1
    • Dmitry Vyukov's avatar
      runtime: fix crash during heapdump · 561ce92f
      Dmitry Vyukov authored
      runtime/debug test crashes with GOMAXPROCS>1:
      
      fatal error: unexpected signal during runtime execution
      [signal 0xb code=0x1 addr=0x0 pc=0x80521b8]
      runtime stack:
      runtime.throw(0x8195028, 0x2a)
      	src/runtime/panic.go:508 +0x71 fp=0x18427f24 sp=0x18427f18
      runtime.sigpanic()
      	src/runtime/sigpanic_unix.go:12 +0x53 fp=0x18427f4c sp=0x18427f24
      runtime.finq_callback(0x0, 0x0, 0x0, 0x8129140, 0x0)
      	src/runtime/heapdump.go:410 +0x58 fp=0x18427f58 sp=0x18427f4c
      runtime.iterate_finq(0x81a6860)
      	src/runtime/mfinal.go:89 +0x73 fp=0x18427f78 sp=0x18427f58
      runtime.dumproots()
      	src/runtime/heapdump.go:448 +0x17a fp=0x18427fa4 sp=0x18427f78
      runtime.mdump()
      	src/runtime/heapdump.go:652 +0xbc fp=0x18427fb4 sp=0x18427fa4
      runtime.writeheapdump_m(0x3)
      
      This happens because runfinq goroutine nils some elements in allfin after
      execution of finalizers:
      
      	// drop finalizer queue references to finalized object
      	f.fn = nil
      	f.arg = nil
      	f.ot = nil
      
      Then heapdump crashes trying to dereference fn.fn here:
      
      func finq_callback(fn *funcval, obj unsafe.Pointer, nret uintptr, fint *_type, ot *ptrtype) {
      	dumpint(tagQueuedFinalizer)
      	dumpint(uint64(uintptr(obj)))
      	dumpint(uint64(uintptr(unsafe.Pointer(fn))))
      	dumpint(uint64(uintptr(unsafe.Pointer(fn.fn))))
      	dumpint(uint64(uintptr(unsafe.Pointer(fint))))
      	dumpint(uint64(uintptr(unsafe.Pointer(ot))))
      }
      
      Change-Id: I372433c964180d782967be63d4355e568666980d
      Reviewed-on: https://go-review.googlesource.com/3287Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      561ce92f
  4. 26 Jan, 2015 2 commits
    • Adam Langley's avatar
      Revert "crypto/ecdsa: make Sign safe with broken entropy sources" · 35b8e511
      Adam Langley authored
      This reverts commit 8d7bf229.
      
      Change-Id: Iad2c74a504d64bcf7ca707b00bda29bc796a2ae9
      Reviewed-on: https://go-review.googlesource.com/3320Reviewed-by: 's avatarAdam Langley <agl@golang.org>
      35b8e511
    • David Leon Gil's avatar
      crypto/ecdsa: make Sign safe with broken entropy sources · 8d7bf229
      David Leon Gil authored
      ECDSA is unsafe to use if an entropy source produces predictable
      output for the ephemeral nonces. E.g., [Nguyen]. A simple
      countermeasure is to hash the secret key, the message, and
      entropy together to seed a CSPRNG, from which the ephemeral key
      is derived.
      
      --
      
      This is a minimalist (in terms of patch size) solution, though
      not the most parsimonious in its use of primitives:
      
         - csprng_key = ChopMD-256(SHA2-512(priv.D||entropy||hash))
         - reader = AES-256-CTR(k=csprng_key)
      
      This, however, provides at most 128-bit collision-resistance,
      so that Adv will have a term related to the number of messages
      signed that is significantly worse than plain ECDSA. This does
      not seem to be of any practical importance.
      
      ChopMD-256(SHA2-512(x)) is used, rather than SHA2-256(x), for
      two sets of reasons:
      
      *Practical:* SHA2-512 has a larger state and 16 more rounds; it
      is likely non-generically stronger than SHA2-256. And, AFAIK,
      cryptanalysis backs this up. (E.g., [Biryukov] gives a
      distinguisher on 47-round SHA2-256 with cost < 2^85.) This is
      well below a reasonable security-strength target.
      
      *Theoretical:* [Coron] and [Chang] show that Chop-MD(F(x)) is
      indifferentiable from a random oracle for slightly beyond the
      birthday barrier. It seems likely that this makes a generic
      security proof that this construction remains UF-CMA is
      possible in the indifferentiability framework.
      
      --
      
      Many thanks to Payman Mohassel for reviewing this construction;
      any mistakes are mine, however. And, as he notes, reusing the
      private key in this way means that the generic-group (non-RO)
      proof of ECDSA's security given in [Brown] no longer directly
      applies.
      
      --
      
      [Brown]: http://www.cacr.math.uwaterloo.ca/techreports/2000/corr2000-54.ps
      "Brown. The exact security of ECDSA. 2000"
      
      [Coron]: https://www.cs.nyu.edu/~puniya/papers/merkle.pdf
      "Coron et al. Merkle-Damgard revisited. 2005"
      
      [Chang]: https://www.iacr.org/archive/fse2008/50860436/50860436.pdf
      "Chang and Nandi. Improved indifferentiability security analysis
      of chopMD hash function. 2008"
      
      [Biryukov]: http://www.iacr.org/archive/asiacrypt2011/70730269/70730269.pdf
      "Biryukov et al. Second-order differential collisions for reduced
      SHA-256. 2011"
      
      [Nguyen]: ftp://ftp.di.ens.fr/pub/users/pnguyen/PubECDSA.ps
      "Nguyen and Shparlinski. The insecurity of the elliptic curve
      digital signature algorithm with partially known nonces. 2003"
      
      Fixes #9452
      
      Tests:
      
        TestNonceSafety: Check that signatures are safe even with a
          broken entropy source.
      
        TestINDCCA: Check that signatures remain non-deterministic
          with a functional entropy source.
      
      Change-Id: Ie7e04057a3a26e6becb80e845ecb5004bb482745
      Reviewed-on: https://go-review.googlesource.com/2422Reviewed-by: 's avatarAdam Langley <agl@golang.org>
      8d7bf229