Sanity testing is a brief testing of major functionalities of software based on specifications, requirements, and features. It can be termed a subset of Regression testing, where a group of test cases related to the changes are executed to ensure that the updates or fixes didn't caused any issue, bug, or defect on the software.
Smoke testing is a quick-and-dirty run through the major functionalities of the software without bothering with details and functionalities. The term "Smoke Testing" comes from the hardware testing practice turning a new piece of equipment for the first time to check it will not start smoking or burst into flame. In software testing, it means testing all areas of the software to ensure that the most crucial functions are working without focusing on finer details. Also, it's a way of testing if the software is stable enough and can be considered for deep testing.