MCPcopy Create free account
hub / github.com/syncthing/syncthing / Request

Method Request

lib/protocol/encryption.go:211–254  ·  view source on GitHub ↗
(ctx context.Context, req *Request)

Source from the content-addressed store, hash-verified

209}
210
211func (e encryptedConnection) Request(ctx context.Context, req *Request) ([]byte, error) {
212 folderKey, ok := e.folderKeys.get(req.Folder)
213 if !ok {
214 return e.conn.Request(ctx, req)
215 }
216 fileKey := e.keyGen.FileKey(req.Name, folderKey)
217
218 // Encrypt / adjust the request parameters.
219
220 encSize := req.Size
221 if encSize < minPaddedSize {
222 // Make a request for minPaddedSize data instead of the smaller
223 // block. We'll chop of the extra data later.
224 encSize = minPaddedSize
225 }
226 encSize += blockOverhead
227 encName := encryptName(req.Name, folderKey)
228 encOffset := req.Offset + int64(req.BlockNo*blockOverhead)
229 encHash := encryptBlockHash(req.Hash, req.Offset, fileKey)
230
231 // Perform that request, getting back an encrypted block.
232
233 encReq := &Request{
234 ID: req.ID,
235 Folder: req.Folder,
236 Name: encName,
237 Offset: encOffset,
238 Size: encSize,
239 Hash: encHash,
240 BlockNo: req.BlockNo,
241 }
242 bs, err := e.conn.Request(ctx, encReq)
243 if err != nil {
244 return nil, err
245 }
246
247 // Return the decrypted block (or an error if it fails decryption)
248
249 bs, err = DecryptBytes(bs, fileKey)
250 if err != nil {
251 return nil, err
252 }
253 return bs[:req.Size], nil
254}
255
256func (e encryptedConnection) DownloadProgress(ctx context.Context, dp *DownloadProgress) {
257 if _, ok := e.folderKeys.get(dp.Folder); !ok {

Callers

nothing calls this directly

Calls 6

encryptNameFunction · 0.85
encryptBlockHashFunction · 0.85
DecryptBytesFunction · 0.85
FileKeyMethod · 0.80
getMethod · 0.65
RequestMethod · 0.65

Tested by

no test coverage detected