Add protocols inside the same file as controller
Consider nesting your types:
If you have two types that start with the same prefix, it's possible that one type is better nested inside the other.
For example: SendPINUseCase raises SendPINUseCaseError's
class SendPINUseCase {
    enum Error {
        case invalidPhone
        case couldNotSend
    }
}

Now you have a type called SendPINUseCase.Error, it's scoped to the SendPINUseCase. If you want to use throwing functions instead of returning Result&lt;..., Error&gt;'s, then you would make your SendPINUseCase.Error enum conform to Swift.Error
Protocols can't be nested, but in this case you could avoid them entirely by changing your design so that, for example, execute function takes, as arguments, the callback functions involved. If you eliminate the protocols, then there's no worry about which file to put them in, and protocols are not without their problems, I would say protocols are not the right abstraction in this case.
Your SendPINUseCase is a class but doesn't encapsulate any state, so consider making it a struct.
You have execute function take a String as input, and then validate that string is a 'phone'. Instead, consider making a struct Phone that has a failable initializer, so that only valid 'Phone's can be constructed. Then execute function would take a Phone struct that you know is valid, that eliminates the invalidPhone error case entirely.