@@ -17,7 +17,6 @@ package loadtest
17
17
import (
18
18
"bytes"
19
19
"context"
20
- "encoding/base64"
21
20
"encoding/json"
22
21
"errors"
23
22
"fmt"
@@ -31,7 +30,7 @@ import (
31
30
32
31
"github.com/transparency-dev/static-ct/internal/client"
33
32
"github.com/transparency-dev/static-ct/internal/types/rfc6962"
34
- "golang.org/x/crypto/cryptobyte "
33
+ "github.com/transparency-dev/static-ct/internal/types/staticct "
35
34
"k8s.io/klog/v2"
36
35
)
37
36
@@ -240,41 +239,9 @@ func parseAddChainResponse(body []byte) (uint64, uint64, error) {
240
239
return 0 , 0 , fmt .Errorf ("can't parse add-chain response: %v" , err )
241
240
}
242
241
243
- extensionBytes , err := base64 . StdEncoding . DecodeString (resp .Extensions )
242
+ leafIdx , err := staticct . ParseCTExtensions (resp .Extensions )
244
243
if err != nil {
245
- return 0 , 0 , fmt .Errorf ("can't decode extensions: %v" , err )
246
- }
247
- extensions := cryptobyte .String (extensionBytes )
248
- var extensionType uint8
249
- var extensionData cryptobyte.String
250
- var leafIdx int64
251
- if ! extensions .ReadUint8 (& extensionType ) {
252
- return 0 , 0 , fmt .Errorf ("can't read extension type" )
253
- }
254
- if extensionType != 0 {
255
- return 0 , 0 , fmt .Errorf ("wrong extension type %d, want 0" , extensionType )
256
- }
257
- if ! extensions .ReadUint16LengthPrefixed (& extensionData ) {
258
- return 0 , 0 , fmt .Errorf ("can't read extension data" )
259
- }
260
- if ! readUint40 (& extensionData , & leafIdx ) {
261
- return 0 , 0 , fmt .Errorf ("can't read leaf index from extension" )
262
- }
263
- if ! extensionData .Empty () ||
264
- ! extensions .Empty () {
265
- return 0 , 0 , fmt .Errorf ("invalid data tile extensions: %v" , resp .Extensions )
244
+ return 0 , 0 , fmt .Errorf ("can't parse extensions: %v" , err )
266
245
}
267
246
return uint64 (leafIdx ), resp .Timestamp , nil
268
247
}
269
-
270
- // readUint40 decodes a big-endian, 40-bit value into out and advances over it.
271
- // It reports whether the read was successful.
272
- // Code is copied from https://github.com/FiloSottile/sunlight/blob/main/extensions.go.
273
- func readUint40 (s * cryptobyte.String , out * int64 ) bool {
274
- var v []byte
275
- if ! s .ReadBytes (& v , 5 ) {
276
- return false
277
- }
278
- * out = int64 (v [0 ])<< 32 | int64 (v [1 ])<< 24 | int64 (v [2 ])<< 16 | int64 (v [3 ])<< 8 | int64 (v [4 ])
279
- return true
280
- }
0 commit comments