Forgive me but I have to expand this out because it doesn't make sense to me:
Witness:
- delegate signature is pushed onto the stack:
<delegate_sig>
- the signature authorizing the delegate is pushed:
<delegate_sig> <authorizing_sig>
- the delegate pubkey is pushed:
<delegate_sig> <authorizing_sig> <delegate_pubkey>
- locktime is pushed:
<delegate_sig> <authorizing_sig> <delegate_pubkey> <locktime>
Script:
5. locktime is checked: <delegate_sig> <authorizing_sig> <delegate_pubkey> <locktime>
6. locktime is hashed: <delegate_sig> <authorizing_sig> <delegate_pubkey> <locktime_hash>
7. locktime hash combined with delegate pubkey: <delegate_sig> <authorizing_sig> <delegate_pubkey || locktime_hash>
8. authorizing pubkey is pushed: <delegate_sig> <authorizing_sig> <delegate_pubkey || locktime_hash> <authorizing_pubkey>
9. CSFS(V) operation(s) checks that the delegate pubkey is authorized after the locktime by checking the key || locktime message was signed by authorizing_sig: <delegate_sig>
10. CHECKSIG operation fails because we don't have a key? Maybe you forgot a dup somewhere? Maybe I don't understand script as well as I thought? idk.
Assuming this is roughly what you meant, then I'd imagine in this case the authorizing signature would be pre-signed and distributed. Then at transaction time the delegate presents the authorizing signature along with their key and assigned locktime.
Assuming all of this is a fair reading, then I think I get what you mean with <msg> having an interesting use case wherein it could be:
- provided by the script
- provided by the witness
- collaboratively derived from witness and script participation.
... which seems pretty cool. I'd love if you can correct either my understanding or your example for completeness, but otherwise I'm satisfied with this and this thread can be resolved.