diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2026-02-06 16:55:40 -0800 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2026-02-06 16:55:40 -0800 |
| commit | 083878218b9a95038e499732cc8aefa0e66a9a0d (patch) | |
| tree | 1c2956296d58f72ef4ae23b1a05cc074439e235a /roseh.moe.go | |
| parent | cf9e3f0f753e69c5bfa0838787e1c9833a060646 (diff) | |
| download | roseh.moe-083878218b9a95038e499732cc8aefa0e66a9a0d.tar.zst | |
Do a little less sha256
Since oae2 will internally also call hkdf, there's no reason to hkdf the
encryption key twice. We can hkdf it once for the primary key, and then
let oae2 hkdf it again for the encryption key. Since the second hkdf
uses a 32 byte random salt, the two calls will certainly use
different parameters.
Diffstat (limited to 'roseh.moe.go')
| -rw-r--r-- | roseh.moe.go | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/roseh.moe.go b/roseh.moe.go index cd443a6..49f62d3 100644 --- a/roseh.moe.go +++ b/roseh.moe.go @@ -251,17 +251,16 @@ const blockSize = 4 * 1024 * 1024 func writeHoleFile(part *multipart.Part) (string, error) { hole := makeHole() - key, err := hkdf.Key(sha256.New, []byte(hole), nil, "", 48) + primaryKey, err := hkdf.Key(sha256.New, []byte(hole), nil, "", 32) if err != nil { return "", err } - primaryKey, encryptionKey := key[:32], key[32:] f, err := os.Create(fmt.Sprintf("%s/%x", *holeTempDir, primaryKey)) if err != nil { return "", err } defer f.Close() - w := oae2.NewWriter(f, encryptionKey, blockSize, nil) + w := oae2.NewWriter(f, []byte(hole), blockSize, nil) fileName := part.FileName() buf := make([]byte, 8) binary.BigEndian.PutUint64(buf, uint64(len(fileName))) @@ -296,11 +295,10 @@ func (r *offsetReader) Seek(offset int64, whence int) (int64, error) { var errNoHole = errors.New("no such hole") func readHoleFile(w http.ResponseWriter, req *http.Request, hole string) error { - key, err := hkdf.Key(sha256.New, []byte(hole), nil, "", 48) + primaryKey, err := hkdf.Key(sha256.New, []byte(hole), nil, "", 32) if err != nil { return err } - primaryKey, encryptionKey := key[:32], key[32:] f, err := os.Open(fmt.Sprintf("%s/%x", *holeTempDir, primaryKey)) if err != nil { if errors.Is(err, fs.ErrNotExist) { @@ -309,7 +307,7 @@ func readHoleFile(w http.ResponseWriter, req *http.Request, hole string) error { return err } defer f.Close() - r := oae2.NewReader(f, encryptionKey, blockSize, nil) + r := oae2.NewReader(f, []byte(hole), blockSize, nil) buf := make([]byte, 8) if _, err := io.ReadFull(r, buf); err != nil { return err |
