Japt, 37 bytes
;®i`ypetjkkp¡okrtyp©jkyb`pu;®i`
ypetjkkp¡okrtyp©jkyb`pu)gCpu bZ
The above link includes most test cases, but I haven't been able to input the second to last one as a string because it contains both single and double quotes. Here is that test case, input as an array of characters instead.
Explanation:
; #Set C to the lowercase alphabet
® #For each character Z of the input:
bZ # Find its index in:
C # The lowercase alphabet
pu # Plus the uppercase alphabet
# (-1 if it is not a letter)
g # And get the character at that index in:
`
ypetjkkp¡okrtyp©jkyb` # Get the lowercase Corpus alphabet
pu) # Plus the uppercase Corpus alphabet
i # Add Z at the end (index -1)