@@ -2,6 +2,7 @@ package main
2
2
3
3
import (
4
4
"context"
5
+ "crypto/pbkdf2"
5
6
"crypto/sha256"
6
7
"encoding/hex"
7
8
"encoding/json"
@@ -14,8 +15,6 @@ import (
14
15
"net/url"
15
16
"strconv"
16
17
"strings"
17
-
18
- "golang.org/x/crypto/pbkdf2"
19
18
)
20
19
21
20
type genericResponse struct {
@@ -104,7 +103,11 @@ func (c *cgaLed) login() error {
104
103
return err
105
104
}
106
105
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 {
108
111
return err
109
112
}
110
113
@@ -250,12 +253,18 @@ func sendRequest[T apiResponse](client *http.Client, method, u string, body io.R
250
253
return & apiRes , nil
251
254
}
252
255
253
- func deriveChallenge (res * loginResponse , password string ) string {
256
+ func deriveChallenge (res * loginResponse , password string ) ( string , error ) {
254
257
const iterations = 1000
255
258
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
259
268
}
260
269
261
270
func main () {
0 commit comments