@@ -3,7 +3,6 @@ package certificatetransparency
33import (
44 "bufio"
55 "context"
6- "errors"
76 "fmt"
87 "io"
98 "net/http"
@@ -67,21 +66,21 @@ func FetchCheckpoint(ctx context.Context, client *http.Client, baseURL string) (
6766 baseURL = strings .TrimRight (baseURL , "/" )
6867 url := baseURL + "/checkpoint"
6968
70- req , parseErr := http .NewRequestWithContext (ctx , http .MethodGet , url , nil )
71- if parseErr != nil {
72- return nil , fmt .Errorf ("creating request: %w" , parseErr )
69+ req , newReqErr := http .NewRequestWithContext (ctx , http .MethodGet , url , nil )
70+ if newReqErr != nil {
71+ return nil , fmt .Errorf ("failed to create checkpoint request: %w" , newReqErr )
7372 }
7473
75- req .Header .Set ("User-Agent" , userAgent )
74+ req .Header .Set ("User-Agent" , UserAgent )
7675
77- resp , parseErr := client .Do (req )
78- if parseErr != nil {
79- return nil , fmt .Errorf ("fetching checkpoint: %w" , parseErr )
76+ resp , reqErr := client .Do (req )
77+ if reqErr != nil {
78+ return nil , fmt .Errorf ("failed to execute checkpoint request : %w" , reqErr )
8079 }
8180 defer resp .Body .Close ()
8281
8382 if resp .StatusCode != http .StatusOK {
84- return nil , fmt .Errorf ("checkpoint request failed with status: %d" , resp .StatusCode )
83+ return nil , fmt .Errorf ("%w: unexpected status code %d" , ErrRequestFailed , resp .StatusCode )
8584 }
8685
8786 lines := make ([]string , 0 , 3 )
@@ -92,16 +91,16 @@ func FetchCheckpoint(ctx context.Context, client *http.Client, baseURL string) (
9291 }
9392
9493 if scanErr := scanner .Err (); scanErr != nil {
95- return nil , fmt .Errorf ("reading checkpoint response: %w" , scanErr )
94+ return nil , fmt .Errorf ("failed reading response body : %w" , scanErr )
9695 }
9796
9897 if len (lines ) < 3 {
99- return nil , fmt .Errorf ("invalid checkpoint format: expected at least 3 lines, got %d" , len (lines ))
98+ return nil , fmt .Errorf ("%w: invalid checkpoint format: expected at least 3 lines, got %d" , ErrCheckpointInvalidFormat , len (lines ))
10099 }
101100
102101 size , parseErr := strconv .ParseUint (lines [1 ], 10 , 64 )
103102 if parseErr != nil {
104- return nil , fmt .Errorf ("parsing tree size: %w" , parseErr )
103+ return nil , fmt .Errorf ("failed parsing tree size: %w" , parseErr )
105104 }
106105
107106 return & TiledCheckpoint {
@@ -123,21 +122,21 @@ func FetchTile(ctx context.Context, client *http.Client, baseURL string, tileInd
123122
124123 url := fmt .Sprintf ("%s/tile/data/%s" , baseURL , tilePath )
125124
126- req , err := http .NewRequestWithContext (ctx , http .MethodGet , url , nil )
127- if err != nil {
128- return nil , fmt .Errorf ("creating request: %w" , err )
125+ req , newReqErr := http .NewRequestWithContext (ctx , http .MethodGet , url , nil )
126+ if newReqErr != nil {
127+ return nil , fmt .Errorf ("failed to create tile request: %w" , newReqErr )
129128 }
130129
131- req .Header .Set ("User-Agent" , userAgent )
130+ req .Header .Set ("User-Agent" , UserAgent )
132131
133- resp , err := client .Do (req )
134- if err != nil {
135- return nil , fmt .Errorf ("fetching tile %d: %w" , tileIndex , err )
132+ resp , reqErr := client .Do (req )
133+ if reqErr != nil {
134+ return nil , fmt .Errorf ("fetching tile %d: %w" , tileIndex , reqErr )
136135 }
137136 defer resp .Body .Close ()
138137
139138 if resp .StatusCode != http .StatusOK {
140- return nil , fmt .Errorf ("tile request failed with status: %d" , resp .StatusCode )
139+ return nil , fmt .Errorf ("%w: unexpected status code %d" , ErrRequestFailed , resp .StatusCode )
141140 }
142141
143142 data , err := io .ReadAll (resp .Body )
@@ -157,7 +156,7 @@ func ParseTileData(data []byte) ([]TileLeaf, error) {
157156 var leaf TileLeaf
158157
159158 if ! parser .ReadUint64 (& leaf .Timestamp ) || ! parser .ReadUint16 (& leaf .EntryType ) {
160- return nil , errors . New ( "invalid data tile header" )
159+ return nil , fmt . Errorf ( " header: %w" , ErrInvalidDataTile )
161160 }
162161
163162 switch leaf .EntryType {
@@ -168,15 +167,15 @@ func ParseTileData(data []byte) ([]TileLeaf, error) {
168167 if ! parser .ReadUint24LengthPrefixed (& cert ) ||
169168 ! parser .ReadUint16LengthPrefixed (& extensions ) ||
170169 ! parser .ReadUint16LengthPrefixed (& fingerprints ) {
171- return nil , errors . New ( "invalid data tile x509_entry" )
170+ return nil , fmt . Errorf ( " x509_entry: %w" , ErrInvalidDataTile )
172171 }
173172
174173 leaf .X509Entry = append ([]byte (nil ), cert ... )
175174
176175 for ! fingerprints .Empty () {
177176 var fp [32 ]byte
178177 if ! fingerprints .CopyBytes (fp [:]) {
179- return nil , errors . New ( "invalid fingerprints: truncated" )
178+ return nil , ErrInvalidFingerprint
180179 }
181180
182181 leaf .Chain = append (leaf .Chain , fp [:])
@@ -191,7 +190,7 @@ func ParseTileData(data []byte) ([]TileLeaf, error) {
191190 ! parser .ReadUint16LengthPrefixed (& extensions ) ||
192191 ! parser .ReadUint24LengthPrefixed (& entry ) ||
193192 ! parser .ReadUint16LengthPrefixed (& fingerprints ) {
194- return nil , errors . New ( "invalid data tile precert_entry" )
193+ return nil , fmt . Errorf ( " precert_entry: %w" , ErrInvalidDataTile )
195194 }
196195
197196 leaf .PrecertEntry = append ([]byte (nil ), defangedCrt ... )
@@ -200,14 +199,14 @@ func ParseTileData(data []byte) ([]TileLeaf, error) {
200199 for ! fingerprints .Empty () {
201200 var fp [32 ]byte
202201 if ! fingerprints .CopyBytes (fp [:]) {
203- return nil , errors . New ( "invalid fingerprints: truncated" )
202+ return nil , ErrInvalidFingerprint
204203 }
205204
206205 leaf .Chain = append (leaf .Chain , fp [:])
207206 }
208207
209208 default :
210- return nil , fmt .Errorf ("unknown entry type : %d" , leaf .EntryType )
209+ return nil , fmt .Errorf ("%w : %d" , ErrUnknownEntryType , leaf .EntryType )
211210 }
212211
213212 leaves = append (leaves , leaf )
0 commit comments