Just a note but I think you have the parameters backwards in GetBytes:
byte[] key = Extract(salt, inputKeyMaterial);
byte[] key = Extract(salt, inputKeyMaterial);
Based on your implementation of:
byte[] Extract(byte[] inputKeyMaterial, byte[] salt)
byte[] Extract(byte[] inputKeyMaterial, byte[] salt)