@@ -2,6 +2,7 @@ package main
22
33import (
44 "context"
5+ "crypto/pbkdf2"
56 "crypto/sha256"
67 "encoding/hex"
78 "encoding/json"
@@ -14,8 +15,6 @@ import (
1415 "net/url"
1516 "strconv"
1617 "strings"
17-
18- "golang.org/x/crypto/pbkdf2"
1918)
2019
2120type genericResponse struct {
@@ -104,7 +103,11 @@ func (c *cgaLed) login() error {
104103 return err
105104 }
106105
107- if _ , err := c .sendSessionLogin (deriveChallenge (res , c .password )); err != nil {
106+ challenge , err := deriveChallenge (res , c .password )
107+ if err != nil {
108+ return err
109+ }
110+ if _ , err := c .sendSessionLogin (challenge ); err != nil {
108111 return err
109112 }
110113
@@ -250,12 +253,18 @@ func sendRequest[T apiResponse](client *http.Client, method, u string, body io.R
250253 return & apiRes , nil
251254}
252255
253- func deriveChallenge (res * loginResponse , password string ) string {
256+ func deriveChallenge (res * loginResponse , password string ) ( string , error ) {
254257 const iterations = 1000
255258 const keyLen = 16
256- a := pbkdf2 .Key ([]byte (password ), []byte (res .Salt ), iterations , keyLen , sha256 .New )
257- b := pbkdf2 .Key ([]byte (hex .EncodeToString (a )), []byte (res .SaltWebUI ), iterations , keyLen , sha256 .New )
258- return hex .EncodeToString (b )
259+ a , err := pbkdf2 .Key (sha256 .New , password , []byte (res .Salt ), iterations , keyLen )
260+ if err != nil {
261+ return "" , err
262+ }
263+ b , err := pbkdf2 .Key (sha256 .New , hex .EncodeToString (a ), []byte (res .SaltWebUI ), iterations , keyLen )
264+ if err != nil {
265+ return "" , err
266+ }
267+ return hex .EncodeToString (b ), nil
259268}
260269
261270func main () {
0 commit comments