func (blob *Blob) saveChunk(key cas.Key, level uint8) (cas.Key, error) { if !key.IsPrivate() { // already saved return key, nil } chunk, err := blob.stash.Get(key, blob.m.Type, level) if err != nil { return key, err } if level > 0 { for off := uint32(0); off+cas.KeySize <= uint32(len(chunk.Buf)); off += cas.KeySize { cur := cas.NewKeyPrivate(chunk.Buf[off : off+cas.KeySize]) if cur.IsReserved() { return key, fmt.Errorf("invalid stored key: key @%d in %v is %v", off, key, chunk.Buf[off:off+cas.KeySize]) } // recurses at most `level` deep saved, err := blob.saveChunk(cur, level-1) if err != nil { return key, err } copy(chunk.Buf[off:off+cas.KeySize], saved.Bytes()) } } chunk.Buf = trim(chunk.Buf) return blob.stash.Save(key) }