loadEncryptedFileInfo loads the encrypted FileInfo trailer from a file on disk.
(fd fs.File)
| 264 | // loadEncryptedFileInfo loads the encrypted FileInfo trailer from a file on |
| 265 | // disk. |
| 266 | func loadEncryptedFileInfo(fd fs.File) (*protocol.FileInfo, error) { |
| 267 | // Seek to the size of the trailer block |
| 268 | if _, err := fd.Seek(-4, io.SeekEnd); err != nil { |
| 269 | return nil, err |
| 270 | } |
| 271 | var bs [4]byte |
| 272 | if _, err := io.ReadFull(fd, bs[:]); err != nil { |
| 273 | return nil, err |
| 274 | } |
| 275 | size := int64(binary.BigEndian.Uint32(bs[:])) |
| 276 | |
| 277 | // Seek to the start of the trailer |
| 278 | if _, err := fd.Seek(-(4 + size), io.SeekEnd); err != nil { |
| 279 | return nil, err |
| 280 | } |
| 281 | trailer := make([]byte, size) |
| 282 | if _, err := io.ReadFull(fd, trailer); err != nil { |
| 283 | return nil, err |
| 284 | } |
| 285 | |
| 286 | var encFi bep.FileInfo |
| 287 | if err := proto.Unmarshal(trailer, &encFi); err != nil { |
| 288 | return nil, err |
| 289 | } |
| 290 | fi := protocol.FileInfoFromWire(&encFi) |
| 291 | |
| 292 | return &fi, nil |
| 293 | } |
no test coverage detected