Thanks @ptrblck, in the simple case of one input channel, one output channel, and default values for other parameters, it is relatively easy. There are a couple of good blog posts covering it; like this one: https://medium.com/@pavisj/convolutions-and-backpropagations-46026a8f5d2c 5
But, when you have padding, dilation, stride, and input/output channels, it makes for a really mind twisting exercise!