Refactor code to use subtle.ConstantTimeCompare for secure comparison (#466)

* Refactor code to use subtle.ConstantTimeCompare for secure comparison

* Refactor code to use subtle.ConstantTimeCompare for secure comparison
This commit is contained in:
Boshi Lian 2024-10-21 02:46:19 -07:00 • committed by GitHub
parent 3087aa4eb6
commit a3f69952c0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 8 additions and 6 deletions

View file

@ -3,8 +3,8 @@
package main package main
import ( import (
"bytes"
"context" "context"
"crypto/subtle"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"net" "net"
@ -211,7 +211,7 @@ func (p *plugin) findAndCreateUpstream(conn libplugin.ConnMetadata, password str
return nil, err return nil, err
} }
if bytes.Equal(authedPubkey.Marshal(), publicKey) { if subtle.ConstantTimeCompare(authedPubkey.Marshal(), publicKey) == 1 {
return p.createUpstream(conn, pipe, "") return p.createUpstream(conn, pipe, "")
} }
} }

View file

@ -2,7 +2,7 @@ package workingdir
import ( import (
"bufio" "bufio"
"bytes" "crypto/subtle"
"fmt" "fmt"
"os" "os"
"path" "path"
@ -60,7 +60,7 @@ func (w *Workingdir) Mapkey(pub []byte) ([]byte, error) {
return nil, err return nil, err
} }
if bytes.Equal(authedPubkey.Marshal(), pub) { if subtle.ConstantTimeCompare(authedPubkey.Marshal(), pub) == 1 {
log.Infof("found mapping key %v", w.fullpath(userKeyFile)) log.Infof("found mapping key %v", w.fullpath(userKeyFile))
return w.Readfile(userKeyFile) return w.Readfile(userKeyFile)
} }

View file

@ -3,6 +3,7 @@ package main
import ( import (
"bytes" "bytes"
"context" "context"
"crypto/subtle"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"os" "os"
@ -295,7 +296,7 @@ func (p *plugin) findAndCreateUpstream(conn libplugin.ConnMetadata, password str
return nil, err return nil, err
} }
if bytes.Equal(authedPubkey.Marshal(), publicKey) { if subtle.ConstantTimeCompare(authedPubkey.Marshal(), publicKey) == 1 {
return p.createUpstream(conn, pipe, "") return p.createUpstream(conn, pipe, "")
} }
} }

View file

@ -4,6 +4,7 @@ package main
import ( import (
"bytes" "bytes"
"crypto/subtle"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"os" "os"
@ -329,7 +330,7 @@ func (p *plugin) findAndCreateUpstream(conn libplugin.ConnMetadata, password str
return nil, err return nil, err
} }
if bytes.Equal(authedPubkey.Marshal(), publicKey) { if subtle.ConstantTimeCompare(authedPubkey.Marshal(), publicKey) == 1 {
return p.createUpstream(conn, pipe.To, "") return p.createUpstream(conn, pipe.To, "")
} }
} }