code: func canonicalizeInt(val *big.Int) []byte {
  	b := val.Bytes()
  	if len(b) == 0 {
  		b = []byte{0x00}
  	}
  	if b[0]&0x80 != 0 {
  		paddedBytes := make([]byte, len(b)+1)
  		copy(paddedBytes[1:], b)
  		b = paddedBytes
  	}
  	return b
  }
docs: // canonicalizeInt returns the bytes for the passed big integer adjusted as
  // necessary to ensure that a big-endian encoded integer can't possibly be
  // misinterpreted as a negative number.  This can happen when the most
  // significant bit is set, so it is padded by a leading zero byte in this case.
  // Also, the returned bytes will have at least a single byte when the passed
  // value is 0.  This is required for DER encoding.