mirror of https://gitlab.com/yawning/obfs4
obfs4: Clean up and modernize the codebase
While the thought of dealing with this codebase makes me reach for the Benzodiazepines, I might as well clean this up.master
parent
645026c2ad
commit
efdc692691
@ -0,0 +1,120 @@
|
||||
linters:
|
||||
disable-all: true
|
||||
enable:
|
||||
# Re-enable the default linters
|
||||
- errcheck
|
||||
- gosimple
|
||||
- govet
|
||||
- ineffassign
|
||||
- staticcheck
|
||||
- typecheck
|
||||
- unused
|
||||
|
||||
# Enable the "always useful" linters as of 1.53.3
|
||||
- asasalint
|
||||
- asciicheck
|
||||
- bidichk
|
||||
- decorder
|
||||
- dogsled
|
||||
- dupl
|
||||
- dupword
|
||||
- errchkjson
|
||||
- errname
|
||||
- errorlint
|
||||
- exhaustive
|
||||
- exportloopref
|
||||
- forbidigo
|
||||
- forcetypeassert
|
||||
- gci
|
||||
- gocheckcompilerdirectives
|
||||
- gochecknoinits
|
||||
- goconst
|
||||
- gocritic
|
||||
- godot
|
||||
- godox
|
||||
- gofumpt
|
||||
- gomoddirectives
|
||||
- goprintffuncname
|
||||
- gosec
|
||||
- gosmopolitan
|
||||
- importas
|
||||
- interfacebloat
|
||||
- makezero
|
||||
- mirror
|
||||
- misspell
|
||||
- musttag
|
||||
- nakedret
|
||||
- nestif
|
||||
- nilerr
|
||||
- nilnil
|
||||
- nolintlint
|
||||
- nonamedreturns
|
||||
- prealloc
|
||||
- predeclared
|
||||
- reassign
|
||||
- revive
|
||||
- tagalign
|
||||
- tenv
|
||||
- testableexamples
|
||||
- unconvert
|
||||
- unparam
|
||||
- usestdlibvars
|
||||
- wastedassign
|
||||
- whitespace
|
||||
|
||||
# Disabled: Run periodically, but too many places to annotate
|
||||
# - gomnd
|
||||
|
||||
# Disabled: Not how I do things
|
||||
# - exhaustruct # Zero value is fine.
|
||||
# - funlen # I'm not breaking up my math.
|
||||
# - gochecknoglobals # How else am I supposed to declare constants.
|
||||
# - lll # The 70s called and wants their ttys back.
|
||||
# - paralleltest
|
||||
# - varnamelen # The papers use short variable names.
|
||||
# - tagliatelle # I want my tags to match the files.
|
||||
# - thelper
|
||||
# - tparallel
|
||||
# - testpackage
|
||||
# - wsl # Nice idea, not how I like to write code.
|
||||
# - goerr113 # Nice idea, this package has too much legacy bs.
|
||||
# - ireturn # By virtue of the PT API we are interface heavy.
|
||||
|
||||
# Disabled: Annoying/Useless
|
||||
# - cyclop
|
||||
# - gocognit
|
||||
# - gocyclo
|
||||
# - maintidx
|
||||
# - wrapcheck
|
||||
|
||||
# Disabled: Irrelevant/redundant
|
||||
# - bodyclose
|
||||
# - containedctx
|
||||
# - contextcheck
|
||||
# - depguard
|
||||
# - durationcheck
|
||||
# - execinquery
|
||||
# - ginkgolinter
|
||||
# - gofmt
|
||||
# - goheader
|
||||
# - goimports
|
||||
# - gomodguard
|
||||
# - grouper
|
||||
# - loggercheck
|
||||
# - nlreturn
|
||||
# - noctx
|
||||
# - nosprintfhostport
|
||||
# - promlinter
|
||||
# - rowserrcheck
|
||||
# - sqlclosecheck
|
||||
# - stylecheck
|
||||
# - zerologlint
|
||||
|
||||
linters-settings:
|
||||
gci:
|
||||
sections:
|
||||
- standard
|
||||
- default
|
||||
- prefix(gitlab.com/yawning/obfs4.git)
|
||||
skip-generated: true
|
||||
custom-order: true
|
@ -1,67 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Yawning Angel <yawning at schwanenlied dot me>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package scramblesuit
|
||||
|
||||
import (
|
||||
"crypto/hmac"
|
||||
"hash"
|
||||
)
|
||||
|
||||
func hkdfExpand(hashFn func() hash.Hash, prk []byte, info []byte, l int) []byte {
|
||||
// Why, yes. golang.org/x/crypto/hkdf exists, and is a fine
|
||||
// implementation of HKDF. However it does both the extract
|
||||
// and expand, while ScrambleSuit only does extract, with no
|
||||
// way to separate the two steps.
|
||||
|
||||
h := hmac.New(hashFn, prk)
|
||||
digestSz := h.Size()
|
||||
if l > 255*digestSz {
|
||||
panic("hkdf: requested OKM length > 255*HashLen")
|
||||
}
|
||||
|
||||
var t []byte
|
||||
okm := make([]byte, 0, l)
|
||||
toAppend := l
|
||||
ctr := byte(1)
|
||||
for toAppend > 0 {
|
||||
h.Reset()
|
||||
_, _ = h.Write(t)
|
||||
_, _ = h.Write(info)
|
||||
_, _ = h.Write([]byte{ctr})
|
||||
t = h.Sum(nil)
|
||||
ctr++
|
||||
|
||||
aLen := digestSz
|
||||
if toAppend < digestSz {
|
||||
aLen = toAppend
|
||||
}
|
||||
okm = append(okm, t[:aLen]...)
|
||||
toAppend -= aLen
|
||||
}
|
||||
return okm
|
||||
}
|
Loading…
Reference in New Issue