DecryptFileInfo extracts the encrypted portion of a FileInfo, decrypts it and returns that.
(keyGen *KeyGenerator, fi FileInfo, folderKey *[keySize]byte)
| 400 | // DecryptFileInfo extracts the encrypted portion of a FileInfo, decrypts it |
| 401 | // and returns that. |
| 402 | func DecryptFileInfo(keyGen *KeyGenerator, fi FileInfo, folderKey *[keySize]byte) (FileInfo, error) { |
| 403 | realName, err := decryptName(fi.Name, folderKey) |
| 404 | if err != nil { |
| 405 | return FileInfo{}, err |
| 406 | } |
| 407 | |
| 408 | fileKey := keyGen.FileKey(realName, folderKey) |
| 409 | dec, err := DecryptBytes(fi.Encrypted, fileKey) |
| 410 | if err != nil { |
| 411 | return FileInfo{}, err |
| 412 | } |
| 413 | |
| 414 | var decFI bep.FileInfo |
| 415 | if err := proto.Unmarshal(dec, &decFI); err != nil { |
| 416 | return FileInfo{}, err |
| 417 | } |
| 418 | |
| 419 | // Preserve sequence, which is legitimately controlled by the untrusted device |
| 420 | decFI.Sequence = fi.Sequence |
| 421 | |
| 422 | return FileInfoFromWire(&decFI), nil |
| 423 | } |
| 424 | |
| 425 | var base32Hex = base32.HexEncoding.WithPadding(base32.NoPadding) |
| 426 |